tokenize embeding word2wec...词表,词嵌入,分词...都是干什么的
在NLP任务中,输入的大多是一个句子,多个句子组成一个batch。模型本身不能直接处理文本,所以需要先把文本转化成数字。流程大多数是:
分词->构建词表->词嵌入
-
分词
分词是将一个句子拆分成一个个单词/短语,这些单词/短语称为token,分词被叫做tokenize。
tokenize的粒度有word/char/subword三个层级。
一个token并不一定是一个单词,也可能是一个后缀、前缀、字符等。比如对于句子'I love nature language processing'
,分词后是'I', 'love', 'nature', 'language', 'processing'
,也有的会把'processing'
分成'process', 'ing'
。
最常用的三种tokenize算法:BPE(Byte-Pair Encoding),WordPiece和SentencePiece
这里详解 -
构建词表
词表的作用是,把一个token映射为一个整数,也就是记录token和数字的对应关系,比如'I'
对应105
。该整数随意,无关紧要,不同的token别重复了就行。 -
词嵌入
把一个整数转换成一个n维向量,输入模型的就是这个向量,方法有word2vec,glove等。现在多用的是torch.nn.Embedding。
词表和词嵌入权重,一定要在训练完毕后保存下来,推理必须使用和训练相同的词表、词嵌入。