关键词感知检索

打印 上一主题 下一主题

主题 829|帖子 829|积分 2487

本文重要介绍带关键词感知本领的向量检索服务的上风、应用示例以及Sparse Vector生成工具。
配景介绍

关键词检索及其范围

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

  • 对原始语料(如网页)进行关键词抽取。
  • 建立关键词和原始语料的映射关系,常见的方法有倒排索引、TF-IDF、BM25等方法,此中TF-IDF、BM25通常用 希罕向量(Sparse Vector) 来表示词频。
  • 检索时,对检索语句进行关键词抽取,并通过步调2中建立的映射关系召回关联度最高的TopK原始语料。

但关键词检索无法对语义进行明白。例如,检索语句为"浙一医院",颠末分词后成为"浙一"和"医院",这两个关键词都无法有效的掷中用户预期中的"浙江大学医学院附属第一医院"这个目标。
基于语义的向量检索

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

  • 原始语料(如网页)通过Embedding模型产生 向量(Vector) ,又称为 稠密向量(Dense Vector)。
  • 向量入库向量检索系统。
  • 检索时,检索语句同样通过Embedding模型产生向量,并用该向量在向量检索系统中召回间隔最近的TopK原始语料。

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

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

但这种方式的毛病也很明显:

  • 系统复杂度增加。
  • 硬件资源(内存、CPU、磁盘等)开销增加。
  • 可维护性降低。
  • ......
具有关键词感知本领的语义检索

向量检索服务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

说明

  • 需要利用您的api-key替换以下示例中的 YOUR_API_KEY、您的Cluster Endpoint替换示例中的YOUR_CLUSTER_ENDPOINT,代码才能正常运行。
  • 本示例仅对Sparse Vector进行功能演示,简化起见,向量(Dense Vector)维度设置为4。
Python示例:
  1. import dashvector
  2. client = dashvector.Client(
  3.     api_key='YOUR_API_KEY',
  4.     endpoint='YOUR_CLUSTER_ENDPOINT'
  5. )
  6. ret = client.create('hybrid_collection', dimension=4, metric='dotproduct')
  7. collection = client.get('hybrid_collection')
  8. assert collection
复制代码
重要
仅内积度量(metric='dotproduct')支持Sparse Vector功能。
Step2. 插入带有Sparse Vector的Doc

Python示例:
  1. from dashvector import Doc
  2. collection.insert(Doc(
  3.     id='A',
  4.     vector=[0.1, 0.2, 0.3, 0.4],
  5.     sparse_vector={1: 0.3, 10:0.4, 100:0.3}
  6. ))
复制代码
说明
向量检索服务DashVector推荐利用快速开始生成Sparse Vector。
Step3. 带有Sparse Vector的 向量检索

Python示例:
  1. docs = collection.query(
  2.     vector=[0.1, 0.1, 0.1, 0.1],
  3.     sparse_vector={1: 0.3, 20:0.7}
  4. )
复制代码
Sparse Vector生成工具


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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表