1. 总述
本章主要介绍一下几个问题:
- 给定关键词,如何评定包含这些关键词的文档中哪些更重要,即如何给文档进行相关性排序
- tf-idf算法是什么? 怎样给文档中的词项进行打分?
- 支配了IR界几十年的空间向量模型是什么?他存在什么缺点?
2. 参数索引及域索引
本节以一个简单的例子介绍如何给文档进行排序。
元数据(metadata):一个文档固定有的字段,并且该字段取值范围是有限的,如文档的创建时间,创建者,文档类型等。
文本域(zone): 一个文档的某些字段,并且该字段的取值范围是无限的,如文档标题,摘要,正文等。
参数索引:根据metadata进行的索引,如图书馆中查找作者是 “白洁” 的书。
域索引:根据zone中的内容进行索引,如查找正文中包含 “白洁” 的作品。或者查找标题中包含有 “阿宾” 的书。
域加权评分:显然,不同域中的词项应该具有不同的权重,如标题中包含 “阿宾” 的文档比正文中包含 “阿宾” 的文档具有更大的可能性是读者想检索的。因此,在这里就可以给每个域设置一个权值(假定有L个域),其权值为
{
g
1
,
g
2
,
.
.
.
.
,
g
l
}
\{g_1, g_2, ...., g_l \}
{g1,g2,....,gl},则对于给定关键字,我们可以给一个文档进行评分。其分数为
∑
i
=
1
i
=
l
g
i
∗
s
i
\sum_{i=1}^{i=l} g_i * s_i
∑i=1i=lgi∗si. 其中
s
i
∈
{
0
,
1
}
s_i \in \{0,1\}
si∈{0,1}表示该关键字是否在对应域中。通过这种方式,我们可以给每个文档进行评分。这种检索方式又被成为排序式布尔索引。
3. 词项权重的计算
显然,我们可以更精细化的对文档中包含的词项进行打分,本节介绍通过为文档中的词项赋予权值,来对一个文档进行打分。
词项频率(term frequency): 针对文档而言的表示某词项在某文档中的出现次数,如
t
f
t
,
d
tf_{t, d}
tft,d表示词项t在·文档d中出现的次数。
词袋模型(bag of words): 统计文档中各个词项的次数形成一个词项-次数的对应表,用该表表示原文档。忽略了词项之间的顺序,这就就是词袋模型,相当于把所有词项扔到一个袋子里,没有顺序。
文档频率(document frequency): 为了个每个词项规定一个权值,一个直接的想法是出现次数少的权重高。 如果一个词在所有文档中都出现,那么说明该词对于理解文档语义没有太多帮助,如停用词 “的”,反之则说明其属于某些文档特有的词,可以代表文档的含义。出于这种想法,我们统计文档频率
d
f
t
df_t
dft,其代表语料库中,包含有词项t的文档数。
逆文档频率(inverse document frequence): 很显然,文档频率越高的词项,其权值应该越低。因此我们定义逆文档频率:
i
d
f
t
=
l
o
g
N
d
f
t
idf_t = log{\frac N {df_t}}
idft=logdftN 来代表词项t的权重。
TF-IDF权重:首先将文档D用词袋模型来表示,然后我们可以对该文档进行评分,对于文档D的词项t,其分数为
t
f
t
,
D
∗
i
d
f
t
tf_{t,D} * idf_t
tft,D∗idft, 给定查询Q,假设其包含了L个词
{
q
1
,
q
2
.
.
.
q
l
}
\{q_1,q_2...q_l\}
{q1,q2...ql}, 其对于文档d的评分为:
S
c
o
r
e
(
Q
,
D
)
=
∑
t
=
q
1
q
l
t
f
t
,
D
∗
i
d
f
t
Score(Q, D) = \sum_{t=q_1}^{q_l} tf_{t, D} * idf_t
Score(Q,D)=t=q1∑qltft,D∗idft
即对于将询问中包含的词对于该文档的tf-idf权重求和。该式子有直观的理解: 如果一个词项的idf值高(该此项语义信息丰富),并且他在文档D中出现很多次(该文档的典型词汇),那么该文档的tf-idf分数会较大,反之如果该此项的idf值不高,或者出现次数不多,该文档的tf-idf值会相对小。 但是这个式子只考虑了文档的tf-idf值,对于询问中的每个词都平等的对待,但是显然文档中的词汇也具有不同的重要程度。
4. 空间向量模型(Vector space model)
余弦相似度(cosine similarity): 给定两个向量
v
⃗
(
d
1
)
\vec{v}_{(d1)}
v(d1),
v
⃗
(
d
2
)
\vec{v}_{(d2)}
v(d2), 他们的余弦相似度相当于两者归一化之后单位向量的内积。即:
s
i
m
(
d
1
,
d
2
)
=
v
⃗
(
d
1
)
∣
v
⃗
(
d
1
)
∣
∗
v
⃗
(
d
2
)
∣
v
⃗
(
d
2
)
∣
sim(d_1,d_2) = \frac {\vec{v}_{(d1)}} {|\vec{v}_{(d1)}|} * \frac {\vec{v}_{(d2)}} {|\vec{v}_{(d2)}|}
sim(d1,d2)=∣v(d1)∣v(d1)∗∣v(d2)∣v(d2)
其中,
∣
v
⃗
(
d
1
)
∣
{|\vec{v}_{(d1)}|}
∣v(d1)∣ 表示向量的欧几里得长度: 对于一个M维的向量
{
v
1
(
d
)
,
.
.
.
v
m
(
d
)
}
\{\ v_1(d),...v_m(d)\}
{ v1(d),...vm(d)}而言,其欧几里得长度为
∑
i
=
1
M
v
i
2
(
d
)
\sqrt{ \sum_{i=1}^M v_i^2(d)}
∑i=1Mvi2(d).
向量间的余弦相似度代表着他们之间夹角余弦值的大小。而余弦相似度小也在空间层面上意味着两个向量更加接近。如下图所示:
查询向量与文档向量:我们可以将查询和文档看成两个向量,然后通过计算两者间的余弦相似度来衡量查询Q与文档D之间的相关性。文档或查询向量定义如下: 假设语料库中包含N个词项, 那么文档与查询向量的维数就是N,每一维度对应一个词项。对于某个文档d而言,其向量
v
⃗
(
d
)
\vec v_{(d)}
v(d)的第i维,即代表词项
t
i
t_i
ti,而其第i维的值
v
⃗
(
d
)
[
i
]
=
t
f
t
i
,
d
∗
i
d
f
t
i
\vec v_{(d)}[i] = tf_{t_i,d}*idf_{t_i}
v(d)[i]=tfti,d∗idfti.
根据查询向量给文档评分: 使用查询向量与语料库中待检索文档进行逐一计算余弦相似度,就可以得到每个文档的分数。具体算法如下图:
5. 其他tf-idf权重
对数缩减tf(sublinear tf scaling):
为了防止把一个文档复制20次之后,该文档的重要性比原文档大,因此给tf项加上log,防止增长过快
最大值tf归一化(maximum tf normlization):
其中a为阻尼系数。
SMART系统:
给不同的tf,idf实现方式命名:
回转长度归一化: 为了考虑文档长度而考虑的一种措施。
6. 总结
1.问题:给定关键词,如何评定包含这些关键词的文档中哪些更重要,即如何给文档进行相关性排序
答案:可以使用tf-idf权值构造文档向量和查询向量,通过计算查询向量与文档向量之间的余弦相似度衡量各个文档之间的相关性。
2.问题:tf-idf算法是什么? 怎样给文档中的词项进行打分?
答案:tf即词项频率,描述某词项在某文档中的出现次数。 idf是逆文档频率,即
l
o
g
N
d
f
i
log \frac N {df_i}
logdfiN, 其中
d
f
i
df_i
dfi是词项i的文档频率,描述语料库中包含词项i的文档比例。注意词项频率是在某个文档中统计得到的,而文档频率是在整个语料库中统计得到的
3.问题:支配了IR界几十年的空间向量模型是什么?他存在什么缺点?
答案:即使用查询向量和文档向量来代表查询和文档,并且通过计算向量间的相似度来衡量查询与文档之间的相似度。 主要缺点是:和词袋模型一样,忽略了词项之间的相对顺序,而这一点在语义理解中是非常重要的,如“小明给老王戴帽子”和“老王给小明戴帽子”。这实际上语义信息完全不同的两个句子,但是在空间向量模型中,其向量表示就是一样的。