word2vec与词嵌入
文章目录
词嵌入:将一个单词(word)转换为一个向量(vector)表示。
word2vec:是实现词嵌入的一些算法的集合。
为什么需要做词嵌入
独热编码
独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。
举个例子,假设我们有四个样本(行),每个样本有三个特征(列),如图:
feature_1有两种可能的取值,比如是男/女,这里男用1表示,女用2表示。feature_2 和feature_3各有4种取值。one-hot编码就是保证每个样本中的单个特征只有1位处于状态1,其他的都是0。上述状态用one-hot编码如下图所示:
优点:一是解决了分类器不好处理离散数据的问题,二是在一定程度上也起到了扩充特征的作用。
缺点:在文本特征表示上有些缺点就非常突出了。首先,它是一个词袋模型,不考虑词与词之间的顺序(文本中词的顺序信息也是很重要的);其次,它假设词与词相互独立(在大多数情况下,词与词是相互影响的);最后,它得到的特征是离散稀疏的,向量维度非常大。
词嵌入:可以将onehot这种高维词向量嵌入到一个低维空间。
映射必须满足以下性质:
(1)这个映射是单射;
(2)映射之后的向量不会丢失之前的那种向量所含的信息。
词嵌入
词嵌入一般有两种方法:一种方法基于“计数”计算一个词语与另外一个词语同时出现的概率,将同时出现的词映射到向量空间的相近位置;另一种方法基于“预测”,从一个词或几个词出发,预测它们可能的相邻词组。
又有两种基于预测的方法CBOW、Skip-Gram。
CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。
Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。
CBOW(Continuous Bag-of-Words)
CBOW又叫做连续词袋模型,之所以叫词袋,是因为不考虑单词的顺序问题。核心思想:利用某个词的上下文预测这个词。
CBOW的训练模型如图所示:
输入层:上下文单词的onehot。假设单词向量空间dim为V,上下文单词个数为C,C为窗口的大小,因此是1 * V的向量。
隐含层:所有onehot分别乘以共享的输入权重矩阵W。 W是V * N的矩阵,N为自己设定的数,初始化权重矩阵W。所得的向量相加求平均作为隐层向量, size为1*N,N一般为100。
输出层:乘以输出权重矩阵W’(N * V),得到向量 1 * V, 对输出层向量应用softmax得到V-dim概率分布。概率最大的index所指示的单词为预测出的中间词target word与true label的onehot做比较,误差越小越好(根据误差更新权重矩阵)。所以,需要定义loss function(一般为交叉熵代价函数),采用梯度下降算法更新W和W’。
训练完毕后,输入层的每个单词与矩阵W相乘得到的向量的就是我们想要的词向量word embedding,这个矩阵(所有单词的word embedding)也叫做look up table(其实这个look up table就是矩阵W自身),任何一个单词的onehot乘以这个矩阵都将得到自己的词向量。有了look up table就可以直接查表得到单词的词向量了。
基于类别个数CBOW改进
上述整个网络相当于是一个V类的分类器,V是单词表中单词的数量,这个值非常的大,所以比较难以训练,通常会简单修改网络的结构,将V类分类变成两分类。
基于softmax CBOW改进
Skip-Gram
下面的例子显示了一些训练样本(单词对),这些单词对将从“The quick brown fox jumps over the lazy dog.”获取。这里采用了一个小的窗口大小2,。标为高亮蓝色的是我们的输入单词。
假如字典的大小是10000,那么模型的输入是一个110000的向量,输出也是一个110000的向量。
输入层:特定单词的onehot。例如“the”,即对“the”的上下文进行预测,上面产生了关于“the”的两组训练词对,假如先拿一组词对 (‘the’, ‘quick’) 来训练神经网络。(假设单词向量空间dim为V,因此输入是1 * V的向量。)
隐含层:特定单词的onehot乘以权重矩阵W。 (W是V * N的矩阵,N为自己设定的数,初始化权重矩阵W)。所得的向量为隐层向量, size为1 * N。
输出层:乘以输出权重矩阵W’ (N * V),得到向量 (1 * V), 处理得到V-dim概率分布。概率最大的index所指示的单词为预测出的上下文词(target word)与true label(即’quick’)的onehot做比较,误差越小越好(根据误差更新权重矩阵)。
模型的输出概率代表着到我们词典中每个词有多大可能性跟input word同时出现。举个例子,如果我们向神经网络模型中输入一个单词“中国“,那么最终模型的输出概率中,像“英国”、 ”俄罗斯“这种相关词的概率将远高于像”苹果“、”蝈蝈“非相关词的概率。因为”英国“、”俄罗斯“在文本中更大可能在”中国“的窗口中出现。我们将通过给神经网络输入文本中成对的单词来训练它完成上面所说的概率计算。
Hierarchical Softmax
Negative Sampling
为了加速训练过程,Google论文里真实实现的word2vec对模型提出了两种改进思路,即Hierarchical Softmax模型和Negative Sampling模型。
Airbnb Listing Embedding
《Real-time Personalization using Embeddings for Search Ranking at Airbnb》论文
Wordvec的应用
参考:
CBOW:
https://blog.****.net/u010665216/article/details/78724856
https://www.jianshu.com/p/471d9bfbd72f
https://blog.****.net/u012762419/article/details/79366052
Airbnb Listing Embedding