当前位置: 首页 > news >正文

重排序模型计算两个文本的分数

使用BGE Reranker模型计算文本对相关性:

import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer# 加载预训练模型与分词器(使用BAAI官方发布的reranker模型)
model = AutoModelForSequenceClassification.from_pretrained('BAAI/bge-reranker-large')
tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-reranker-large')
model.eval()  # 设置为推理模式def calculate_rerank_score(query, documents):"""计算查询与多个文档的相关性分数:param query: 查询文本,如:"熊猫是什么":param documents: 候选文档列表,如:["熊猫是熊科动物", "企鹅生活在南极"]:return: 包含分数和文档的排序列表"""# 构造文本对(格式:[[query, doc1], [query, doc2], ...])pairs = [[query, doc] for doc in documents]with torch.no_grad():# 批量编码文本对inputs = tokenizer(pairs,padding=True,truncation=True,return_tensors='pt',max_length=512  )# 获取模型输出outputs = model(**inputs)scores = torch.sigmoid(outputs.logits).squeeze().tolist()  # 将logits转换为0-1概率值# 组合结果并按分数降序排序sorted_results = sorted(zip(documents, scores), key=lambda x: x[1], reverse=True)return sorted_results# 使用示例
if __name__ == "__main__":query = "What is the capital of France?"documents = ["Paris is the most populous city in France","Lyon is a major city in eastern France","The Eiffel Tower is located in Paris"]results = calculate_rerank_score(query, documents)# 打印结果print("Query:", query)for rank, (doc, score) in enumerate(results, 1):print(f"Rank {rank} (Score: {score:.4f}): {doc}")
  • 输出示例:
Query: What is the capital of France?
Rank 1 (Score: 0.9872): Paris is the most populous city in France
Rank 2 (Score: 0.8531): The Eiffel Tower is located in Paris
Rank 3 (Score: 0.1023): Lyon is a major city in eastern France
  • 关键实现细节说明:
    • 模型选择:使用BAAI/bge-reranker-large模型,该模型专门针对查询-文档相关性任务训练,支持中英文混合场景

    • 输入构造:将查询与每个文档组成二维列表,形成(query, doc)对,这种交叉编码方式能捕捉细粒度语义交互

    • 分数计算:通过sigmoid函数将logits转换为0-1的概率值,分数越高表示相关性越强,0.5为判定阈值

    • 批处理优化:通过padding=True和return_tensors='pt’实现批量推理,提升计算效率

http://www.xdnf.cn/news/593137.html

相关文章:

  • CentOS7挂载hgfs文件夹(VMware 共享文件夹)及网卡的自启动。
  • framework 编译技巧
  • 探索微分方程的领域及AI推理
  • 页面置换算法概述
  • WebView2 Win7下部分机器触屏失效的问题
  • electron 控制台打印中文乱码问题
  • Selenium自动化测试入门:cookie 处理
  • 甲骨文云服务器适合做网站吗
  • Intel oneAPI 入门
  • 一、web安全基础入门
  • 通过轻易云实现旺店通与金蝶云星空的退换管理对接
  • 碳计量新突破!安科瑞碳电表赋能企业绿色低碳转型
  • Oracle 创建外部表
  • 车载诊断数据 --- DiagnosticExtract AUTOSAR诊断数据库DEXT
  • BLIP3-o: 全开源多模态统一模型,先理解后生成,详细解读
  • 第六部分:第六节 - TypeScript 与 NestJS:打造类型安全的厨房管理流程
  • 3356. 零数组变换 II
  • Spring Boot 多租户架构实现:基于上下文自动传递的独立资源隔离方案
  • 为什么mosquitto 禁用了 topic “#“后,无法使用主题中包含%c client_id了?
  • python容器
  • PTA刷题笔记
  • 浏览器原生 Web Crypto API 实现 SHA256 Hash 加密
  • 六:操作系统虚拟内容之内存文件映射
  • DeepSeek的进阶应用场景大全
  • poppler_path 是用于 Python 库如 pdf2image 进行 PDF 转换时
  • 《告别单一智能:神经符号混合系统驱动推理能力的跨界融合》
  • 哈希表和容器中添加元素的方法
  • 什么是CDN(Content Delivery Network,内容分发网络)
  • ubunt配置本地源
  • Linux开发板串口终端会限制命令字符数并且循环覆盖