当前位置:首页 > 未分类 > 正文内容

我有一个json结构的标准问答对,想通过 BAAI/bge-large-zh-v1.5 将问答对转为向量存储在 milvus 中,然后 另一个系统会提问然后输出回答,这个系统的回答需要和我的

关中浪子3周前 (09-23)未分类74
买泛域名SSL证书 送5斤装现摘猕猴桃一箱、同时提供技开源商城搭建免费技术支持。
泛域名ssl证书 239元1年送1个月、单域名39元1年,Sectigo(原Comodo证书)全球可信证书,强大的兼容性,高度安全性,如有问题7天内可退、可开发票
加微信VX 18718058521 备注SSL证书
【腾讯云】2核2G4M云服务器新老同享99元/年,续费同价

为了实现您的需求,我们需要分几个步骤来操作:

  1. 准备环境:确保安装了必要的库,如 transformers(用于加载模型),milvus(用于存储向量),以及 json(用于处理JSON数据)。

  2. 加载模型:使用 transformers 库加载 BAAI/bge-large-zh-v1.5 模型,并准备将文本转换为向量。

  3. 处理JSON数据:从JSON文件中读取问答对,并使用模型将每个问题转换为向量。

  4. 存储向量到Milvus:将转换后的向量存储到Milvus数据库中。

  5. 查询与匹配:当新查询到来时,将其转换为向量,然后在Milvus中搜索最相似的向量,并返回对应的答案。

以下是一个简化的代码示例,展示了如何实现上述步骤:

步骤 1: 安装必要的库

首先,确保安装了以下Python库:

pip install transformers milvus pymilvus

步骤 2-4: 加载模型、处理JSON并存储到Milvus

from transformers import AutoTokenizer, AutoModel  
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType  
import json  
  
# 加载模型和分词器  
tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-large-zh-v1.5")  
model = AutoModel.from_pretrained("BAAI/bge-large-zh-v1.5")  
  
# 连接到Milvus  
connections.connect(host='localhost', port='19530')  
  
# 假设JSON文件结构如下:[{"question": "问题", "answer": "答案"}]  
with open('qa_pairs.json', 'r', encoding='utf-8') as f:  
    qa_pairs = json.load(f)  
  
# 创建Milvus集合  
if not Collection.has_collection("qa_vectors"):  
    field_schemas = [  
        FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),  
        FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=768)  # 假设向量维度为768  
    ]  
    collection_schema = CollectionSchema(fields=field_schemas, description="Question Answer Vectors")  
    Collection.create_collection("qa_vectors", schema=collection_schema)  
  
# 存储向量  
collection = Collection("qa_vectors")  
for idx, qa in enumerate(qa_pairs):  
    inputs = tokenizer(qa['question'], return_tensors="pt", padding=True, truncation=True, max_length=512)  
    with torch.no_grad():  
        outputs = model(**inputs)  
    vector = outputs.last_hidden_state[:, 0, :].numpy()  # 取CLS token的向量  
    collection.insert([idx, vector.tolist()])  
  
# 关闭Milvus连接  
connections.disconnect()

步骤 5: 查询与匹配

def find_answer(question):  
    # 连接到Milvus  
    connections.connect(host='localhost', port='19530')  
    collection = Collection("qa_vectors")  
  
    # 将新问题转换为向量  
    inputs = tokenizer(question, return_tensors="pt", padding=True, truncation=True, max_length=512)  
    with torch.no_grad():  
        outputs = model(**inputs)  
    query_vector = outputs.last_hidden_state[:, 0, :].numpy()  
  
    # 在Milvus中搜索最相似的向量  
    search_params = {"metric_type": "L2", "params": {"nprobe": 10}}  
    results = collection.search(query_vectors=[query_vector.tolist()], anns_field="vector", top_k=1, params=search_params)  
  
    # 提取答案  
    if results and results[0]:  
        answer = qa_pairs[results[0][0].id]['answer']  
        print(f"Answer: {answer}")  
    else:  
        print("No similar question found.")  
  
    # 关闭Milvus连接  
    connections.disconnect()  
  
# 示例查询  
find_answer("请问如何学习Python?")

注意

  • 确保Milvus服务正在运行,并且您已经设置了正确的连接参数。

  • 上述代码中的向量维度(768)和模型输出可能需要根据您实际使用的模型进行调整。

  • torch 需要被导入,但在上面的代码示例中未显示导入语句。确保在代码顶部添加 import torch

  • 对于大型数据集,考虑使用批量处理和优化搜索参数以提高性能。


找梯子最重要的就是稳定,这个已经上线三年了,一直稳定没有被封过,赶紧下载备用吧!

扫描二维码推送至手机访问。

版权声明:本文由码农翻生发布,如需转载请注明出处。

本文链接:https://lubojian.cn/post/282.html

分享给朋友:

相关文章

js 删除json对象某个键key

解决方法:假如json是一个对象,想移除其中的key名为keyname的键delete json['keyname'];delete json.keyname;...

Git Gui  操作一看就懂 so easy

Git Gui 操作一看就懂 so easy

1.在本地新建版本库首先,我们打开Git GUI是这样的一个界面,选择第一项,新建版本库。然后选择你需要进行版本管理的项目路径,我选择了一个LoginDemo的项目。当你创建了版本库的时候,你可以在该项目的路径下看见多了一个.git文件夹(...

eclipse.ini -vm 设置 jdk 的作用

打开eclipse.ini 文件,在-vmargs 参数的前面, 一定是前面,添加如下代码:-vm/home/david/scfjava/jdk1.6.0_02/bin/javaw.exe注:分两行,格式不可变。重新启动eclipse, 新...

(永久激活)最新navicat安装激活破解永久使用教程

(永久激活)最新navicat安装激活破解永久使用教程

这篇文章主要介绍了Navicat Premium永久破解激活教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下这里讲的是windows下的navicat 15最新激活破解教程,亲测有效...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。