Word Embedding的发展和原理简介
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Word Embedding的发展和原理简介相关的知识,希望对你有一定的参考价值。
参考技术A文本处理是NLP领域的一个重要分支,其细分领域又包括文本聚类、分类、机器翻译、人机交互等等,而这一切的前提都是将文本表示成计算机可以理解和易于处理的数据。
经过成千上万年的进化,人类的语言本身变得十分抽象和复杂,要搞懂一段文字,那么要理解词本身的意义、语义关系、上下文关系(苹果好吃/苹果公司),如何将文字用计算机语言表达出来,并尽量减少编码过程中造成的信息损失,一直是一个业界难题和很重要的研究方向。本文总结一下目前热门的 Word Embedding 表示方法的历史和原理,以供参考。
现有的机器学习方法往往无法直接处理文本数据,因此需要找到合适的方法,将文本数据转换为数值型数据,由此引出了 Word Embedding 的概念。如果将 word 看作文本的最小单元,可以将 Word Embedding 理解为一种 映射 ,其过程是:将文本空间中的某个 word ,通过一定的方法, 映射 或者说 嵌入(embedding) 到另一个数值向量空间(之所以称之为 embedding ,是因为这种表示方法往往伴随着一种降维的意思,详见下文的讨论)。
Word Embedding 的输入是原始文本中的一组不重叠的词汇,假设有句子: apple on a apple tree 。那么为了便于处理,我们可以将这些词汇放置到一个 dictionary 里,例如: ["apple", "on", "a", "tree"] ,这个 dictionary 就可以看作是 Word Embedding 的一个输入。
Word Embedding 的输出就是每个 word 的向量表示。对于上文中的原始输入,假设使用最简单的 one hot 编码方式,那么每个 word 都对应了一种数值表示。例如, apple 对应的 vector 就是 [1, 0, 0, 0] , a 对应的 vector 就是 [0, 0, 1, 0] ,各种机器学习应用可以基于这种 word 的数值表示来构建各自的模型。当然,这是一种最简单的映射方法,但却足以阐述 Word Embedding 的意义。下文将介绍常见的 Word Embedding 的方法和优缺点。
Word Embedding 也是有流派的,主流有以下两种:
下面分别介绍之。
基于频率的 Word Embedding 又可细分为如下几种:
其本质都是基于 one-hot 表示法的,以频率为主旨的加权方法改进,下面逐一介绍。
假设有一个语料库 C ,其中有 D 个文档: d1, d2, ..., dD , C 中一共有 N 个 word 。这 N 个 word 构成了原始输入的 dictionary ,我们据此可以生成一个矩阵 M ,其规模是 D X N 。
假设语料库内容如下:
D1: He is a boy.
D2: She is a girl, good girl.
那么可以构建如下 2 × 7 维的矩阵。
该矩阵便是一个 counter vector matrix 。每个文档用词向量的组合来表示,每个词的权重用其出现的次数来表示。
当然,如果语料库十分庞大,那么 dictionary 的规模亦会十分庞大,因此上述矩阵必然是稀疏的,会给后续运算带来很大的麻烦。通常的做法是选取出现次数最频繁的那些词来构建 dictionary (例如,top 10,000个词),这样会有效缩减上述矩阵的规模。
上一小节中,在构建词的权重时,只考虑了词频T F(Term Frequncy) ,也就是词在单个文档中出现的频率。直觉上来看, TF 越大,说明词在本文档中的重要性越高,对应的权重也就越高。这个思路大体上来说是对的,例如,对于一个主题是 Cat 的文档,显然 Cat 这个词汇在本文档中的出现频率会相对高。
但如果我们把视野扩展到整个语料库,会发现,像 is , a 等通用词汇,几乎在每个文档里出现的频率都很高。由此,我们可以得到这样的结论: 对于一个word,如果在特定文档里出现的频率高,而在整个语料库里出现的频率低,那么这个word对于该文档的重要性就比较高 。因此我们可以引入逆文档频率 IDF(Inverse Document Frequency) 的概念: IDF=log(N/n) 。其中, N 代表语料库中文档的总数, n 代表某个 word 在几个文档中出现过;当一个 word 出现地越频繁,那么 IDF 就越小。显然, IDF 用于惩罚那些常用词汇,而 TF 用于奖励那些在特定文档中出现频繁的词汇。二者的乘积 TF X IDF 用来表示词汇的权重,显然合理性大大增强。
举例:
语料库中共有 2 个文档,其中有一个文档名为 d 。
共有 1 个文档出现了 cat 这个词汇;且在特定文档 d 中,共有 8 个词汇, cat 出现了4次。
共有 2 个文档出现了 is 这个词汇;且在特定文档 d 中,共有 8 个词汇, is 出现了4次。
那么根据定义,可以得到:
可见, TFIDF 算法极大地惩罚了 is 这个词汇,从而增加了权重设置的合理性。
本文最开头有所提及,自然语言一大特色是语义和上下文。有如下著名的研究结果: 相似的单词趋向于有相似的上下文(context) 。举例:
男孩和女孩从概念上来说相似,他们也具有相似的上下文。
根据如上思想,我们可以构建一套算法,来实现基于上下文的特征构建。
这里需要引入两个概念:
如上图所示,如果指定 Context Window 大小为 2 ,范围为前后两个 word ,那么对于 such 这个词,它的 Context Window 如上图所示。
假设有如下语料库:
He is not lazy. He is intelligent. He is smart.
如果 Context Window 大小为 2 ,那么可以得到如下的共现矩阵:
我们可以看看 He 和 is 的共现次数 4 是如何计算出来的:
显然地,直接使用共现矩阵,也会存在维数过大的问题,通常可以采取矩阵分解等手段来进行降维优化,在此不做深入讨论。
共现矩阵最大的优势是这种表示方法保留了语义信息,例如,通过这种表示,就可以知道, man 和 woman 是更加接近的,而 man 和 apple 是相对远的。相比前述的两种方法,更具有智能的味道。
从上文2.1.3节中已经得知,词的表示中如果蕴含了上下文信息,那么将会更加接近自然语言的本质;并且,由于相似的词有相似的表示方法,甚至可以进行一些运算,例如: 人类-男人=女人 。但是,上述讨论中,有一个很大的缺陷,那就是词的向量表示维度过大,一个词要用大量其余的词来表示,为后续运算带来了很大的麻烦。因此,我们需要找到一种更好的表示方法,这种方法需要满足如下两点要求:
事实证明,通过神经网络来进行建模,可以满足这两点要求。主流的建模方法又有两种: CBOW 和 Skip – Gram ,下面分别介绍其思想。
CBOW 的全称是 continuous bag of words 。其本质是通过 context 来预测 word 。
接着通过一个浅层神经网络来拟合该结果,如下图所示:
过程简单介绍如下(实际算法会用到哈夫曼编码等降维技巧,这里仅以理解为目的简介基本原理):
如此一来,便得到了既携带上下文信息,又经过压缩的稠密词向量。
Skip-Gram 模型可以认为是 CBOW 的一个网络翻转。 CBOW 建模的出发点是利用 context 预测 word 。 Skip-Gram 模型的目的则是通过 word 来预测 context 。其目的都是为了通过构建一个神经网络模型来获取压缩后的词向量。这里不再详述。
现今流行的 Word Embedding 算法携带了语义信息且维度经过压缩便于运算,因此有了很多用武之地,例如:
本质上来说,经过 Word Embedding 之后,各个 word 就组合成了一个相对低维空间上的一组向量,这些向量之间的远近关系则由他们之间的语义关系决定。
词的表示一直是NLP很活跃的一个领域,本文主要是提供了一个脉络,简介了一下 Word Embedding 的原理。感兴趣的读者可以就每种表示方法进行深入了解,基于各自的优缺点在实践中应用。
以上是关于Word Embedding的发展和原理简介的主要内容,如果未能解决你的问题,请参考以下文章
预训练在自然语言处理的发展: 从Word Embedding到BERT模型