word2vector
word2vec简介
word2vec的核心是神经网络,采用 CBOW(Continuous Bag-Of-Words,即连续的词袋模型)和 Skip-Gram 两种模型,将词语映像到同一坐标系,输出为数值型向量的方法。
简而言之,就是将人类才可以看懂的文字,转换为机器也可以识别、操作、处理的数值,将一串文字转化为一个数值型向量的过程。
如果将语言模型即为f,那么word2vec就是去训练这个f,不关注这个模型是否完美,而是要获取模型产生的参数,对于word2vec,就是神经网络的权重参数,将这些参数作为句子S的替代,由这些参数组成的向量,就是我们所谓的“词向量”,这也就是word2vec的输出。语言模型正是为了考察句子,或者说由词a到词b存在在句子中的概率而存在的。
word2vec从大量文本语料中以无监督的方式学习语义信息,即通过一个嵌入空间使得语义上相似的单词在该空间内距离很近。比如“机器”和“机械”意思很相近,而“机器”和“猴子”的意思相差就很远了,那么由word2vec构建的这个数值空间中,“机器”和“机械”的距离较“机器”和“猴子”的距离而言是要近很多的。
Skip-gram和CBOW
Skip-gram是通过一个词a去预测它周围的上下文;而CBOW相反,是通过上下文来预测其间的词。CBOW一般用于数据,而Skip-Gram通常用在数据量较大的情况。
Skip-gram是一个单隐藏层的神经网络结构,那么我们要找的词向量其实就是输入层到第一个隐藏层的权重。
- 现在假设Skip-gram是一个最简单的情况,用一个输入词去预测它相邻的一个词。
- 如果词表中有10000个词,那么每个词进行one-hot编码后,就会是一个10000维的向量,其中9999个都是0,只有一个是1。
- 从输入层到隐藏层没有使用激活函数,但在输出层中使用了softmax(类似逻辑回归中的logstic变换)。
- 在输出层通过softmax进行变换,使输出层每个结点将会输出一个0-1之间的值(概率),这些所有输出层结点的概率之和为1。最终得到这个1×100的向量。
数据处理
1 | import jieba |
模型训练
1 | from gensim.models import word2vec |
模型加载
1 | import gensim.models |