阅读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
来获得他们?
答案 0 :(得分:1)
您可以依次查询每个单词的向量:
<div class="container">
<div class="sub-container">Child</div>
</div>
对于7个单词的输入句子,您将在wordvecs_obama = [model_gensim[word] for word in sentence_obama]
中有7个单词向量的列表。
就其固有功能而言,所有FastText模型都不会将较长的文本转换为单个向量。 (特别是,您训练的模型没有默认的操作方式。)
原始的Facebook FastText代码中存在一种“分类模式”,涉及不同的训练风格,其中,在训练时将文本与已知标签相关联,并且在训练期间将句子的所有单词向量组合在一起,并且稍后要求模型对新文本进行分类时。但是,wordvecs_obama
的{{1}}实现目前不支持此模式,因为gensim
的目标是提供无监督而不是受监督的算法。
您可以通过将这些单词向量平均化来近似FastText模式的作用:
gensim
根据您的最终目的,类似的操作可能仍然有用。 (但是,该平均值对分类没有用,就好像单词向量最初是在那种FastText模式下使用已知标签针对该目标进行训练的。)