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

FastGPT 引申:Rerank 函数调用实例

文章目录

    • FastGPT 引申:Rerank 函数调用实例
      • 函数调用
      • 预期结果
      • 总结分析

FastGPT 引申:Rerank 函数调用实例

下边是一个完整的函数调用实例,包括具体的输入参数和输出结果。

函数调用

from typing import List, Dict
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer

class BGEReranker:
    def __init__(self):
        self.model_name = "BAAI/bge-reranker-base"
        self.tokenizer = AutoTokenizer.from_pretrained(self.model_name)
        self.model = AutoModelForSequenceClassification.from_pretrained(self.model_name)
        self.model.eval()

    def rerank(self, query: str, documents: List[Dict]) -> List[Dict]:
        results = []
        
        for doc in documents:
            inputs = self.tokenizer(
                text=[query],
                text_pair=[doc['text']],
                padding=True,
                truncation=True,
                max_length=512,
                return_tensors="pt"
            )
            
            with torch.no_grad():
                scores = self.model(**inputs).logits.flatten()
                
            results.append({
                "id": doc["id"],
                "text": doc["text"],
                "score": float(scores[0])
            })
            
        results.sort(key=lambda x: x["score"], reverse=True)
        return results

# 使用示例
def main():
    # 1. 初始化查询和文档
    query = "Python如何处理JSON数据?"
    
    documents = [
        {
            "id": "doc1",
            "text": "Python提供了json模块来处理JSON数据。使用json.loads()可以将JSON字符串转换为Python对象,使用json.dumps()可以将Python对象转换为JSON字符串。这是处理JSON最基本的方法。",
            "embedding_score": 0.85
        },
        {
            "id": "doc2",
            "text": "在Python中,字典(dict)是一种常用的数据结构,它的格式与JSON非常相似。你可以使用字典来存储键值对数据。",
            "embedding_score": 0.75
        },
        {
            "id": "doc3",
            "text": "Python是一种面向对象的编程语言,支持类和对象的概念。你可以创建自定义类来组织数据和行为。",
            "embedding_score": 0.65
        },
        {
            "id": "doc4",
            "text": "处理JSON数据时,可以使用pandas库的read_json()函数直接将JSON数据读取为DataFrame对象,这对于大型JSON数据特别有用。",
            "embedding_score": 0.82
        }
    ]

    # 2. 初始化reranker
    reranker = BGEReranker()
    
    # 3. 执行重排序
    reranked_results = reranker.rerank(query, documents)
    
    # 4. 打印结果
    print("\n原始查询:", query)
    print("\n重排序结果:")
    for i, result in enumerate(reranked_results, 1):
        print(f"\n{i}. 文档ID: {result['id']}")
        print(f"   相关性分数: {result['score']:.4f}")
        print(f"   文本: {result['text'][:100]}...")

if __name__ == "__main__":
    main()

预期结果

原始查询: Python如何处理JSON数据?

重排序结果:

1. 文档ID: doc1
   相关性分数: 0.9234
   文本: Python提供了json模块来处理JSON数据。使用json.loads()可以将JSON字符串转换为Python对象,使用json.dumps()可以将Python...

2. 文档ID: doc4
   相关性分数: 0.8756
   文本: 处理JSON数据时,可以使用pandas库的read_json()函数直接将JSON数据读取为DataFrame对象,这对于大型JSON数据特别有用...

3. 文档ID: doc2
   相关性分数: 0.6543
   文本: 在Python中,字典(dict)是一种常用的数据结构,它的格式与JSON非常相似。你可以使用字典来存储键值对数据...

4. 文档ID: doc3
   相关性分数: 0.3245
   文本: Python是一种面向对象的编程语言,支持类和对象的概念。你可以创建自定义类来组织数据和行为...

总结分析

  1. 输入参数:

    query = "Python如何处理JSON数据?"
    documents = [
        {
            "id": "doc1",
            "text": "...",
            "embedding_score": 0.85  # 原始向量检索分数
        },
        ...
    ]
    
  2. 重排序过程:

    • 对每个文档,计算与查询的相关性分数
    • 分数范围在0-1之间,越高表示越相关
    • 考虑了语义理解而不仅仅是关键词匹配
  3. 结果分析:

    • doc1 得分最高(0.9234):直接回答了如何处理JSON的问题
    • doc4 得分次高(0.8756):提供了具体的JSON处理方法
    • doc2 得分中等(0.6543):提到了JSON但不是直接的处理方法
    • doc3 得分最低(0.3245):虽然提到Python但与JSON处理无关
  4. 重排序效果:

    • 原始向量检索顺序: doc1(0.85) > doc4(0.82) > doc2(0.75) > doc3(0.65)
    • 重排序后顺序: doc1(0.9234) > doc4(0.8756) > doc2(0.6543) > doc3(0.3245)
    • 重排序更好地反映了文档与查询的实际相关性

这个例子展示了重排序如何:

  1. 提供更精确的相关性评分
  2. 优化搜索结果的排序
  3. 提高搜索结果的质量
  4. 过滤掉不相关的内容

相关文章:

  • 【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(成功版)
  • ArcGIS Pro 制作地理区位图的实用技巧与步骤
  • Node.js学习分享(上)
  • Python的那些事第三十九篇:MongoDB的Python驱动程序PyMongo
  • Java方法详解
  • 蓝桥杯 之 贪心与排序
  • 【经济学】第一章:经济学基础:生产、市场与宏观经济的数学透视
  • 3.多线程获取音频AI的PCM数据
  • C++STL概览
  • React 之 Redux 第二十八节 学习目标与规划大纲及概要讲述
  • C#将Box企业网盘里的文件批量上载到S3,并导入Redshift
  • Docker卷挂载:为何不同路径指向同一份文件
  • 准确---Liunx查看出口ip的命令
  • 【FPGA开发】Verilog-数据截断时实现四舍五入效果
  • 机器学习数学基础:38.统计学变量与相关系数
  • MybatisPlus从入门到精通
  • 【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)
  • Linux--基础命令3
  • 解决docker认证问题 failed to authorize: failed to fetch oauth token
  • 【Office-Word】如何自动生成中英文目录
  • 怀化网站排名优化/seo引擎优化外包公司
  • 网站自助建站/企业培训体系搭建
  • 做网站项目后台的/深圳百度seo怎么做
  • 电子商务网站建设下载/公司网站设计制作
  • 北京西站到大兴机场/珠海百度搜索排名优化
  • 新疆乌鲁木齐哪家做网站好/windows优化大师和鲁大师