腾讯云ES AI增强搜索:十分钟快速入门自然语言处理(NLP)与向量检索

2023-11-24 10:03:06 浏览数 (3)

| 导语 本文从腾讯云ES AI增强搜索相关能力介绍出发,通过集群部署、模型上传、效果验证等全流程演示,从零到一完成基于腾讯云ES的自然语言处理(NLP)与向量检索实践。

引言

腾讯云Elasticsearch Service近期上线的ES 8.8.1版本,提供了强大的云端AI增强能力,支持在统一技术栈中完成文本 向量的混合搜索,实现自然语言处理以及与大模型的集成,助力客户实现由AI驱动的高级搜索能力,为搜索与分析带来全新的前沿体验。本文将从集群部署、模型上传、效果展示等方面进行演示,基于腾讯云ES快速完成自然语言处理(NLP)与向量检索实践。

AI增强搜索能力

向量检索

除了经典的文本搜索以外,ES 8.8.1支持端到端的向量生成、向量索引、向量相似性比较,无需额外的平台进行向量推理。在生产中,企业可以将腾讯云ES作为向量数据库使用,有效地创建、存储和搜索密集向量,为用户提供更加智能的搜索功能。例如,企业可在腾讯云ES上传自定义大数据模型来做Embedding,如词嵌入模型(Word Embedding)或深度学习模型(如BERT),在读写过程中实时将图片、文本等数据转换为向量,然后存入Elasticsearch构建索引并进行相似度召回。

图一

混合排序算法

腾讯云ES8.8.1版本使用最新的Reciprocal Rank Fusion (RRF) 混合排序算法,可同时支持全文检索和向量搜索,让开发人员更好地优化Al搜索引擎,实现语义和关键字的组合查询。

图二

自然语言处理

腾讯云ES 8.8.1版本具备强大的自然语言处理能力,可以处理各种NLP任务和模型,使得搜索结果更加符合自然语言的语义。用户可以直接在 ES中使用 PyTorch机器学习模型(例如 BERT),并在 ES 中使用这些模型进行推理。

图三

与大语言模型的结合

LLM大语言模型虽然可以根据历史的数据生成连贯且与上下文相关的响应,但它无法访问特定领域的数据或提供独特知识库的个性化答案。因此,如果需要大语言模型更“懂”用户需要什么,与ES结合是最优的选择之一。具体而言,企业可将文本数据以及向量化后的数据存入ES构建索引并进行混合搜索。同时,在召回后,可选择将TOP n的结果集传入LLM大语言模型(如ChatGPT、混元) 等,对信息进行对话式结果整合,最终返回给用户,实现对话式搜索。

图四

快速实践

集群部署

在腾讯云Elasticsearch Service 上创建白金版 ES 8.8.1 集群。

图五

为确保模型能正常上传以及加载,推荐购买4核8G以上的节点规格。

模型上传

ES 支持通过Eland进行模型上传,我们可通过 Pip或者Docker的方式从本地或者开源社区(例如Hugging Face)将模型上传至ES中。

图六

说明:Pip安装Eland对于python以及numpy等版本均有依赖,如果是从本地进行模型上传,推荐使用Docker的方式。

一、获取集群访问地址

通过「ES集群管理」-> 点击「集群名称」->「访问控制」路径,进入访问控制页面,获取用户名密码以及集群访问地址。

说明:如果是本地上传,需要使用公网访问地址,并将IP白名单设置为当前机器的IP地址;公网访问仅适用于测试环境,在生产环境中,推荐使用内网访问。

图七

二、获取模型地址

以 Hugging Face为例,我们可搜索所需的模型,进入对应页面后,点击复制按钮。

图八

ES目前已支持NER、Text_Classification、Text_Embedding、Fill_Mask、Question_Answering 和 Zero_Shot_Classification等类型模型。

三、上传模型

格式如下:

代码语言:javascript复制
docker run -it --rm docker.elastic.co/eland/eland  eland_import_hub_model --url ES集群访问地址 -u 用户名 -p 密码  --hub-model-id 模型名称 --task-type 任务类型 --start --insecure

任务类型可选为:fill_mask、ner、text_classification、text_embedding、question_answering 、 zero_shot_classification

