NLP的核心在于使机器能够理解自然语言(即人类使用的语言)。自然语言处理与普通的数据挖掘问题不同,后者通常处理的是数字或属性特征,而NLP则需要机器理解和解析语言本身的意义,这正是其难点所在。
为了使机器能够理解自然语言,需要将自然语言转换成机器可以识别的形式,即数字矩阵。
当前,NLP中的表示方法主要分为两大类:独热表示和分布式表示。
独热表示不仅应用于NLP,还在其他机器学习领域广泛使用。这种表示方法的基本思路是生成一个长度等于类别数的向量,其中只有一个维度为1,其余维度均为0,该维度表示具体的类别。在NLP中,这通常意味着一个字或词。
例如,对于句子“我是工程师。”,我们可以通过独热表示获得如下向量:
这种表示方法的优势在于简单直观,适合与词袋模型(BOW)和TF-IDF技术结合使用,再配合逻辑回归(LR)算法,可以获得良好的效果。
然而,这种表示方法也存在一些明显的缺点:
分布式表示基于分布假说,根据建模方式的不同,可以分为三类:基于矩阵的分布表示、基于聚类的分布表示和基于神经网络的分布表示。这三种方法在宏观层面上的操作基本相同:
基于矩阵的分布表示是分布式表示的第一种方法。它的核心思想是构建“词—上下文”的共现矩阵,每行代表一个词,每列表示不同的上下文,矩阵中的每个元素表示相关词和上下文共现的次数。
目前,斯坦福大学提出了一种基于“词—词”共现的方法——GloVe。GloVe模型的目标是将词向量化表示,使其尽可能包含语义和语法信息。
构建共现矩阵
矩阵中的每个元素Xij代表单词i和上下文单词j在特定大小的上下文窗口内共同出现的次数。
训练词向量
根据损失函数训练模型,其中vi和vj分别是单词i和单词j的词向量,bi和bj是两个标量(由作者定义的偏差项),f(x)是权重函数,N是词汇表的大小(共现矩阵维度为N×N)。
权重函数应满足两个条件:一是单调递增,二是当词频过高时,权重不应过度增大。作者通过实验确定权重函数为:
(2)基于聚类的分布表示
基于聚类的分布表示通过两个词的公共类别来判断它们的语义相似度。最典型的方法是布朗聚类。
布朗聚类是一种基于二元文法模型(bigram)的层次聚类方法,旨在最大化二元文法模型的互信息。这是一种硬聚类方法,每个词都在且仅在唯一的一个类中。
缺点:只基于二元文法统计。
(3)基于神经网络的分布表示
基于神经网络的分布表示主要有两种模型:Skip-gram和CBOW。这两种模型都可以通过Word2Vec工具实现。
例如,CBOW模型中的“OOXOO”模式,可以用“O”来猜测“X”;而Skip-gram模型则相反,用“X”来猜测“O”。