3

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

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'
4

2 回答 2

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'])

这打印出来:

[('业务',-0.043828580528497696)]

另请参阅gensim 文档中的此笔记本。还有这个关于所有可迭代事物的优秀 gensim 教程:

在 gensim 中,如何创建语料库取决于您。Gensim 算法只关心您为它们提供可迭代的稀疏向量(对于某些算法,即使是生成器 = 单次遍历向量就足够了)。

于 2018-08-23T15:19:51.503 回答
1

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

代码中的实际错误来自gensim.models.FastText构造函数需要一个可迭代的字符串列表作为其第一个参数(例如,一个二维字符串列表),但您给它一个字符串列表。

也许您可以使用预训练的FastText 模型而不是训练自己的模型?

于 2018-08-23T15:35:03.303 回答