公式算法
位置索引
positional index 位置索引
考察格式是提供某个单词的索引表,然后给出一个短语句子让你找会在哪个doc里出现。
解法就是查位置,查对应位置关系就好,简单
<friend: 22980;
d1: 1, 6, 10, 16;
d2: 28, 97, 138, 143, 150, 151;
d3: 25, 30, 31, 65, 188, 209;
d4: 4, 34, 119, 121, 159, 177;
d5: 55;
…> 查找a friend in need is a friend indeed
首先friend应该在2及以后的位置,然后应该相距4个值,相减为5即可。所以选d2
向量空间相关
0-1简易
introduction
就是给出一些doc内的语句和查询语句,然后计算对应的cos值
去停词,全取,小写,得vector,得cos。不考虑stemming,不考虑地名等,不考虑去除‘s
TF-IDF
TF-IDF
和0-1一样,只是不用01表示
BM25
公式:
s i m B M 25 ( d j , q ) ∼ ∑ k i ∈ d j ∧ k i ∈ q f i , j × ( 1 + k ) f i , j + k ( ( 1 − b ) + b × l e n ( d j ) a v g _ d o c l e n ) × l o g 2 ( N − n i + 0.5 n i + 0.5 ) sim_{BM25}(d_{j},q)\sim\sum_{k_{i}\in d_{j}\wedge k_{i}\in q}\frac{f_{i,j}\times(1+k)}{f_{i,j}+k\left((1-b)+\frac{b\times len(d_{j})}{avg\_doclen}\right)}\times log_2\left(\frac{N-n_{i}+0.5}{n_{i}+0.5}\right) simBM25(dj,q)∼ki∈dj∧ki∈q∑fi,j+k((1−b)+avg_doclenb×len(dj))fi,j×(1+k)×log2(ni+0.5N−ni+0.5)
P@n,R-precision,MAP。很简单
Single value metric 单值度量 基于RelRet
bpref
更多采取bpref10
NDCG
-
有一个G列表表示收益,各位置对应的值就是rank值
-
有一个CG列表表示累计收益,各位置对应的值就是自己的rank加上上一层的CG值。 C G [ i ] = { G [ 1 ] , i = 1 ; G [ i ] + C G [ i − 1 ] , i > 1 CG[i]=\begin{cases}G[1],&i=1;\\G[i]+CG[i-1],&i>1\end{cases} CG[i]={G[1],G[i]+CG[i−1],i=1;i>1但是有一个弊端,就是CG越累积肯定是越大的,所以越往后越大,但是后面那些相关性不大的因此收获更大的rank,不大好,所以要加一个新list DCG discounted cg
-
DCG的值就是改进后的,第一层的值是本身,以后的值都是自己的值除以log2i加上上一层的DCG。 D C G [ i ] = { G [ 1 ] , i = 1 ; G [ i ] l o g 2 i + D C G [ i − 1 ] , i > 1 DCG[i]=\begin{cases}G[1], & i=1;\\ {\frac{G[i]}{log_2i}}+DCG[i-1], & i>1\end{cases} DCG[i]={G[1],log2iG[i]+DCG[i−1],i=1;i>1
- 考虑了两个因素:相关性(relevance)和排名(position)。DCG 越高,说明系统返回的结果越符合用户的需求。然而,DCG 的值依赖于查询和文档的数量,因此很难在不同查询之间进行比较。
- 相关doc越多,收益越大,越早期的doc贡献越大
- 但是不好比较,最好变成0-1的结果,所以NDCG应运而生
- 但是变成NDCG前,有一个新指标IDCG即理想DCG
-
IDCG的值应该是根据Rel的rank从大到小往后排列,如果Rel的长度小于Ret的话,后面的就补0
例题
序号 | doc | P | bpref | G | CG | DCG | IG | IDCG | NDCG |
---|---|---|---|---|---|---|---|---|---|
1 | d12 | 0 | 0 | 0 | 0 | 3 | 3 | 0 | |
2 | d1 | 0.5 | 1-1/8 | 3 | 3 | 3 | 3 | 6 | 0.5 |
3 | d19 | 0.33 | 0 | 3 | 3 | 3 | 7.89 | 0.38 | |
4 | d15 | 0.25 | 0 | 3 | 3 | 2 | 8.89 | 0.34 | |
5 | d2 | 0.2 | 0 | 3 | 3 | 2 | 9.75 | 0.31 | |
6 | d4 | 0.167 | 0 | 3 | 3 | 2 | 10.53 | 0.28 | |
7 | d8 | 1/7 | 0 | 3 | 3 | 1 | 10.88 | 0.28 | |
8 | d9 | 0.125 | 0 | 3 | 3 | 1 | 11.22 | 0.27 | |
9 | d6 | 0.11 | 0 | 3 | 3 | 0 | 11.22 | 0.27 | |
10 | d14 | 0.1 | 0 | 3 | 3 | 0 | 11.22 | 0.27 | |
11 | d3 | 2/11 | 1-6/8 | 2 | 5 | 3.58 | 0 | 11.22 | 0.32 |
12 | d5 | 0.167 | 0 | 5 | 3.58 | 0 | 11.22 | 0.32 | |
13 | d16 | 3/13 | 1-6/8 | 3 | 8 | 4.39 | 0 | 11.22 | 0.39 |
14 | d18 | 2/7 | 1-6/8 | 1 | 9 | 4.65 | 0 | 11.22 | 0.41 |
15 | d13 | 4/15 | 0 | 9 | 4.65 | 0 | 11.22 | 0.41 | |
16 | d20 | 0.25 | 0 | 9 | 4.65 | 0 | 11.22 | 0.41 | |
17 | d7 | 5/17 | 1-8/8 | 1 | 10 | 4.9 | 0 | 11.22 | 0.44 |
18 | d11 | 0.33 | 1-8/8 | 2 | 12 | 5.38 | 0 | 11.22 | 0.48 |
- precision: 6/18 = 0.33
- recall: 6/8 = 0.75
- R-precision: P@8 = 0.125
- MAP: P@2+P@11+P@13+P@14+P@17+P@18 = 0.2282
- bpref: 1-1/8+1-6/8+1-6/8+1-6/8+1-1+1-1 = 13/8 => 13/64 = 0.203125