写点什么

关键词感知检索

作者:DashVector
  • 2024-11-14
    陕西
  • 本文字数:1710 字

    阅读完需:约 6 分钟

关键词感知检索

本文主要介绍带关键词感知能力的向量检索服务的优势、应用示例以及 Sparse Vector 生成工具。

背景介绍

关键词检索及其局限

在信息检索领域,"传统"方式是通过关键词进行信息检索,其大致过程为:


  1. 对原始语料(如网页)进行关键词抽取。

  2. 建立关键词和原始语料的映射关系,常见的方法有倒排索引、TF-IDF、BM25 等方法,其中 TF-IDF、BM25 通常用 稀疏向量(Sparse Vector) 来表示词频。

  3. 检索时,对检索语句进行关键词抽取,并通过步骤 2 中建立的映射关系召回关联度最高的 TopK 原始语料。


但关键词检索无法对语义进行理解。例如,检索语句为"浙一医院",经过分词后成为"浙一"和"医院",这两个关键词都无法有效的命中用户预期中的"浙江大学医学院附属第一医院"这个目标。

基于语义的向量检索

随着人工智能技术日新月异的发展,语义理解 Embedding 模型能力的不断增强,基于语义 Embedding 的向量检索召回关联信息的方式逐渐成为主流。其大致过程如下:


  1. 原始语料(如网页)通过 Embedding 模型产生 向量(Vector) ,又称为 稠密向量(Dense Vector)。

  2. 向量入库向量检索系统。

  3. 检索时,检索语句同样通过 Embedding 模型产生向量,并用该向量在向量检索系统中召回距离最近的 TopK 原始语料。


但不可否认的是,基于语义的向量检索来召回信息也存在局限------必须不断的优化 Embedding 模型对语义的理解能力,才能取得更好的效果。例如,若模型无法理解"水稻灌溉"和"灌溉水稻"在语义上比较接近,就会导致无法通过"水稻灌溉"召回"灌溉水稻"相关的语料。而关键字检索在这个例子上,恰好可以发挥其优势,通过"水稻"、"灌溉"关键字有效的召回相关语料。

关键词检索+语义检索

针对上述问题,逐渐有业务和系统演化出来"两路召回、综合排序"的方法来解决,并且在效果上也超过了单纯的关键字检索或语义检索,如下图所示:


但这种方式的弊端也很明显:


  1. 系统复杂度增加。

  2. 硬件资源(内存、CPU、磁盘等)开销增加。

  3. 可维护性降低。

  4. ......

具有关键词感知能力的语义检索

向量检索服务 DashVector 同时支持 Dense Vector(稠密向量)和 Sparse Vector(稀疏向量),前者用于模型的高维特征(Embedding)表达,后者用于关键词和词频信息表达。DashVector 可以进行关键词感知的向量检索,即 Dense Vector 和 Sparse Vector 结合的混合检索。


DashVector 带关键词感知能力的向量检索能力,既有"两路召回、综合排序"方案的优点,又没有其缺点。使得系统复杂度、资源开销大幅度降低的同时,还具备关键词检索、向量检索、关键词+向量混合检索的优势,可满足绝大多数业务场景的需求。


说明


Sparse Vector(稀疏向量),稀疏向量是指大部分元素为 0,仅少量元素非 0 的向量。在 DashVector 中,稀疏向量可用来表示词频等信息。例如,{1:0.4, 10000:0.6, 222222:0.8}就是一个稀疏向量,其第 1、10000、222222 位元素(分别代表三个关键字)有非 0 值(代表关键字的权重),其他元素全部为 0。

使用示例

前提条件

  • 已创建 Cluste

  • 已获得 API-KEY

  • 已安装最新版 SDK

Step1. 创建支持 Sparse Vector 的 Collection

说明


  1. 需要使用您的 api-key 替换以下示例中的 YOUR_API_KEY、您的 Cluster Endpoint 替换示例中的 YOUR_CLUSTER_ENDPOINT,代码才能正常运行。

  2. 本示例仅对 Sparse Vector 进行功能演示,简化起见,向量(Dense Vector)维度设置为 4。


Python 示例:


import dashvector
client = dashvector.Client( api_key='YOUR_API_KEY', endpoint='YOUR_CLUSTER_ENDPOINT')
ret = client.create('hybrid_collection', dimension=4, metric='dotproduct')
collection = client.get('hybrid_collection')assert collection
复制代码


重要


仅内积度量(metric='dotproduct')支持 Sparse Vector 功能。

Step2. 插入带有 Sparse Vector 的 Doc

Python 示例:


from dashvector import Doc
collection.insert(Doc( id='A', vector=[0.1, 0.2, 0.3, 0.4], sparse_vector={1: 0.3, 10:0.4, 100:0.3}))
复制代码


说明


向量检索服务 DashVector 推荐使用快速开始生成 Sparse Vector。

Step3. 带有 Sparse Vector 的 向量检索

Python 示例:


docs = collection.query(    vector=[0.1, 0.1, 0.1, 0.1],    sparse_vector={1: 0.3, 20:0.7})
复制代码

Sparse Vector 生成工具

  • DashText,向量检索服务 DashVector 推荐使用的 SparseVectorEncoder


发布于: 刚刚阅读数: 4
用户头像

DashVector

关注

还未添加个人签名 2024-05-14 加入

向量检索服务DashVector基于通义实验室自研的高效向量引擎Proxima内核,提供具备水平拓展能力的云原生、全托管的向量检索服务。

评论

发布
暂无评论
关键词感知检索_数据库_DashVector_InfoQ写作社区