【问题标题】:How to use pre-trained word vectors in FastText?如何在 FastText 中使用预训练的词向量?
【发布时间】:2021-02-18 17:20:48
【问题描述】:

我刚刚开始使用 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。可行吗?如果是这样,我必须在参数列表中添加特定参数吗?

【问题讨论】:

    标签: python fasttext


    【解决方案1】:

    动机

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

    【讨论】:

      【解决方案2】:

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

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

      即使词向量为训练提供了一个小小的领先优势,最终您还是希望将训练运行足够的 epoch 以在训练时将模型“收敛”到尽可能好任务,预测标签。而且,到那时,原始词向量的任何剩余影响都可能被稀释到零,因为它们已针对另一项任务进行了优化。

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

      【讨论】:

      • 感谢您的重播。我正在写一篇论文,我正在比较使用不同方法为我的基线获得的结果。实际上,我在 SVM 中使用了来自维基百科的预训练嵌入,然后我使用 FastText 处理了相同的数据集,而没有预训练的嵌入。为了进行更详细的比较,我想知道使用来自维基百科的预训练嵌入在 FastText 中进行第二次测试是否有意义。
      猜你喜欢
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      相关资源
      最近更新 更多