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

Jar*_*sIA 8 nlp text-classification word2vec fasttext

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

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

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

B)文本分类实用程序

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

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

小智 25

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
Run Code Online (Sandbox Code Playgroud)

几件事情要考虑:

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

  • 更新:从 `fasttext==0.9.1` (Python API) 开始,可以通过 Python 访问 `pretrainedVectors`。您可以在训练期间将其作为附加超参数包含在内,以加载到预训练向量 (.vec) 文件中,然后执行训练。但无论出于何种原因,我无法使用预训练向量显着提高模型的 F1 分数。不知何故,FastText 似乎并没有像现代深度学习方法那样从预训练向量中转移知识。如果有人在预训练向量分类方面有更好的运气,我很想知道! (2认同)

goj*_*omo 4

FastText 的本机分类模式取决于您使用具有已知类别的文本自行训练词向量。因此,词向量经过优化,可用于训练期间观察到的特定分类。因此该模式通常不会与预先训练的向量一起使用。

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