首页 > 其他分享 >jina的Embedding Reranker

jina的Embedding Reranker

时间:2024-09-14 15:57:50浏览次数:7  
标签:Jina Reranker Milvus Embedding jina data 向量


插入向量库是否需要使用 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, connections

class MilvusClient:
    def __init__(self):
        # 连接 Milvus 服务器
        connections.connect(alias="default", host="localhost", port="19530")
        
        # 定义 Collection Schema
        self.collection_name = "industry_terms"
        self.collection = Collection(name=self.collection_name)

        # Jina 流,用于 Embedding
        self.flow = Flow().add(uses='jinahub://TransformerTorchEncoder')
    
    def embed_and_insert_terms(self, term_data_list):
        """
        1. 使用 Jina 进行 Embedding
        2. 插入向量数据到 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 进行 Embedding
        docs = 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",  # 搜索字段为 embedding
            param={"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 中进行相似度搜索,找到最接近的术语。
  1. Reranker 重新排序:对 Milvus 返回的候选结果进行重排序,确保最相关的结果排在前面。
  2. 返回改写结果:使用改写的术语查询 Clude 模型生成 SQL。

6. 总结

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

具体来说:

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

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


标签:Jina,Reranker,Milvus,Embedding,jina,data,向量
From: https://blog.51cto.com/u_13171517/12017497

相关文章

  • torch.nn.Embedding的导入与导出
    简介及导入转自:torch.nn.Embedding使用在RNN模型的训练过程中,需要用到词嵌入,使用torch.nn.Embedding可以快速的完成:只需要初始化torch.nn.Embedding(n,m)即可(n是单词总数,m是词向量的维度)(n是嵌入字典的大小,m是嵌入向量的维度。)。注意:embedding开始是随机的,在训练的时候会自......
  • 通过ModelScope开源Embedding模型将图片转换为向量
    本文介绍如何通过ModelScope魔搭社区中的视觉表征模型将图片转换为向量,并入库至向量检索服务DashVector中进行向量检索。ModelScope魔搭社区旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单。ModelScope魔搭......
  • 时间embedding
    左边的公式和time_embedding(1)的区别在于它们表示的维度不同。公式中的左边部分是一个概括性公式,用来说明如何为每个时间步(t)生成时间嵌入。而具体的time_embedding(1)展示的是当(t=1)时,如何生成一个更长维度的时间嵌入向量。1.左边公式的含义:左边的公式表示......
  • 【AIGC】Transformer模型:Postion Embedding概述、应用场景和实现方式的详细介绍。
    ......
  • 【大模型】使用 Xinference 部署本地模型,从GPU服务器到本地知识库搭建Dify【LLM大语言
    基本介绍基础信息GPU服务器获取基础安装基础信息安装显卡驱动配置显卡检查下载禁用nouveau系统自带驱动显卡驱动安装安装nvidia-docker下载配置验证Xinference部署docker部署官方文档模型下载glm-4-9b-chatEmbedding(向量)模型Rerank模型模型部署Embedding(向量)模型......
  • 英伟达发布最新屠榜 Embedding 模型——NV-Embed-v2
    介绍我们介绍的NV-Embed-v2是一种通用嵌入模型,它在大规模文本嵌入基准(MTEBbenchmark)(截至2024年8月30日)的56项文本嵌入任务中以72.31的高分排名第一。NV-Embed-v2提出了几项新设计,包括让LLM关注潜在向量以获得更好的池化嵌入输出,并展示了一种两阶段指令调整方法,以提高......
  • 深入解析DashScope Embeddings:打造智能文本分析利器
    深入解析DashScopeEmbeddings:打造智能文本分析利器1.引言在自然语言处理(NLP)和机器学习领域,文本嵌入(TextEmbeddings)是一项核心技术,它能将文本转换为密集的向量表示,为下游任务如文本分类、相似度计算和信息检索等提供基础。本文将深入探讨DashScopeEmbeddings,这是一个强......
  • 你的AI绘画工具SD该更新啦!6款超好用的SDXL负面提示词Embedding模型,让你的出图效果好上
    大家好,我是强哥AI绘画SDXL1.0模型发布以来,优质的SDXL大模型不断涌现,让图像的生成质量越来越高。但版本迭代后,之前的SD1.5的负面提示词Embedding并不能和SDXL大模型配合使用,而每次都输入一大串的反向提示词又实在麻烦。所以今天就给大家推荐6款可以配合SDXL......
  • 专业级语义搜索优化:利用 Cohere AI、BGE Re-Ranker 及 Jina Reranker 实现精准结果重
    专业级语义搜索优化:利用CohereAI、BGERe-Ranker及JinaReranker实现精准结果重排1.简介1.1RAG在说重排工具之前,我们要先了解一下RAG。检索增强生成(RAG)是一种新兴的AI技术栈,通过为大型语言模型(LLM)提供额外的“最新知识”来增强其能力。基本的RAG应用包括四个关......
  • 专业级语义搜索优化:利用 Cohere AI、BGE Re-Ranker 及 Jina Reranker 实现精准结果重
    专业级语义搜索优化:利用CohereAI、BGERe-Ranker及JinaReranker实现精准结果重排1.简介1.1RAG在说重排工具之前,我们要先了解一下RAG。检索增强生成(RAG)是一种新兴的AI技术栈,通过为大型语言模型(LLM)提供额外的“最新知识”来增强其能力。基本的RAG应用包括四个关......