使用Gensim实现词向量模型

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

这将打印出:

[('busi', -0.043828580528497696)]

另请参见gensim文档中的此笔记本电脑。以及关于所有可迭代事物的这个优秀的gensim教程

在gensim中,您如何创建语料库由您决定。 Gensim算法只关心您提供的稀疏向量的可迭代对象(对于某些算法,即使是生成器=向量上的单次传递也足够)。


@MurthyRouthula,我很高兴这能帮到您。建议您接受此答案,让其他人知道问题已得到解决。 - petezurich
1
你能告诉我如何在词干提取后将普通单词应用于词袋向量实现吗? - Murthy Routhula
@MurthyRouthula 请将此作为新问题发布。 - petezurich

1
基本问题在于FastText模型期望训练数据是句子而不是单词。如果您提供一个单词列表,它的效果不会很好,因为它基于句子中单词的相对位置创建向量嵌入。 代码中实际的错误来自于gensim.models.FastText构造函数期望其第一个参数是字符串列表的可迭代对象(例如,字符串的二维列表),但您提供了一个字符串列表。 也许您可以使用预训练的FastText模型而不是训练自己的模型?

好的!那你能给我推荐一个常规的词向量模型吗? - Murthy Routhula
1
你能分享更多关于你试图解决的问题的细节吗?不知道你的最终目标,很难做出建议。 - Agost Biro
实际上,我经过去除停用词、分词和规范化后获得了一些词袋。现在我想对这些词应用词向量模型。 - Murthy Routhula

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接