在Xinference中使用Rerank模型BAAI/bge-reranker-v2-m3
2024-10-21
在RAG中,Rerank是一种对初步检索到的多个候选文档进行重新评分和排序的技术,确保生成模型基于最相关的文档生成回答。通过Rerank,可以剔除不相关的文档,优化检索结果,提高生成模型的准确性和回答质量。这一步对提升生成结果的相关性和减少无关信息至关重要。
RAG的检索步骤会检索到大量文档,这些文档并不是都与问题相关的,Rerank可以对文档进行重新排序,让更相关的文档排在前面,从而提高RAG的效果。
本文将介绍在Xinference中使用Rerank模型,这里选择的Rerank模型是BAAI/bge-reranker-v2-m3。
BAAI/bge-reranker-v2-m3 #
BAAI/bge-reranker-v2-m3
是轻量级重排序模型,具有强大的多语言能力,易于部署,推理速度快。
部署BAAI/bge-reranker-v2-m3所需的配置:
- 内存>=8G
- 显存>=8G
- 硬盘>=8G
下载模型:
1export HF_ENDPOINT=https://hf-mirror.com
2huggingface-cli download BAAI/bge-reranker-v2-m3
在Xinference中加载模型 #
1xinference launch --model-name bge-reranker-v2-m3 --model-type rerank --model-uid bge-reranker-v2-m3
Xinference中的rerank模型可以通过/v1/rerank
接口来对文档列表进行排序。
1curl -s -X POST http://127.0.0.1:9997/v1/rerank \
2 -H 'accept: application/json' \
3 -H 'Content-Type: application/json' \
4 -d '{
5 "model": "bge-reranker-v2-m3",
6 "query": "一个男人在吃披萨。",
7 "documents": [
8 "一个男人在吃食物。",
9 "一个男人在吃一块面包。",
10 "那个女孩正抱着一个婴儿。",
11 "一个男人正在骑马。",
12 "一个女人正在拉小提琴。"
13 ]
14 }' | jq .
1{
2 "id": "662bbd32-903e-11ef-a357-0242ac110002",
3 "results": [
4 {
5 "index": 0,
6 "relevance_score": 0.9992190599441528,
7 "document": null
8 },
9 {
10 "index": 1,
11 "relevance_score": 0.49892786145210266,
12 "document": null
13 },
14 {
15 "index": 3,
16 "relevance_score": 0.0019025021465495229,
17 "document": null
18 },
19 {
20 "index": 4,
21 "relevance_score": 0.000016797916032373905,
22 "document": null
23 },
24 {
25 "index": 2,
26 "relevance_score": 0.000016389205484301783,
27 "document": null
28 }
29 ],
30 "meta": {
31 "api_version": null,
32 "billed_units": null,
33 "tokens": null,
34 "warnings": null
35 }
36}
return_documents
和top_n
:
1curl -s -X POST http://127.0.0.1:9997/v1/rerank \
2 -H 'accept: application/json' \
3 -H 'Content-Type: application/json' \
4 -d '{
5 "model": "bge-reranker-v2-m3",
6 "query": "一个男人在吃披萨。",
7 "return_documents": true,
8 "top_n": 2,
9 "documents": [
10 "一个男人在吃食物。",
11 "一个男人在吃一块面包。",
12 "那个女孩正抱着一个婴儿。",
13 "一个男人正在骑马。",
14 "一个女人正在拉小提琴。"
15 ]
16 }' | jq .
1{
2 "id": "122f3136-9049-11ef-b3fb-0242ac110002",
3 "results": [
4 {
5 "index": 0,
6 "relevance_score": 0.9992190599441528,
7 "document": {
8 "text": "一个男人在吃食物。"
9 }
10 },
11 {
12 "index": 1,
13 "relevance_score": 0.49892786145210266,
14 "document": {
15 "text": "一个男人在吃一块面包。"
16 }
17 }
18 ],
19 "meta": {
20 "api_version": null,
21 "billed_units": null,
22 "tokens": null,
23 "warnings": null
24 }
25}