基于向量检索服务与灵积实现语义搜索

简介: 本教程演示如何使用向量检索服务(DashVector),结合灵积模型服务上的Embedding API,来从0到1构建基于文本索引的构建+向量检索基础上的语义搜索能力。具体来说,我们将基于QQ 浏览器搜索标题语料库(QBQTC:QQ Browser Query Title Corpus)进行实时的文本语义搜索,查询最相似的相关标题。

什么是 Embedding

简单来说,Embedding是一个多维向量的表示数组,通常由一系列数字组成。Embedding可以用来表示任何数据,例如文本、音频、图片、视频等等,通过Embedding我们可以编码各种类型的非结构化数据,转化为具有语义信息的多维向量,并在这些向量上进行各种操作,例如相似度计算、聚类、分类和推荐等。


整体流程概述



  • Embedding:通过DashScope提供的通用文本向量模型,对语料库中所有标题生成对应的embedding向量。
  • 构建索引服务和查询
  • 通过DashVector向量检索服务对生成embedding向量构建索引。
  • 将查询文本embedding向量作为输入,通过DashVector搜索相似的标题。

具体操作流程

前提条件


1、环境安装

说明:需要提前安装 Python3.7 及以上版本,请确保相应的 python 版本。


pip3 install dashvector dashscope

2、数据准备

QQ浏览器搜索相关性数据集(QBQTC, QQ Browser Query Title Corpus),是QQ浏览器搜索引擎目前针对大搜场景构建的一个融合了相关性、权威性、内容质量、 时效性等维度标注的学习排序(LTR)数据集,广泛应用在搜索引擎业务场景中。作为CLUE-beanchmark的一部分,QBQTC 数据集可以直接从github上下载(训练集路径为dataset/train.json)。


git clone https://github.com/CLUEbenchmark/QBQTC.git
wc-l QBQTC/dataset/train.json


数据集中的训练集(train.json)其格式为 json:

{
"id": 0, 
"query": "小孩咳嗽感冒", 
"title": "小孩感冒过后久咳嗽该吃什么药育儿问答宝宝树", 
"label": "1"}


我们将从这个数据集中提取title,方便后续进行embedding并构建检索服务。

importjsondefprepare_data(path, size):
withopen(path, 'r', encoding='utf-8') asf:
batch_docs= []
forlineinf:
batch_docs.append(json.loads(line.strip()))
iflen(batch_docs) ==size:
yieldbatch_docs[:]
batch_docs.clear()
ifbatch_docs:
yieldbatch_docs

3、通过 DashScope 生成 Embedding 向量

DashScope灵积模型服务通过标准的API提供了多种模型服务。其中支持文本Embedding的模型中文名为通用文本向量,英文名为text-embedding-v1。我们可以方便的通过DashScope API调用来获得一段输入文本的embedding向量。


说明:需要使用您的api-key替换示例中的 your-dashscope-api-key ,代码才能正常运行。


importdashscopefromdashscopeimportTextEmbeddingdashscope.api_key='{your-dashscope-api-key}'defgenerate_embeddings(text):
rsp=TextEmbedding.call(model=TextEmbedding.Models.text_embedding_v1,
input=text)
embeddings= [record['embedding'] forrecordinrsp.output['embeddings']]
returnembeddingsifisinstance(text, list) elseembeddings[0]
# 查看下embedding向量的维数,后面使用 DashVector 检索服务时会用到,目前是1536print(len(generate_embeddings('hello')))

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,代码才能正常运行。


fromdashvectorimportClient, Doc# 初始化 DashVector clientclient=Client(
api_key='{your-dashvector-api-key}',
endpoint='{your-dashvector-cluster-endpoint}')
# 指定集合名称和向量维度rsp=client.create('sample', 1536)
assertrspcollection=client.get('sample')
assertcollectionbatch_size=10fordocsinlist(prepare_data('QBQTC/dataset/train.json', batch_size)):
# 批量 embeddingembeddings=generate_embeddings([doc['title'] fordocindocs])
# 批量写入数据rsp=collection.insert(
        [
Doc(id=str(doc['id']), vector=embedding, fields={"title": doc['title']}) 
fordoc, embeddinginzip(docs, embeddings)
        ]
    )
assertrsp

5、语义检索:向量查询

在把QBQTC训练数据集里的title内容都写到DashVector服务上的集合里后,就可以进行快速的向量检索,实现“语义搜索”的能力。继续上面代码的例子,加入我们要搜索有多少和'应届生 招聘'相关的title内容,可以通过在DashVector上去查询'应届生 招聘',即可迅速获取与该查询语义相近的内容,以及对应内容与输入之间的相似指数。

