1,$TF-IDF$算法

  $TF$是指归一化后的词频,$IDF$是指逆文档频率。给定一个文档集合$D$,有$d_1, d_2, d_3, ......, d_n \in D$。文档集合总共包含$m$个词(注:一般在计算$TF-IDF$时会去除如“的”这一类的停用词),有$w_1, w_2, w_3, ......, w_m \in W$。我们现在以计算词$w_i$在文档$d_j$中的$TF-IDF$指为例。$TF$的计算公式为:

    $ TF = \frac{freq(i, j)} {max_{len}(j)} $

  在这里$freq(i, j)$ 为$w_i$在$d_j$中出现的频率,$max_{len}(j)$为$d_j$长度。

  $TF$只能时描述词在文档中的频率,但假设现在有个词为”我们“,这个词可能在文档集$D$中每篇文档中都会出现,并且有较高的频率。那么这一类词就不具有很好的区分文档的能力,为了降低这种通用词的作用,引入了$IDF$。

  $IDF$的表达式如下:

    $IDF = \log (\frac {len(D)} {n(i)})$

  在这里$len(D)$表示文档集合$D$中文档的总数,$n(i)$表示含有$w_i$这个词的文档的数量。

  得到$TF$和$IDF$之后,我们将这两个值相乘得到$TF-IDF$的值:

    $TF-IDF = TF * IDF$ 

  $TF$可以计算在一篇文档中词出现的频率,而$IDF$可以降低一些通用词的作用。因此对于一篇文档我们可以用文档中每个词的$TF-IDF$组成的向量来表示该文档,再根据余弦相似度这类的方法来计算文档之间的相关性。

2,$BM25$算法

  $BM25$算法通常用来做搜索相关性评分的,也是ES中的搜索算法,通常用来计算$query$和文本集合$D$中每篇文本之间的相关性。我们用$Q$表示$query$,在这里$Q$一般是一个句子。在这里我们要对$Q$进行语素解析(一般是分词),在这里以分词为例,我们对$Q$进行分词,得到$q_1, q_2,......, q_t$这样一个词序列。给定文本$d \in D$,现在以计算$Q$和$d$之间的分数(相关性),其表达式如下:

    $Score(Q, d) = \sum_{i = 1}^t w_i * R(q_i, d)$

    上面式子中$w_i$表示$q_i$的权重,$R(q_i, d)$为$q_i$和$d$的相关性,$Score(Q, d)$就是每个语素$q_i$和$d$的相关性的加权和。

  $w_i$的计算方法有很多,一般是用$IDF$来表示的,但这里的$IDF$计算和上面的有所不同,具体的表达式如下:

    $w_i = IDF(q_i) = \log \frac {N - n(q_i) + 0.5} {n(q_i) + 0.5}$

  上面式子中$N$表示文本集合中文本的总数量,$n(q_i)$表示包含$q_i$这个词的文本的数量,$0.5$主要是做平滑处理。

  $R(q_i, d)$的计算公式如下:

    $R(q_i, d) = \frac {f_i * (k_1 + 1)} {f_i + K} * \frac {qf_i * (k_2 + 1)} {qf_i + k_2}$

  其中

    $K = k_1 * (1 - b + b * \frac {dl} {avg dl})$

  上面式子中$f_i$为$q_i$在文本$d$中出现的频率,$qf_i$为$q_i$在$Q$中出现的频率,$k_1, k_2, b$都是可调节的参数,$dl, avg dl$分别为文本$d$的长度和文本集$D$中所有文本的平均长度。

  一般$qf_i = 1$,取$k_2 = 0$,则可以去除后一项,将上面式子改写成:

    $R(q_i, d) = \frac {f_i * (k_1 + 1)} {f_i + K}$

  通常设置$k_1 = 2, b = 0.75$。参数$b$的作用主要是调节文本长度对相关性的影响。

  

