13

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

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

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

B) 文本分类实用程序

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

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

4

2 回答 2

42

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 词向量,必须为 300。它由-dim 300参数设置。
  • 截至 2018 年 2 月中旬,Python API (v0.8.22) 不支持使用预训练向量进行训练(忽略相应参数)。所以你必须使用 CLI(命令行界面)版本进行训练。但是,由 CLI 训练的带有预训练向量的模型可以由 Python API 加载并用于预测。
  • 对于大量的类(在我的情况下有 340 个),即使 CLI 也可能会出现异常,因此您需要使用分层 softmax 损失函数 ( -loss hs)
  • 分层 softmax 的性能比普通的 softmax 差,因此它可以放弃您从预训练嵌入中获得的所有收益。
  • 使用预训练向量训练的模型可能比没有训练的模型大几倍。
  • 在我的观察中,使用预训练向量训练的模型比没有训练的模型更快地过度拟合
于 2018-02-24T21:00:28.020 回答
4

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

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

于 2017-12-07T16:45:37.547 回答