分享好友 最新动态首页 最新动态分类 切换频道
6.文档相似度分析
2024-12-27 00:25

将尝试分析文档之间的相似度指出。到目前为止,相比已经知道了文档的定义是可以由句子或文本段落组成的文本体。为了分析文档相似度,将使用 utils 模块的 build_feature_matrix() 函数从文档中提取特征。将使用文档的 TF-IDF 相似度对文档进行向量化,在之前的分类文本文档和归纳整个文档时曾使用过该方法。有了各种文档的向量表示之后,将使用几个距离或相似度度量来计算文档之间的相似度。如下度量:

6.文档相似度分析

  • 余弦相似度。
  • 海灵格-巴塔恰亚(Helinger-Bhattacharya)距离。
  • Okapi BM25 排名。

像以往一样,将介绍每个度量背后的概念,其属性表达形式和定义,然后使用 Python 实现它们。还将使用一个包含九个文档的小语料库和一个包含三个文档(也是查询文档)的独立语料库进行测试。对于这三个文档中的每一个,都将尝试从包含九个文档的语料库中找出最相似的文档,小语料库将作为查询索引。可以把这一过程想象成对搜索过程的一个微型模型——当你使用句子进行搜索时,最相关的结果将从搜索引擎的网页索引中返回给你。在用例中,待索引的内容是三个文档,将根据相似度度量返回九个文档中相关文档的索引。

接下来,从加载必要的依赖关系和用来测试各种度量指标的文档语料库开始着手,如下面的代码段所示:

从该代码段可以看出,在语料库索引中有各种各样的文档,设计天空、程序语言和动物。此外,还有三个查询文档,希望根据相似度计算从 toy_corpus 索引中获取与其最相关的文档。在开始介绍度量之前,首先要规范化文档并通过提取 TF-IDF 特征将其向量化,如下代码段所示:

现在,已经完成了文档规范化并使用基于 TF-IDF 的向量表示方式实现了文档向量化,接下来将研究如何计算每个向量的相似度值。

继续使用相同的概念来计算文档的余弦相似度得分,采用基于词袋模型的文档向量,并用 TF-IDF 数值替换词频。在这里,同样只采用一元分词形式,但是也可以在向量化过程中尝试采用二元分词等方式,并将其作为文档特征。对于三个查询文档中的每一个,都将使用 toy_corpus 中的纠葛文档计算其相似度,并返回 n 个最相似的文档,其中 n 为用户输入参数。

将定义一个函数,它的输入是向量化的语料库和需要计算相似度的文档语料库。使用点积运算获得相似度得分,并以倒序的方式对文档进行排序,以获得相似度最高的 n 个文档。下面的函数实现了上述功能:

在该函数中,corpus_features 是位于 toy_corpus 索引中的向量化文档。这些文件将根据与 doc_features 的相似度得分进行抓取,doc_features 代表了属于每个 query_doc 的向量化文档,如下代码段所示:

结果:

由于余弦相似度得分,上面的输出给出了与每个查询文档最相关的两个文档,可以看到输出是符合预期的。关于动物的文档与提及狐狸与狗的文档相似;关于 Python 和 Java 的文档与乞讨这两种程序语言的查询文档相似;美丽的蓝天也确实类似于谈论填空是蓝色而美丽的文档!

还要注意前面输出中的余弦相似度得分,其中 1.0 表示完全相似,0.0 表示不相似,它们之间的分数表示不同的相似度水平(基于得分多少)。例如,最后一个例子中,主要文档向量是['sky','blue','beautiful'], 因为它们都与语料库中的第一个文档匹配,所以获得了 1.0 或 100% 的相似度得分,只有 ['sky', 'blue'] 与第二个最相似的文档匹配,因为得到了 0.70 或 70% 的相似度得分。应该还记得前面的内容里,简单的提及了余弦相似度使用基于词袋的向量,仅仅考虑标识的权重,而不考虑词项的顺序。这在大型文档中是非常可取的,因为相同的内容可能会以不同的方式描绘,所以捕获词语序列可能会导致信息丢失,从而导致不希望看到的误匹配。

建议使用 cikit-learn 的 cosine_similarity() 函数,可以在 sklearn.metrics.pairwise 模块中找到它。它使用类似的逻辑实现以上功能,但是相比之下性能更优,并在大型文档上表现良好。还可以直接使用 gensim.matutils 模块中提供的 gensim 相似度(similarities) 模块或 cossim() 函数。

海灵格-巴塔恰亚(Hellinger-Bhattacharya)距离(HB距离)也称为海灵格距离或巴塔恰亚距离。巴塔恰亚距离有巴塔恰亚(A. Bhattacharya)提取,用于测量两个离散或连续概率分布之间的相似度。海灵格(E. Hellinger)在 1909 年提出了海灵格积分,用于计算海灵格距离。总的来说,海灵格-巴塔恰亚距离是一个 f 散度(f-divergence),f 散度在概率论中定义为函数 Dƒ(P||D),可用于测量 P 和 Q 概率分布之间的差异。有多种 f 散度的实例,包括 KL 散度和 HB 距离。请记住,KL 散度不是一个距离度量,因为它不符合将距离测量值作为度量所需的四个条件。