例如,我将embbeding模型 sentence-transformers/msmarco-bert-base-dot-v5上传到ES中:

代码语言:javascript复制
docker run -it --rm docker.elastic.co/eland/eland  eland_import_hub_model --url 我的集群访问地址 -u 用户名 -p 密码  --hub-model-id sentence-transformers/msmarco-bert-base-dot-v5 --task-type text_embedding --start --insecure

上传成功后,我们即可在Kibana中看到我们的模型:

图九

Eland更多使用方式,请参考https://github.com/elastic/eland#getting-started

效果演示

本次演示,我分别上传了NER、Text_Classification、Fill_Mask、Text_Embedding四种类型的模型。我们可进入Kibana的Dev tools页面,进行相关验证。Kibana 公网访问需设置IP白名单,您可在界面「公网访问策略」进行设置,设置完成后,点击「Kibana公网访问地址」。

图十

进入Kibana后,在右侧选择「Dev tools」:

图十一

一、命名实体识别(NER)

代码语言:javascript复制
POST /_ml/trained_models/elastic__distilbert-base-cased-finetuned-conll03-english/deployment/_infer
{
  "docs": {
    "text_field": "Kevin said that Shenzhen is a vibrant city"
  }
}

该示例中,NER模型将“Kevin”识别成了“人”,将“Shenzhen”识别成了“地点”:

图十二

代码语言:javascript复制
POST /_ml/trained_models/elastic__distilbert-base-cased-finetuned-conll03-english/deployment/_infer
{
  "docs": {
    "text_field": "Kevin said that Tencent was a great company in the world"
  }
}

该示例中,NER模型将“Kevin”识别成了“人”,将“Tencent”识别成了“组织”:

图十三

二、情绪分析(Text_Classification)

代码语言:javascript复制
POST _ml/trained_models/distilbert-base-uncased-finetuned-sst-2-english/deployment/_infer 
{
  "docs": { "text_field": "Tencent,I love you!"}
}

图十四

代码语言:javascript复制
POST _ml/trained_models/distilbert-base-uncased-finetuned-sst-2-english/deployment/_infer 
{
  "docs": { "text_field": "I do not like that model!"}
}

该示例中,情绪模型将"I do not like that model!"分类为消极情绪:

图十五

三、填空模型(Fill_Mask)

代码语言:javascript复制
POST /_ml/trained_models/bert-base-uncased/deployment/_infer
{
  "docs": {
    "text_field": "Paris is the [MASK] of France"
  }
}

图十六

代码语言:javascript复制
POST /_ml/trained_models/bert-base-uncased/deployment/_infer
{
  "docs": {
    "text_field": "Beijing is the capital of [MASK]."
  }
}

图十七

四、文本向量化(Text_Embedding)

all-MiniLM-L6-v2是一个用于文本的embedding模型,可将句子和段落映射到 384 维密集向量空间,进行聚类或语义搜索等任务。

图十八

代码语言:javascript复制
POST /_ml/trained_models/sentence-transformers__all-minilm-l6-v2/deployment/_infer
{
  "docs": {
    "text_field": "Elasticsearch"
  }
}

从返回中可以看出,文本“Elasticsearch”最终被映射为384维的向量数据。

图十九

总结

腾讯云ES 8.8.1版本支持在单一端到端搜索与分析平台中实现自然语言处理、向量搜索以及与大模型的集成,支持高达十亿级向量检索,平均响应延迟控制在毫秒级。使用该服务,我们可以轻松便捷地创建集群、部署NLP模型,并进行搜索和推理任务。

本文从腾讯云ES AI增强搜索相关能力介绍出发,通过集群部署、模型上传、效果验证等全流程演示,从零到一完成了基于腾讯云ES的自然语言处理(NLP)与向量检索实践。

在未来,我们也将继续优化腾讯云ES,以满足企业级生产环境的更多需求,并为用户提供更好的使用体验。我们将不断努力,为人工智能助手的开发和应用带来更多创新和便利。

欢迎扫码加入腾讯云ES AI增强与向量检索交流群:

推荐阅读

关注腾讯云大数据公众号

邀您探索数据的无限可能

点击阅读原文,了解更多资讯

↓↓↓

0 人点赞