使用Gensim实现Word到矢量模型

时间:2018-08-23 14:56:06

标签: python-3.x machine-learning gensim fasttext

我们正在尝试为下面给出的一组单词实施单词向量模型。

stemmed = ['data', 'appli', 'scientist', 'mgr', 'microsoft', 'hire', 'develop', 'mentor', 'team', 'data', 'scientist', 'defin', 'data', 'scienc', 'prioriti', 'deep', 'understand', 'busi', 'goal', 'collabor', 'across', 'multipl', 'group', 'set', 'team', 'shortterm', 'longterm', 'goal', 'act', 'strateg', 'advisor', 'leadership', 'influenc', 'futur', 'direct', 'strategi', 'defin', 'partnership', 'align', 'efficaci', 'broad', 'analyt', 'effort', 'analyticsdata', 'team', 'drive', 'particip', 'data', 'scienc', 'bi', 'commun', 'disciplin', 'microsoftprior', 'experi', 'hire', 'manag', 'run', 'team', 'data', 'scientist', 'busi', 'domain', 'experi', 'use', 'analyt', 'must', 'experi', 'across', 'sever', 'relev', 'busi', 'domain', 'util', 'critic', 'think', 'skill', 'conceptu', 'complex', 'busi', 'problem', 'solut', 'use', 'advanc', 'analyt', 'larg', 'scale', 'realworld', 'busi', 'data', 'set', 'candid', 'must', 'abl', 'independ', 'execut', 'analyt', 'project', 'help', 'intern', 'client', 'understand']

我们正在使用以下代码:

import gensim
model = gensim.models.FastText(stemmed, size=100, window=5, min_count=1, workers=4, sg=1)
model.wv.most_similar(positive=['data'])

但是,我们遇到此错误:

KeyError: 'all ngrams for word data absent from model'

2 个答案:

答案 0 :(得分:2)

您需要提供的培训数据不是列表,而是生成器

尝试:

import gensim
from gensim.models.fasttext import FastText as FT_gensim

stemmed = ['data', 'appli', 'scientist', ... ]

def gen_words(stemmed):
    yield stemmed   

model = FT_gensim(size=100, window=5, min_count=1, workers=4, sg=1)
model.build_vocab(gen_words(stemmed))

model.train(gen_words(stemmed), total_examples=model.corpus_count, epochs=model.iter)
model.wv.most_similar(positive=['data'])

打印输出:

  

[('busi',-0.043828580528497696)]

另请参见gensim文档中的this notebook。而this excellent gensim tutorial涉及所有可迭代的事物:

  

在gensim中,如何创建语料库取决于您。 Gensim算法   只关心为他们提供可迭代的稀疏向量(并且   对于某些算法,甚至生成器=向量的单次通过   足够)。

答案 1 :(得分:1)

基本问题是FastText模型期望句子作为训练数据而不是单词。如果您提供一个单词列表,它将不能很好地工作,因为它会根据单词在句子中的相对位置创建矢量嵌入。

代码中的实际错误来自gensim.models.FastText构造函数期望将字符串列表作为第一个参数(例如,二维字符串列表)进行迭代,但是您给它提供了字符串列表。 / p>

也许您可以使用pretrained FastText model来代替训练自己的模型?