Subword算法
Posted shiiiilong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Subword算法相关的知识,希望对你有一定的参考价值。
当下各种预训练模型的Subword算法概览
Subword
Subword Regularization
论文:Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates
1,动机
- subword的问题:子词分割可能是模糊的,即使使用相同的词汇,也可能进行多次分割。BPE的缺点在于,它不能提供多种分割的概率。因此不能作为Regularization分割的方法。
- 研究的问题:是否可以利用分割歧义作为噪声来提高NMT的鲁棒性。
- 方法subword regularization:在训练过程中对模型进行多个子词分段的概率抽样训练。
- 提出基于单字母语言模型的子词分割算法:更好的采样。
2,本文贡献
- 提出一种简单的NMT训练算法来整合多种分割候选者:一种动态采样数据来实现的,这对NMT结构来说并不是特别的。Subword regularization可以被用于任何模型,而不用改变模型的结构。
- 提出一种基于一元语言模型的新的subword分割算法:这种算法提供了多个具有概率的分割。
3,NMT的多subword分割
- NMT训练中的动态subword采样:在训练的过程中,假设subword分割是有多个候选,且有一个概率分布,则source和target都可以通过采样动态的得到。
- 采样次数为1:为了简化,这里我们k=1.训练NMT的时候,参数theta是按照batch来进行迭代优化的,所以只要迭代次数足够多,即便k=1,也可以得到边缘似然函数的近似值。需要注意的是,subword序列是在每次参数更新时来采样的。
- 解码:可以选择x所有分割概率最大的去生成,也可以选择前n个分割去生成(然后选择y概率最大的)
4,基于语言模型的subword分割:如何产生多个subword序列的概率分布
- bpe:能够有效平衡词汇量和步长(编码句子所需的token数量),但是,BPE基于贪婪和确定性符号替换,不能提供具有概率的多个分段。
- Unigram language model:输出多个具有概率的子单词分段。假定词库确定,可以确定x所有的分割结果,最大化概率分布;然而词库是不确定的,用EM算法来估计词库和概率;最终得到一个词库结果,以及每个分割的概率分布。
- 结果:使用一元语言模型的subword分割可以看作是字符,subword和word的概率混合
- 正则化采样:对于每个参数更新,从分布P(x| x)中抽取一个子单词进行正则化采样。
5,总结
- BPE是一种字典编码的变体,就是可以找到一个符号集合,这个符号集合就是所有用于文本编码的符号数量是最少的。一元语言模型是一种熵编码,就是为了使文本的编码长度最短。
- BPE和一元语言模型共有的特点就是根据特殊的数据压缩原理用较少的bit去编码文本。所以,期望看到BPE和一元语言模型的共同优点。但是一元语言模型更具有灵活性因为它是基于概率语言模型来实现的,可以输出多个分割对应的概率,这对subword regularization是非常重要的
6,展开-sentencePiece
https://github.com/google/sentencepiece
技术亮点
- 数据驱动:分词模型是直接在句子上训练
- SentencePiece将这些句子视为Unicode字符序列。没有依赖于语言的逻辑
- 多个subword模型:bpe、unigram language model
- Subword regularization: 实现了subword正则化
- 一些组合常常出现,但事先并不知道,于是我们想让机器自动学习经常组合出现的短语和词。SentencePiece就是来解决这个问题的。它需要大量文本来训练。
与bpe的区别
- 词汇的大小指定:bpe的大小是根据操作的数目决定,而sentencePiece的大小是提前指定的。
- 使用原始的句子训练:以前的subword实现假定输入语句是预先标记的。这种约束对于有效的训练是必需的,但是由于我们必须预先运行依赖于语言的记号器,这使得预处理变得复杂。但是sentencePiece可以从原始句子训练模型。这对于训练中文、日文和韩文之间没有显式空格的标记器和脱标记器非常有用。
- 对空白符号当作基础符号:SentencePiece将输入文本视为Unicode字符序列。空白也可以作为普通符号来处理。要显式地将空白作为基本标记处理。
- 解码操作:detokenized = ‘’.join(pieces).replace(’_’, ’ ')
以上是关于Subword算法的主要内容,如果未能解决你的问题,请参考以下文章
CS224N WINTER 2022机器翻译注意力机制subword模型(附Assignment4答案)
CS224N WINTER 2022机器翻译注意力机制subword模型(附Assignment4答案)
CS224N WINTER 2022机器翻译注意力机制subword模型(附Assignment4答案)
FastTextKeyedVectors向量,vectors_vocab和vectors_ngrams实例变量之间的差异