斯坦福大学-自然语言处理入门 笔记 第十八课 排序检索介绍(ranked retrieval)

本文主要是介绍斯坦福大学-自然语言处理入门 笔记 第十八课 排序检索介绍(ranked retrieval),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、介绍

  • 之前我们的请求都是布尔类型。对于那些明确知道自己的需求并且了解集合体情况的用户而言,布尔类型的请求是很有效的。但是对于大部分的其他用户而言,布尔请求的问题是:大部分用户不熟悉布尔请求;布尔请求比较复杂;布尔请求的结果不是太多就是太少。排序检索应运而生。
  • 排序检索返回的是排序好的文档结果,它可以很好地处理布尔请求以及自由文档请求(free text queries),即自然语言的请求。而我们也不需要担心太多的请求结果会导致我们用户体验不良,我们可以只给出前几名的检索结果。
  • 排名的依据就是分数,设定一个0-1之间的数代表分数,分数度量的是文档和请求的契合程度。一个最简单的分数是:当我们请求是一个项的时候,直接把文档中项出现的次数作为分数的依据,次数越高分数越高。
  • 下面会介绍一些算分的方法。

二、计算分数的方法

1、Jaccard 系数

  • 一个比较常见的度量的两个集合的相似程度的方法是Jaccard 系数,系数范围是0-1,公式是jaccard(A,B) = |A ∩ B| / |A ∪ B|。
    • jaccard(A,A) = 1
    • jaccard(A,B) = 0 if A ∩ B = 0
    • A和B不需要元素数量一致。
  • 一个计算的例子:可以看到Jaccard 系数会比较偏向比较短的文档
    在这里插入图片描述
  • Jaccard系数的问题:
    • 它没有考虑到项的频率(term frequency),也就是在文档中项出现的次数。因为在集合中比较稀有的项含有的信息量比常见的项更多,但是Jaccard系数没有考虑到这个问题。
      • 我们需要更好的方法来对长度进行标准化,在后面的介绍中,我们会使用下面的公式来替代之前的公式。
        在这里插入图片描述

2、项频率权重

  • 项文档计数矩阵:每一列表示一个文档,每一行表示一个单词,每一格表示在这个文档中单词出现的次数。
    在这里插入图片描述
    这种对文档的表现方法会存在一些问题,比如说John is quicker than Mary和Mary is quicker than John表达的意思不同,但是表现出来的矩阵是一样的。在后面的章节中我们会介绍用位置信息来修正这个问题。
  • 但是需要关注的一个问题是,文档和请求的相关性与文档中请求项(term)的出现次数并不是线性相关的,而是一个比线性增长更慢的增长曲线。所以不能直接使用对计数信息,而是需要进行转化。计算方法如下:tf表示在文档d中出现t的次数,w表示修正后的结果。
    在这里插入图片描述而文档的分数就是这些结果之和
    在这里插入图片描述

3、逆文档频率权重

  • 因为在集合中比较稀有的项含有的信息量比常见的项更多。如果一个项在每个文档中都会出现的话,其实这个项就没有什么意义了。所以我们希望能有东西体现项的稀有性,于是出现了文档频率权重。
  • 文档频率权重的计算公式如下:N表示中所有的文档数量,df表示文档中包含t的文档数量。对其取对数是希望降低df量级的影响。这个公式计算出来的指标,对越少见的项越高。
    在这里插入图片描述- 文档频率权重对一个项的请求是无效的,但是对两个及其以上的项的请求可以调整每个项得分的权重。比如对buy insurance,会加重对insurance的权重。
  • 为什么使用文档频率而不是集合体频率?所谓的集合体频率指的是在集合中这个项总的出现的次数。这里存在的问题是有些单词可能在只在几个文档中出现,但是在这些文档中会反复出现;而有些单词会在每篇文档中出现,但是 文档只出现一次。这就和之前的那种单词性质不同,所以使用文档频率不合适。
    在这里插入图片描述

4、tf-idf

  • 将之前我们讨论的项频率权重(tf)和逆文档频率权重 (idf)相乘就可以得到tf-idf权重
  • 这是信息检索领域最为著名的重要度度量,当某个token在单一文档中出现频率越高,就越重要;当某个token在集合体中出现的越少,那么就越重要。
  • 对于一个文档对请求的评分就是这个文档关卡与请求词组的向量的加总。公式如下
    在这里插入图片描述

