1 背景
1.1 文本数据的向量化
文本数据,和图片数据非常类似,并不能够直接被机器理解,必须要将其建立一个双射,将这些数据转化为数字。比如说,图片可以转化成n*m*1(黑白图片)或者n*m*3(RGB)的三维矩阵。同样的,对于一个文本中出现的每一个单词,我们都要找到其对应的数字化表征,这里我们一般采用向量格式。
数学写法为:设是词库, 我们需要寻找到一个的单射,将文本数据转化为向量格式,以便让数学模型更好地理解。
1.2 传统的离散方法
参考我们在机器学习算法经常使用的OneHot思想,我们将单词映射为一个0-1向量。
考虑,第位是1,其他位是0。显然为单射。这种方式非常的直观,在word2vec等word embedding方法出现前,以离散方式表征的向量为基础,产出了TF-IDF、LDA等非常经典的NLP方法。
但是,存在以下问题:
第一,无法表征词与词之间的关联。例如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,即
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。即给定一个句子,skip-gram的损失函数为
其中
在这个式子中,我们看到,每一个单词分别对应着两个向量input vector和output vector,这就是梯度下降时需要更新的参数,假设有N个单词,向量维度为D,那么该模型的参数个数为2ND。通过梯度下降使损失函数最小化,我们就得到了每个单词对应的两个向量表征u和v,后续可以根据需要选择如何使用这两个向量。比如:,或等。
2.1.2 CBOW
中心词作为y,上下文作为X。损失函数为
其余均和skip-gram相同,后续的优化我们均以skip-gram为基础。
2.1.3 问题
计算的时间复杂度正比于W,即词库的大小,训练速度极慢,因此我们需要寻找时间复杂度更低的。
2.2 Hierarchical softmax和negative sampling
针对时间复杂度的问题,Mikolov提出了两种优化方案[2],课上没细讲,我们这里简单概述一下思想,细节可参考论文。
2.2.1 Hierarchical Softmax
搭建一个包含V个叶节点的二叉树(怎么搭建有单独的论文讨论,这里我们直接选取huffman树),叶节点分别对应一个单词,非叶节点中包含一个output vector。
下面我们统一符号。设中心词为,上下文词为,设为从根节点到的路径上的第个结点,是路径的长度(即,)。是结点的左孩子,表示当bool表达式x为true时取值为1,x为false时取值为-1。表示sigmoid函数。
于是skip-gram的优化为:
可以看到运算量为,计算的平均时间复杂度为。
2.2.2 Negative Sampling
对于每一个中心词和上下文词,我们构建k个随机选取的负样本来辅助训练。它的思想是,比起随机选取的词,更可能出现在的周围。
于是skip-gram的优化为:
其中,正比于的频率的3/4次方,目的是为了提高低频的单词被选中的概率。
可以看到计算的平均时间复杂度为,也就是。
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.