我有一个word2vec模型,假设我使用的是google-news-300模型
import gensim.downloader as apiword2vec_model300 = api.load('word2vec-google-news-300')
我想找出与“AI”或“人工智能”相似的词语,所以我想写
word2vec_model300.most_similar("artifical intelligence")
但我得到了错误
KeyError: "word 'artifical intelligence' not in vocabulary"
那么,提取双词组相似词的正确方法是什么?
先谢谢了!
回答:
在某种程度上,当一个词标记不在一组固定的词向量中时,该词向量集的创建者选择不训练/建模该词。因此,你所做的任何事情都只是对其缺失的粗略解决方法。
请注意,当谷歌准备这些向量时——基于2012年前的新闻文章数据集——他们还对其进行了一些统计多词组合,创建了用连接字符_
连接的多词组合。所以,首先检查是否存在'artificial_intelligence'
的向量。
如果没有,你可以尝试其他粗略的解决方法,比如将'artificial'
和'intelligence'
的向量平均起来——当然,这并不能真正代表人们对这两个词的特定组合的含义,只是由独立的词所暗示的含义。
Gensim的.most_similar()
方法可以接受通过平均等操作创建的原始向量,或者甚至可以通过其明确的关键字positive
参数接受多个词的列表,这些词它会为你平均。例如:
word2vec_model300.most_similar(positive=[average_vector])
…或者…
word2vec_model300.most_similar(positive=['artificial', 'intelligence'])
最后,虽然谷歌的老向量很方便,但它们现在有点过时了,且来自特定领域(流行新闻文章),其中词义可能与其他领域(或最近的)不匹配。所以,你可能需要寻找替代向量,或者如果你有来自你感兴趣领域的足够数据来训练你自己的向量,以获得适当的含义——包括为你选择在数据中标记的任何特定多词组合的向量。