当前位置: 首页 > 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’实现批量推理,提升计算效率

相关文章:

  • VS Code中Maven未能正确读取`settings.xml`中配置的新路径
  • 超声仿真乳腺体模的主要声学参数
  • docker容器暴露端口的作用
  • Linux中 I/O 多路复用机制的边缘触发与水平触发
  • 基于ITcpServer/IHttpServer框架的HTTP服务器
  • 如何重新设置网络ip地址?全面解析多种方法
  • Python 数据分析基础
  • leetcode hot100刷题日记——9.矩阵置零
  • 【小乌龙问题】stm32供电,用过的ch340缺无法被识别
  • [安装并使用Milvus_CLI]
  • 开疆智能Profinet转RS485网关连接富士电机配置案例
  • 对Web界面进行简单自动化测试Selenium
  • 基于多目标优化的样本调度适应度函数设计
  • 力扣小题, 力扣113.路径总和II力扣.111二叉树的最小深度 力扣.221最大正方形力扣5.最长回文子串更加优秀的算法:中心扩展算法
  • 获取印度股票市场API
  • Java使用CollectionUtils集合工具类
  • Unity Shader入门(更新中)
  • Lucide:一款精美的开源矢量图标库,前端图标新选择
  • RS485转PROFINET:让废水处理从“人工监控”到“智能管控”​​
  • PyQt学习系列02-模型-视图架构与数据管理
  • flash网站怎么做/百度一下官方网
  • 深圳网站建设工作室/阜新网站seo
  • 公司网站制作平台/友情链接模板
  • 温州网站排名优化/简述网络营销的特点及功能
  • 自适应网站一般做多大尺寸/国内重大新闻十条
  • 动物摄影网站/百度认证证书