FastText使用预先训练的单词向量进行文本分类

时间:2017-12-07 10:28:32

标签: nlp word2vec text-classification fasttext

我正在研究文本分类问题,也就是说,给定一些文本,我需要为其分配一些给定的标签。

我尝试使用Facebook的快速文本库,它有两个我感兴趣的实用程序:

A)具有预训练模型的单词向量

B)文本分类实用程序

然而,似乎这些是完全独立的工具,因为我无法找到合并这两个实用程序的任何教程。

我想要的是能够通过利用Word-Vectors的预训练模型对某些文本进行分类。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:17)

FastText监督培训有-pretrainedVectors参数,可以这样使用:

$ ./fasttext supervised -input train.txt -output model -epoch 25 \
       -wordNgrams 2 -dim 300 -loss hs -thread 7 -minCount 1 \
       -lr 1.0 -verbose 2 -pretrainedVectors wiki.ru.vec

很少有事情需要考虑:

  • 嵌入尺寸的选定尺寸必须与预训练矢量中使用的尺寸相匹配。例如。对于Wiki word vectors,必须为300.它由-dim 300参数设置。
  • 截至2018年2月中旬,Python API(v0.8.22)不支持使用预训练向量进行训练(忽略相应的参数)。因此,您必须使用CLI(命令行界面)版本进行培训。但是,由CLI训练的具有预训练矢量的模型可以通过Python API加载并用于预测。
  • 对于大量的类(在我的情况下有340个),即使CLI可能会因异常而中断,因此您需要使用分层softmax丢失函数(-loss hs
  • 分层softmax的性能比普通softmax差,因此它可以放弃你从预训练嵌入中获得的所有增益。
  • 使用预训练矢量训练的模型可能比没有预训练矢量训练的模型大几倍。
  • 在我的观察中,使用预训练矢量训练的模型比没有
  • 训练的模型更容易过度装配

答案 1 :(得分:0)

FastText的原生分类模式取决于您自己使用已知类的文本训练单词向量。因此,单词矢量被优化以用于训练期间观察到的特定分类。因此,该模式通常不会与预训练的矢量一起使用。

如果使用预先训练过的单词向量,您可以自己将它们组合成文本向量(例如,通过将文本的所有单词平均在一起),然后训练单独的分类器(例如scikit-learn的许多选项使用这些功能。