暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

文档型数据库如何支持稀疏向量检索能力

巨杉数据库 2025-04-11
211

概述

巨杉数据库在较早版本中已经支持了向量检索功能。一般情况下,向量检索特指稠密向量检索。因其对语义理解精准的特点,在很多场景,尤其是RAG中被广泛使用。但是,稠密向量也存在诸多不足:

  • 对精确匹配支持不足:稠密向量在捕捉语义相似性方面表现出色,但在处理精确匹配查询时表现不佳。例如在搜索特定关键字时往往无法给出正确结果。

  • 缺乏可解释性:稠密向量通常无法直接对应人类可理解的特征,这使得模型决策过程难以解释。在一些需要高解释性场景中存在限制。如信贷审批、医疗等。

  • 对噪声敏感:稠密向量对数据中的噪声较为敏感,搜索结果准确性容易存在波动。

为解决以上问题,巨杉数据库特别增加了对稀疏向量检索的支持。


稀疏向量检索

稀疏向量是一种大部分元素为零、仅有少数非零元素的高维向量表示形式。这种表示方式在处理高维数据时,能够有效降低存储和计算的复杂度。

稀疏向量具有以下优点:

  • 高效的存储和计算:由于稀疏向量中大部分的元素为零,仅需存储非零元素。这种表达方式大幅降低存储和计算需求。

    • 如向量[0, 0, 1.2, 0, 0, 6.1]可表示为[(2, 1.2), (5, 6.1)]。

  • 适用于精确匹配任务:稀疏向量在处理需要精确匹配关键词或短语的任务时表现出色。例如,在信息检索系统中,稀疏向量可以有效地捕捉查询与文档之间的关键词匹配关系,从而提高检索的准确性。

    • 在处理专业术语或罕见关键词时,稀疏向量也能够更好地捕捉这些特征的细微差别,适应特定领域的需求。

  • 可解释性强:在稀疏向量中,每个维度通常对应一个具体的特征或词汇,这使得模型的决策过程更加透明和可解释。例如,在文本分析中,可以明确地看到哪些词汇对模型的预测产生了影响。

对比总结:

BM25稀疏向量

BM25Best Matching 25)是一种经典的信息检索算法,是基于Okapi TF-IDF算法的改进版本,旨在解决Okapi TF-IDF算法的一些不足之处。 其被广泛应用于信息检索领域的排名函数,用于估计文档D与用户查询Q之间的相关性。 它是一种基于概率检索框架的改进,特别是在处理长文档和短查询时表现出色。

1.分词与词汇表构建

对文档集合进行分词处理,生成词汇表(Token列表),词汇表的大小即为稀疏向量的维度(通常为几万到十万维)。

示例:若文档集合包含人工智能汽车等关键词,词汇表会将这些词映射到特定维度。


2.统计逆文档频率(IDF

1)计算每个词的IDF值,公式为:

其中,为文档总数,n(qi )为包含词 qi 的文档数。

2) IDF反映词的稀有程度,低频词(如专业术语)权重更高。


3.计算词频(TF)与文档长度归一化

1) 词频TF计算公式:

 其中,k1(通常1.2-2.0)和 b(通常0.75为调节参数, 

Ld  为文档长度, 

Lavg 为平均文档长度 

4.生成稀疏向量

1)文档向量:每个维度对应词汇表中的词,非零值为该词的TF-IDF加权得分

 

5.查询向量

1)仅包含查询词对应的维度,权重为IDF值。

2)通过dotProduct计算查询得分


示例

在准备好的成语数据集上,创建稀疏向量索引

    db.runCommand({
      createIndexes:"chengyu_data",
      indexes:[{
        key:{"bm25_embedding":"sparseVector"},
        name:"bm25_vector_index",
        vectorSearchDefinition:{similarity:"dotProduct"}
      }]
    })

    查询"鲁国,齐国",返回数据

      {'_id': ObjectId('67ce46c4deaadec0f6cbc909'), 'name''齐纨鲁缟''means''古代
      齐国和鲁国出产的白色绢◇亦泛指名贵的丝织品。', 'score': 7.297494888305664}


      {'_id': ObjectId('67ce46c6deaadec0f6cbe238'), 'name''季孙之忧''means''季孙
      鲁国大夫;忧忧患。指内部的忧患。', 'score': 4.5486063957214355}


      {'_id': ObjectId('67ce46c9deaadec0f6cc001e'), 'name''城北徐公''means''原指战国时期
      齐国姓徐的美男子◇作美男子的代称。', 'score': 3.8497567176818848}


      {'_id': ObjectId('67ce46c4deaadec0f6cbc8fc'), 'name''齐东野语''means''齐东
      齐国的东部;野语乡下人的话。孟子蔑视农民,认为他们说的话没有根据,听信不得。比喻荒唐而没有根据的话。
      ', 'score': 3.69185209274292}

      查询"鲁仲连",返回数据:

        {'_id': ObjectId('67ce46c5deaadec0f6cbd2be'), 'name''鲁连蹈海''means''战国时齐国人
        鲁仲连不满秦王称帝的计划,曾说,秦如称帝,则蹈东海而死◇以之表示宁死而不受强敌屈辱的气节、情操。', 'score': 3.164668560028076}


        {'_id': ObjectId('67ce46c9deaadec0f6cc0687'), 'name''炳如日星''means''光明如同日月星辰。''score': 0.5}


        {'_id': ObjectId('67ce46c9deaadec0f6cc0292'), 'name''残年暮景''means''残衰残。指人到了晚年。''score': 0.5}


        {'_id': ObjectId('67ce46c9deaadec0f6cc0237'), 'name''昌亭旅食''means''寄食南昌亭长处。借指寄人篱下。''score': 0.5}

        可以看到,稀疏向量检索有效捕捉到了正确的记录。

        总结

        在目前RAG场景中,单一的稠密向量检索已经无法满足需求。通过混合检索(Hybrid Search),将多种检索技术进行融合排序,可以大幅提高AI系统的准确率。在后续的文章中,我们将会对该类技术进行深入探讨。

        最后修改时间:2025-04-11 15:56:17
        文章转载自巨杉数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论