【发布时间】:2017-12-31 19:11:34
【问题描述】:
我需要使用 gensim 来获取单词的向量表示,我认为最好使用在英语维基百科语料库上预训练的 word2vec 模块。有谁知道在哪里下载它,如何安装它,以及如何使用 gensim 创建向量?
【问题讨论】:
我需要使用 gensim 来获取单词的向量表示,我认为最好使用在英语维基百科语料库上预训练的 word2vec 模块。有谁知道在哪里下载它,如何安装它,以及如何使用 gensim 创建向量?
【问题讨论】:
@imanzabet 提供了带有预训练向量的有用链接,但如果您想使用 genism 自己训练模型,则需要做两件事:
获取维基百科数据,您可以访问here。看起来英文维基百科的最新快照是在 20 日,可以找到 here。我相信其他英语“维基”,例如quotes 是单独捕获的,所以如果你想包含它们,你也需要下载它们。
加载数据并使用它来生成模型。这是一个相当广泛的问题,所以我将把你链接到优秀的genism documentation 和word2vec tutorial。
最后,我要指出,似乎有一个 blog post 准确地描述了您的用例。
【讨论】:
array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)。返回的数组的维度是多少? “3列”可能只是一个展示神器。
您可以查看WebVectors 以查找在各种语料库上训练的 Word2Vec 模型。模型附带包含培训细节的自述文件。
不过,您必须小心使用这些模型。我不确定所有这些,但至少在维基百科的情况下,该模型不是一个二进制文件,您可以使用例如直接加载。 gensim 的功能,但是一个 txt 版本,即带有单词和相应向量的文件。但请记住,这些词是由它们的词性 (POS) 标签附加的,因此,例如,如果您想使用该模型来找出词 vacation 的相似之处,您会得到KeyError 如果您按原样键入假期,因为模型将此单词存储为 vacation_NOUN。
一个关于如何使用 wiki 模型的示例 sn-p(如果它们的格式相同,也许其他模型也是如此),并且输出如下
import gensim.models
model = "./WebVectors/3/enwiki_5_ner.txt"
word_vectors = gensim.models.KeyedVectors.load_word2vec_format(model, binary=False)
print(word_vectors.most_similar("vacation_NOUN"))
print(word_vectors.most_similar(positive=['woman_NOUN', 'king_NOUN'], negative=['man_NOUN']))
和输出
▶ python3 wiki_model.py
[('vacation_VERB', 0.6829521656036377), ('honeymoon_NOUN', 0.6811978816986084), ('holiday_NOUN', 0.6588436365127563), ('vacationer_NOUN', 0.6212040781974792), ('resort_NOUN', 0.5720850825309753), ('trip_NOUN', 0.5585346817970276), ('holiday_VERB', 0.5482848882675171), ('week-end_NOUN', 0.5174300670623779), ('newlywed_NOUN', 0.5146450996398926), ('honeymoon_VERB', 0.5135983228683472)]
[('monarch_NOUN', 0.6679952144622803), ('ruler_NOUN', 0.6257176995277405), ('regnant_NOUN', 0.6217397451400757), ('royal_ADJ', 0.6212111115455627), ('princess_NOUN', 0.6133661866188049), ('queen_NOUN', 0.6015778183937073), ('kingship_NOUN', 0.5986001491546631), ('prince_NOUN', 0.5900266170501709), ('royal_NOUN', 0.5886058807373047), ('throne_NOUN', 0.5855424404144287)]
更新 以下是一些有用的二进制模型链接:
【讨论】:
pickle.dump(model, file) 与load_word2vec_format() 加载的gensim 模型一起使用。然后,model = pickle.load(file) 的工作速度比每次解析 .vec 文件都要快。