当前位置:   article > 正文

NLP中的Tokenization

tokenization

目录

前言

字粒度

词粒度

Subword粒度

(1)  BPE

(2) Unigram LM

(3)WordPiece

(4) Sentencepiece

总结


前言

当前最火的预训练模型大放异彩,但是在进行输入模型前,我们都需要将纯文本数学化,比如bert的tokenization,它就是将文本分割成token,然后量化成id。今天就来说说tokenization,目前关于这方面的研究已经有很多了,本质上其主要目标就是在于如何获得理想的切分,使文本中所有的token都具有正确的表义,并且不会存在OOV问题。

关于该方面博客也发现一篇比较好的文章,可以直接看就行,笔者这里再叨扰和总结几句。

https://zhuanlan.zhihu.com/p/340473354

(图片来源于上述博客)

字粒度

对于英文来说,就是使用26个英语字母,说的直接点不算标点符号的话,词表大小就是26,好处就是词表小,且不存在遗漏问题,但是一个非常明显的问题就是单个字母没有意义,丢失太多语义信息,且输入时序列长度太长,增加了计算压力。基本不采用这个,但是这是对英文来说的,对于中文来说,目前就是大多数采用的就是字粒度,即一个中文一个token。

词粒度

对于英文来说,一个word就是一个单词,这是具有天然的语义信息的,但是一个明显的问题就是词表太大,比如同一个词根延伸出来各种名词、动词、副词。即词表过大存在OOV,所以一般在英文中也不用词粒度,中文也不用(中文用字粒度)

Subword粒度

其介于字词粒度之间,即想利用词这种具有具体语义信息的同时又想解决遗漏问题,也就是说怎么利用有限的词来表征无限的词表,下面讨论的主要还是针对英文的。

(1)  BPE

核心就是根据出现频率不断合并直到减少到词表大小或概率增量低于某一阈值

(2) Unigram LM

出现在Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates一文中

主要就是训练语言模型LM,然后不断剔除提高整体可能性最小的token,直到达到词表大小

(3)WordPiece

综合了BPE和Unigram LM 使用出现频率来选出来潜在的组合,然后基于语言模型来决定最终的合并

(4) Sentencepiece

可以看到上述3种其实都更多的是基于英文出发进行考虑的,但是对于中文,韩文啦啥的就不可能先进行切分,英文是分成一个个字母,中文呢(偏旁?哈哈哈,脑洞)

sentencepiece是将所有输入转化为unicode字符,这就避免了这个情况,具体可以看

https://github.com/google/sentencepiece

总结

(1)说了这么多,大多数是英文的,但是在我们进行中文的时候,目前基本都是字粒度的即一个中文一个token,英文的话大多数是使用基于subword的wordpiece。

(2)我们在实践的时候,一个需要考虑的重点就是输入dataloader的编写,这部分最重要的就是tokenization这个函数,不论看什么预训练模型基本都是,bert、ernie等等,而这个函数都有基本有一个类似文本转化为token的操作,这里其实就是本文说的这个原理,我们不需要写,基本都写好了

(3)一个小小的tokenization其实包含的东西非常多,包括padding啊,截取长度啊,两个(和多个)句子怎么拼接啊等等,甚至怎么制作batch这个迭代器啊,多卡多机训练时这里也要涉及到,所以挺重要哒。

 

 

 

 

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/281463
推荐阅读
相关标签
  

闽ICP备14008679号