自然语言处理中传统词向量表示VS深度学习语言模型(一)

        此博客内容是本人在学习自然语言模型中的一些学习和总结,之所以记录下来,也是自己对相关知识的一种巩固,正所谓好记性不如烂笔头。好啦!闲话不多说,开始进入正题!

       随着近几年deep learning 的发展,已在图像、视频、语音、自动驾驶等领域得到了空前的发展和进步,与此同时,在NLP领域,deep learning 的应用也是与日俱增。虽然目前仍然存在着一些诟病和困难,但是不可否认deep learning给NLP领域注入了新的血液,产生了不少的研究成果。

       本文,旨在对NLP领域的词向量问题作一些梳理,首先我们来看看,人类是怎么来理解语言的,以及机器对自然语言的理解应该如何完成?

1  认知语言学

       认知语言学(cognitive linguistics)是认知科学(cognitive science)与语言学交叉的一个研究分支,是研究人脑的思维、心智、智能、推理和认识等认知机理及其对语言进行分析和理解过程的一门学问。人脑处理语言的能力十分强大,可以快速、准确地阅读和理解各种类型的文本,即使文本中含有少量的错误,也不影响正常的理解,而且对语言的理解是增量式的,可以不断地将当前阅读的词汇语义与上文的含义进行整合,形成新的含义,并可在一定程度上推断下文的内容。另外,人脑在语言理解时只利用有限的记忆空间就可处理与当前词汇距离较远的词汇。如何对这些特性进行数学建模和模拟,一直是神经语言学家和计算语言学家关注的问题。

       而语言认知计算模型就是刻画人脑语言认知和理解过程的形式化模型。理想情况下,希望建立可计算的、复杂度可控的数学模型,以便在计算机系统上实现对人脑语言理解过程的模拟。尤其近几年随着人工智能研究的再度兴起,人们在对人脑理解语言的生物过程尚不清楚的情况下,也在尝试通过模拟人脑神经系统的结构和功能,或者借鉴人脑的某些认知行为(记忆、编码、搜索、概念形成、缺省推理、隐喻投射、概念整合等)的表现,或受人脑某些功能和表现的启发,建立实用、有效的自然语言处理模型或方法,实现所谓的“类脑语言信息处理”。    

2 语言表示

2.1 什么是语言表示

       语言表示(language representation),是使用这种“类脑语言信息处理”的模型或方法来对自然处理进行处理的第一步,即如何将字,词,段落等信息转换为机器可以理解的方式进行,是自然语言处理的关键一步。语言表示是对人类语言的一种描述或约定,是认知科学、人工智能等多个领域共同存在的问题。在认知科学里,语言表示是语言在人脑中的表现形式,关系到人类如何理解和产生语言。在人工智能里,语言表示主要指用于语言的形式化或数学的描述,以便在计算机中表示语言,并能让计算机程序自动处理。从人工智能的角度,语言表示的研究内容可以定义为:如何设计一种计算机内部的数据结构来表示语言,以及语言和此数据结构之间的相互转换机制。语言表示是自然语言处理以及语义计算的基础。语言具有一定的层次结构,具体表现为词、短语、句子、段落以及篇章等不同的语言粒度。为了让计算机可以理解语言,需要将不同粒度的语言都转换成计算机可以处理的数据结构。

