【问题标题】:Using a Word2Vec model pre-trained on wikipedia使用在维基百科上预训练的 Word2Vec 模型
【发布时间】:2017-12-31 19:11:34
【问题描述】:

我需要使用 gensim 来获取单词的向量表示,我认为最好使用在英语维基百科语料库上预训练的 word2vec 模块。有谁知道在哪里下载它,如何安装它,以及如何使用 gensim 创建向量?

【问题讨论】:

  • 你以前见过这个page吗?
  • 这个link 也可能有帮助

标签: wikipedia gensim word2vec


【解决方案1】:

@imanzabet 提供了带有预训练向量的有用链接,但如果您想使用 genism 自己训练模型,则需要做两件事:

  1. 获取维基百科数据,您可以访问here。看起来英文维基百科的最新快照是在 20 日,可以找到 here。我相信其他英语“维基”,例如quotes 是单独捕获的,所以如果你想包含它们,你也需要下载它们。

  2. 加载数据并使用它来生成模型。这是一个相当广泛的问题,所以我将把你链接到优秀的genism documentationword2vec tutorial

最后,我要指出,似乎有一个 blog post 准确地描述了您的用例。

【讨论】:

  • 不幸的是,在 github 页面上发布的 imanzbet 代码已过时,虽然我已经查看了 gensim 文档,但我不知道从哪里开始设置预训练模型.
  • 这并没有听起来错;当您下标一个单词时,应该从 KeyedVectors 返回单词向量,例如array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)。返回的数组的维度是多少? “3列”可能只是一个展示神器。
  • 当然,虽然最有帮助的可能只是更多地阅读分布式词嵌入。 (我喜欢this PDF slide deck。)基本上,要点是创建固定长度(在本例中为 1 x 200)向量,将“相似”词放在(或嵌入)向量空间中靠近在一起,而“不相似”词远离彼此。这很好,因为 (1) 可以很容易地与向量进行余弦相似性,并且 (2) 由于维度减少和捕获上下文信息,固定长度向量非常适合作为机器学习算法的输入。
  • 所以要回答实际问题,答案是“向量中的任何特定维度本质上是无法解释的”和“正负值是任意的;您可以将所有值重新缩放到 0-1 范围并且您应该保持相同的特征”。
【解决方案2】:

您可以查看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)]

更新 以下是一些有用的二进制模型链接:

预训练的词嵌入模型:

Fasttext models:

Google Word2Vec

GloVe: 词表示的全局向量

  • glove.6B.zip: Wikipedia 2014 + Gigaword 5(6B 代币,400K 词汇,无大小写,50d、100d、200d 和 300d 向量,822 MB 下载)。这是an example 在行动。
  • glove.840B.300d.zip:Common Crawl(840B 令牌,2.2M 词汇,大小写,300d 向量,2.03 GB 下载)

WebVectors

  • 在各种语料库上训练的模型,由词性 (POS) 标签增强

【讨论】:

  • 您可以将pickle.dump(model, file)load_word2vec_format() 加载的gensim 模型一起使用。然后,model = pickle.load(file) 的工作速度比每次解析 .vec 文件都要快。
  • 谁训练了 GoogleNews-vectors-negative300.bin.gz?我需要在我的论文中引用它
  • @Marco 好像来自DeepLearning4J
  • 感谢您提供这么多预训练模型的简明清单!
  • 我目前想知道来自fasttext.cc/docs/en/crawl-vectors.html 的代码示例是否会生成仅在 Common Crawl 或 Common Crawl + Wikipedia 上训练的模型。有人知道吗? ft = fasttext.load_model('cc.en.300.bin') 看起来只是 CommonCrawl,但在网站顶部它说“我们为 157 种语言分发预训练的词向量,使用 fastText 在 Common Crawl 和维基百科上进行训练。”
猜你喜欢
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多