文档搜索技术:向量搜索、BM25与跨语言搜索
立即解锁
发布时间: 2025-09-03 02:07:25 阅读量: 8 订阅数: 51 AIGC 


MATLAB文本挖掘实战
# 文档搜索技术:向量搜索、BM25 与跨语言搜索
## 1. 向量搜索
向量搜索基于向量空间模型,利用距离和相似度概念定义搜索标准,并为所选文档提供自然的排名机制。
### 1.1 生成 TF - IDF 表示
在进行向量搜索前,需为查询生成 TF - IDF 表示。使用词袋模型 `bowmodel` 可实现这一操作,代码如下:
```matlab
qrytfidfmtx = encode(bowmodel,queries);
```
### 1.2 向量搜索示例
以查询 5 为例,向量搜索的基本思路是计算给定查询与集合中所有文档的余弦相似度,并根据相似度对文档进行排名。
```matlab
qrynum = 5;
vsearch = full(cosineSimilarity(qrytfidfmtx,tfidfmtx));
[~,ranks] = sort(vsearch(qrynum,:),'descend');
```
### 1.3 评估指标计算
由于向量搜索引入了连续的相关性概念,可在不同排名位置计算评估指标,如 precision@n、recall@n 和 F - score@n。以下是计算查询 5 在每个排名位置的三个评估指标的代码:
```matlab
for k=1:ndocs
selected = zeros(ndocs,1);
selected(ranks(1:k)) = 1;
targets = labels==qrylbls(qrynum);
scores(k,:) = getscores(selected,targets);
end
```
### 1.4 评估结果分析
通过绘制分数与排名的曲线,可观察到精度和召回率呈相反趋势,F - score 在排名的中间区域达到最大值。为更好比较向量搜索与二元搜索的优势,对 8 个查询在排名位置 10 处计算评估指标:
```matlab
rankloc = 10;
for k=1:nqrys
[~,ranks] = sort(vsearch(k,:),'descend');
selected = zeros(ndocs,1);
selected(ranks(1:rankloc)) = 1;
targets = labels==qrylbls(k);
scores_v10(k,:) = getscores(selected,targets);
end
v10_averages = mean(scores_v10);
```
结果显示,向量搜索在精度和召回率之间取得了更好的平衡。
### 1.5 查询扩展
查询扩展可从与查询相关的文档集合中提取术语,具有发现新关键词和构建新查询的作用。以查询 5 为例,提取其关键词:
```matlab
qrynum = 5;
[weight,idxs] = sort(qrytfidfmtx(qrynum,:),'descend');
vocab(idxs(weight>0))
```
利用排名前 2 个相关文档和后 100 个不相关文档扩展查询:
```matlab
[~,ranks] = sort(vsearch(qrynum,:),'descend');
mrv = 2;
vplus = sum(tfidfmtx(ranks(1:mrv),:))/mrv;
lrv = 100;
vminus = sum(tfidfmtx(ranks(end - lrv + 1:end),:))/lrv;
a = 0.90;
newqry = qrytfidfmtx(qrynum,:) + a*vplus - (1 - a)*vminus;
newqry = newqry.*(newqry>0);
```
扩展后的查询包含了与原关键词相关的新术语。通过对原查询和扩展查询进行向量搜索实验并比较评估指标,发现查询扩展策略对三个评估指标均有益。
### 1.6 向量搜索流程
```mermaid
graph TD;
A[生成查询的 TF - IDF 表示] --> B[计算查询与文档的余弦相似度];
B --> C[对文档进行排名];
C --> D[在不同排名位置计算评估指标];
D --> E[进行查询扩展];
E --> F[对原查询和扩展查询进行搜索并比较结果];
```
## 2. BM25 排名函数
BM25 排名函数源于概率相关性框架,是文档搜索中最流行的基于 TF - IDF 的检索方法。
### 2.1 BM25 得分公式
BM25 得分公式为:
\[BM(q,d) = \sum_{i} IDF_{BM}(q_i) \times TF_{BM}(q_i,d)\]
其中,\(IDF_{BM}(q_i)\) 和 \(TF_{BM}(q_i,d)\) 的计算公式分别为:
\[IDF_{BM}(q_i) = \ln\left(\frac{N - n(q_i) + 0.5}{n(q_i) + 0.5}+ 1\right)\]
\[TF_{BM}(q_i,d) = \frac{TF(q_i,d) \times (k + 1)}{TF(q_i,d) + k(1 - b + b\
0
0
复制全文
相关推荐