三、向量空间模型(VSM)

  • 将文档和请求分别看成两个向量,计算两个向量的相似性
  • 计算两个向量的相似性,欧氏距离不是一个好选择。因为当两个向量的长度不同时,它们的距离就会很大。比如下面的请求q是需按照同时含有GOSSIP和JEALOUS的文档,从图上来看d2是和他最相似的,但是欧氏距离上却是最远的。
    在这里插入图片描述
  • 但是当文档和请求相似的时候他们的夹角就会变小的。所以我们可以用文档向量和请求向量之间夹角的大小来给文档进行打分。当夹角为0的时候,相似度是最高的。
  • 因为cosine是在[0,180]单调递减的(如下图),我们可以用cosine来表示相似度。
    在这里插入图片描述- 向量可以用它的长度进行标准化,从而转化成为一个单位向量(unit vector)。这样子的话就可以消除向量的长度带来的影响,长短向量之间就可比了。向量的长度计算就是它的L2范式。
  • 关于相似度的cos计算,公式如下:其中qi表示请求中项i的tf-idf重要性,di表示文档中项i的tf-idf重要性。cosine就是q和d的相似度,也就是q和d的夹角的cosine值。
    在这里插入图片描述如果向量本身是长度标准化的话,cosine相似度就直接是点积,公式见下,其中q和d都是长度标准化的。
    在这里插入图片描述- 一个计算的例子:比较简奥斯丁的三部作品(情感与理智,傲慢与偏见和呼啸山庄)的相似度。第一步是计算对应的tf。
    在这里插入图片描述
    接下来,对tf取对数;然后,进行长度标准化;接下来计算cosine。
    在这里插入图片描述

四、一个计算tf-idf的cosine的例子

  • tf-idf重要性有很多的变种。
    在这里插入图片描述
  • 很多的搜索引擎允许对请求和文档采取不同的重要性计算方法。这些计算方法可以用上表中的首字母缩写表示,形如ddd.qqq前三个字母表示对文档的三个处理方法,后三个表示对请求的三个处理方法。
    • 一个比较标准的重要性计算框架是Inc.ltc。对文档的处理是对数tf,不进行idf,进行cosine标准化。对请求的处理是对数tf,idf,然后进行cosine标准化。
    • 一个具体的Inc.ltc的例子
      在这里插入图片描述
  • 计算cosine得分的代码:这是一个基本的算法,在实际的应用中会有更高效的算法
    在这里插入图片描述

五、搜索引擎评价

  • 搜索引擎是有很多方面的,比如索引多快,搜索多快,对请求的包容度,UI,是否免费等等
  • 但是其中最重要的是用户的幸福程度(happiness),搜索速度和包容广度是一些因素,但是更重要的是度量结果和用户信息需求的相关性
    • 信息需求是被翻译成了请求,但是信息需求不等于请求,比如我们想知道相比于白酒红酒是否可以帮助我们更有效地低于心脏病风险,那么我们的请求可能是:红酒心脏病有效,而不是前面的那句话。所以我们评估的是文档是否针对的是那些信息需求,而不是是否含有请求的项。
  • 评估排序结果
    • 评估需要的材料如下,随后像之前一样计算precision/recall/f值
      • 基准文档集合
      • 一系列基准请求
      • 文档与请求是否相关的判断
    • 如何评估排序结果
      • 系统可能会返回任何数目
      • 通过改变我们取的返回结果的个数(recall的水平),我们可以得到一个precision-recall 曲线。
        在这里插入图片描述
    • 另一种评估方法:Mean average precision(MAP)
      • AP:每检索到一个相关的文档,就对之前所有的文档计算一次precision,然后算所有precision的平均值
      • 一般会使用固定的recall水平,也就是计算前K个检索结果的AP
      • 对一系列请求的MAP就是对每个请求的AP计算算术平均
      • 一个计算AP的例子
        在这里插入图片描述

这篇关于斯坦福大学-自然语言处理入门 笔记 第十八课 排序检索介绍(ranked retrieval)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/292879

相关文章

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(