相似度计算常用方法综述【转载+整理】
原文地址:http://stblog.baidu-tech.com/?p=1846
本文来自“百度搜索研发部官方博客”,也不知道是真是假,文笔写得差了点,公式都说不明白,废话一堆一堆的。
本文内容
- 引言
- 向量空间模型
- 基于 hash 方法的相似计算
- 基于主题的相似度计算
- 总结
- 参考文献
1 引言
相似度计算用于衡量对象之间的相似程度,在数据挖掘、自然语言处理中是一个基础性计算。其中的关键技术主要是两个部分,对象的特征表示,特征集合之间的相似关系。在信息检索、网页判重、推荐系统等,都涉及到对象之间或者对象和对象集合的相似度计算。而针对不同的应用场景,受限于数据规模、时空开销等的限制,相似度计算方法的选择又会有所区别和不同。下面章节会针对不同特点的应用,进行一些常用的相似度计算方法进行介绍。
2 向量空间模型
2.1 文档向量
向量空间模型(VSM,Vector Space Model)由 Salton 等人于 20 世纪 70 年代提出,并成功地应用于著名的 SMART 文本检索系统。向量空间模型是应用最广泛的一个基础相似度计算模型。在该模型中,每个对象映射为一个特征向量。对于任一文档 djD,可以把它表示为如下 t 维向量的形式:
其中,向量分量 wtj 代表第 i 个词 ki 在文档 dj 中所具有的权重;t 为系统中词条(标引词)的总数。在布尔模型中,wtj{0, 1};在向量空间模型中,由于采用“部分匹配”策略,wtj
[0, 1],是一个连续实数。检索(判断相似度)前,在一篇文档中会现多个不同的词条(Term),而这些词条对该文档主题的影响能力往往不同。也就是说,每个词应具有权值。如何计算文档向量中每个词条的权值,不仅关系到文档向量的形成,也关系到后续检索的匹配结果。词条权重的计算方法是根据词条出现的频率,一般为 IDF 函数,以及其各种变种。
2.2 提问向量/检索向量
用户信息也会被转换为特征向量,与前边的文档向量,比如搜索引擎把用户检索词条转换成提问向量,即
这样,这两个特征向量(文档向量与提问向量)的相似度,由它们各自向量在 t 维空间的相对位置来决定。
2.3 相似度计算
相似度的度量方法有很多种,主要有内积法(Inner Product)、Dice法(Dice Coefficient)、Jaccard法(Jaccard Coefficient)和余弦法(Cosine Coefficient)。常用的是内积法,公式如下:
其中,QTi 是第 i 个检索项的权值,DTi 是文档中第 i 个词的权值,N 为总的词条数。
当每个向量都通过余弦法进行加权后,则内积法转换为余弦法。余弦法采用的相似度计算指标是两个向量夹角的余弦函数。作为一个应用广泛的模型,向量空间模型在现有的很多应用中仍然起着至关重要的作用,也是很多扩展方法的基础。
2.4 示例
若特征向量记作下面方式,无论是文档向量,还是提问向量:
其中, 为一系列不相同的词条;
为
在 d 中的权重,它是词条出现频率函数,姑且不管它,你可以自己查下资料。
则利用余弦法,它们的相似度为:
或是它们欧式距离的相似度:
那么,根据內积法它们的相似度为 0.86。
3 基于 hash 方法的相似计算
基于 hash 的相似度计算方法,是一种基于概率的高维度数据的维度削减方法,主要用于大规模数据的压缩与实时或者快速计算的场景下。基于 hash 方法的相似度计算经常用于高维度大数据量的情况下,将利用原始信息不可存储与计算问题转化为映射空间的可存储计算问题,在海量文本重复性判断方面,近似文本查询方面有比较多的应用,如 google 网页去重[1],google news 协同过滤[2,3]等都是采用 hash 方法进行近似相似度的计算,比较常见的应用场景 Near-duplicate detection、Image similarity identification、nearest neighbor search,常用的一些方法包括 I-match、Shingling、Locality-Sensitive Hashing 族等方法,下面介绍几种常见的 hash 方法。
3.1 minhash 方法介绍
Minhash 方法是 Locality-sensitive hashing[4,5]算法族里的一个常用方法,基本思想是,对于每一个对象的 itemlist,将输入的 item 进行 hash,相似的 item 具有很高的 hash,被映射到相同的 buckets 里面。尽量保证 hash 后两个对象之间的相似程度与原来是高相似的,而 buckets 的数量是远远小于输入的 item,又降低了复杂度。
Minhash 法用 Jaccard 进行相似度的计算方法,则对于两个集合 ci 和 cj ,ci 和 cj 的相似性计算方法为:
当两个集合越相似,则该值越接近 1,否则越接近 0。用 Minhash 方法,将一个集合映射到 [0-R-1] 之间的值,以相同的概率随机抽取一个 [0-R-1] 的一个排列,依次排列查找第一次出现 1 的行。
设随机排列为 43201(edcab),对于 C1 列,第一次出现 1 的行是 R4,所以 h(C1) = 3,同理有 h(C2)=2,h(C3)=4,h(C4)=3。
通过多次抽取随机排列得到 n 个 Minhash 函数h1,h2,…,hn,依此对每一列都计算 n 个 Minhash 值。对于两个集合,看看 n 个值里面对应相等的比例,即可估计出两集合的 Jaccard 相似度。可以把每个集合的 n 个Minhash 值列为一列,得到一个 n 行 C 列的签名矩阵。因为 n 可远小于 R,在压缩了数据规模后,仍能近似地计算出相似度。
3.2 simhash 方法介绍
simhash 方法是在大文本重复识别常用的一个方法,该方法主要是通过将对象的原始特征集合映射为一个固定长度的签名,将对象之间相似度的度量转化为签名的汉明距离,通过这样的方式,极大限度地进行了降低了计算和存储的消耗。
3.2.1 签名计算过程
该方法通过对输入特征集合的计算步骤可以描述如下:
将一个 f 维的向量 V 初始化为0;f 位的二进制数 S 初始化为 0;
对每一个特征:用传统的 hash 算法对该特征产生一个 f 位的签名 b。对 i=1 到 f:
如果 b 的第 i 位为 1,则 V 的第 i 个元素加上该特征的权重;
否则,V 的第 i 个元素减去该特征的权重。
如果 V 的第 i 个元素大于 0,则 S 的第 i 位为 1,否则为 0;
输出 S 作为签名。
通过上述步骤将输入的表示对象的特征集合转化为该对象的一个签名,在完成签名之后,度量两个对象的相似度的差异即变成了对量二者的指纹的K位的差异情况。
3.2.2 汉明距离查找优化
对于如何快速查找出某一个签名是否与其存在最大差异不超过 K 个 bit 的指纹,Detecting Near-Duplicates for Web Crawling 这篇论文中进行了介绍。该查找方法的基本思想是利用空间换时间的方法,该方法的依据是需要查找的两个指纹的差异很小,这样可以通过将原始指纹进行分块索引,如果两个指纹的差异很小,则合理的分块后,根据鸽笼原理,其中存在一定数量的块是一致的,通过利用相同的块进行相似的指纹的召回,只需要比对召回的块中有差异的块的 bit 差异,这样减少了需要比对的数量,节省了比对的时间开销。
4 基于主题的相似度计算
传统的 BOW(bag-of_words)模型,一般都会建立在特征独立假设的基础上,按照特征向量的匹配情况来度量对象之间的相似度,但在实际应用中,很多时候特征之间存在着很多的关联关系,二者在传统的 BOW 模型中无法解决,在这个基础上,引入了主题的概念,通过主题的思想,建立起基本特征与对象的中间层的关联关系,主题概念的引入,主要是在原有基本特征粒度的基础上,引入了更为丰富的隐含层特征,提高了相似性计算的效果,常用的主题分析方法包括Latent Semantic Analysis (LSA) 、 Probabilitistic Latent Semantic Analysis (PLSA)、Latent Dirichlet Allocation ( LDA)。这些方法在分类、聚类、检索、推荐等领域都有着很多的应用,并取得了较好效果。下面就 LSA 及 PLSA 方法进行简要介绍。
4.1 LSA 简介
LSA[6,7]模型认为特征之间存在某种潜在的关联结构,通过特征-对象矩阵进行统计计算,将高维空间映射到低纬的潜在语义结构上,构建出LSA空间模型,从而提取出潜在的语义结构,并用该结构表示特征和对象,消除了词汇之间的相关性影响,并降低了数据维度。增强了特征的鲁棒性。
LSA利用奇异值分解来进行计算,数学过程可以表述如下:
对于 矩阵A,其中m为特征数,n为样本数。令
,
,
,经过奇异值分解,矩阵A可分解成3个矩阵的乘积:
其中,U、V 是 和
的正交矩阵,分别称为矩阵 A 的奇异值对应的左、右奇异向量,
是
的对角矩阵,称为 A 的奇异标准形,其对角元素为矩阵 A 的奇异值。奇异值按照递减的排列构成对角矩阵
,取
中前 k 个最大奇异值构成
的,取 U 和 V 最前面的 k 列构成
的 Uk 和
的 Vk,构建 A 的k-秩矩阵
。即:
其中,Uk 和 Vk 中的行向量分别作为特征向量和对象向量,k 是降维后的维数。
4.2 PLAS 介绍
PLSA[8,9]模型是由 Hofmann 提出的用于文本检索的概率生成模型,与 LSA 相比,PLSA 是基于概率模型的,并直接引入了潜在 class 变量 ,下面的用文本处理语言来描述该模型。选定一篇文档的概率 p(d),每篇文档以概率 p(z|d) 属于一个主题,而给定一个主题,每一个词以概率 p(w|z) 产生。将这个过程形成联合的概率模型表达式:
则:
在 PLSA 实际的使用过程中,存在着 overfit 风险,一般训练过程是通过 EM 算法,进行模型参数训练,获得 p(z|d)、p(w|z) 概率。PLSA 和其相关的变形,在分类、聚类、检索等方面,特征相关性计算等方面,获得了广泛的应用,并取得了比较好的效果。
4.3 小结
主题方法的引入,在一定程度上弥补了BOW的假设的独立性,在工业中,主题的方法也越来越多的应用到实际的机器学习中,包括在图像处理领域、传统的分类、聚类、检索等方面,都取得了比较好的效果。
总结
相似度的计算在数据挖掘方面有着广泛的应用,根据不同的应用场景,各种方法各有其优劣特点,对于相似度效果的影响,除了方法本身之外,合理有效的特征的选择和使用也是至关重要的,同时,根据应用场景的不同,选择合理的方法,对于解决问题,有着重要的作用。
参考文献
1. G.S. Manku, A. Jain, A.D. Sarma. Detecting Near-Duplicates for Web Crawling. WWW2007, 2007
2. A. Das, M. Datar, A.Garg. Google News Personalization: Scalable Online Collaborative Filtering. WWW2007, 2007
3. http://en.wikipedia.org/wiki/MinHash
4. M. S. Charikar. Similarity estimation techniques from rounding algorithms. STOC’02. 2002
5. http://en.wikipedia.org/wiki/Locality-sensitive_hashing
6. K. Dave, S. Lawrence, and D. Pennock. Mining the peanut gallery: opinion extraction and semantic classification of product reviews. In Proceedings of the 22th International World Wide Web Conference, Budapest, Hungary, 2003
7. http://en.wikipedia.org/wiki/Latent_semantic_analysis
8. T. Hofmann. Probabilistic Latent Semantic Analysis. In Proceedings of the 15th Conference on Uncertainty in AI(1999).
9. Y. M kim, J. F. Pressiot M. R.Amini etc. An Extension of PLSA for Document Clustering. CIKM’08