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

jina的Embedding Reranker

插入向量库是否需要使用 Jina 的 EmbeddingReranker 取决于你希望如何处理和优化语义搜索的质量。以下是使用 Jina Embedding 和 Reranker 的原因,以及它们如何作用于插入向量库的流程。

1. Jina 的 Embedding 作用

Jina 是一个流行的开源框架,用于构建多模态搜索系统。Jina 的 Embedding 模型可以将文本或其他数据转换成向量表示,方便存储在向量数据库(如 Milvus)中,支持更高效的相似度检索。

如果你希望在 Milvus 中进行基于语义的搜索(而不仅仅是基于关键词匹配),则可以使用 Jina 提供的 Embedding 模型来将术语和相关数据转换为向量,并将这些向量存储在 Milvus 中。

Embedding 的步骤:
  1. 获取文本或术语:如 “收入”、“净利润” 等术语。
  2. 使用 Jina 的 Embedding 模型:将这些术语转换为语义向量(即高维度向量表示)。
  3. 将向量插入到 Milvus:通过向量表示进行高效的相似度搜索。
什么时候需要 Embedding?
  • 当你需要语义匹配时,比如用户可能输入的是同义词或类似的概念。Embedding 会捕捉到词语之间的语义关系,而不仅仅是字符串匹配。
  • 提高查询改写的准确性,Embedding 向量化后的术语可以更好地进行相似度计算,找到最相关的术语进行改写。

2. Reranker 的作用

Reranker 是一个重排序模型,通常在搜索结果返回之后,用于根据更复杂的规则或模型对结果进行二次排序。Reranker 在以下情况下是有用的:

  • 多阶段检索:在初步检索后,可以使用 Reranker 对返回的结果根据更多上下文或更细粒度的语义关系进行重排序,确保最相关的结果排在前面。
  • 提高搜索精度:Reranker 可以基于上下文和用户查询更好地优化结果排序。

3. 如何结合 Jina Embedding 和 Reranker?

  • Embedding:负责将术语和用户查询转化为语义向量。这一步是插入向量库之前的必要步骤,以便向量库可以高效处理语义搜索。
  • Reranker:在你从 Milvus 中检索到最相关的术语后,使用 Reranker 对结果进行重排序。这一步确保返回的结果更加符合用户的意图。

4. 如何将它们结合到你的现有代码中?

更新 MilvusClient,使用 Jina 的 Embedding 模型

首先,确保你已经安装了 Jina 的必要依赖:

pip install jina

然后你可以使用 Jina 的预训练 Embedding 模型来将术语转化为向量。

from jina import Flow
from jina.types.document.generators import from_dict
from pymilvus import Collection, connectionsclass MilvusClient:def __init__(self):# 连接 Milvus 服务器connections.connect(alias="default", host="localhost", port="19530")# 定义 Collection Schemaself.collection_name = "industry_terms"self.collection = Collection(name=self.collection_name)# Jina 流,用于 Embeddingself.flow = Flow().add(uses='jinahub://TransformerTorchEncoder')def embed_and_insert_terms(self, term_data_list):"""1. 使用 Jina 进行 Embedding2. 插入向量数据到 Milvus 知识库"""# 准备插入数据field_names = [data['field_name'] for data in term_data_list]terms = [data['term'] for data in term_data_list]source_tables = [data['source_table'] for data in term_data_list]descriptions = [data['description'] for data in term_data_list]data_types = [data['data_type'] for data in term_data_list]related_fields = [data['related_fields'] for data in term_data_list]explanations = [data['term_explanation'] for data in term_data_list]# 通过 Jina 的 Embedding 将术语转换为向量docs = from_dict([{"text": term} for term in terms])with self.flow:embedding_docs = self.flow.post(on='/index', inputs=docs)# 从嵌入结果中提取向量embeddings = [doc.embedding for doc in embedding_docs]# 插入向量和原始数据到 Milvus 中self.collection.insert([field_names, terms, source_tables, descriptions, data_types, related_fields, explanations, embeddings])print(f"成功插入了 {len(term_data_list)} 条数据到 Milvus 知识库")
更新 search_terms,进行语义搜索并使用 Reranker
class MilvusClient:# 初始化和插入方法如上def search_terms(self, query: str):"""1. 使用 Jina 进行查询的 Embedding。2. 在 Milvus 中进行相似度搜索。3. 使用 Reranker 对搜索结果进行重排序。"""# Step 1: 使用 Jina 进行 Embeddingdocs = from_dict([{"text": query}])with self.flow:query_docs = self.flow.post(on='/search', inputs=docs)query_embedding = query_docs[0].embedding# Step 2: 在 Milvus 中进行向量搜索search_results = self.collection.search(data=[query_embedding],  anns_field="embedding",  # 搜索字段为 embeddingparam={"metric_type": "L2", "params": {"nprobe": 10}},limit=10  )# Step 3: 使用 Reranker 对结果进行重排序(此处是简单的排序示例)sorted_results = sorted(search_results, key=lambda x: x.distance)if len(sorted_results) > 0:return sorted_results[0].entities[0]["term"]  # 返回最相关的术语else:return None  # 如果没有找到匹配项,返回 None

