word2vec 模型有两种: Continuous Skip-gram Model 和 Continuous Bag of Words Model (CBOW)。关于这两个模型的描述能够参考大神Mikolov的论文Efficient Estimation of Word Representations in Vector Space。python
本文不详细介绍 Word2vec 的机制, 关于这方面的内容推荐查看 Stanford CS224N 的公开课, 结合视屏和PPT, 将课后做业作一遍,对 word2vec的理解会很深入。 另外推荐 Word2Vec Tutorial - The Skip-Gram Model, 文章直观地讲解了如何从神经网络中获得词向量。linux
对于一个初步入门了深度学习的小伙伴, 交叉熵要容易理解一点。交叉熵就是让模型(好比神经网络)的分布尽量地拟合真实数据的分布, 提及来也挺玄乎的, 这里面有很多的奇技淫巧(调参数), 相信作过深度学习的小伙伴必定有深入的体会。然而对于Word2vec这样的任务, 一个Vocabulary(不知道词典 Vocabulary 为什么物的小伙伴, 第一次接触到这个英文单词的时候, 我也是一脸懵逼 :), Vocabulary 就是一个集合, 集合的内容是一个个单词)中有hundreds or billions of words, 当有几万到几个亿的单词时, 使用交叉熵是费时间的, 由于每一次计算交叉熵都要遍历整个Vocabulary, 计算量很大。面试
Negative Sampling Loss (负采样) 就是用来解决交叉熵比较慢这个问题的。 仔细观察负采样函数的形式, 我对它的粗略理解是让word pairs (词对)中的两个单词的向量尽量的接近,其它词向量与中心词向量尽量的远。负采样中最难理解的是 noise distribution(噪声分布)函数, 至今仍然没有Get到其中的精髓。 不过大佬说了, 这是根据实验结果来肯定的。 ubuntu
课堂做业的提示代码是为linux环境写的, 用的是python 2.0版本。然而个人电脑用的是windows系统, 装的是python 3.0版本。在实现做业的时候, 发如今对字符串进行编码和解码操做的时候, 老是不对, 改了一个下午和一个晚上, 也没有改为功。 尚未在虚拟机里面试过, 不过听说虚拟机里面不能用显卡。此次下定决心搭建一个ubuntu系统, 写代码方便一点。windows
sentences += [[w.lower().decode("utf-8").encode('latin1') for w in splitted]]
这行代码在 treebank.py 里面。网络
在python 3.0 版本下面运行这行代码的时候会报错, 由于在python 3.0 当中, 字符串是没有解码操做的。 在 python 2.0 当中字符串等于 bytes, 能够进行 decode(解码操做)。哪位大佬要是成功解决了这个问题, 请留言,感激涕零。函数
今天就暂时说这么多, 之后想到别的,再添加。学习