在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
下载模型:
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download BAAI/bge-reranker-v2-m3在Xinference中加载模型
xinference launch --model-name bge-reranker-v2-m3 --model-type rerank --model-uid bge-reranker-v2-m3Xinference中的rerank模型可以通过/v1/rerank接口来对文档列表进行排序。
curl -s -X POST http://127.0.0.1:9997/v1/rerank \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "bge-reranker-v2-m3",
"query": "一个男人在吃披萨。",
"documents": [
"一个男人在吃食物。",
"一个男人在吃一块面包。",
"那个女孩正抱着一个婴儿。",
"一个男人正在骑马。",
"一个女人正在拉小提琴。"
]
}' | jq .{
"id": "662bbd32-903e-11ef-a357-0242ac110002",
"results": [
{
"index": 0,
"relevance_score": 0.9992190599441528,
"document": null
},
{
"index": 1,
"relevance_score": 0.49892786145210266,
"document": null
},
{
"index": 3,
"relevance_score": 0.0019025021465495229,
"document": null
},
{
"index": 4,
"relevance_score": 0.000016797916032373905,
"document": null
},
{
"index": 2,
"relevance_score": 0.000016389205484301783,
"document": null
}
],
"meta": {
"api_version": null,
"billed_units": null,
"tokens": null,
"warnings": null
}
}return_documents和top_n:
curl -s -X POST http://127.0.0.1:9997/v1/rerank \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "bge-reranker-v2-m3",
"query": "一个男人在吃披萨。",
"return_documents": true,
"top_n": 2,
"documents": [
"一个男人在吃食物。",
"一个男人在吃一块面包。",
"那个女孩正抱着一个婴儿。",
"一个男人正在骑马。",
"一个女人正在拉小提琴。"
]
}' | jq .{
"id": "122f3136-9049-11ef-b3fb-0242ac110002",
"results": [
{
"index": 0,
"relevance_score": 0.9992190599441528,
"document": {
"text": "一个男人在吃食物。"
}
},
{
"index": 1,
"relevance_score": 0.49892786145210266,
"document": {
"text": "一个男人在吃一块面包。"
}
}
],
"meta": {
"api_version": null,
"billed_units": null,
"tokens": null,
"warnings": null
}
}