写在开始之前:语义即联系。
以下部分来自于我在公司内部的分享。
一、相关概念
在学术上,大致有以下三个概念和文本相似度相关:
- Semantic Textual Similarity(文本语义相似度):5分表示非常相似,0分表示非常不相似。
- Paraphrase Identification(复述判定):1表示是复述,0表示不是复述。
- Natural Language Inference(自然语言推断):C表示矛盾,N表示中立,E表示蕴含;这个概念和文本语义相似其实有些出入,但是由于其计算方法和STS以及PI有些相似,故把本概念列出。
当我们在讨论两个短文本是不是相似(或者是不是表达同一个意思),需要做两件事:
- 表征(特征提取):即如何表征短文本;
- 计算:如何基于表征,度量文本之间的关系。
后面,我们从无监督方法和有监督方法两个角度,并围绕“表征”与“计算”两件事展开讨论。
二、一个简单但重要的方法TFIDF
说它简单,因为它是一种简单的词袋模型;
说它重要,因为它很容易和倒排索引结合,正所谓 “天下武功,无坚不摧,唯快不破!”,我会在另一篇博客中专门介绍TFIDF和倒排。
每条短文本都表示成维度为词典大小(V)的向量,对应位置元素的值为当前词的TFIDF值
使用TFIDF做表征,使用COS(余弦)计算。
TFIDF最大的问题是没有考虑词语之间的语义(即词语之间的相互联系,或者词语之间的相似性),其本质是因为这种VSM模型假设句子所在的空间的基是正交(orthogonal)的:
其中V为词典大小,从而:
三、解决TFIDF忽略词语之间语义的一个方法——SoftCosine
SoftCosine的思想是:找到一个非正交的基。
首先,我们需要明确三个概念以及它们之间的关系:
下面两个图很重要!
解释:给定向量,还需要给定一组基,向量才有坐标。向量a还是向量a,但是相对于不同的“基”,向量a的坐标是不同的,分别是(1,2)和(0.9,0.7)。
解释:这里和上图不同,我们只是拿到了坐标,理所当然,给定不同的基,就可以得到不同的向量,可以看出,a,b在不同的(1,2)和(2,1)两个坐标,在不同的基下面,对应不同的向量。
? 算了…我要举例子了:
这个例子当中,有两句话:
a : a player will play a game they like to play
b : they play the game they like
得到字典:
我们用VSM(空间向量模型)把句子a和句子b表示为:
现在还不要把a,b看成两个向量,先把脑袋中默认的正交基忘掉,a,b现在还只是坐标而已。我们现在有坐标了,那么选择不同的基,就可以让这两个坐标展现出不同的角度(即不同的远近关系)。
Softcosine的大致思路如下:
那么,选择什么样的基是好的呢? 答案:最好是两个基向量的余弦距离能够度量对应的两个词语之间的相似性。
这里,要多说一句【隔了一天, 突然不想写了…?】,那就再多说一句。
我们的目标是把原来的基向量(e1,e2,… … ,eV)变换为(e1*,e2*,… … ,eV*)。注意,eV和eV*的维度是相同的,都是V。
假设w1的特征用 f1 (维度为df) 表示,w2的特征用 f2 维度为df)表示,我们希望这个非正交基能满足下面的公式:
cos(e1*,e2*) = S12 = similarity(f1,f2)
在实际工作中,特征f 就是选择的word2vec, glove, fasttext 等等词向量。
其实本来是想记录一下生成方式的sif 和 usif 推导过程,没想到说了很久的旧东西。
先看看一个灰度图片SVD分解之后,把最大奇异值对应的奇异向量抹掉之后,图片的变换,左边是原图,右边是抹掉最大奇异值对应的奇异向量之后,重新合成的结果:
就这样吧~,有空再写…