【Stanford CS224N 笔记】lecture 2 Word Vector

1 背景

1.1 文本数据的向量化

        文本数据,和图片数据非常类似,并不能够直接被机器理解,必须要将其建立一个双射,将这些数据转化为数字。比如说,图片可以转化成n*m*1(黑白图片)或者n*m*3(RGB)的三维矩阵。同样的,对于一个文本中出现的每一个单词,我们都要找到其对应的数字化表征,这里我们一般采用向量格式。

数学写法为:设【Stanford CS224N 笔记】lecture 2 Word Vector是词库, 我们需要寻找到一个【Stanford CS224N 笔记】lecture 2 Word Vector的单射【Stanford CS224N 笔记】lecture 2 Word Vector,将文本数据转化为向量格式,以便让数学模型更好地理解。

1.2 传统的离散方法

参考我们在机器学习算法经常使用的OneHot思想,我们将单词映射为一个0-1向量。

考虑【Stanford CS224N 笔记】lecture 2 Word Vector,第【Stanford CS224N 笔记】lecture 2 Word Vector位是1,其他位是0。显然【Stanford CS224N 笔记】lecture 2 Word Vector为单射。这种方式非常的直观,在word2vec等word embedding方法出现前,以离散方式表征的向量为基础,产出了TF-IDF、LDA等非常经典的NLP方法。

但是,【Stanford CS224N 笔记】lecture 2 Word Vector存在以下问题: 

第一,无法表征词与词之间的关联。例如apple,banana,basketball三个词汇,按照上述的f,分别为(1, 0, 0),(0, 1, 0),(0, 0, 1)。两两做内积均为0,无法反映出Distance(apple, banana) < Distance(apple, basketball)的词义关系。

第二,无法应对词库的即时更新。随着时代的变化,V的元素会发生不断的变化,会有很多新的单词/汉字被发明出来,也有很多长期无人使用的单词/汉字会逐渐被淘汰被遗忘。因此,f的值域会不停地发生变化,这非常不利于一个维护一个长期稳定的NLP模型,我们需要每隔一段时间就推翻重新训练,来确保模型能够覆盖最新的词库。

因此,另一种方案是通过固定维度的连续向量来表征单词,即word embedding。如apple=(0.1, 0.3), banana=(0.2, 0.5),basketball=(-0.1, 0.1),显然,apple和banana的向量夹角小于apple和basketball的向量夹角。

这里,我们引入了cosine similarity,即

【Stanford CS224N 笔记】lecture 2 Word Vector

cos值越大,夹角越小,意味着词与词之间的距离更相近。

2 word2vec简介

word2vec的核心思想是,一个词的含义取决于在这个词的周围经常出现哪些词汇[1]。比如说,apple和banana经常出现在eat、delicious等单词的上下文,而basketball则很少和eat、delicious同时出现在一个句子里。我们固定一个window size(不妨设为5),那么对于每一个单词(center word),我们只关注这个单词前后各5个单词(context word)。这样,我们将一个句子拆解为若干个词对,将这些词对分别作为模型中的X和y进行训练。

2.1 skip-gram和CBOW(continuous-bag-of-words)

Skip-gram和CBOW的主要区别在于,中心词和上下文词如何对应X和y。

2.1.1 Skip-gram

中心词作为X,上下文词作为y。即给定一个句子【Stanford CS224N 笔记】lecture 2 Word Vector,skip-gram的损失函数为

【Stanford CS224N 笔记】lecture 2 Word Vector

其中

【Stanford CS224N 笔记】lecture 2 Word Vector

在这个式子中,我们看到,每一个单词分别对应着两个向量input vector和output vector,这就是梯度下降时需要更新的参数,假设有N个单词,向量维度为D,那么该模型的参数个数为2ND。通过梯度下降使损失函数最小化,我们就得到了每个单词对应的两个向量表征u和v,后续可以根据需要选择如何使用这两个向量。比如:【Stanford CS224N 笔记】lecture 2 Word Vector【Stanford CS224N 笔记】lecture 2 Word Vector【Stanford CS224N 笔记】lecture 2 Word Vector等。

