前言
以前一直听说fasttext是训练词向量的模型,昨天查了查资料,还是没看懂fasttext是如何训练词向量的,却发现fasttext是个文本分类的模型(还是说在文本分类的过程中就训练好词向量了?),其中还用到了hierarchical softmax,看了这篇文章,觉得很不错,现做以下总结。
fasttext与CBOW对比
结构图
-
CBOW结构图
输入是窗口内除中心词以外的词语,输出是各个词语的概率。
image.png
-
fasttext结构图
输入是文档中所有单词embedding+每个词字符级的n-gram,输出是文档属于各个类别的概率。
image.png
各部分对比
| 对比 | fasttext | CBOW |
|---|---|---|
| 结构 | 输入-隐层-输出 | 输入-隐层-输出 |
| 目的 | 文本分类 | 训练词向量 |
| 输入层 | 给定的文档中所有的词 | 给定的窗口中除中心词以外的词 |
| 输入层具体 | 词向量+字符级n-gram | 词向量 |
| 隐藏层 | 输入层的加权平均 | 输入层的加权平均 |
| 输出层 | 维度为文本所有类别 | 维度为词汇表大小 |
总结
fasttext的创新之处在于融入了字符级n-gram,举例:对于单词“apple”,假设n的取值为3,则它的trigram有“<ap”, “app”, “ppl”, “ple”, “le>”,其中,<表示前缀,>表示后缀。于是,我们可以用这些trigram来表示“apple”这个单词,进一步,我们可以用这5个trigram的向量叠加来表示“apple”的词向量。这种字符级n-gram对解决OOV问题很有帮助。
hierarchical softmax
关于这部分,建议直接看[1]中分层softmax的介绍。
参考资料
[1] fasttext原理及实践
[2] fasttext论文









网友评论