Minicpm Reranker
MiniCPM-重排序器是由面壁智能與清華大學自然語言處理實驗室、東北大學信息檢索小組聯合研發的中英雙語文本重排序模型,具備卓越的中英文及跨語言重排序能力。
下載量 1,104
發布時間 : 9/4/2024
模型概述
基於MiniCPM-2B-sft-bf16架構的雙語重排序模型,支持1024標記的上下文窗口,適用於檢索增強生成(RAG)場景。
模型特點
雙語重排序
同時支持中文和英文文本的精細化重排序
跨語言能力
在中英跨語言檢索場景表現優異
高效架構
採用優化後的24億參數架構,支持flash_attention加速
模型能力
文本相關性評分
跨語言文檔重排序
檢索結果優化
使用案例
信息檢索
醫學問答系統
對醫學問題檢索結果進行相關性重排序
提升精準答案的排名位置
跨語言搜索
中英文混合檢索結果的重排序
MKQA數據集Recall@20達71.73
RAG增強
知識庫檢索優化
與MiniCPM-Embedding和RAG-LoRA配合使用
構建完整RAG解決方案
🚀 MiniCPM-Reranker
MiniCPM-Reranker 是面壁智能與清華大學自然語言處理實驗室(THUNLP)、東北大學信息檢索小組(NEUIR)共同開發的中英雙語言文本重排序模型。它具備出色的中文、英文重排序能力,以及出色的中英跨語言重排序能力,為文本重排序任務提供了強大的支持。
✨ 主要特性
- 具備出色的中文、英文重排序能力。
- 擁有出色的中英跨語言重排序能力。
📦 安裝指南
環境要求
transformers==4.37.2
flash-attn>2.3.5
💻 使用示例
輸入格式
本模型支持指令,輸入格式如下:
<s>Instruction: {{ instruction }} Query: {{ query }}</s>{{ document }}
例如:
<s>Instruction: 為這個醫學問題檢索相關回答。Query: 咽喉癌的成因是什麼?</s>(文檔省略)
<s>Instruction: Given a claim about climate change, retrieve documents that support or refute the claim. Query: However the warming trend is slower than most climate models have forecast.</s>(document omitted)
也可以不提供指令,即採取如下格式:
<s>Query: {{ query }}</s>{{ document }}
我們在BEIR與C-MTEB/Retrieval上測試時使用的指令見 instructions.json
,其他測試不使用指令。
示例腳本
Huggingface Transformers
from transformers import AutoModelForSequenceClassification, AutoTokenizer
import torch
import numpy as np
model_name = "openbmb/MiniCPM-Reranker"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
tokenizer.padding_side = "right"
model = AutoModelForSequenceClassification.from_pretrained(model_name, trust_remote_code=True, torch_dtype=torch.float16).to("cuda")
# You can also use the following code to use flash_attention_2
# model = AutoModelForSequenceClassification.from_pretrained(model_name, trust_remote_code=True,attn_implementation="flash_attention_2", torch_dtype=torch.float16).to("cuda")
model.eval()
@torch.no_grad()
def rerank(input_query, input_docs):
tokenized_inputs = tokenizer([[input_query, input_doc] for input_doc in input_docs], return_tensors="pt", padding=True, truncation=True, max_length=1024)
for k in tokenized_inputs:
tokenized_inputs [k] = tokenized_inputs[k].to("cuda")
outputs = model(**tokenized_inputs)
score = outputs.logits
return score.float().detach().cpu().numpy()
queries = ["中國的首都是哪裡?"]
passages = [["beijing", "shanghai"]]
INSTRUCTION = "Query: "
queries = [INSTRUCTION + query for query in queries]
scores = []
for i in range(len(queries)):
print(queries[i])
scores.append(rerank(queries[i],passages[i]))
print(np.array(scores)) # [[[-4.7460938][-8.8515625]]]
Sentence Transformer
from sentence_transformers import CrossEncoder
import torch
#
model_name = "openbmb/MiniCPM-Reranker"
model = CrossEncoder(model_name,max_length=1024,trust_remote_code=True, automodel_args={"torch_dtype": torch.float16})
# You can also use the following code to use flash_attention_2
#model = CrossEncoder(model_name,max_length=1024,trust_remote_code=True, automodel_args={"attn_implementation":"flash_attention_2","torch_dtype": torch.float16})
model.tokenizer.padding_side = "right"
query = "中國的首都是哪裡?"
passages = [["beijing", "shanghai"]]
INSTRUCTION = "Query: "
query = INSTRUCTION + query
sentence_pairs = [[query, doc] for doc in passages]
scores = model.predict(sentence_pairs, convert_to_tensor=True).tolist()
rankings = model.rank(query, passages, return_documents=True, convert_to_tensor=True)
print(scores) # [0.0087432861328125, 0.00020503997802734375]
for ranking in rankings:
print(f"Score: {ranking['score']:.4f}, Corpus: {ranking['text']}")
# ID: 0, Score: 0.0087, Text: beijing
# ID: 1, Score: 0.0002, Text: shanghai
📚 詳細文檔
模型信息
屬性 | 詳情 |
---|---|
模型類型 | 中英雙語言文本重排序模型 |
訓練數據 | 約 600 萬條,包括開源數據、機造數據、閉源數據 |
模型大小 | 2.4B |
最大輸入token數 | 1024 |
實驗結果
中文與英文重排序結果
中文對bge-large-zh-v1.5
檢索的top-100進行重排,英文對bge-large-en-v1.5
檢索的top-100進行重排。
模型 | C-MTEB/Retrieval (NDCG@10) | BEIR (NDCG@10) |
---|---|---|
bge-large-zh-v1.5(Retriever for Chinese) | 70.46 | - |
bge-large-en-v1.5(Retriever for English) | - | 54.29 |
bge-reranker-v2-m3 | 71.82 | 55.36 |
bge-reranker-v2-minicpm-28 | 73.51 | 59.86 |
bge-reranker-v2-gemma | 71.74 | 60.71 |
bge-reranker-v2.5-gemma2 | - | 63.67 |
MiniCPM-Reranker | 76.79 | 61.32 |
中英跨語言重排序結果
對bge-m3(Dense)檢索的top100進行重排。
模型 | MKQA En-Zh_CN (Recall@20) | NeuCLIR22 (NDCG@10) | NeuCLIR23 (NDCG@10) |
---|---|---|---|
bge-m3 (Dense)(Retriever) | 66.4 | 30.49 | 41.09 |
jina-reranker-v2-base-multilingual | 69.33 | 36.66 | 50.03 |
bge-reranker-v2-m3 | 69.75 | 40.98 | 49.67 |
gte-multilingual-reranker-base | 68.51 | 38.74 | 45.3 |
MiniCPM-Reranker | 71.73 | 43.65 | 50.59 |
🔧 技術細節
MiniCPM-Reranker 基於 MiniCPM-2B-sft-bf16 訓練,結構上採取雙向注意力。採取多階段訓練方式,共使用包括開源數據、機造數據、閉源數據在內的約 600 萬條訓練數據。
📄 許可證
- 本倉庫中代碼依照 Apache-2.0 協議開源。
- MiniCPM-Reranker 模型權重的使用則需要遵循 MiniCPM 模型協議。
- MiniCPM-Reranker 模型權重對學術研究完全開放。如需將模型用於商業用途,請填寫此問卷。
歡迎關注 RAG 套件系列:
- 檢索模型:MiniCPM-Embedding
- 重排模型:MiniCPM-Reranker
- 面向 RAG 場景的 LoRA 插件:MiniCPM3-RAG-LoRA
Phi 2 GGUF
其他
Phi-2是微軟開發的一個小型但強大的語言模型,具有27億參數,專注於高效推理和高質量文本生成。
大型語言模型 支持多種語言
P
TheBloke
41.5M
205
Roberta Large
MIT
基於掩碼語言建模目標預訓練的大型英語語言模型,採用改進的BERT訓練方法
大型語言模型 英語
R
FacebookAI
19.4M
212
Distilbert Base Uncased
Apache-2.0
DistilBERT是BERT基礎模型的蒸餾版本,在保持相近性能的同時更輕量高效,適用於序列分類、標記分類等自然語言處理任務。
大型語言模型 英語
D
distilbert
11.1M
669
Llama 3.1 8B Instruct GGUF
Meta Llama 3.1 8B Instruct 是一個多語言大語言模型,針對多語言對話用例進行了優化,在常見的行業基準測試中表現優異。
大型語言模型 英語
L
modularai
9.7M
4
Xlm Roberta Base
MIT
XLM-RoBERTa是基於100種語言的2.5TB過濾CommonCrawl數據預訓練的多語言模型,採用掩碼語言建模目標進行訓練。
大型語言模型 支持多種語言
X
FacebookAI
9.6M
664
Roberta Base
MIT
基於Transformer架構的英語預訓練模型,通過掩碼語言建模目標在海量文本上訓練,支持文本特徵提取和下游任務微調
大型語言模型 英語
R
FacebookAI
9.3M
488
Opt 125m
其他
OPT是由Meta AI發佈的開放預訓練Transformer語言模型套件,參數量從1.25億到1750億,旨在對標GPT-3系列性能,同時促進大規模語言模型的開放研究。
大型語言模型 英語
O
facebook
6.3M
198
1
基於transformers庫的預訓練模型,適用於多種NLP任務
大型語言模型
Transformers

1
unslothai
6.2M
1
Llama 3.1 8B Instruct
Llama 3.1是Meta推出的多語言大語言模型系列,包含8B、70B和405B參數規模,支持8種語言和代碼生成,優化了多語言對話場景。
大型語言模型
Transformers 支持多種語言

L
meta-llama
5.7M
3,898
T5 Base
Apache-2.0
T5基礎版是由Google開發的文本到文本轉換Transformer模型,參數規模2.2億,支持多語言NLP任務。
大型語言模型 支持多種語言
T
google-t5
5.4M
702
精選推薦AI模型
Llama 3 Typhoon V1.5x 8b Instruct
專為泰語設計的80億參數指令模型,性能媲美GPT-3.5-turbo,優化了應用場景、檢索增強生成、受限生成和推理任務
大型語言模型
Transformers 支持多種語言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一個基於SODA數據集訓練的超小型對話模型,專為邊緣設備推理設計,體積僅為Cosmo-3B模型的2%左右。
對話系統
Transformers 英語

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基於RoBERTa架構的中文抽取式問答模型,適用於從給定文本中提取答案的任務。
問答系統 中文
R
uer
2,694
98