Text Retrieval and Search Engines学习笔记(二)
这篇文章是继上一篇Text Retrieval and Search Engines学习笔记(一) 的后续部分,这一篇我们重点介绍如何定义和计算f(q,d)
Text Retrieval Methods
首先,我们得知道如何设计一个排序方法,这里我们可以列举一个好的排序方法都有那些特征或者属性
- 关于Query :q=q1,…,qm, qi $\in$ V
- 关于Document: di=di1,…,dij, dij $\in$ V
- 排序方法: f(q,d)$\in$R (这里表示排序方法的值在实数域,说人话就是可以取任意实数)
- 一个好的排序方法必须将相关的文档排在不相关的文档之前,那么问题来了,我们如何衡量query和document的相关的似然度呢?
- 我们必须给排序模型/方法下一个明确的定义,并且这个定义还是可以明确计算的(说白了就是能够以数学公式的方式定义出来,我们可以通过数学公式计算出相关度) 好消息是,Text Retrieval 这个问题很久之前就已经出现了,前辈们已经给了我们可行的方法,下面我们列举一些召回模型。
- Similarity-based models (基于相似度的模型)): f(q,d)=similarity(q,d) ,最常见的就是我们经常听说的Vector Space Model (空间向量模型)
- Probabilistic models(概率模型): f(d,q)=p(R=1|d,q), 这里的R={0,1} (0表示不相关,1表示相关),这里我们假设查询和文档都是来自随机变量的观察结果,常见的有
1.经典的概率模型(Classic probabilistic model)
2.语言模型(Language model)
3.随机性偏差模型(Divergence-from-randomness model)- Probabilistic interence model (概率推理模型): f(q,d)=p(d->q) ,这类模型的想法是将不确定性与推理规则关联起来,然后我们可以量化某个query我们应该显示的文档的概率。
- Axiomatic model(基于规则的)))): f(q,d) 必须匹配一些列的条件
虽然这些模型的出发点不尽相同,但是这些模型排序方法都类似,并且排序方法中都使用了类似的参数(例如:tf,|d|,df)等
那么问题来了,我们有这么多模型可以选择,到底那个/些模型的效果是最好的?
实际上,当经过一些优化,下面的4中模型的效果是等价的
- Pivoted length normalization
- BM25(Solr的从5.x版本开始将BM25作为默认的排序模型)
- Query likelihood
- PL2
BM25是空间向量模型的一种实现,下面我们就开始介绍Vector Space Model
Vector Space Model
空间向量模型的概念还是非常简单的: 把对文本内容的处理简化为向量空间中的向量运算,并且它以空间上的相似度表达语义的相似度,直观易懂。当文档被表示为文档空间的向量,就可以通过计算向量之间的相似性来度量文档间的相似性。文本处理中最常用的相似性度量方式是余弦距离。
,简单来说Vector Space Model是一个框架,每个term(最基本的概念,例如可以是一个单词或者词组)是一个纬度,query和文档都是有term组成,所以query和文档都可以映射成n维的向量,f(q,d)就是计算query和文档相似度的方法。虽然说这个一个从理论上可行的方法,但是vector Space Model在很多细节上并没有定义清楚,例如
- 如何定义/选择基础概念,因为基础向量是需要正交的
- 如何将文档和query映射到空间中(其实就是如何定义term的权重),因为term在query中的权重表示在这个term在这个query中的重要性,term在文档中的权重刻画了文档的特征
- 如何定义相似度的计算方式
也就是说Vector Space Model这个框架更多是在理论上解决了如果计算文档和query相似度(R,(q,d)),我们需要给出一种实现才能够真正解决我们的实际问题。
Simplest Vector Space Model
- 用Bag of words的方式来放置query和文档的向量
我们可以用{0,1}来构造query/文档向量,简单说就是如果某个term出现在文档中,那么我们用1标识,如果没有出现过,我们就使用0标识。(可以想象,query中向量中会有非常多的0,因为一般而言query比较短,但是文档比较长),这里我们可以令q=(x1,x2,…,xN) ,d=(y1,y2,…,yN),这里的xi,yi $\in$ {0,1}- 使用Dot Product 来计算query和文档的相似度
Sim(q,d)=q*d =xiy1+…+xNyN=$\sum_{i=1}^N$xiyi
举个例子:
Query = “news about presidential campaign“
doc | content |
---|---|
d1 | … news about… |
d2 | … news about organic food campaign… |
d3 | … news of presidential campaign… |
d4 | news of presidential campaign… presidential candidate … |
d5 | news of organic food campaign … campaign … campaign … campaign … |
如果让我们来根据这个query对这5个文档排序的话,一种可能的结果是
d4+, d3+ ,d1- ,d2- d5- (这里的顺序就是表示文档的相似度的排序,+表示正相关,-表示负相关)。
那如果我们使用Simplest Vecotr Model来对文档来打分,结果会怎么样?
Query = “news about presidential campaign“
doc | content |
---|---|
d1 | … news about… |
d3 | … news of presidential campaign |
这里V={news, about, presidential, campaign,food …},那么我们可以通过Bag of words 和Bit Vector 来表示query和文档d1,d3,并且计算对应的similarity (通过下面的例子我们可以看到词袋模型没有按照文章中单词的顺序进行排序,而是根据V中所有的词的顺序来进行赋值的,有就是1,没有就是0))
q=( 1, 1, 1, 1, 0, …)
d1=( 1, 1, 0, 0, 0, …) , f(q,d1)= 1x1+1x1+1x0+1x0+0x0+ .. =2
d3=( 1, 0, 1, 1, 0, …), f(q,d1)=1x1+1x0+1x1+1x1+0x0+ .. =3
按照同样的方法,我们计算出所有文档的分数
doc | content | score |
---|---|---|
d1 | … news about… | f(q,d1)=2 |
d2 | … news about organic food campaign… | f(q,d2)=3 |
d3 | … news of presidential campaign… | f(q,d3)=3 |
d4 | news of presidential campaign… presidential candidate … | f(q,d4)=3 |
d5 | news of organic food campaign … campaign … campaign … campaign … | f(q,d5)=2 |
最终的按照score排序的结果为 (d4,d3,d2) (d1,d5) [因为d4,d3,d2 分数一样,所以部分前后, d1,d5同样如此]],貌似Simplest Vector Model 反映了一些文档和query的相关程度,但是效果没有那么的达到预期。
如果我们仔细会想Bit Vector 就会发现,很多信息在生成query/文档向量的时候已经被丢掉了(例如词频),那么如果我们加上这些信息Simplest Vector Model 是不是会好很多呢? 我们将下一篇详细介绍Vector Space Model