我们正在尝试为下面给出的一组单词实施单词向量模型。
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'
答案 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来代替训练自己的模型?