INFS7410 Lecture Notes - Week 1

新学期继续挖坑, 这个系列用于整理在信息检索课上所学的知识.
希望这次能够坚持下来不要烂尾.

Words Distribution

  • 单词频率的分布不是平均的, 而是歪斜(skewed)的. 一些词比如"the", "of"会高频出现, 可能会占到一个文档的10%, 而另外的许多单词则不常出现.
  • 假设单词依照出现次数递减的顺序进行排序, 则一个单词的排序rank(r)和它的词频frequency(f)的乘积总是约等于一个常数k. 这被称为Zipf's Law/齐夫定律. 对于英语来说, 这个常数为0.1.

 Tokenizing(标记化)

  • 标记化是划分并对输入字符串的部分进行分类,然后将得到的标记传递给某种其他形式的处理的过程.
  • 如果标记化的方法过于简单, 则会丢失某些信息.
  • 标记化过程(没搞懂, 问问助教):

 Stopping

  • 某些功能性词汇比如冠词(the, a, an, that, etc.), 介词(over, under, etc.)往往不具有任何意思, 因此我们将此类词汇视为停用词(stopwords), 我们可以将其从标记中去除. 
  • 这样做的好处在于能够节省空间, 提升响应时间和效率
  • 但是, 这些功能性词汇在一些组合中却又十分重要, 例如: to be or not to be
  • 为此, 我们可以创建一个停用词表来决定哪些单词可以作为停用词. 这个表可以依据对应领域的相关知识背景齐夫定律进行建立.

Stemming(词干提取)

  • 一些相似的词汇通常会来源于同一个词干, 因此会有相似的意思. Stemmer会尝试减少单词在形态上的变形, 将它们全部归类为一个共同的词干(通常会去掉词缀).

  • 一般来说, 词干提取对于某些语言来说是很重要的. 它会给英语带来5-10%的效率提升, 在阿拉伯语上则会带来50%的提升.

  • 词干提取有两种基本形式:
    1. Dictionary-based: 使用相关单词的列表
    2. Algorithmic: 使用算法来决定有关联的词汇

  • Porter Stemmer
    早期信息检索论中常用的一种词干提取器. 由一系列的规则组成的词干提取器, 用于在每一步移除可能的最长后缀. 产生的是词干而不是词汇, 同时会造成很多无法修改的错误.

  • Krovetz Stemmer
    是一种由算法字典同时进行检查的词干提取器.
    1. 首先, 一个单词会被检查是否在字典内.
    2. 如果存在, 则会被留下, 或者替换为"异常"(?).
    3. 如果不存在, 则会检查这个单词是否有能被移除的后缀. 完成移除后, 会使用字典再进行一遍检查.
    Krovetz Stemmer产生的是词汇而不是词干, 相比较于Porter Stemmer, Krovetz's更有效率. 具有较低的假阳率, 但有更高的假阴率.

Recognising Phrases

  • 如何识别短语? 有如下三种方法
    1. 使用词性标注器(part-of-speech tagger)识别句法短语
    2. 使用N-grams(一种词汇模型)
    3. 在索引中存储单词位置并在查询中使用邻近运算符(procimity operators)
  • POS Tagging使用统计模型来预测词汇的句法标签(syntactic tags of words)

    但是对于大量的文本来说, POS Tagging所需要花费的时间很多.
  • 在N-Grams模型下, 我们总认为短句是n个单词的任意组合. 在实际应用中, 一个长度为n words的窗体会扫描整个文档来识别短句, 步长为一个单词.
    N-Grams模型的效率会比POS Tagging快很多, 但需要用到更多的存储空间.

 Document Structure (&Markup)

  • 文档中不同部分的重要程度是不一样的. 文档解析器(document parser)使用标记(Markup)来对文档的结构进行识别, 例如HTML tags

Indexing Background

以下是搜索排名的一个抽象模型:

  •  首先, 文档需要经过处理, 将文档的成分提出出来(标记化, 词干提取等), 同时还包括一些特质, 例如更新时间等.
  • 其次, 在Rangking Function中, 我们需要定义在这个Query下, 文档的分数怎么计算, 通常会将index terms和quality features都考虑进来. Query quality有时也需要纳入考虑的范围
  • 最后, 我们得到一个文档的分数排名公式:
                                                                           R(Q, D) = \sum_{i}g_{i}(Q)f_{i}(D)
    其中, f(.)g(.)是文档和查询的feature function, R(.)表示的是文档的最终排名. 我们通常只需要考虑g(.)不为0的情况.

 Inverted Index(倒排索引)

这里的"倒排"很容易被误解为从Z-A倒序排列, 但实际上原文中的"Inverted"指的是相对于正常的Indexing, 这种排序的寻找方向是相反的. 
正排索引是从文档角度来找其中的单词, 表示每个文档(用文档ID标识)都含有哪些单词, 以及每个单词出现了多少次(词频)及其出现位置(相对于文档首部的偏移量).所以每次搜索都是遍历所有文章.
倒排索引是从单词角度找文档,标识每个单词分别在那些文档中出现(文档ID), 以及在各自的文档中每个单词分别出现了多少次(词频)及其出现位置(相对于该文档首部的偏移量)

  • 如下例是一个Inverted Index. 假设我们现在需要找到那些包含单词"tropical"的文档, 则通过查询我们可知, 文档1, 2, 3中包含单词"tropical". 那么当我们需要查找词组"tropical fish"呢? 我们只需要找到"tropical"和"fish"的交集便可(也即1, 2, 3).

 Fields

  • 通常我们处理的是半结构化的文档, 也即网页. 因此, 我们希望保留字段信息.
  • 为此, 我们有如下两种方法:
    1. 对于不同的字段信息, 建立不同的倒排索引
    2. 在word posting中添加字段信息
    但这两种方法都有一个缺点, 就是在两个字段附近出现的两个相同的单词, 无法判断是否属于相同的范围
  • 为了解决这个问题, 我们可以给文档标记出范围(extends) 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值