对于连续和离散的概率分布,均可以计算 HB 距离。在例子中,将会使用基于 TF-IDF 的向量作为文档的概率分布。该分布为离散分布,因为对于特定的特征项有特定的 TF-IDF 值,即数值不连续。海灵格-巴塔恰亚距离的数学定义为:

其中 hdb(u,v) 表示文档向量 u 和 v 之间的海灵格-巴塔恰亚距离,并且它等于向量的平方根差的欧几里得或 L2 范数除以 2 的平方根。考虑到文档向量 u 和 v 是具有 n 个特征的离散量,可以进一步扩展上式为:

其中 u = (u1,u2,...,un) 和 v = (v1,v2,...,vn) 的长度为 n 的文档向量,n 表示有 n 个特征,它们是文档中各类词项的 TF-IDF 权重。与前面的余弦相似度计算类似,以相同的原理建立函数;会将文档向量语料库和单个文档向量作为输入,这些单个文档向量正是我们希望基于 HB 距离从语料库获取 n 个最相似文档的文档向量。如下函数使用 Python 语言实现了上述概念:

从上述实现过程中可以看出,按照得分对文档进行升序排列,因为与余弦相似度不同(其中 1.0 表示完全相似),这里是分布之间的距离度量,得分为 0 表示完全相似,而较高的数值则表示存在一些不相似之处。现在可以将此函数应用于示例语料库计算 HB 距离,可以在如下代码段中看到结果:

结果:

上述输出可以看出,具有较低 HB 距离得分的文档与查询文档更为相似,输出文档结果与使用余弦相似度获得的输出非常相似。请比较结果,并使用更大的语料库验证这些函数!在构建大型的相似度分析系统时,推荐使用在 gensim.matutils 模块(它的逻辑与前述函数相同)中的 hellinger() 函数。

目前,在信息索引和搜索引擎领域中,有几种非常受欢迎的技术,包括 pageRank 和 Okapi BM25 ,缩写词 BM 代表 最佳匹配。这种技术也称为 BM25,但是为了完整起见,将其称为 Okapi BM25,因为最初 BM25 函数的概念只存在于理论上,伦敦城市大学在 20 世纪 80 年代至 90 年代建立了 Okapi 信息检索系统,才真正实现了这种技术,并用来监测现实世界里真实的文件数据。这种技术也称为基于概率相关性的框架或模型,并由 20 世纪 70 年代至 80 年代由记为科学家提出,包括计算机科学家 S • 罗伯森(S. Robertson) 和 K • 琼斯(K. Jones)。有一些函数可以根据不同的因素对文档进行排名,BM25 是其中之一,其较新的变体是 BM25F,其他变体包括 BM15 和 BM25+。

Okapi BM25 的正式定义是采用一个基于词袋的模型,根据用户输入检索相关文档的文档排名和检索函数。该查询本身可以是包含句子或句子集合的文档,也可以只是几个单词。实际上,Okapi BM25 不仅仅是一个函数,而是由一整套评分功能组合在一起构成的一个框架。假设有一个查询文档 QD,其中 QD=(q1,q2,...,qn) 包含 n 个词项或关键字,同时在文档语料库中有一个语料库文档 CD,希望使用相似度得分从中获取与查询文档最相关的文档,正如我们之前所做的那样。那么,可以在数学上定义这两个文档直接的 DM25 得分:

上试中函数 bm25(CD,QD)基于查询文档 QD 计算文档 CD 的 DM 25 排名或得分。函数 idf(qi) 给出了在包含 CD 的语料库(希望从其中检索相关文档的语料库)中的词项 qi 的逆文档频率(IDF)。在前面实现 TF-IDF 特征提取器时计算过 IDF,它的表达式如下:

其中 idf(t) 表示词项 t 的 idf,C 表示语料库中的总文档数,df(t) 表示包含词项 t 的文档数量的频率。实现 idf 还有其他各种各样的方法,但是在这里将使用这种方法,需要说明的是,不同实现方法最终得出的结果是非常相似的。函数 f(qi,CD) 给出了语料库文档 CD 中词频 qi 的频率。|CD| 表示通过字数测量得到的文档 CD 的总长度,avgdl 表示待检索文档的语料库中文档的平均长度。此外,还会观察到有两个自由参数 k1 和 b,k1的取值范围通常为 [1.2, 2.0],b 则通常取 0.75。将在实际执行中将 k1 的值设为 1.5。

