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

Nlp 使用预先训练好的词向量进行文本分类的FastText,nlp,word2vec,text-classification,fasttext,Nlp,Word2vec,Text Classification,Fasttext,我正在处理一个文本分类问题,也就是说,给定一些文本,我需要为其指定特定的标签 我曾尝试使用Facebook的快速文本库,它有两个我感兴趣的实用程序: A) 具有预训练模型的词向量 B) 文本分类实用程序 然而,这些工具似乎是完全独立的,因为我一直找不到任何合并这两个实用程序的教程 我想要的是能够通过利用预先训练好的词向量模型对一些文本进行分类。有什么方法可以做到这一点吗?FastText的原生分类模式取决于您自己使用已知类别的文本来训练单词向量。因此,单词向量变得优化,对训练期间观察到的特定分类

我正在处理一个文本分类问题,也就是说,给定一些文本,我需要为其指定特定的标签

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

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

B) 文本分类实用程序

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


我想要的是能够通过利用预先训练好的词向量模型对一些文本进行分类。有什么方法可以做到这一点吗?

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


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

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
需要考虑的几件事:

  • 所选择的嵌入尺寸必须适合预训练向量中使用的尺寸。例如,is的值必须为300。它由
    -dim 300
    参数设置
  • 截至2018年2月中旬,Python API(v0.8.22)不支持使用预训练向量进行训练(忽略相应参数)。因此,您必须使用CLI(命令行界面)版本进行培训。然而,由CLI使用预训练向量训练的模型可以由Python API加载并用于预测
  • 对于大量的类(在我的例子中有340个),即使是CLI也可能会出现异常,因此您需要使用分层softmax丢失功能(
    -loss hs
  • 分层softmax的性能比普通softmax差,因此它可以放弃您从预训练嵌入中获得的所有收益
  • 使用预训练向量训练的模型可以比不使用预训练向量训练的模型大几倍
  • 根据我的观察,使用预训练向量训练的模型比不使用预训练向量训练的模型拟合速度更快

更改措辞以尝试使意思更清晰错误:Python版本不支持
预训练向量
,您是如何发现这一点的?知道为什么删除了这个选项吗?更新:从
fasttext==0.9.1
(Python API)开始,
pretrainedVectors
可以通过Python访问。您可以在训练期间将其作为附加超参数包含在预训练向量(.vec)文件中,然后执行训练。不管出于什么原因,我无法使用预训练向量显著提高模型的F1成绩。不知何故,FastText似乎不像现代深度学习方法那样,从预训练向量中转移知识。。如果有人在预训练向量分类方面有更好的运气,我很想知道@prrao我的分数似乎也没有变化。你运气好吗?谢谢…@OzgurOzturk我不认为FastText是设计用来作为迁移学习分类器的。请参见上面的公认答案。使用Facebook提供的工具,我能够显著提高我的F1成绩。请注意,它还允许您通过快速扫描整个参数空间来同时优化量化和分类器,因此它可以大大减小模型大小,同时还可以提高F1分数。因此,使用这种方法是双赢的。