子词模型通过将单词分解成更小的单元,提升了机器对人类语言的理解能力,解决了词袋模型的局限性。
原文标题:科普之旅 | 解密子词模型:让机器更好地理解人类语言的秘密
原文作者:数据派THU
冷月清谈:
文章首先指出了词袋模型的不足之处,例如无法处理未登录词、向量过于稀疏以及无法表达词语之间的相关性等。为了解决这些问题,子词模型应运而生。
文章详细介绍了三种主要的子词模型:
1. BPE(Byte Pair Encoding):该模型从字母和标点符号开始,迭代地将出现频率最高的相邻词对合并成新的子词,直到达到预设的字典大小或循环次数。它能够有效地提取前缀和后缀,但也存在一些局限性,例如在处理中文等字符空间较大的语言时效率不高。
2. WordPiece:与BPE类似,但WordPiece使用概率而不是频率来选择合并的词对,从而更好地捕捉词语之间的关系。
3. Unigram模型:该模型首先创建一个包含所有可能子词的大字典,然后迭代地移除对目标似然函数贡献最小的子词,直到字典大小达到预设值。
文章最后总结了子词模型的优势,例如提高模型泛化能力,解决未登录词问题等,并提到了SentencePiece等开源工具包。
怜星夜思:
2、子词模型如何处理不同语言的差异,例如中文和英文的语法结构差异?
3、子词模型的未来发展方向是什么?它在大语言模型中扮演着什么样的角色?
原文内容
作者:胡赟豪
本文约2000字,建议阅读5分钟本文将探讨解密子词模型。
在这个信息爆炸的时代,你是否曾幻想过与机器流畅交谈,或是让AI助你笔下生花,创作出惊艳的文章?这一切,都离不开大语言模型的神奇魔力。今天,让我们一起揭开这层神秘的面纱,走进大语言模型的科普奇幻之旅!
2016年发表的论文Neural Machine Translation of Rare Words with Subword Units提出了BPE模型。BPE作为经典的子词模型,至今仍被经常使用,其训练过程如下:
1.初始化字典:使用所有字母+标点的集合,以及一个标识单词末尾的符号“·”,作为初始字典。
2.字典训练:每次迭代时,找寻训练样本中相邻两个词组成的词对(pair)的出现频数,每次选择一个频数最高的词对作为一个新的词加入到字典。注意最开始时,这里的“词”实际上是字母等基本字符。在上面的例句中,词对“er”和“r·”的频数为2,而其他均为1,“er”将加入到字典中。下一轮中,“er·”将加入到字典中(或者先加入“r·”也可以,同频数时模型任意选择)。
3.训练停止:人工设置循环次数或者期望的字典大小作为中止条件。
BPE算法能够将英文中的各种后缀、前缀方便地切分出来,提高了字典对自然语言的描述能力,以下是一个可能的分词结果对比:
此外,BPE也能较好地解决OOV问题,一些新的词可以用子词来表达,即使在子词都不能表达的情况,至少也可以用字母等基本字符来覆盖。但BPE在遇到中文、日文等字符空间非常大的语言时,就有些不适用了。2019年的论文Neural Machine Translation with Byte-Level Subwords提出的BBPE模型基于字节进行初始化编码(中文、日文的每个字符由多个字节进行编码),再进行合并过程,一定程度上解决了这一语言兼容的问题。
三、WordPiece和Unigram模型
BPE以训练语料中的频数为依据,产生新的子词加入字典,这一过程中可能会遇到前面案例中出现的两个词对频数相同的情况(“er”和“r·”),这时BPE模型并不能进行区分。WordPiece则使用训练语料X生成的概率作为依据。假设所有的子词是相互独立的,语料中的第i个子词为xi,那么从字典生成出语料的概率将会是各个子词的出现概率p(xi)的乘积:
WordPiece模型将尽量产生一个最大化p(X)的字典。在决策是否合并两个相邻的子词A、B时,WordPiece模型使用合并对总概率的影响大小来进行判断。在上面的例句中,e、r、“·”出现的频次分别为4、2、5,但“er”和“r·”的频次是相同的,此时p(e)p(r) <p(r)p(·),模型将会选择优先合并e和r .< span></p(r)p(·),模型将会选择优先合并e和r.
Unigram模型也是基于生成概率最大化的思想。和前两个模型的主要区别在于,初始化字典时,Unigram会先启发式地尽可能产生一个非常大的字典(如直接将语料中所有可能的子词组合计算一下频率再取TOP若干个),再逐步缩小到期望的规模。缩小的过程中,模型使用p(xi)和字典进行EM算法来优化目标似然函数(基于生成概率构造)。模型重复进行以下步骤:
1.固定字典,计算所有子词的p(xi)
2.固定p(xi),计算每个子词如果移出字典后,目标似然函数的损失
3.按照损失值排序保留前η%的子词(为解决OOV问题,一直保留所有字母等基本字符)
四、总结
子词模型作为词嵌入的重要技术之一,能够为自然语言处理的各种模型的训练提供更好的字典,加强模型的泛化能力,并解决一些诸如OOV问题、多语言问题等基本问题。如今许多子词模型已经被整理成开源工具包供开发者使用,如谷歌推出的SentencePiece等。