斯坦福大学-自然语言处理入门 笔记 第十八课 排序检索介绍(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

相关文章

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

Python处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

Python使用python-docx实现自动化处理Word文档

《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一