文章目录
基于字粒度和词粒度的BERT,效果哪个好
词粒度
常用一些工具来完成,例如英文的NLTK、SpaCy,中文的jieba、LTP等。
英文: live in New York ------> live / in / New York /
中文: 在纽约生活 -----> 在 / 纽约 / 生活
优点:
词粒度的切分能够非常好地保留完整语义信息;
缺点:
如果出现拼写错误、英文中的缩写等情况,鲁棒性一般;
词切分会产生非常巨大的词表,而且这都不能确保不会出现out of vocabulary问题。
字粒度
字粒度最早应该是2015年
K
a
r
p
a
t
h
y
[
1
]
Karpathy^{[1]}
Karpathy[1]提出,简单说英文就是以字母为单位(对于大小写不敏感的任务,甚至可以先转小写再切分),中文就是以字为单位
live in New York -----> l / i / v /e / i / n / N / e / w / Y / o / r /k
在纽约生活 -----> 在 / 纽 / 约 / 生 / 活
优点:
字粒度的切分很好地解决了词粒度的缺陷,鲁棒性增强、词表大大减小;
缺点:
「无意义」:一个字母或一个单字本质上并没有任何语义意义;
「增加输入计算压力」:减小词表的代价就是输入长度大大增加,从而输入计算变得更耗时耗力
Subword粒度-Transformer
我们理想中的tokenization需要满足:
它能够在不需要无限词汇表的情况下处理缺失的标记,即通过有限的已知单词列表来处理无限的潜在词汇;
此外,我们不希望将所有内容分解为单个字符的额外复杂性,因为字符级别可能会丢失单词级别的一些含义和语义细节。
为此,我们需要考虑如何重新利用『小』单词来创建『大』单词
NLP目前还没过气的网红 Transformer 和 BERT 是Subword的带盐人
它们做tokenization的栗子:I have a new GPU ----> [’i’, ’have’, ’a’, ’new’, ’gp’, ’##u’, ’.’]
subword tokenization不转换最常见的单词,而是将稀有单词分解成有意义的子词单元。
举例:
如果unfriendly被标记为一个稀有词,它将被分解为un-friendly-ly,这些单位都是有意义的单位,un的意思是相反的,friend是一个名词,ly则变成副词。
如何获得un-friend-ly而不是unfr-ien-dly
subword粒度切分算法又有以下几种:
- BPE
- WordPiece
- ULM
BPE(Byte Pair Encoding)
字节对编码,BPE 迭代地合并最频繁出现的字符或字符序列。
算法步骤如下:
1、准备足够大的语料库
2、定义好所需要的词表大小
3、将单词拆分为字符序列,在末尾添加后缀 </ w>,并统计单词频率。本阶段的subword的粒度是字符。例如,“ low”的频率为5,那么我们将其改写为l o w </ w>:5
4、统计每一个连续字节对的出现频率,选择最高频者合并成新的subword
5、重复第4步直到达到第2步设定的subword词表大小或下一个最高频的字节对出现频率为1
举个栗子,输入:
{'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w e s t </w>': 6, 'w i d e s t </w>': 3}
第一轮迭代,统计连续的每两个字节出现的次数,发现 e 和s 共现次数最大,合并成es,有,
{'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w es t </w>': 6, 'w i d es t </w>': 3}
第二轮迭代,统计连续的每两个字节出现的次数,发现 es 和t 共现次数最大,合并成est,有,
{'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w est </w>': 6, 'w i d est </w>': 3}
依次继续迭代直到达到预设的subword词表大小或下一个最高频的字节对出现频率为1。
Unigram LM
Unigram语言建模基于所有子词出现是独立的假设,因此子词序列由子词出现概率的乘积生成。算法步骤如下:
1、准备足够大的语料库
2、定义好所需要的词表大小
3、给定词序列优化下一个词出现的概率
4、计算每个subword的损失
5、基于损失对subword排序并保留前X%。为了避免OOV,保留字符级的单元
6、重复第3至第5步直到达到第2步设定的subword词表大小或第5步的结果不再变化
unigram-LM模型比BPE更灵活,因为它基于概率LM,并且可以输出具有概率的多个分段。它不是从一组基本符号开始,更具某些规则进行合并,如BPE或WordPiece,而是从一个庞大的词汇量开始,例如所有预处理的单词和最常见的子字符串,并逐步减少。
WordPiece
WordPiece首先在 JAPANESE AND KOREAN VOICE SEARCH[5] 中提出,最初用于解决日语和韩语语音问题。它在许多方面类似于BPE,只是它基于可能性而不是下一个最高频率对来形成一个新的子词。算法步骤如下:
1、准备足够大的语料库
2、定义好所需要的词表大小
3、将单词拆分成字符序列
4、基于第3步数据训练语言模型
5、从所有可能的subword单元中选择加入语言模型后能最大程度地增加训练数据概率的单元作为新的单元
6、重复第5步直到达到第2步设定的subword词表大小或概率增量低于某一阈值
WordPiece更像是BPE和Unigram LM的结合。
小结
简单几句话总结下Subword的三种算法:
BPE:只需在每次迭代中使用「出现频率」来确定最佳匹配,直到达到预定义的词汇表大小;
Unigram:使用概率模型训练LM,移除提高整体可能性最小的token;然后迭代进行,直到达到预定义的词汇表大小;
WordPiece:结合BPE与Unigram,使用「出现频率」来确定潜在匹配,但根据合并token的概率做出最终决定.
本文详细介绍了字粒度、词粒度以及Subword粒度在BERT等Transformer模型中的应用。字粒度保留了鲁棒性,但增加了计算负担;词粒度保持语义完整性,但面临OOV问题。Subword粒度通过BPE、UnigramLM和WordPiece算法解决了这些问题。BPE基于频率合并子词,UnigramLM基于概率模型,而WordPiece结合两者。这些方法旨在平衡词汇表大小、计算效率和语义完整性。

8641

被折叠的 条评论
为什么被折叠?