5. 使用 Jina 和 Milvus 的工作流程

  1. 术语数据插入:使用 Jina 的 Embedding 模型,将术语转换为向量并存入 Milvus 向量库。
  2. 用户查询处理
    • 首先对用户的查询进行 Embedding。
    • 使用生成的向量在 Milvus 中进行相似度搜索,找到最接近的术语。
  3. Reranker 重新排序:对 Milvus 返回的候选结果进行重排序,确保最相关的结果排在前面。
  4. 返回改写结果:使用改写的术语查询 Clude 模型生成 SQL。

6. 总结

在插入数据之前使用 Jina 的 Embedding 模型来生成术语的向量表示是非常有必要的,它将大大提高语义搜索的精度。然后,搜索后可以使用 Reranker 对候选结果进行重排序,以进一步提高查询的准确性。

具体来说:

  • Embedding:确保术语能够在 Milvus 中进行语义级别的搜索,而不是基于关键词匹配。
  • Reranker:进一步提升搜索结果的相关性,确保最符合用户查询意图的术语排在首位。

你可以根据需求选择合适的 Embedding 模型和 Reranker 机制,来优化整体查询流程。

相关文章:

jina的Embedding Reranker

插入向量库是否需要使用 Jina 的 Embedding 和 Reranker 取决于你希望如何处理和优化语义搜索的质量。以下是使用 Jina Embedding 和 Reranker 的原因,以及它们如何作用于插入向量库的流程。 1. Jina 的 Embedding 作用 Jina 是一个流行的开源框架,用于…...

Prompt Engineer: 使用Thought来提升LLM的回复能力

