【问题标题】:After training word embedding with gensim's fasttext's wrapper, how to embed new sentences?用 gensim 的 fasttext 的 wrapper 训练词嵌入后,如何嵌入新句子?
【发布时间】:2019-11-26 12:16:22
【问题描述】:

在阅读了 gensim 的 docs 的教程后,我不明白从经过训练的模型生成新嵌入的正确方法是什么。到目前为止,我已经像这样训练了 gensim 的快速文本嵌入:

from gensim.models.fasttext import FastText as FT_gensim

model_gensim = FT_gensim(size=100)

# build the vocabulary
model_gensim.build_vocab(corpus_file=corpus_file)

# train the model
model_gensim.train(
    corpus_file=corpus_file, epochs=model_gensim.epochs,
    total_examples=model_gensim.corpus_count, total_words=model_gensim.corpus_total_words
)

然后,假设我想获得与这句话相关的嵌入向量:

sentence_obama = 'Obama speaks to the media in Illinois'.lower().split()
sentence_president = 'The president greets the press in Chicago'.lower().split()

如何使用我之前训练的model_gensim 获得它们?

【问题讨论】:

    标签: machine-learning nlp gensim embedding


    【解决方案1】:

    你可以依次查找每个单词的向量:

    wordvecs_obama = [model_gensim[word] for word in sentence_obama]
    

    对于您的 7 个单词输入句子,您将在 wordvecs_obama 中获得一个包含 7 个单词向量的列表。

    就其固有功能而言,所有 FastText 模型都不会将较长的文本转换为单个向量。 (具体来说,您训练的模型没有这样做的默认方式。)

    在原始的 Facebook FastText 代码中有一个“分类模式”,它涉及一种不同的训练方式,其中文本在训练时与已知标签相关联,并且在训练期间将句子的所有词向量组合在一起,并且当模型稍后被要求对新文本进行分类时。但是,FastText 的gensim 实现目前不支持这种模式,因为gensim 的目标是提供无监督而不是监督的算法。

    您可以通过将这些词向量平均在一起来近似 FastText 模式的作用:

    import numpy as np
    meanvec_obama = np.array(wordvecs_obama).mean(axis=0)
    

    根据您的最终目的,类似的东西可能仍然有用。 (但是,该平均值对于分类的用处不如单词向量最初是在该 FastText 模式下使用已知标签为该目标训练的。)

    【讨论】:

    • 就我而言,当我这样做时:wordvecs_obama = [loaded_model[word] for word in sentence_obama] len(wordvecs_obama) 当我这样做时 len(wordvecs_obama) 我得到 43。这种行为的原因是什么?
    • 模式是指skipgram还是cbow?
    • 您确定sentence_obama 已经像您显示的代码中的.split() 一样吗? (只有这样,它才会是 7 个单词的列表。否则,它将是 43 个字符的列表。)
    • CBOW 和 skip-gram 是替代的训练模式,但原始的 FastText also 有一个“分类模式”,正如我所描述的那样,由其 supervised 参数启用,请参阅:github.com/facebookresearch/fastText#text-classification - 但同样,这个supervised 选项在 gensim 的实现中不可用。
    猜你喜欢
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2019-03-02
    相关资源
    最近更新 更多