2.1.2 CBOW

中心词作为y,上下文作为X。损失函数为

【Stanford CS224N 笔记】lecture 2 Word Vector

其余均和skip-gram相同,后续的优化我们均以skip-gram为基础。

2.1.3 问题

计算【Stanford CS224N 笔记】lecture 2 Word Vector的时间复杂度正比于W,即词库的大小,训练速度极慢,因此我们需要寻找时间复杂度更低的【Stanford CS224N 笔记】lecture 2 Word Vector。 

2.2 Hierarchical softmax和negative sampling

针对时间复杂度的问题,Mikolov提出了两种优化方案[2],课上没细讲,我们这里简单概述一下思想,细节可参考论文。

2.2.1 Hierarchical Softmax

搭建一个包含V个叶节点的二叉树(怎么搭建有单独的论文讨论,这里我们直接选取huffman树),叶节点分别对应一个单词,非叶节点中包含一个output vector。

下面我们统一符号。设中心词为【Stanford CS224N 笔记】lecture 2 Word Vector,上下文词为【Stanford CS224N 笔记】lecture 2 Word Vector,设【Stanford CS224N 笔记】lecture 2 Word Vector为从根节点到【Stanford CS224N 笔记】lecture 2 Word Vector的路径上的第【Stanford CS224N 笔记】lecture 2 Word Vector个结点,【Stanford CS224N 笔记】lecture 2 Word Vector是路径的长度(即【Stanford CS224N 笔记】lecture 2 Word Vector【Stanford CS224N 笔记】lecture 2 Word Vector)。【Stanford CS224N 笔记】lecture 2 Word Vector是结点【Stanford CS224N 笔记】lecture 2 Word Vector的左孩子,【Stanford CS224N 笔记】lecture 2 Word Vector表示当bool表达式x为true时取值为1,x为false时取值为-1。【Stanford CS224N 笔记】lecture 2 Word Vector表示sigmoid函数。

于是skip-gram的【Stanford CS224N 笔记】lecture 2 Word Vector优化为:

【Stanford CS224N 笔记】lecture 2 Word Vector 

可以看到运算量为【Stanford CS224N 笔记】lecture 2 Word Vector,计算【Stanford CS224N 笔记】lecture 2 Word Vector的平均时间复杂度为【Stanford CS224N 笔记】lecture 2 Word Vector

2.2.2 Negative Sampling

对于每一个中心词【Stanford CS224N 笔记】lecture 2 Word Vector和上下文词【Stanford CS224N 笔记】lecture 2 Word Vector,我们构建k个随机选取的负样本来辅助训练。它的思想是,比起随机选取的词,【Stanford CS224N 笔记】lecture 2 Word Vector更可能出现在【Stanford CS224N 笔记】lecture 2 Word Vector的周围。 

于是skip-gram的【Stanford CS224N 笔记】lecture 2 Word Vector优化为:

【Stanford CS224N 笔记】lecture 2 Word Vector

其中,【Stanford CS224N 笔记】lecture 2 Word Vector正比于【Stanford CS224N 笔记】lecture 2 Word Vector的频率的3/4次方,目的是为了提高低频的单词被选中的概率。

可以看到计算【Stanford CS224N 笔记】lecture 2 Word Vector的平均时间复杂度为【Stanford CS224N 笔记】lecture 2 Word Vector,也就是【Stanford CS224N 笔记】lecture 2 Word Vector

3 research highlight环节[3]

(注:这个系列是教授的学生们轮流介绍前沿的科研成果,每节课会花上5分钟左右的时间。)

参考文献:

[1] Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient estimation of word representations in vector space. ICLR Workshop, 2013.

[2] Mikolov, Tomas. Distributed representations of words and phrases and their compositionality. Advances in Neural Information Processing Systems, 2013.

[3] Sanjeev Arora, Yingyu Liang, and Tengyu Ma. A simple but tough-to-beat baseline for sentence embeddings. International Conference on Learning Representations, 2017.

上一篇:docker的可视化工具


下一篇:Unraid 1 申请试用密钥