文本相似度 — TF-IDF和BM25算法的更多相关文章

  1. 信息检索中的TF/IDF概念与算法的解释

    https://blog.csdn.net/class_brick/article/details/79135909 概念 TF-IDF(term frequency–inverse document ...

  2. 基于TF/IDF的聚类算法原理

        一.TF/IDF描述单个term与特定document的相关性TF(Term Frequency): 表示一个term与某个document的相关性. 公式为这个term在document中出 ...

  3. Okapi BM25算法

    引言 Okapi BM25,一般简称 BM25 算法,在 20 世纪 70 年代到 80 年代,由英国一批信息检索领域的计算机科学家发明.这里的 BM 是"最佳匹配"(Best M ...

  4. 文本相似度-BM25算法

    BM25 is a bag-of-words retrieval function that ranks a set of documents based on the query terms app ...

  5. .NET下文本相似度算法余弦定理和SimHash浅析及应用

    余弦相似性 原理:首先我们先把两段文本分词,列出来所有单词,其次我们计算每个词语的词频,最后把词语转换为向量,这样我们就只需要计算两个向量的相似程度.   我们简单表述如下   文本1:我/爱/北京/ ...

  6. 文本相似度算法——空间向量模型的余弦算法和TF-IDF

    1.信息检索中的重要发明TF-IDF TF-IDF是一种统计方法,TF-IDF的主要思想是,如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分 ...

  7. Elasticsearch由浅入深(十)搜索引擎:相关度评分 TF&IDF算法、doc value正排索引、解密query、fetch phrase原理、Bouncing Results问题、基于scoll技术滚动搜索大量数据

    相关度评分 TF&IDF算法 Elasticsearch的相关度评分(relevance score)算法采用的是term frequency/inverse document frequen ...

  8. 文本分类学习(三) 特征权重(TF/IDF)和特征提取

    上一篇中,主要说的就是词袋模型.回顾一下,在进行文本分类之前,我们需要把待分类文本先用词袋模型进行文本表示.首先是将训练集中的所有单词经过去停用词之后组合成一个词袋,或者叫做字典,实际上一个维度很大的 ...

  9. 55.TF/IDF算法

    主要知识点: TF/IDF算法介绍 查看es计算_source的过程及各词条的分数 查看一个document是如何被匹配到的         一.算法介绍 relevance score算法,简单来说 ...

随机推荐

  1. Android JS桥交互("Uncaught ReferenceError: xxx is not defined or xxx has no method")

    网上android和js交互的代码有不少,也很容易搜到.最近在做的项目需要用到js桥,遇到了一些问题,记录下来,希望以后遇到能马上解决掉. 一开始我找的demo是从这个:http://blog.csd ...

  2. MIP开发教程(一) MIP-CLI工具安装与环境部署

    依赖安装 安装 MIP-CLI 创建开发文件结构 1. 依赖安装 MIP-CLI 使用 NPM 安装,依赖 node 环境: node 安装-windows node 安装-mac MIP-CLI 开 ...

  3. Quartz+ssm注解方式的最最最最简单使用

    Maven配置 <!-- quartz监控 --> <dependency> <groupId>org.quartz-scheduler</groupId&g ...

  4. 【原创开源】网络版二代双通道示波器开源发布,支持电脑,手机和Pad等各种OS平台访问

    前言感谢大家的支持,提前奉上今年的国庆福利. 一代示波器发布于3年前,去年年底的时候发布了二代示波器,软件性能已经比较强劲,但依然有值得升级改进的地方,经过今年这半年多努力,在二代示波器的基础上再推出 ...

  5. jQuery基础系列

    $(document).ready(function(){ $("p").click(function(){ $(this).hide(); }); }); jQuery 入口函数 ...

  6. Microsoft Power BI 学习笔记

    ​   Power Bi 学习笔记 一   Power BI 是微软发布的一系列的软件服务.应用和连接器,这些软件服务.应用和连接器协同工作,将不相关的数据源转化为合乎逻辑.视觉上逼真的交互式见解. ...

  7. Spring Cloud Eureka 你还在让它裸奔吗??

    前些天栈长在微信公众号Java技术栈分享了 Spring Cloud Eureka 最新版 实现注册中心的实战教程:Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版 ...

  8. ZZCMS v8.2 前台Insert注入+任意文件删除

    前几天看了水泡泡老哥的zzcms的审计,在论坛上一搜发现这个cms有不少洞.听说很适合小白练手,所以来瞅一瞅.不知道我发现的这个洞是不是已经被爆过了,如果雷同,纯属巧合. 一.Insert注入,直接返 ...

  9. 利用SQL Profiler 追踪数据库操作

    SQL Server 事件探查器 是一个界面,用于创建和管理跟踪并分析和重播跟踪结果. 这些事件保存在一个跟踪文件中,稍后试图诊断问题时,可以对该文件进行分析或用它来重播一系列特定的步骤. SQL S ...

  10. 《深入理解Java虚拟机》-----第3章 垃圾收集器与内存分配策略

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来. 3.1 概述 说起垃圾收集(Garbage Collection,GC),大部分人都把这 ...