NLP基础(分词):BPE 算法

原文链接:NLP基础(分词):BPE 算法

导读:在自然语言处理(NLP)领域,分词是文本预处理中的一个关键步骤。分词的目的是将文本分解成有意义的单元,以便模型能够更好地理解和处理。传统的分词方法通常基于固定词汇表,如基于单词的分词。然而,这种方法在处理未知单词和稀有单词时存在局限性。为了解决这一问题,BPE算法应运而生。BPE算法是一种基于子词(subword)的分词方法,能够将单词分解成更小的子词单元,从而提高模型的泛化能力和灵活性。

1、算法原理

BPE(Byte Pair Encoding) 算法是一种基于频率的子词分割方法,其核心思想是将单词分解成更小的子词单元,这些子词单元可以是完整的单词、单词的前缀、后缀或中间部分。这种方法在处理未知单词和稀有单词时特别有效,因为它可以将这些单词分解成已知的子词单元,从而提高模型的泛化能力。

2、实现步骤

假设我们有一个训练语料 D,其中每个单词 w 由字符序列 w=c1,c2,…,cn组成。WordPiece 算法的目标是构建一个子词词汇表 V,使得每个单词 w 可以被分割成子词单元 w=v1,v2,…,vm,其中 viV。

step 1 : 初始化词汇表

将所有字符(Unicode)作为初始词汇表的基本单元。

step 2 : 统计字符对频率

对训练语料中的每个单词,统计相邻字符对的出现频率。

step 3 : 合并最频繁字符对

将最频繁的字符对作为一个新单元加入词汇表,并更新训练语料中的分割方式。

其中,cici+1 是在 Vt 中最频繁的字符对。

step 4 : 更新训练语料

重复上述过程,直到词汇表大小达到预设值 ∣∣=K。

假设有一个简单的训练语料库,包含以下单词及其频率:

{'hug': 10, 'pug': 5, 'pun': 12, 'bun': 4, 'hugs': 5}

每次迭代的结果示例如下:

3、python实现

下面通过python代码实现上述示例:


得到结果如下:

4、优缺点

优势:通过数据驱动的方式有效平衡词汇表大小与未登录词问题。它能够将罕见词拆解为高频子词组合(如将“hugs”分解为“hug”和“s”),既压缩了词表规模,又提升了模型对未知词汇的泛化能力,尤其适用于形态丰富的语言或需要处理复合词的场景。无需依赖语言学规则的特点,在多语言任务中表现灵活,例如机器翻译中可统一处理不同语言的子词单元

局限性:由于完全依赖统计频率,合并顺序的敏感性可能导致结果不稳定(如优先合并“u-g”而非“h-u”会生成不同子词),且生成的子词可能缺乏明确的语义解释性(如“ug”单独无意义)。此外,低频字符对的覆盖不足可能导致长尾词汇仍需以原子形式存在,而合并次数的设定依赖人工经验,需反复调参才能达到理想效果。

另外,BPE可以用于中文,但需要针对中文的语言特性进行适配。中文以汉字为基本单位,每个汉字本身具有独立语义,BPE可通过统计高频共现的汉字组合(如“中国”“北京”)生成子词,既能压缩词表规模(如从数万汉字减少到数千子词),又能解决未登录词问题(如将新词“元宇宙”拆解为“元”+“宇宙”)。然而,中文没有天然的空格分隔,BPE需以单字为起点逐步合并,可能产生无意义子词(如“的的”合并为冗余单元)或割裂语义连贯的固定搭配(如“巧克力”被拆为“巧”+“克力”)。实际应用中,BPE常与预分词技术结合,或通过限制子词长度、调整合并优先级来平衡效率与语义完整性,在机器翻译、预训练模型(如中文BERT)等场景中已得到有效验证。

参考文献:

1、Zouhar, V., Meister, C., Gastaldi, J. L., Du, L., Vieira, T., Sachan, M., & Cotterell, R. (2024). A Formal Perspective on Byte-Pair Encoding. arXiv preprint arXiv:2306.16837.

2、Lian, H., et al. (2024). Scaffold-BPE: Enhancing Byte Pair Encoding with Simple and Effective Scaffold Token Removal. arXiv preprint arXiv:2404.17808.

3、Sennrich, R., Haddow, B., & Birch, A. (2015). Neural Machine Translation of Rare Words with Subword Units. arXiv preprint arXiv:1508.07909.

点击原文(NLP基础(分词):BPE 算法)后台回复“BPE”可免费获得上述论文和完整代码

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容