FastText和cw2vec
文章目录
什么是FastText
- 英语单词通常有其内部结构和形成⽅式。例如,我们可以从“dog”“dogs”和“dogcatcher”的字⾯上推测它们的关系。这些词都有同⼀个词根“dog”,但使⽤不同的后缀来改变词的含义。而且,这个关联可以推⼴⾄其他词汇。
- 在word2vec中,我们并没有直接利⽤构词学中的信息。⽆论是在跳字模型还是连续词袋模型中,我们都将形态不同的单词⽤不同的向量来表⽰。例如,“dog”和“dogs”分别⽤两个不同的向量表⽰,而模型中并未直接表达这两个向量之间的关系。鉴于此,fastText提出了⼦词嵌⼊(subword embedding)的⽅法,从而试图将构词信息引⼊word2vec中的CBOW。
- 这里有一点需要特别注意,一般情况下,使用fastText进行文本分类的同时也会产生词的embedding,即embedding是fastText分类的产物。除非你决定使用预训练的embedding来训练fastText分类模型,这另当别论。
FastText
- FastText是一个文本分类和词向量训练工具/网络结构,最大的特 点就是模型简单,只有一层隐层和输出层;结构基本的CBOW类 似,主要区别在于:
- CBOW中输出的是词向量,FastText输出的是类别label;
- CBOW中输入是当前窗口除中心词之外的所有词,而FastText输入的是文章中的所有词;
- 在词向量的训练过程中,增加了subwords特性,其实就是一个词 的character-level(字符集)的n-gram,比如单词”hello”,长度至少为3的 character-level的n-gram的’hel’, ‘ell’, ‘llo’, ‘hell’, ‘ello’以及’hello’,每个 n-gram都可以使用一个dense(密集)的向量zg表示,故最终一个单词可以 表示为:
- FastText在分类中也增加了N-gram的特征,主要是为了通过增加 N-Gram的特征信息来保留词序信息(因为隐层是通过简单的求和平均得到的),比如:某篇文档有3个词,,N-gram 取N为2,以及bigram 是新的embedding向 量,那么文章的隐层表示为:
FastText与Word2Vec的不同
- 相同点:
- 图模型结构很像,都是采用embedding向量的形式,得到word的隐向量表达。
- 都采用很多相似的优化方法,比如使用Hierarchical softmax优化训练和预测中的打分速度。
fasttext叶子节点里是类标和类标的频数。
Word2Vec | fastText | |
---|---|---|
输入 | one-hot形式的单词的向量 | embedding过的单词的词向量和n-gram向量 |
输出 | 对应的是每一个term,计算某term概率最大 | 对应的是分类的标签。 |
本质不同,体现在softmax的使用:
- word2vec的目的是得到词向量,该词向量最终是在输入层得到的,输出层对应的h-softmax也会生成一系列的向量,但是最终都被抛弃,不会使用。
- fastText则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label
FastText优点:
- 适合大型数据+高效的训练速度:能够训练模型“在使用标准多核CPU的情况下10分钟内处理超过10亿个词汇”
- 支持多语言表达:利用其语言形态结构,fastText能够被设计用来支持包括英语、德语、西班牙语、法语以及捷克语等多种语言。FastText的性能要比时下流行的word2vec工具明显好上不少,也比其他目前最先进的词态词汇表征要好。
- 专注于文本分类,在许多标准问题上实现当下最好的表现(例如文本倾向性分析或标签预测)。
--------------------------------------
cw2vec
思想:类似FastText的思想,利用中文汉字的笔画信息,使用N-Gram的 的方式来提取中文汉字对应的高阶特征信息。
- 可以看到从偏旁部首或者字件来提取词语的信息可以改进基于汉字的词语信息的提取效果,但是在某些汉字中,偏旁的设计仅只是为了方便汉字的查询,而不是为了表达汉字的语义信息,所以 在cw2vec中提出了一种基于笔画的特征信息提取。
-
举个例子:大人
- 将词语分割成字符;
- 提取每个字符的笔画信息, 然后将所有字符的笔画信息组 合到一起;
- 查表得到每个笔画对应的 ID,组成这个词语对应的ID列 表;
- 产生N-Gram笔画特征。
-
cw2vec使用和Word2Vec中的Skip-Gram的基础上进行模型训练, 仅仅是将词语替换为词语的n-gram笔画特征信息来进行模型训练。