词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称,也是实现自然语言处理任务的基础。

目录

传统词向量特征的表示方法

1.one-hot

one-hot的缺点

2.TF-IDF

TF-IDF的缺点

3.词的分布式表示(distributed representation)

目前常用基于分布式的词嵌入方法

1.Word2Vec

CBOW模型

Skip-gram模型

2.Doc2vec

PV-DM(A distributed memory model)

 PV-DBOW(Distributed Bag of Words version of Paragraph Vector)

3.GloVe

4.ELMo

5.BERT

参考文献

一是传统的词向量化表示方法造成了巨大的维度灾难;二是词与词之间的语义关系得不到有效表示。

例如以中文为例,词库中至少包括几千个字,几万个词,将其代入模型时,如果使用onehot编码,则变量有成千上万个维度,参数数量和计算量都非常庞大;且无法计算词间的近似性,无法使用“类比”方法将学到的规则泛化到近义词上,也不利于进一步的迁移学习。然而词嵌入可将词的特征映射到较低的维度,比如用200维特征描述词库中所有的词,使用模型参数更少,训练更快。词嵌入可视为给每个组一个n维的编码,能某一维度可能描述词性,另一维度描述感情色彩;用特征描述取代符号描述,类似于机器视觉中使用深度网络提取图片的基本特征。也便于对比、泛化、以及知识迁移。比如使用大量自然语言数据训练了足够好的词表征,在具体任务中使用少量实例fine-tune和pretrain训练好的词嵌入数据训练模型。模型对于fine-tune训练集中从未出现,但在词嵌入中出现的词也能有很好效果,从而实现知识迁移。除了作为特征提取器,还可通过词嵌入实现运算,比如:男-女=国王-王后,因此可通过国王-男+女的运算得出王后,从而实现一些类比相关的逻辑推理功能等。这种切合实际的需求,为构建能在低维度空间中表示词向量特征的方法提供了动力,这种想法也就催生了基于分布式的词嵌入方法的诞生。

传统词向量特征的表示方法

1.one-hot

NLP 中最直观,也是到目前为止最常用的词向量表示方法是 One-hot Representation,这种方法是把每一个词表示为一个很长的向量。这个向量的维度就是词表(词袋)大小(也常称为词袋模型),其中绝大多数元素为 0,只有一个维度的值为 1,这个维度就代表了当前的词。简单举个栗子说明:

“话筒”表示为 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ...]

“麦克”表示为 [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ...]

每个词都是茫茫 0 海中的一个 1。这种 One-hot Representation 如果采用稀疏方式存储,会是非常的简洁:也就是给每个词分配一个数字 ID。比如刚才的例子中,话筒记为 3,麦克记为 8(假设从 0 开始记)。如果要编程实现的话,用 Hash 表给每个词分配一个编号就可以了。这么简洁的表示方法配合上最大熵、SVM、CRF 等等算法已经很好地完成了 NLP 领域的各种主流任务。

one-hot的缺点

1、向量的维度会随着句子的词的数量类型增大而增大;
2、任意两个词之间都是孤立的,根本无法表示出在语义层面上词语词之间的相关信息,而这一点是致命的。

2.TF-IDF

TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。TF-IDF是一种基于统计学的方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
其主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。其公式如下:

keybert获得词嵌入的公式 词嵌入方法_keybert获得词嵌入的公式

由公式可以看出,TF-IDF方法存在两个部分,一个是词频(Term Frequency),另一个则是逆向文件频率(Inverse Document Frequency)。其相应的数学原理和公式解释如下:

词频(TF)表示词条(关键字)在文本中出现的频率。其公式如下:其中 ni,j 是该词在文件 dj 中出现的次数,分母则是文件 dj 中所有词汇出现的次数总和;

keybert获得词嵌入的公式 词嵌入方法_TF-IDF_02

 

逆向文件频率 (IDF) :某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到。如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。  

keybert获得词嵌入的公式 词嵌入方法_Doc2vec_03

其中,|D| 是语料库中的文件总数 |{j:ti∈dj}| 表示包含词语 ti 的文件数目(即 ni,j≠0 的文件数目)。如果该词语不在语料库中,就会导致分母为零,因此一般情况下使用 1+|{j:ti∈dj}|。翻译为如下表示:

keybert获得词嵌入的公式 词嵌入方法_keybert获得词嵌入的公式_04

TF-IDF的缺点

(1)没有考虑特征词的位置因素对文本的区分度,词条出现在文档的不同位置时,对区分度的贡献大小是不一样的。
(2)按照传统TF-IDF,往往一些生僻词的IDF(反文档频率)会比较高、因此这些生僻词常会被误认为是文档关键词。
(3)传统TF-IDF中的IDF部分只考虑了特征词与它出现的文本数之间的关系,而忽略了特征项在一个类别中不同的类别间的分布情况。
(4)对于文档中出现次数较少的重要人名、地名信息提取效果不佳。

3.词的分布式表示(distributed representation)

  传统的独热表示( one-hot representation)仅仅将词符号化,不包含任何语义信息。如何将语义融入到词表示中?Harris 在 1954 年提出的分布假说( distributional hypothesis)为这一设想提供了理论基础:上下文相似的词,其语义也相似。Firth 在 1957 年对分布假说进行了进一步阐述和明确:词的语义由其上下文决定( a word is characterized by thecompany it keeps)。

到目前为止,基于分布假说的词表示方法,根据建模的不同,主要可以分为三类:
基于矩阵的分布表示、
基于聚类的分布表示
基于神经网络的分布表示。
尽管这些不同的分布表示方法使用了不同的技术手段获取词表示,但由于这些方法均基于分布假说,它们的核心思想也都由两部分组成:
一、选择一种方式描述上下文;
二、选择一种模型刻画某个词(“目标词”)与其上下文之间的关系。

目前常用基于分布式的词嵌入方法

1.Word2Vec

Word2Vec(Word To Vectors)是现在最常用、最流行的词嵌入算法,它由2013年由Mikolov等人在论文[Efficient Estimation of Word Representations in Vector Space]中提出的。通俗的说word2vec模型其实就是简单化的神经网络。该模型的输入是One-Hot Vector(one-hot形式的独热编码),Hidden Layer没有激活函数,也就是线性的单元。Output Layer维度跟Input Layer的维度一样,用的是Softmax回归。当这个模型训练好以后,我们并不会用这个训练好的模型处理新的任务,我们真正需要的而是这个模型通过训练数据所学得的参数,例如隐层的权重矩阵。这个就是我们所要的word  embedding。

Word2Vec一般分为CBOW(Continuous Bag-of-Words 与Skip-Gram两种模型。CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。 Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。下面分别概述两个模型的数学原理。

CBOW模型

其结构如图所示:

keybert获得词嵌入的公式 词嵌入方法_Word2vec_05

①采用C&W模型中的经验,使用一段文本的中间词作为目标词。
②在NNLM基础上做了两点简化:1)CBOW 没有隐藏层,去掉隐藏层之后,模型从神经网络结构直接转化为log 线性结构,与Logistic 回归一致。log 线性结构比三层神经网络结构少了一个矩阵运算,大幅度地提升了模型的训练速度。2)CBOW 去除了上下文各词的词序信息,使用上下文各词词向量的平均值,代替神经网络语言模型使用的上文各词词向量的拼接。即对于一段训练样本wi-(n-1),…,wi,输入为

keybert获得词嵌入的公式 词嵌入方法_keybert获得词嵌入的公式_06

CBOW 模型根据上下文的表示,直接对目标词进行预测:

keybert获得词嵌入的公式 词嵌入方法_TF-IDF_07

对整个语料而言,CBOW优化目标是最大化:

keybert获得词嵌入的公式 词嵌入方法_keybert获得词嵌入的公式_08

Skip-gram模型

keybert获得词嵌入的公式 词嵌入方法_Doc2vec_09

模型结构与CBOW模型一样,不同之处在于,,Skip-gram 模型每次从目标词w 的上下文c中选择一个词,将其词向量作为模型的输入x,也就是上下文的表示。

对整个语料的优化目标为最大化:

keybert获得词嵌入的公式 词嵌入方法_词嵌入特征_10

其中:

keybert获得词嵌入的公式 词嵌入方法_词嵌入特征_11

2.Doc2vec

Doc2vec又叫Paragraph Vector是Tomas Mikolov基于word2vec模型提出的,其具有一些优点,比如不用固定句子长度,接受不同长度的句子做训练样本,Doc2vec是一个无监督学习算法,该算法用于预测一个向量来表示不同的文档,该模型的结构潜在的克服了词袋模型的缺点。

Doc2vec模型是受到了word2vec模型的启发,word2vec里预测词向量时,预测出来的词是含有词义的,比如上文提到的词向量'powerful'会相对于'Paris'离'strong'距离更近,在Doc2vec中也构建了相同的结构。所以Doc2vec克服了词袋模型中没有语义的缺点。假设现在存在训练样本,每个句子是训练样本。和word2vec一样,Doc2vec也有两种训练方式,一种是PV-DM(Distributed Memory Model of paragraphvectors)类似于word2vec中的CBOW模型,另一种是PV-DBOW(Distributed Bag of Words of paragraph vector)类似于word2vec中的skip-gram模型

PV-DM(A distributed memory model)

 训练句向量的方法和词向量的方法非常类似。训练词向量的核心思想就是说可以根据每个单词的上下文预测,也就是说上下文的单词对是有影响的。那么同理,可以用同样的方法训练doc2vec。例如对于一个句子i want to drink water,如果要去预测句子中的单词want,那么不仅可以根据其他单词生成feature, 也可以根据其他单词和句子来生成feature进行预测。因此doc2vec的框架如下所示:

keybert获得词嵌入的公式 词嵌入方法_keybert获得词嵌入的公式_12

在Doc2vec中,每一句话用唯一的向量来表示,用矩阵D的某一列来代表。每一个词也用唯一的向量来表示,用矩阵W的某一列来表示。

每次从一句话中滑动采样固定长度的词,取其中一个词作预测词,其他的作输入词。输入词对应的词向量word vector和本句话对应的句子向量Paragraph vector作为输入层的输入,将本句话的向量和本次采样的词向量相加求平均或者累加构成一个新的向量X,进而使用这个向量X预测此次窗口内的预测词。(预测句子中的下一个单词)

Doc2vec相对于word2vec不同之处在于,在输入层,增添了一个新句子向量Paragraph vector,Paragraph vector可以被看作是另一个词向量,它扮演了一个记忆

每次训练也是滑动截取句子中一小部分词来训练,Paragraph Vector在同一个句子的若干次训练中是共享的,所以同一句话会有多次训练,每次训练中输入都包含Paragraph vector。

它可以被看作是句子的主旨,有了它,该句子的主旨每次都会被放入作为输入的一部分来训练。这样每次训练过程中,不光是训练了词,得到了词向量。同时随着一句话每次滑动取若干词训练的过程中,作为每次训练的输入层一部分的共享Paragraph vector,该向量表达的主旨会越来越准确。

Doc2vec中PV-DM模型具体的训练过程和word2vec中的CBOW模型训练方式相同

 训练完了以后,就会得到训练样本中所有的词向量和每句话对应的句子向量

那么Doc2vec是怎么预测新的句子Paragraph vector呢?其实在预测新的句子的时候,还是会将该Paragraph vector随机初始化,放入模型中再重新根据随机梯度下降不断迭代求得最终稳定下来的句子向量。不过在预测过程中,模型里的词向量还有投影层到输出层的softmax weights参数是不会变的,这样在不断迭代中只会更新Paragraph vector,其他参数均已固定,只需很少的时间就能计算出带预测的Paragraph vector。

总结doc2vec的过程, 主要有两步:

  • 训练模型,在已知的训练数据中得到词向量, softmax的参数和,以及段落向量/句向量
  • 推断过程(inference stage),对于新的段落,得到其向量表达。具体地,在矩阵中添加更多的列,在固定的情况下,利用上述方法进行训练,使用梯度下降的方法得到新的D,从而得到新段落的向量表达

 PV-DBOW(Distributed Bag of Words version of Paragraph Vector)

还有一种训练方法是忽略输入的上下文,让模型去预测段落中的随机一个单词。就是在每次迭代的时候,从文本中采样得到一个窗口,再从这个窗口中随机采样一个单词作为预测任务,让模型去预测,输入就是段落向量。如下所示:

keybert获得词嵌入的公式 词嵌入方法_Doc2vec_13

3.GloVe

