《Distributed Representations of Words and Phrases and their Compositionality》word2vector学习笔记

xiaoxiao2021-02-28  6

最近研究了一下google的开源项目word2vector,http://code.google.com/p/word2vec/。

其实这玩意算是神经网络在文本挖掘的一项成功应用。

本文是看了论文《Distributed Representations of Words and Phrases and their Compositionality》的学习笔记。

论文中,展示了几种原始skip-gram模型的扩展。

频繁词下采样可以加速训练和提高了词频较少的词语的特征表示的精确度。

此外,对NCE做了简单的变化来训练skip-gram模型,对比于此前采用的hierarchical softmax,加速了训练,优化了词频较高的词语的特征表示。

 

一 、Skip-gram模型(传统原始模型)

给定一串待训练的词语:

w1,w2,w3, . . . ,wT

我们的目标是最大化log概率的平均值,如下:

其中,

1 c是训练上下文的大小。比如c是5,我们一次就拿5个连续的词语来训练。C越大,效果越好,但花的时间越多。

2 p(wt+j |wt)是表示wt条件下出现wt+j的概率。

基本的skip-gram模型的p(wt+j |wt)公式是用softmax函数:

这个公式是不切实际的,因为W太大了,通常是10^5–10^7。

二、Hierarchical Softmax

这种是原始skip-gram模型的变形。

我们假设有这么一棵二叉树,每个叶子节点对应词汇表的词语,一一对应。所以我们可以通过这棵树来找到一条路径来找到某个词语。比如我们可以对词汇表,根据词频,建立一棵huffman树。每个词语都会对应一个huffman编码,huffman编码就反映了这个词语在huffman树的路径。对于每个节点,都会定义孩子节点概率,左节点跟右节点的概率不同的,具体跟输入有关。

我之前知道huffman树就是用来压缩的。没想到用在这里这么神奇。

因此,给定一个词,我们就知道该词的编码,就知道该词在这个树的路径。我们的目的就是使得,给定一个输入(这个输入肯定不是目标词语本身,而是它的上下文),使得该条路径的概率最大。

拿一个具体的例子来分析。

比如,待训练的词组“我 爱 蓝蓝”。

我们要用“爱”的向量去预测“我”的向量。

输入:爱

预测:我

假设,“我”的huffman编码是:1 1 0 1。

于是,我们就在huffman树上从跟节点沿着往下走,

每次走的时候,我们会根据当前节点和“爱”的向量算出(具体怎么算先不管),走到下一个节点的概率是多少。于是,我们得到一连串的概率,我们的目标就是使得这些概率的连乘值(联合概率)最大。

图示左右节点的概率:

显然,我们计算这个联合概率的复杂度取决了词语在huffman树的路径长度,显然她比W小得多了。另外,由于按词频建立的huffman树,词频高的,huffman编码短,计算起来就比较快。词频高的需要计算概率的次数肯定多,而huffman让高频词计算概率的速度比低频词的快。这也是很犀利的一个设计。

三、Negative Sampling

另一种可以取代hierarchical softmax的是Noise Contrastive Estimation

Neg是nce的一种简化

相当于换了目标函数。

函数前半部分表示一个正样本,后半部分是若干个负样本。

四、subsampling of Frequent Words

高频词二次抽样

the vector representations of frequent words do not change significantly

after training on several million examples.

经过很多次迭代训练之后,再次更新的时候高频词的向量不应该改变太大。

To counter the imbalance between the rare and frequent words, we used asimple subsampling approach:

each word wi in the training set is discarded with probabilitycomputed by the formula

为了平衡低频词和高频词,使用了一种二次抽样的方法。对于每个词语,如果由以下公式算出的概率少某个值,则丢弃。

其中,t是一个设定的阈值,f是词wi的词频。

Learning Phrases

对于某些词语,经常出现在一起的,我们就判定他们是短语。那么如何衡量呢?用以下公式。

输入两个词向量,如果算出的score大于某个阈值时,我们就认定他们是“在一起的”。

为了考虑到更长的短语,我们拿2-4个词语作为训练数据,依次降低阈值。

 

本文作者:linger

本文链接:http://blog.csdn.NET/lingerlanlan/article/details/38048335

转载请注明原文地址: https://www.6miu.com/read-450115.html

最新回复(0)