# 基于向量检索的语义搜索rsp=collection.query(generate_embeddings('应届生 招聘'), output_fields=['title'])
fordocinrsp.output:
print(f"id: {doc.id}, title: {doc.fields['title']}, score: {doc.score}")
id: 0, title: 实习生招聘-应届生求职网, score: 2523.1582
id: 6848, title: 应届生求职网校园招聘yingjieshengcom中国领先的大学生求职网站, score: 3053.7095
id: 8935, title: 北京招聘求职-前程无忧, score: 5100.5684
id: 5575, title: 百度招聘实习生北京实习招聘, score: 5451.4155
id: 6500, title: 中公教育招聘信息网-招聘岗位-近期职位信息-中公教育网, score: 5656.128
id: 7491, title: 张家口招聘求职-前程无忧, score: 5834.459
id: 7520, title: 前程无忧网北京前程无忧网招聘, score: 5874.412
id: 3214, title: 乡镇卫生院招聘招聘乡镇卫生院招聘信息+-58同城, score: 6005.207
id: 6507, title: 赶集网招聘实习生北京实习招聘, score: 6424.9927
id: 5431, title: 实习内容安排百度文库, score: 6505.735
相关文章
|
4月前
|
存储 数据库 Python
阿里云向量检索服务 | 全性能搜索方案
【1月更文挑战第13天】阿里云向量检索服务 | 全性能搜索方案
阿里云向量检索服务 | 全性能搜索方案
|
4月前
|
人工智能 自然语言处理 Cloud Native
向量检索服务在语义检索、知识库搭建、AI多模态搜索等场景中有着广泛的应用
向量检索服务在语义检索、知识库搭建、AI多模态搜索等场景中有着广泛的应用
78 0
|
4月前
|
存储 人工智能 算法
【阿里云产品测评】揭秘阿里云向量检索服务:赋予智能时代搜索新“维度”
【1月更文挑战第3天】在数字化洪流席卷全球的今天,信息的表达与检索方式正在悄然变革。从字符到图像,再到复杂的多维度数据,我们正在步入一个深度理解、精准匹配的智能搜索新时代。此刻,阿里云推出的向量检索服务正以前沿技术之力,引领这一领域的创新潮流。 阿里云向量检索服务,内核采用自研的Proxima引擎,其强大之处在于能够实现水平拓展、全托管和云原生的高效向量检索。这就好比构建了一个可以无限延伸的“知识宇宙”,无论是大规模图像识别、语音识别模型生成的特征向量,还是复杂的大模型知识库结构化信息,都能通过向量化的形式被管理和高效检索。
|
4月前
|
人工智能 大数据 API
阿里云向量检索服务测评
在当今的大数据时代,向量检索技术已成为处理海量数据、实现高效信息检索的重要手段。阿里云作为国内领先的云计算服务提供商,推出了自己的向量检索服务。本文将对阿里云的向量检索服务进行深入的测评,探讨其在语义检索、知识库搭建、AI多模态搜索等场景的最佳实践,并分析其与其他向量检索工具的优劣。
647 1
|
4月前
|
机器学习/深度学习 自然语言处理 搜索推荐
阿里云向量检索服务:重塑大数据检索的未来
阿里云向量检索服务是一款强大且易于使用的云服务产品,专为大数据检索而设计。通过深度学习模型和高效的索引结构,该服务提供了快速、准确的检索能力,适用于多种业务场景。在评测中,我们对其功能、性能和业务场景适配性进行了全面评估,认为其具有出色的性能和良好的业务场景适配性。未来,阿里云向量检索服务有望持续发展和创新,拓展更多应用领域,为用户带来更加卓越的体验。
1487 5
|
4月前
|
人工智能 API 数据处理
阿里云向量检索服务评测报告
本评测报告对阿里云向量检索服务进行了全面而深入的分析,包括最佳实践探索、产品体验评测以及与其他向量检索工具的对比。评测结果显示,阿里云向量检索服务在语义检索、知识库搭建、AI多模态搜索等场景中表现出色,具有高效、易用、可扩展等优点。同时,该服务还提供了丰富的功能和优化选项,满足了复杂业务需求。然而,也存在一些可以改进的地方,如优化大规模数据处理性能、提供更多自定义配置选项等。总体而言,阿里云向量检索服务是一款值得推荐的向量检索解决方案。
|
4月前
|
人工智能 监控 搜索推荐
阿里云向量检索服务评测报告
本评测报告旨在对阿里云向量检索服务进行全面评估,包括最佳实践探索、产品体验评测以及与其他向量检索工具的对比。评测结果显示,阿里云向量检索服务在性能、易用性、可扩展性和便捷性等方面表现出色,能够满足不同业务场景的需求。同时,针对该产品的改进建议和期望联动方案也提出了具体建议,以期为用户提供更有价值的参考信息。
|
4月前
|
存储 人工智能 Cloud Native
阿里云向量检索服务测评:高效、易用、强大的向量管理与查询能力
摘要:本文对阿里云向量检索服务进行了全面的测评,从其基于自研Proxima内核的高性能、全托管、云原生特性,到简洁易用的SDK/API接口,再到在多种应用场景下的集成能力,为读者提供了一个全面了解阿里云向量检索服务的机会。
1114 0
|
4月前
|
存储 人工智能 大数据
阿里云向量检索服务评测报告
随着人工智能和大数据技术的飞速发展,向量检索技术在语义检索、知识库搭建、AI多模态搜索等领域的应用越来越广泛。阿里云推出的向量检索服务基于自研的Proxima内核,旨在为用户提供高效、全托管的向量检索解决方案。本报告将从最佳实践、产品体验和对比测评三个方面对阿里云向量检索服务进行全面评测。
|
4月前
|
数据采集 机器学习/深度学习 搜索推荐
阿里云向量检索服务体验评测
阿里云向量检索服务是一款功能强大、易于接入的云服务产品。它为用户提供了快速、准确的向量检索功能,适用于多种业务场景,如推荐系统、搜索和图像识别等。产品具有完善的使用文档和丰富的开发者支持,方便用户快速上手。与其他阿里云产品联动,可以为用户提供更加全面和高效的一站式解决方案。尽管有改进空间,但阿里云向量检索服务已表现出出色的性能和应用价值。
673 1