关于NLP的Tokenization

1、词粒度

词粒度的切分就跟人类平时理解文本原理一样,常常用一些工具来完成,例如英文的NLTK、SpaCy,中文的jieba、LTP等。

举个栗子
英语:I like apple --> I / like / apple
中文:我爱吃苹果 --> 我 / 爱 / 吃 / 苹果

优缺点:

词粒度的切分能够非常好地保留完整语义信息,但是如果出现拼写错误、英文中的缩写等情况,鲁棒性一般
另一方面,词切分会产生非常巨大的词表,而且这都不能确保不会出现OOV(out of vocabulary)问题

2、字粒度

举个栗子
英语:hello --> h / e / l / l / o /
中文:我爱吃苹果 --> 我 / 爱 / 吃 / 苹 / 果

优缺点:

可以看出,字粒度的切分很好地解决了词粒度的缺陷,鲁棒性增强、词表大大减小。但另一方面,也会带来一些麻烦:
「毫无意义」:一个字母或一个单字本质上并没有任何语义意义;
「增加输入计算压力」:减小词表的代价就是输入长度大大增加,从而输入计算变得更耗时耗力;

3、Subword粒度

subword tokenization这个方式就跟我们背单词的时候,使用词根来记忆单词一样。有的词跟具有特定的意思,另外有些词根没有实际含义,因此通过词根来大概猜测我们没见过的单词的意思。

在Subword粒度中不转换最常见的单词,而是将稀有单词分解成有意义的子词单元

如果unfriendly被标记为一个稀有词,它将被分解为un-friendly-ly,这些单位都是有意义的单位,un的意思是相反的,friend是一个名词,ly则变成副词。这里的挑战是如何进行细分,我们如何获得un-friend-ly而不是unfr-ien-dly。

举个栗子
I have a new GPU ----> [’i’, ’have’, ’a’, ’new’, ’gp’, ’##u’, ’.’]

扫描二维码关注公众号,回复: 16100825 查看本文章

具体方法

subword粒度切分算法又有以下几种:

  • BPE
  • WordPiece
  • ULM

BPE

BPE全称Byte Pair Encoding,字节对编码。首先BPE 迭代地合并最频繁出现的字符或字符序列,具体步骤:
1.准备足够大的语料库
2.定义好所需要的词表大小
3.将单词拆分为字符序列,在末尾添加后缀 </ w>,并统计单词频率。本阶段的subword的粒度是字符。例如,“ low”的频率为5,那么我们将其改写为l o w </ w>:5
4.统计每一个连续字节对的出现频率,选择最高频者合并成新的subword
5.重复第4步直到达到第2步设定的subword词表大小或下一个最高频的字节对出现频率为1。

关于BPE更多细节可以参考:Byte Pair Encoding

Unigram LM

Unigram语言建模基于所有子词出现是独立的假设,因此子词序列由子词出现概率的乘积生成。算法步骤如下:

1.准备足够大的语料库
2.定义好所需要的词表大小
3.给定词序列优化下一个词出现的概率
4.计算每个subword的损失
5.基于损失对subword排序并保留前X%。为了避免OOV,保留字符级的单元
6.重复第3至第5步直到达到第2步设定的subword1.词表大小或第5步的结果不再变化

unigram-LM模型比BPE更灵活,因为它基于概率LM,并且可以输出具有概率的多个分段。它不是从一组基本符号开始,更具某些规则进行合并,如BPE或WordPiece,而是从一个庞大的词汇量开始,例如所有预处理的单词和最常见的子字符串,并逐步减少。

WordPiece

基于可能性而不是下一个最高频率对来形成一个新的子词。算法步骤如下:

1.准备足够大的语料库
2.定义好所需要的词表大小
3.将单词拆分成字符序列
4.基于第3步数据训练语言模型
5.从所有可能的subword单元中选择加入语言模型后能最大程度地增加训练数据概率的单元作为新的单元
6.重复第5步直到达到第2步设定的subword词表大小或概率增量低于某一阈值
WordPiece更像是BPE和Unigram LM的结合。

简单几句话总结下Subword的三种算法:

  • BPE:只需在每次迭代中使用「出现频率」来确定最佳匹配,直到达到预定义的词汇表大小;
  • Unigram:使用概率模型训练LM,移除提高整体可能性最小的token;然后迭代进行,直到达到预定义的词汇表大小;
  • WordPiece:结合BPE与Unigram,使用「出现频率」来确定潜在匹配,但根据合并token的概率做出最终决定.

猜你喜欢

转载自blog.csdn.net/CSTGYinZong/article/details/128594412
NLP