2.2 符号化的离散表示

     早期的NLP研究中普遍使用的语言表示方法是一种符号化的离散表示。最常用的就是One-Hot Representation,这样的表示方式一般先对一段文本进行分词,去掉一些标点符号和停用词后,得到所有的词汇表,通过hash表给词汇表中的每个词一个编号,这样每一个词就可以表示成固定长度的向量,向量的长度为词汇表的长度,向量的大部分位置上的值为0,当前词汇所在位置上的值为1。例如对于这样一句话,“今天天气不错,大家心情都不错。”首先,进行分词和去除停用词,得到“今天  天气  不错  大家  心情  不错”这样一个结果,进而得到词汇表,{“今天”,“天气”,“不错”,“大家”,“心情”},紧接着对每个词赋予一个id(从0开始),比如今天:0,天气:1,不错:2,大家:3,心情:4,因此,最终“心情”的词汇向量就可以表示为[0,0,0,0,1]。这就是早期的语言表示方式One-Hot Representation。基于这种词的表示,句子或篇章可以通过词袋模型、TF-IDF 模型、N 元模型等方法进行转换。这么简洁的表示方法配合上最大熵、SVM、CRF 等等算法已经很好地完成了 NLP 领域的各种主流任务。
       但是,这种符号化的离散表示方式,明显存在着一个问题,即散失了词语间的语义信息。比如“电脑”和“计算机”被看成是两个不同的词,这和语言的特性并不相符。这样,离散的语言表示需要引入人工知识库,比如同义词词典、上下位词典等,才能有效地进行后续的语义计算。另一个存在的问题是维度灾难问题,因为当词汇表的大小特别大时,比如十几万个时,这样每个词就表示成了一个十几万维的词汇向量,只有该词对应的位置上为1,其余位置都为0,可以说这个向量高维且稀疏,这样也对计算机内存带来巨大的开销,不利于后续任务的进行。
      离散表示无法解决的“多词一义”问题,且容易造成维度灾难,同时这也不符合人类处理语言信息的方式。 脑生理结构和现代认知心理学的研究表明,语言信号中的不同词汇与大脑相应处理区域相对应,信号空间具有相似特征的信号被反映到脑皮质相近区域时,大致保留了信号空间的概率分布特征和拓扑结构特征,即大脑具有自动归类的功能。为了解决这一问题,可以将语言单位表示为连续语义空间中的一个点,这样的表示方法称之为连续表示。基于连续表示,词与词之间就可以通过欧式距离或余弦距离等方式来计算相似度。

2.3 嵌入式的连续表示

      这种连续的表示方式最常用的就是Distributed Representation(分布式表示),Distributed representation 最早由 Hinton在 1986 年提出。它是一种低维实数向量,这种向量一般长成这个样子:

                                            [-0.1223,0.5561,0.7768,-0.2991,...]

       向量的维度一般以50-200维比较常见。当然,向量的维度是可以自己定的。Distributed representation的思想是将语言的潜在语法或语义特征分散式地存储在一组神经元中,可以用稠密、低维、连续的向量来表示,也叫嵌入(Embeddings)。不同的深度学习技术通过不同的神经网络模型来对字、词、短语、句子以及篇章进行建模。除了可以更有效地进行语义计算之外,Distributed representation也可以使特征表示和模型变得更加紧凑。将词语映射到一个新的空间中,并以多维的连续实数向量进行表示叫做“Word Represention或“Word Embedding”。自从21世纪以来,人们逐渐从原始的词向量稀疏表示法过渡到现在的低维空间中的密集表示。用稀疏表示法在解决实际问题时经常会遇到维数灾难,并且语义信息无法表示,无法揭示word之间的潜在联系。而采用低维空间表示法,不但解决了维数灾难问题,并且挖掘了词语之间的关联属性,从而提高了向量语义上的准确度。

       向量之间的距离通常使用欧氏距离或者cos余弦距离进行计算。使用分布式表示,将所有的词语投射到低维的空间中,使得相似语义的词语距离越近,比如“计算机”和“电脑”应该在低维空间中距离应该大于“计算机”和“面包”之间的距离。

3 词向量模型

a)  LSA矩阵分解模型
  采用线性代数中的奇异值分解方法,选取前几个比较大的奇异值所对应的特征向量将原矩阵映射到低维空间中,从而达到词矢量的目的。
b)  PLSA 潜在语义分析概率模型
  从概率学的角度重新审视了矩阵分解模型,并得到一个从统计,概率角度上推导出来的和LSA相当的词矢量模型。
c)  LDA 文档生成模型
  按照文档生成的过程,使用贝叶斯估计统计学方法,将文档用多个主题来表示。LDA不只解决了同义词的问题,还解决了一次多义的问题。目前训练LDA模型的方法有原始论文中的基于EM和 差分贝叶斯方法以及后来出现的Gibbs Samplings 采样算法。
d)  Word2Vec 模型

  最近几年刚刚火起来的算法,通过神经网络机器学习算法来训练N-gram 语言模型,并在训练过程中求出word所对应的vector的方法。

        在接下来的文章中,主要来介绍word2vec模型,以及如何训练自己的word2vec模型,敬请关注。本文是个人第一篇博客,写的不好或者有错误的地方望大家指出,并与本人联系,对NLP感兴趣的同学也可以与本人联系,相互学习。本人邮箱:[email protected]

特别感谢:

1.[Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型

2.中文信息处理发展报告(2016)

3.Deep Learning in NLP (一)词向量和语言模型



       

猜你喜欢

转载自blog.csdn.net/ruantao1207/article/details/80564983