from sentence_transformers import CrossEncoder | |
from transformers import LlamaTokenizer | |
import torch | |
model_name = "OpenBMB/MiniCPM-Reranker-Light" | |
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 = "中国的首都是哪里?" # "Where is the capital of China?" | |
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.017913818359375, 0.0002453327178955078] | |
for ranking in rankings: | |
print(f"Score: {ranking['score']:.4f}, Corpus: {ranking['text']}") | |
# Score: 0.0179, Corpus: beijing | |
# Score: 0.0002, Corpus: shanghai |