介绍词向量word2evc概念,及CBOW和Skip-gram的算法实现( 九 )


#通过minimize函数 , 让程序根据loss , 完成一步对参数的优化更新
adam.minimize(loss)
#使用clear_gradients函数清空模型中的梯度 , 以便于下一个mini-batch进行更新
skip_gram_model.clear_gradients()
#每经过100个mini-batch , 打印一次当前的loss , 看看loss是否在稳定下降
step+=1
ifstep%100==0:
print("step%d,loss%.3f"%(step,loss.numpy()[0]))
#经过10000个mini-batch , 打印一次模型对eval_words中的10个词计算的同义词
#这里我们使用词和词之间的向量点积作为衡量相似度的方法
#我们只打印了5个最相似的词
ifstep%10000==0:
get_similar_tokens('one',5,skip_gram_model.embedding.weight)
get_similar_tokens('she',5,skip_gram_model.embedding.weight)
get_similar_tokens('chip',5,skip_gram_model.embedding.weight)
step100,loss0.693
step200,loss0.693
step300,loss0.693
step400,loss0.693
step500,loss0.691
step600,loss0.688
step700,loss0.682
step800,loss0.665
step900,loss0.658
step1000,loss0.646
step1100,loss0.631
step1200,loss0.612
step1300,loss0.592
step1400,loss0.568
从打印结果可以看到 , 经过一定步骤的训练 , Loss逐渐下降并趋于稳定 。 同时也可以发现skip-gram模型可以学习到一些有趣的语言现象 , 比如:跟who比较接近的词是"who,he,she,him,himself" 。
3.4词向量的有趣应用
在使用word2vec模型的过程中 , 研究人员发现了一些有趣的现象 。 比如得到整个词表的wordembedding之后 , 对任意词都可以基于向量乘法计算出跟这个词最接近的词 。 我们会发现 , word2vec模型可以自动学习出一些同义词关系 , 如:
shell
Top5wordsclosestto"beijing"are:
1.newyork
2.paris
3.tokyo
4.berlin
5.seoul
Top5wordsclosestto"apple"are:
1.banana
2.pineapple
3.huawei
4.peach
5.orange
除此以外 , 研究人员还发现可以使用加减法完成一些基于语言的逻辑推理 , 如:返回搜狐 , 查看更多
责任编辑: