词向量消歧综述

词向量

Posted by 徐清华 on June 19, 2018

本文是对词向量消歧各种技术的综述.主要参考的是这篇论文.

  首先,这是一篇非常好的论文,非常全面的概括了词向量消歧方向的各种技术的发展,现状以及未来发展趋势,非常值得一读.下面本文将会根据这篇论文的思路进行介绍.

词的向量表示

  词的向量表示自从有了自然语言处理的方向开始,就是研究人员关注的重点领域之一.这一点是不难想象的,因为作为人类设计的计算工具,计算机只能够识别离散的数据作为输入.从而,如果需要计算机理解人类自然语言,就自然而然的需要将人类的语言转换成离散的形式.而人类的语言词义的最小单位就是单词.所以词向量就应运而生.

1. Vector Space Model

  在早期的发展阶段,最重要的词向量表示方法就是VSM模型.这种模型的主要思路是非常简单的.其要点主要是将每个文本表示为一个向量,向量的每一维度是一个单词.在这种模型的基础上,通过给每一个维度增加权重值,得到的新模型能够在类似于文本分类等问题上得到比较好的效果.(这些权重值通常是和单词出现的频率有关的)

  在后续的发展中,研究人员又提出了基于单词的词向量表示方法.这种方法和上述方法的思想是几乎一致的.其主要特点是将每个单词表示为一个向量,每个单词向量的每个维度代表一个文本.

  总结一下,我们应该能够看出来,VSM算法的成功之处在于考虑了单词的语境,无论是基于文本还是基于单词本身的方法,都是通过稀疏标注的方式进行了语境的描述.这相比one-hot-encoding就是大大大的进步.

  同时VSM算法特点是非常非常鲜明的.优点在于算法过程简单,编写方便,效果还不错.缺点在于单词向量的维度太太太高啦.矩阵因此将会变得非常非常稀疏而且庞大.因此人们在此基础上提出了一些降维的方法.包括Single Value Decomposition(SVD)和以此为基础发展出来的Latent Semantic Analysis(LSA).除此之外,最近的很多技术也都是致力于利用神经网络自动化的生成低纬度的单词向量,这就是单词嵌入技术(Word Embeddings).下文中将会重点介绍.

2 Word Embedding

  正如前文中提到的,词向量的研究目前进入了新阶段,本阶段的主要研究内容是集中在词向量嵌入上的.2013 谷歌的Mikolov开源了word2vec的代码.该模型是由Skip-gram 和Cbow 两种模型组成的.这两种模型在之前的文章中已经有过详细的介绍,在这里就不再赘述.

&esmp;&esmp;在上述算法的基础上,研究人员又提出了Glove算法,将全文信息和语境信息相结合.还有一些更复杂的算法,包括提取单词中字母的信息或者是将每个单词看做一个概率分布,采用混合模型的思路进行分析.

Meaning Conflation Deficiency

  在词向量嵌入方法提出之后,大多数的研究人员终于将目光转向了所有词向量方法与生俱来的一个缺陷--多词义的消失.由于在绝大多数的词向量的表示算法当中,都使用了一个单词向量来表示一个单词.这样的做法在处理多义词的时候是存在问题的.想想一下,单词pious,既有虔诚的,又有伪善的意思.在训练的过程中,虔诚的这一词义出现的时候将会把pious的单词向量向自己的方向拉,而伪善的词义出现的时候将会往反方向拉,这样就导致了最终pious的单词向量处于原点附近?既没有靠近虔诚的,也没有靠近伪善的?这样显然是不对的.那么该如何解决这个问题,就是本文接下来讲述的重点.

  目前学术界为了解决多义消失的问题(meaning conflation)提出了各种各样的模型和方法,其中最主要的可以分为非监督式的仅基于文本的方法和基于外部知识补充的方法.基于非监督式的方法主要包括单语料库和多语料库的方法.而基于知识的则是对几个重要的在线语料库的应用.下面将一一进行讲解.

1. 非监督的模型

非监督的模型主要是对文本的直接应用,这包括是哪个主要研究方向:基于聚类的方法;基于共同训练的方法;基于上下文语境的方法.

1.1 单语料库模型
1.1.1 两段式模型

  两段式模型的提出是在1998年,可以说是非常成熟的模型了.其中心思想是对于一个存在歧义的单词,首先需要收集其出现的各种语境,对这些语境利用EM(期望最大化模型)进行聚类.利用聚类之后的结果,每一类生成一个独特的单词向量.简单易懂.当然啦,这里面有很多可以研究的东西,包括怎么聚类啦,怎么根据聚类结果生成词向量啦等等.这方面的研究一直没有停止过,Huang,Socher,Manninig和Ng在12年还提出过一个相关的模型.(12年也不算最新啦,只不过这篇论文大神多单独拿出来说一下.)

1.1.2 混合训练

  所谓混合训练呢,其实就是在之前的单词嵌入的模型基础上进行修修补补,使得模型能够自动训练出来多词义的向量.这其中尤其以对skip-gram 的修改居多.具体修改的思路是,首先对单词进行划分,多义词要拆成多个向量如pious1,pious2,然后放到模型中进行训练.在训练的过程中需要解决look_up 过程到底找的是哪个词向量,pious1还是pious2.当然,除此之外还有一些别的思路,比如增加主题的信息,对于不同的主题进行不同的词向量标注等.

  讲完了过程,下面来说一下这种模型的缺点.模型的主要缺点包括:1.多义词的多义个数是固定的.这显然是不符合事实的吧.2.对skip-gram 模型的修改的做法存在的问题是认为词的语境是不存在多义的.这种假设显然也是不合逻辑的.为了解决这两个问题,研究人员相应的提出了解决方案,对于第一个问题是通过动态生成新词义的方式解决的.每次遇到一个单词,都要和以前的词义进行比较,如果发现有相似的词义就更新,如果发现和以前的任何一种词义都相差比较大(大于某一个阈值),那么就自动的生成新的词向量.对于第二个问题提出了MUSE的模型进行解决.

1.1.3 上下文词嵌入

  讲道理,本部分将要讲的这种模型才是直观上最合理的模型.我们都知道,单词的歧义与否的信息是完全包含在语境的信息当中的,也就是说如果语境都无法对这个单词的意思进行判别,那么任何方法都是无济于事的.这样的话,我们就要考虑一种新的模型,能够将语境和单词进行结合,生成一个词向量,然后在进行预测的时候,同样可以提取出来语境向量.这样就实现了训练时结合语境,预测时根据语境的效果.这种模型用到了LSTM等深度学习里最火的模型和方法,在这里也不再赘述了.

1.2 多语料库的模型

  多语料库的模型也没什么特别神秘的东西.就是之前利用主题模型啊,聚类模型啊得出来各个单词不同的词义对应的样本.在这里呢,采用的双语或者多语言的方式进行学习.主要的思路是首先对于存在多义的单词,进行翻译,针对翻译之后的对应的不同单词进行聚类.针对聚类的结果进行词向量的学习.

2. 基于知识的语义表述

  基于知识的首先是需要有知识.论文中介绍了很多个语料库都值得注意,包括WordNet,Wikipedia,WikiData,FreeDatabase,DBPedia,BabelNet以及ConceptNet都挺有用,有空了看看.有了知识之后就需要使用知识,使用知识的方式包括知识作为辅助,以及基于知识的两大类,本文接下来将会具体介绍.

2.1 知识辅助的方式

  知识辅助的方式指的是以上述的语料库提供的知识,作为现有的一些模型的辅助和修正的依据和支撑,从而对原来的模型进行一定程度的优化.包括例如对于skip-gram模型的损失函数进行调整,根据wordnet提供的相似词的信息,在每次最小化语境词的损失的同时,还需要最小化相似词的损失.再比如,利用知识对已经训练好的单词向量进行二次处理.通过定义损失函数的方式,使得相似的单词靠的更近(距离更短),从而对单词向量进行小幅度的调整.在在在比如,还有一些方法呢是针对一些特定的任务,包括相似度的比较哇,实体的识别哇等等等.这些任务能够利用一些特定的数据集进行单词向量的学习,而这样的学习可能泛化能力会因此下降,但是却会在特定的任务上保持比较高的成功率.

2.2 基于知识的方式

  完全基于知识的学习方式,这方面的研究也是很多滴.例如在学习的过程中,完全根据文本的单词的定义对单词向量进行初始化.在比如基于语义网络的学习方式.再再比如前文中提到的对单词向量进行二次处理,重新拆分成多个单词向量.

3. 评价标准

  不用说你也知道,一个模型训练的好坏需要一定的评价标准来做出决断.对于单词向量的学习,主要的评价标准有两类.一类是内部的评价标准,包括相似度的比较啊等等,另外一类是外部的评价标准,通过构造下行的应用进行评价.例如分类器等.

4. 未来发展

  路漫漫其修远兮,论文的最后还提出了一些展望.包括常识信息的利用,多语言信息的利用,下行应用的结合(说不定压根不用进行消歧).啦啦啦,差不多就是这个样子了.