引言
本文是斯坦福大学CS224U:自然语言理解 2019公开课的读书笔记。
共生模型(co-occurrence patterns)下的潜在语义
如下图,假设0代表消极语义,1代表积极语义
假设你知道了这些单词的类别,需要你计算下面这个场景下单词所属类别的概率。
这种情况下是很难计算出来的,但如果给了你下面这种带有两个特性(excellent和terrible)的情况。
就很好计算了,比如单词有很高的terrible值,那么就很有可能是消极的。
学习目标
- 开始思考向量是如何编码语言单位的语义的
- 对向量空间模型(vector-space model,VSM)有一个基础的认识
- 对深度自然语言理解模型有基础的认识
- 在项目中,你可能会用到下面这些表示:
- 理解和对语言和社会现象建模,并
- 作为其他机器学习模型的输入
强大丰富的可选项
如果你想设计一个自然语言理解模型,你的第一个选择是如何设计矩阵。
这里有很多可选范围。比如第一个是单词-文档矩阵。其中行代表某个单词,列代表某个文档,值代表单词出现在文档的次数。
但这些并不是你第一个要考虑的事情,其实在这个之前,你还需要分词、(语料库)标注、词性标注、(句法)分析和特征选择等等。
然后,可能这些矩阵表达语义上面没那么好,你还需要重新设置权重,以加强重要词汇而削弱不重要词汇。
比如比较有名的一种方法是TF-IDF。
PMI(Pointwise Mutual Information),中文叫点互信息,用于衡量两个随机变量的相关性,可用于情感分析中的情感分数计算。
然后,你可能需要做一些降维。
最后,你需要选择向量比较的方法。
汇总起来就是下图所示,每一步你都可以做出各种选择,从而组成你的模型。
矩阵设计
word x word
行和列都是单词,值表示两个单词在附近出现的次数。通常需要制定窗口大小,比如3,那么A单词出现在B单词的左边3个之内,就说A、B两单词是共同出现的。
word x document
在这种表示方法中,每个值表示某个单词在其所属文档中出现的次数。可以看到,该矩阵是十分稀疏的。
word x discourse context
其中的行代表单词,而列代表各种语境:疑问句、感叹句等。
窗口和缩放:什么是共生(co-occurrence)
假设在这个句子中,我们考虑单词“to”,我们设窗口大小为3。
这是,我们可以说“to”的共生单词是在这个窗口范围内的单词。
另外,可能要选择的是如何统计这些共生的次数。
如果采用的是扁平的缩放,即将窗口内的每个单词个数设为1。
另一种有趣的缩放是,
为单词的距离,比如单词“of”距离单词“to”为2。
其数值越大,代表越重要。
向量比较
我们得到了矩阵之后,我们如何比较矩阵中的单词。假设如上图所示,有三个单词A,B,C。
我们说A,B相似,因为y轴的值都大于x轴的值。
我们说B,C相似,因为它们的值都很大;而A的值相对小一些。
或者说,根据它们在坐标轴上的距离,A看起来比较孤单,而B,C更加靠近一点。
所以,选择距离的衡量指标很重要。下面介绍几个常用的指标。
Euclidean
欧几里得距离计算维向量距离公式为:
即向量各维度差值的平方和,再开根号。
通过欧几里得距离可以得到B,C的距离是小于A,B的距离的。
这是一个不错的距离衡量指标,但是用于语言上可能就没那么好了。
可能A代表单词“superb”,B代表单词“good”。都是褒义词,由于superb”很少出现,所以它的值比较小。
而C代表单词“bad”,从出现次数来看,可能和B出现的次数差不多,但是它们的语义相差巨大。
Length normalization(长度归一化)
给定维度的向量
和
,
的L2-length(模)是:
那么的长度归一化结果为:
对之前的矩阵应用长度归一化后的结果为:
此时,A和B就很近了;而B和C就相对远一些。
Cosine distance
维向量
和
之间的余弦距离为:
即1减去这两个向量的余弦相似度。
这是比较常用的一个方法。
分母做的是计算两个向量的相似度,分子考虑了这两个向量的模。相当于做了归一化。
如上图,计算得AB的距离为0.008,而BC的距离为0.065。
下面简要展示一下其他流行的度量指标。
Matching-based methods
这些都是基于匹配系数(matching coefficient)的指标。
KL divergence
KL散度是比较两个分布差异的一种指标。
表示数据的真实分布,
表示数据的理论分布,或是
的近似分布。
KL散度有两个特性:
- 不对称性: 即
- 非负性:结果非负值,即
重赋权
Reweighting
重赋权的目标
- 强调重要的、可靠的、不常见的;同时淡化常见的、异常的。
- 由于没有目标函数,所以目标还是很模糊
- 我们要远离原始计数(raw counts)
- 对每种加权模式思考三个问题
- 它和原始计算比怎么样
- 它和单词频率比怎么样
- 它的值的分布是怎样的
- 我们希望不需要做基于计算的特征选择;也不需要停止词字典。我们希望能有方法能揭露单词的重要性而不要上面这些临时干预。
Normalization
L2正则
给定维度的向量
和
,
的L2-length(模)是:
那么的长度归一化结果为:
概率分布
给定一个维向量
,其中的值都是正数,令
那么的概率分布为:
Observed/Expected
定义共生矩阵某行总和
定义矩阵某列总和
矩阵所有元素总和
期望值
oe值(observed/expected,观测值÷期望值)
如果观测值大于期望值,上式结果大于,我们就要强调它;否则,我们就要淡化它。
下面看一个例子。
PMI
Pointwise Mutual Information(PMI,点互信息),就是 上面的oe值取对数。
这里令
但是PMI有个缺点,如上图,假设有个值是异常值,上面的,经过PMI计算出来后得到一个较大的值。这里的问题是,过分强调了这个很小的值。