基于向量检索服务与 TextEmbedding 实现语义搜索
本教程演示如何使用向量检索服务(DashVector),结合灵积模型服务上的Embedding API,来从 0 到 1 构建基于文本索引的构建+向量检索基础上的语义搜索能力。具体来说,我们将基于 QQ 浏览器搜索标题语料库(QBQTC:QQ Browser Query Title Corpus)进行实时的文本语义搜索,查询最相似的相关标题。
什么是 Embedding
简单来说,Embedding 是一个多维向量的表示数组,通常由一系列数字组成。Embedding 可以用来表示任何数据,例如文本、音频、图片、视频等等,通过 Embedding 我们可以编码各种类型的非结构化数据,转化为具有语义信息的多维向量,并在这些向量上进行各种操作,例如相似度计算、聚类、分类和推荐等。
整体流程概述
Embedding :通过 DashScope 提供的通用文本向量模型,对语料库中所有标题生成对应的 embedding 向量。
构建索引服务和查询 :
通过 DashVector 向量检索服务对生成 embedding 向量构建索引。
将查询文本 embedding 向量作为输入,通过 DashVector 搜索相似的标题。
具体操作流程
前提条件
开通灵积模型服务,并获得 API-KEY:开通DashScope并创建API-KEY。
开通 DashVector 向量检索服务,并获得 API-KEY 管理。
1、环境安装
说明
需要提前安装 Python3.7 及以上版本,请确保相应的 python 版本。
2、数据准备
QQ浏览器搜索相关性数据集(QBQTC, QQ Browser Query Title Corpus),是 QQ 浏览器搜索引擎目前针对大搜场景构建的一个融合了相关性、权威性、内容质量、 时效性等维度标注的学习排序(LTR)数据集,广泛应用在搜索引擎业务场景中。作为 CLUE-beanchmark 的一部分,QBQTC 数据集可以直接从 github 上下载(训练集路径为 dataset/train.json)。
数据集中的训练集(train.json)其格式为 json:
我们将从这个数据集中提取 title,方便后续进行 embedding 并构建检索服务。
3、通过 DashScope 生成 Embedding 向量
DashScope 灵积模型服务通过标准的 API 提供了多种模型服务。其中支持文本 Embedding 的模型中文名为通用文本向量,英文名为 text-embedding-v1。我们可以方便的通过 DashScope API 调用来获得一段输入文本的 embedding 向量。
说明
需要使用您的 api-key 替换示例中的 your-dashscope-api-key ,代码才能正常运行。
4、通过 DashVector 构建检索:向量入库
DashVector 向量检索服务上的数据以集合(Collection)为单位存储,写入向量之前,我们首先需要先创建一个集合来管理数据集。创建集合的时候,需要指定向量维度,这里的每一个输入文本经过 DashScope 上的 text_embedding_v1 模型产生的向量,维度统一均为 1536。
DashVector 除了提供向量检索服务外,还提供倒排过滤功能 和 scheme free 功能。所以我们为了演示方便,可以写入数据时,可以将 title 内容写入 DashVector 以便召回。写入数据还需要指定 id,我们可以直接使用 QBQTC 中 id。
说明
需要使用您的 api-key 替换示例中的 your-dashvector-api-key ,以及您的 Cluster Endpoint 替换示例中的 your-dashvector-cluster-endpoint ,代码才能正常运行。
5、语义检索:向量查询
在把 QBQTC 训练数据集里的 title 内容都写到 DashVector 服务上的集合里后,就可以进行快速的向量检索,实现"语义搜索"的能力。继续上面代码的例子,假如我们要搜索有多少和'应届生 招聘'相关的 title 内容,可以通过在 DashVector 上去查询'应届生 招聘',即可迅速获取与该查询语义相近的内容,以及对应内容与输入之间的相似指数。
免费体验阿里云高性能向量检索服务:https://www.aliyun.com/product/ai/dashvector
版权声明: 本文为 InfoQ 作者【DashVector】的原创文章。
原文链接:【http://xie.infoq.cn/article/ee1138b5a81c0bb1d6b1dda8a】。文章转载请联系作者。
评论