如何在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提供的来自维基百科的经过预先训练的嵌入。可行吗如果是这样,我必须在参数列表中添加一个特定的参数吗?

解决方法

动机

如果您的训练数据集很小,则可以从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
,

我没有在Facebook FastText文档中注意到在监督模式训练之前预加载模型的任何内容,也没有看到任何声称可以这样做的示例。

此外,由于在无监督模式(预测邻居)和有监督模式(预测标签)中词向量训练的目标是不同的,所以我不确定这种操作会有什么好处。

即使单词向量为培训提供了些微的开端,最终您还是希望进行足够的培训以使模型“收敛”到训练时的最佳状态任务,预测标签。而且,到那时,原始单词向量的所有剩余影响可能已被稀释为零,因为它们已针对其他任务进行了优化。

您为什么要这样做?用什么方式对您的数据进行典型的有监督的训练是不够的?从其他模式和数据集的词向量开始,您会期望得到什么好处?