GloVe的全称叫Global Vectors for Word Representation,它是一个基于全局词频统计(count-based & overall statistics)的词表征(word representation)工具,它可以把一个单词表达成一个由实数组成的向量,这些向量捕捉到了单词之间一些语义特性,比如相似性(similarity)、类比性(analogy)等。我们通过对向量的运算,比如欧几里得距离或者cosine相似度,可以计算出两个单词之间的语义相似性。

GloVe模型可以解释为如下:

  • 模型目标:进行词的向量化表示,使得向量之间尽可能多地蕴含语义和语法的信息。
  • 输入:语料库
  • 输出:词向量
  • 方法概述:首先基于语料库构建词的共现矩阵,然后基于共现矩阵和GloVe模型学习词向量。

4.ELMo

2018年3月份,ELMo出世,该paper是NAACL18 Best Paper。在之前2013年的word2vec及2014年的GloVe的工作中,每个词对应一个vector,对于多义词无能为力。ELMo的工作对于此,提出了一个较好的解决方案。不同于以往的一个词对应一个向量,是固定的。在ELMo世界里,预训练好的模型不再只是向量对应关系,而是一个训练好的模型。使用时,将一句话或一段话输入模型,模型会根据上线文来推断每个词对应的词向量。这样做之后明显的好处之一就是对于多义词,可以结合前后语境对多义词进行理解。比如appele,可以根据前后文语境理解为公司或水果。其模型结构如图所示。

keybert获得词嵌入的公式 词嵌入方法_Word2vec_14

5.BERT

BERT模型的全称是:BidirectionalEncoder Representations from Transformer。从名字中可以看出,BERT模型的目标是利用大规模无标注语料训练、获得文本的包含丰富语义信息的Representation,即:文本的语义表示,然后将文本的语义表示在特定NLP任务中作微调,最终应用于该NLP任务。BERT模型进一步增加词向量模型泛化能力,充分描述字符级、词级、句子级甚至句间关系特征,真正的双向encoding。BERT将传统大量在下游具体NLP任务中做的操作转移到预训练词向量中,在获得使用BERT词向量后,最终只需在词向量上加简单的MLP或线性分类器即可。其模型结构如图所示。

keybert获得词嵌入的公式 词嵌入方法_词嵌入特征_15

 

参考文献

[1] Devlin J, Chang M W, Lee K, et al. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding[J]. arXiv preprint arXiv:1810.04805, 2018.
[2] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need [C]//Advances in Neural Information Processing Systems. 2017: 5998-6008.
[3] Wilson L Taylor. 1953. cloze procedure: A new tool for measuring readability. Journalism Bulletin, 30(4):415–433.
[4] Alec Radford, Karthik Narasimhan, Tim Salimans, and Ilya Sutskever. 2018. Improving language understanding with unsupervised learning. Technical report, OpenAI.
[5] Matthew Peters, Waleed Ammar, Chandra Bhagavatula, and Russell Power. 2017. Semi-supervised sequence tagging with bidirectional language models. In ACL.
[6] Yonghui Wu, Mike Schuster, Zhifeng Chen, Quoc V Le, Mohammad Norouzi, Wolfgang Macherey, Maxim Krikun, Yuan Cao, Qin Gao, Klaus Macherey, et al. 2016. Google’s neural machine translation system: Bridging the gap between human and machine translation. arXiv:1609.08144.
[7] Wilson L Taylor. 1953. cloze procedure: A new tool for measuring readability. Journalism Bulletin, 30(4):415–433.
[8]http://zh.gluon.ai/chapter_natural-language-processing/word2vec.html
[9]https://www.zhihu.com/search?type=content&q=CBOW
[10]CHURCH, Ward K . Word2Vec[J]. Natural Language Engineering, 2017, 23(01):155-162.
[11]Markov I , Helena Gómez-Adorno, Juan-Pablo Posadas-Durán, et al. Author Profiling with Doc2vec Neural Network-Based Document Embeddings[J]. 2016.
[12]Wu H C , Luk R W P , Wong K F , et al. Interpreting TF-IDF term weights as making relevance decisions[J]. ACM Transactions on Information Systems, 2008, 26(3):55-59.
[13]童超. 词嵌入的若干改进研究[D]. 2016.