从one-hot到word2vec

词袋模型

词袋模型(Bag-of-words model)最早出现在NLP和信息检索领域。该模型忽略掉文本的语法和语序等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立的。

例子:

John likes to watch movies. Mary likes too.

John also likes to watch football games.

基于出现的单词构建词典:

​ {“John”: 1, “likes”: 2,”to”: 3, “watch”: 4, “movies”: 5,”also”: 6, “football”: 7, “games”: 8,”Mary”: 9, “too”: 10}

上面的词典中包含10个单词, 每个单词有唯一的索引, 那么每个文本我们可以使用一个10维的向量来表示。如下:

[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]

[1, 1,1, 1, 0, 1, 1, 1, 0, 0]

该向量与原来文本中单词出现的顺序没有关系,而是词典中每个单词在文本中出现的频率。

因此,词袋模型的特点是离散、高维、稀疏。

词袋模型的应用有:one-hot、TF-IDF、n-gram

word2vec(词嵌入)

one-hot

one-hot指的是用一个很长的向量表示一个词,向量的长度为词典的大小。向量的分量只有0或者1.1的位置对应该词在词典中的索引。然而这种表示容易受维度灾难的困扰,同时不能很好地刻画词与词之间的关系。

Distributed Representation

通过训练将某种语言中的每一个词引射成一个固定长度的短向量,所有这些向量构成一个词向量空间。所有向量构成一个词向量空间,在这个空间上引入距离,根据词之间的距离判断它们的相似性。

Hierarchical Softmax

CBOW

CBOW 是 Continuous Bag-of-Words Model 的缩写,是一种根据上下文的词语预测当前词语的出现概率的模型。

CBOW是已知上下文,估算当前词语的语言模型。其学习目标是最大化对数似然函数:

屏幕快照 2016-07-14 下午7.45.11.png

输入层是上下文的词语的词向量(什么!我们不是在训练词向量吗?不不不,我们是在训练CBOW模型,词向量只是个副产品,确切来说,是CBOW模型的一个参数。训练开始的时候,词向量是个随机值,随着训练的进行不断被更新)。

投影层对其求和,所谓求和,就是简单的向量加法。

输出层输出最可能的w。由于语料库中词汇量是固定的|C|个,所以上述过程其实可以看做一个多分类问题。给定特征,从|C|个分类中挑一个。

Skip-gram

Skip-gram只是逆转了CBOW的因果关系而已,即已知当前词语,预测上下文。

由于时间关系,尚未实现word2vec的代码,故在此贴出tensorflow官方实现的源码

https://zhuanlan.zhihu.com/p/28979653

http://www.hankcs.com/nlp/word2vec.html

https://blog.csdn.net/itplus/article/details/37969519

https://blog.csdn.net/u010213393/article/details/40987945