这是一个小的实验, 用来测试思维导图这种表达形式对于LLM在答案组织上是否会有帮助 结构化Prompt 根据目前的测试来看, 结构化Ptompt在实践中有着很好的可读性以及可维护性. (通常来说我使用Markdown格式来作为输入的格式, 虽然在内容完整性上存在问题, 但是我是不喜欢写丑陋…...

tekton构建标准ci(clone repo, test, build push img)

场景介绍 我们在上一篇文章中构建了一个最简单的ci,接下来我们对我们的github的项目构建一个较标准的ci。 Tekton简介,安装和构建最简单ci/cd-CSDN博客文章浏览阅读239次,点赞2次,收藏2次。本文介绍了tekton是什么,如…...

【电力系统】复杂网络分析在电力系统规范中的应用

摘要 复杂网络分析在电力系统中的应用为理解和优化电力系统的运行提供了新的视角。本文探讨了复杂网络理论在电力系统规范中的应用,通过分析电力系统的拓扑结构、节点重要性和脆弱性,提出了优化电力系统设计和运行的新策略。仿真结果表明,复…...

CDGA|推动数据治理与传统产业深度融合:策略与实践路径

在数字化浪潮席卷全球的今天,数据已成为推动经济社会发展的关键生产要素。传统产业,作为国民经济的基石,正面临着前所未有的转型挑战与机遇。如何让数据治理这一现代管理理念与实践方法深度融入传统产业,促进其转型升级与高质量发…...

【FastAPI】离线使用Swagger UI 或 国内网络如何快速加载Swagger UI

在FastAPI中,默认情况下,当应用启动时,Swagger UI 会通过在线加载 Swagger UI 的静态资源。这意味着如果应用运行在没有互联网连接的环境中,默认的 Swagger 文档页面将无法加载。 为了在离线环境中使用 Swagger UI,你…...

Linux:从入门到放弃

目录 一、基础巩固Linux:常用命令 二、实战应用Linux:CentOS7基础配置Linux:CentOS7安装MySQL 三、常见问题Linux:yum源失效问题 一、基础巩固 Linux:常用命令 二、实战应用 Linux:CentOS7基础配置 Lin…...

SVM 监督学习

一、分类问题 利用一条直线分类存在很多问题 二、SVM 支持向量机 其核心思想是通过在特征空间中找到一个最优的超平面来进行分类,并且间隔最大。分类面尽可能远离样本点,宽度越大越好。 适用于中小型复杂数据集的分类。 三、硬间隔和软间隔 硬&#x…...

奖励模型的训练

文章目录 训练方法训练策略代码实践由于 RLHF 的训练过程中需要依赖大量的人类偏好数据进行学习,因此很难在训练过程中要求人类标注者实时提供偏好反馈。为此,我们需要训练一个模型来替代人类在 RLHF 训练过程中实时提供反馈,这个模型被称为奖励模型。在训练开始前,我们需要…...

Ubuntu22.04之禁止内核自动更新(二百六十八)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…...

kaggle题-房价预测(Pytorch),手把手教,全文代码解释

房价预测 本题是经典的通过表格数据去预测最终值,主要分为几大步骤: 一.将数据集修改为可以代入到网络模型的数字,因为给的数据大部分都是str类型,是无法直接放到网络模型里跑的,例如下图,很多标签值为str类…...

PulseSensor心率传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.接线图 2.引脚描述 3.工作原理:光电容积法原理 4.工作原理:心率采样数据处理算法 三、程序设计 main.c文件 adcx.h文件 adc.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 PulseSensor传感器是一种基…...

NISP 一级 | 3.1 网络基础知识

关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 0x01:Internet 和 TCP/IP 协议 因特网(Internet)通过 TCP/IP 协议将遍布在全世界各地的计算机互联,从而形成超级计算机网络。因特网为用户提供了非…...

模拟网络丢包常用方法以及工具

文章目录 背景常用方法代码实现使用方法测试代码 使用网络流量控制工具 常用工具Clumsy 背景 在软件开发过程中,经常需要模拟不同的网络环境来测试应用在不同条件下的表现。 这些模拟可以采用多种方式进行,包括在代码中实现随机丢包、随机延时、乱序&am…...

ABC 370 E - Avoid K Partition

原题链接:E - Avoid K Partition 题意:给长度为n的数组,将数组划分成任意份,但是每一份的总和都不能是k,问有多少种分割方法。 思路:dp,f[i],代表前i个元素满足题意的划分的总和&a…...

C++: set与map容器的介绍与使用

本文索引 前言1. 二叉搜索树1.1 概念1.2 二叉搜索树操作1.2.1 查找与插入1.2.2 删除1.2.3 二叉搜索树实现代码 2. 树形结构的关联式容器2.1 set的介绍与使用2.1.1 set的构造函数2.1.2 set的迭代器2.1.3 set的容量2.1.4 set的修改操作 2.2 map的介绍与使用2.2.1 map的构造函数2.…...

单片机-STM32 看门狗(八)

目录 一、看门狗概念 1、定义: 二、单片机中的看门狗 1、功能描述: 2、看门狗设置部分 预分频寄存器(IWDG_PR) 3、窗口看门狗 特性: 4、看门狗配置: 一、看门狗概念 看门狗--定时器(不属于基本定时器、通用定…...

iOS 18.1将上线新功能,可惜这波国内的小伙伴无缘了

在科技巨头苹果持续推动其生态系统全球化的进程中,最新的iOS 18.1、iPadOS 18.1及macOS 15.1开发者测试版发布,不仅为开发者们带来了新功能的预览,还悄然间对Apple智能功能的地区限制进行了微妙而重要的调整。 这一变化,虽看似细…...

MySQL中DML操作(二)

默认值处理(DEFAULT) 在MySQL中可以使用DEFAULT为列设定一个默认值。如果在插入数据时并未指定该列的值,那么MySQL将默认值添加到该列中。 创建表时指定列的默认值 CREATE TABLE 表名(列名 类型 default 默认值......); 示例:…...

LLMs技术 | 整合Ollama实现本地LLMs调用

前言 近两年AIGC发展的非常迅速,从刚开始的只有ChatGPT到现在的很百家争鸣。从开始的大参数模型,再到后来的小参数模型,从一开始单一的文本模型到现在的多模态模型等等。随着一起进步的不仅仅是模型的多样化,还有模型的使用方式。…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...