如何在 FastText 中使用预训练词向量?

How to use pre-trained word vectors in FastText?

我刚开始使用 FastText。我正在通过使用我的数据集的 .csv 文件作为输入来对一个小数据集进行交叉验证。要处理我使用此参数的数据集:

 model = fasttext.train_supervised(input=train_file,
                                   lr=1.0,
                                   epoch=100,
                                   wordNgrams=2,
                                   bucket=200000,
                                   dim=50,
                                   loss='hs')

不过,我想使用来自维基百科的预训练嵌入 on the FastText website。可行吗?如果是这样,我必须在参数列表中添加一个特定的参数吗?

我没有注意到 Facebook FastText 文档中有任何提及在 supervised-mode 训练之前预加载模型,我也没有看到任何声称这样做的示例。

此外,由于 word-vector 训练的目标在无监督模式(预测邻居)和监督模式(预测标签)中不同,我不确定这样的操作是否有任何好处。

即使 word-vector 稍微 head-start 进行了训练,最终您还是希望 运行 训练足够的时期 'converge' 模型 as-good-as-it-can-be 在其训练任务中,预测标签。并且,到那时,原始 word-vector 的任何剩余影响可能已经消失,因为它们针对另一项任务进行了优化。

你为什么要这样做?对您的数据进行典型的监督训练在哪些方面不够充分,您希望从 word-vectors 开始从其他模式和数据集得到什么好处?

动机

如果你的训练数据集很小,你可以从 FastText 预训练向量开始,让分类器从一些预先存在的知识开始。 为了提高分类器的性能,可能有益也可能无用:你应该做一些测试。

从预训练向量开始训练 fastText 分类器

您可以从 this page 下载预训练向量(.vec 文件)。

这些向量的维度为 300。 您可以通过以下方式训练您的模型:

model = fasttext.train_supervised(input=TRAIN_FILEPATH, lr=1.0, epoch=100,
                             wordNgrams=2, bucket=200000, dim=300, loss='hs',
                             pretrainedVectors=VECTORS_FILEPATH)

改变向量维度

您可能不需要更改向量维度。但如果必须,您可以考虑分三步进行此更改:

  • 下载 .bin 模型(来自 here
  • 减少 .bin 模型维度(参见 this
  • 将 .bin 模型转换为 .vec 文件(参见 this answer