1 word2vec
本文会通过 图书馆 图书排布的例子引入词的表征,继而通过最小化借书成本过渡到skip-gram的模型,阐述word2vec训练和最小化信息熵的关联
词表征? 词嵌入 ? 词向量 ? word2vec ?
- 词表征是比较宽泛的概念,词可以通过各种方式来表征,比如one-hot 比如 词嵌入 等等
- 词嵌入特指由神经网络模型得到的低维实数向量表示
- word2vec 用来训练词嵌入或者低维向量表示的工具,或者是指通过(cbow/skip-gram)训练词向量的工具
1.1 word2vec小例子
1.1.1 腾讯词向量
腾讯AI Lab此次公开的中文词向量数据包含800多万中文词汇,一共大约有6个多G,中每个词对应一个200维的向量。相比现有的中文词向量数据,腾讯AI Lab的中文词向量着重提升了以下3个方面,相比已有各类中文词向量大大改善了其质量和可用性
In [1]:
'''
加载预训练的词向量
'''
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('data/Tencent_AILab_ChineseEmbedding.txt',binary=False)
#model = gensim.models.KeyedVectors.load_word2vec_format('data/test.txt',binary=False)
#print(model['你好'])
In [79]:
# new_model = gensim.models.Word2Vec.load('./mymodel')
# 词向量展示
y0 = model[u'机器学习']
print "【机器学习】的词向量"
print y0
print "-----------------------------------------------------------------------\n"
# 计算两个词的相似度/相关程度
y1 = model.similarity(u"刀削面", u"拉面")
print u"【刀削面】和【拉面】的相似度:", y1
print "-----------------------------------------------------------------------\n"
# 计算某个词的相关词列表
y2 = model.most_similar(u"内马尔", topn=20) # 20个最相关的
print u"和【内马尔】最相关的词有:\n"
for item in y2:
print item[0], item[1]
print "----------------------------------------------------------------------\n"
# # 寻找对应关系
print ' "男人" is to "爸爸" as "女人" is to ...? \n'
y3 = model.most_similar([u'女人', u'爸爸'], [u'男人'], topn=1)
for item in y3:
print item[0], item[1]
print "----------------------------------------------------------------------\n"
# more_examples = ["he his she", "big bigger bad", "going went being"]
# for example in more_examples:
# a, b, x = example.split()
# p