通过以下几个步骤来计算文档的 BM25 得分:

  1. 建立一个函数以获得语料库中词项的逆文档频率(IDF)值。
  2. 构建一个计算查询文档和语料库文档的 BM25 得分的函数。
  3. 为语料库文档和查询文档获取基于词袋的特征。
  4. 使用第 1 步中的函数计算语料库文档的平均长度和语料库文档中词项的 IDF 值。
  5. 使用第 2 步中的函数计算 BM25 得分、为相关文档排序为每个查询文档去前 n 个最相关的文档。

从实现一个提取和计算文档语料库中所有词项的逆文档频率的函数开始着手,该函数使用包含词项的词袋特征,然后使用前述公式将其转换为 IDF。如下函数所示:

现在,要实现基于查询文件的、对语料库中所有文档的 BM25 得分进行计算的主要函数,并根据文档的 BM25 得分从语料库中检索前 n 个最相关的文档。以下函数实现了 BM25 评分框架:

函数里的注释十分简单明了,它们解释了函数如何实现 BM25 的评分功能。简单来说,首先计算 BM25 数学表达式中的分子,然后计算其分母。最后,将分子除以分母,获得所有语料库文档的 BM25 得分。最后按降序顺序,并返回前 n 个具有最高 BM25 的分的相关文档。在下面的代码中,将在示例语料库中对函数进行测试,并查看它们对每个查询文档的执行情况:

结果:

现在可以看出,对于每个查询文档,是如何获得与查询文档内容相似的文档的。可以看到该结果与前面测试结果非常相似,当然了,因为它们都是相似度和排名指标,并且预期就会返回类似的结果。请注意,相关文件的 BM25 得分越高,文档越相关。不幸的是,无法再 nltk 或 scikit-learn 中找到任何成熟的、可扩展的  BM25 排名框架实现方法。但是,在 gensim.summarization 包下,gensim 似乎有一个 bm25 模块,如果有兴趣的话,可以尝试一下。

最新文章
成品人网站w灬:提升成品人网站的用户体验与功能,助力创意无限发展!
  W灬主题以其独特的设计风格和丰富的功能,吸引了大量用户。该主题不仅适用于个人博客,还能为企业网站增添专业感。无论是简约大方还是华丽复杂,都能够满足不同需求的用户。  社交分享按钮让内容传播更加便捷,通过简单的一键操作即
捷众科技12月13日获融资买入108.82万元,融资余额514.69万元
12月13日,跌2.61%,成交额3329.31万元。两融数据显示,当日捷众科技获融资买入额108.82万元,融资偿还0.00元,融资净买入108.82万元。截至12月13日,捷众科技融资融券余额合计514.69万元。融资方面,捷众科技当日融资买入108.82万元。当前
阿里携手UC推出神马搜索 移动搜索绝不会一家独大
  4月28日下午,UC公司与阿里巴巴合作共同推出移动搜索引擎“神马”,域名为sm.cn。UC董事长俞永福表示,UC在内部低调做移动搜索已有四年,去年整合阿里“一搜”团队和业务,以及原百度的技术专家团队后,才推出移动搜索业务。刚刚笔者访
跨境电商怎么查看其他店铺关键词?怎么查看其他同行?
在跨境电商的激烈竞争中,了解竞争对手的关键词策略以及发现优秀的同行店铺,是每位电商卖家提升业务、优化产品的重要步骤。今天将详细探讨如何查看其他店铺的关键词以及如何查找其他同行店铺,为跨境电商卖家提供实用的策略。一、跨境电商
超逼真美女写真生成:用AI打造你的AI女友!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个科技飞速发展的时代,人工智能的神奇之处已经渗透到我们生活的方方面面,甚至连美丽的
词令如何将长网址转成口令打开?
词令是一款关键词口令直达工具。打开词令,输入口令,直达该口令关联的目标。网址转成口令后,就可以通过词令,输入口令,打开口令关联的目标网址。口令打开网址体验口令是:vip88,请打开词令App或词令官网,输入口令【 vip88 】,搜索直
逾期通讯录消除攻略:如何有效处理不良记录,恢复信用?
1. 到相关的逾期联系人管理平台或应用。2. 找到逾期联系人的列表,常常这些列表会在“逾期管理”或“联系人管理”等板块中。3. 选中您想要撤销的逾期联系人。4. 点击“编辑”或“管理”按,进 系人的详细信息页面。5. 查找“撤销逾期”或“
长沙十大网络舆情公关公司排名揭晓:为城市形象护航
在当今信息高速传播的时代,网络舆情的影响力日益凸显。长沙,这座充满活力的城市,也有着一批专业的网络舆情公关公司,在维护城市形象和企业声誉方面发挥着重要作用。长沙网络舆情公关公司具备先进的舆情监测技术。他们能够实时监控各类网
超好用:免费好用的图床
经常写文章的小伙伴可能会头疼,图片需要一张一张的上传,费劲也耗时,今天就推荐几款超简单的图床工具。图床就是一个在网络上存储图片的地方,目的是为了节省本地服务器空间,加快图片打开速度。话不多说,进入正题。永久存储免注册,图片
相关文章
推荐文章
发表评论
0评