运用 Elasticsearch 8.1.x 实现智能问答系统

Posted 铭毅天下

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运用 Elasticsearch 8.1.x 实现智能问答系统相关的知识,希望对你有一定的参考价值。

序言

图示:一个简单的智能问答系统。

  • 在当前业务系统中,是否感受到越来越多的智能化个性业务诉求,做一个智能化的商品搜索,用于检索商品的相似性;做一个图片搜索,检索相似的图片;做一个语音搜索,检索相似度极高的音频,这种智能化的需求越来越多。

  • 可能你听过看过很多机器学习或者深度学习的“名词“,对于一些常规的应用工程师来说,这些距离个人很远,打开各种算法网站,看到各种模型,看的头疼。

  • 可能你是一个高学历的深度学习方面工程师,当面对业务复杂的需求时,也会两难,虽然掌握了很多深度学习模型,但在具体工程落地实践时,遇到很多困惑,如何解决海量的向量存储,如何解决海量的检索,如何与应用工程师搭配等。

以上是我们一个个IT领域工程师都会有的困惑,单个人精力有限,有的人擅长工程实践,有的人擅长算法模型,所以得需要找到一个中间衔接点,这个点就是 "Elasticsearch”

Elasticsearch 是如何解决问题的?

dense_vector

2019年4月,Elasticsearch发布了7.0版本,带来了很多新特性,其中增加了新的字段类型dense_vector,向量字段类型为智能搜索提供了最关键的基石,可广泛应用于文本相似度搜索、图片相似度搜索、语音相似度搜索等。

同时借助于Elasticsearch的架构特性,既可以解决海量数据的存储,也可以解决海量数据的检索,非常完美的解决了深度学习工程师的工程问题。

如下案例:设置字段类型为 dense_vector

PUT xxx-index-01

  "mappings": 
    "properties": 
      "my_vector": 
        "type": "dense_vector",
        "dims": 3,
        "index": true,
        "similarity": "dot_product"
      
    
  

knn-search

2022年2月,Elasticsearch发布了8.0版本,同样带来很多新特性,其中最关注的是knn-search,提供了一种更加高效的索引算法,检索效率同比之前大幅度提升,在此之前只能通过简单粗暴的全表三角函数计算。

如下案例:基于_knn_search 构建向量检索

#KNN检索:_knn_search,构建向量检索
GET my-index/_knn_search

  "knn": 
    "field": "image_vector",
    "query_vector": [0.3, 0.1, 1.2],
    "k": 10,
    "num_candidates": 100
  ,
  "_source": ["name", "date"]

Text-embedding

在深度学习领域,tensorflow深度学习平台是大家经常讨论熟知使用的,有了深度学习平台强力支撑,高学历的深度模型工程师仅仅需要关注算法模型层面,无需关注工程层面,在此之上,也衍生出一些成熟的算法模型,开箱即用,大大降低了项目落地的门槛。

基于Text-embedding单词嵌入模型,可以将文本、图像、音频等各种世间万物转换为特定向量,程序提前将各种数据生成对应向量,存入到Elasticsearch平台中,应用搜索时,也可以即可在Elasticsearch进行检索。

图示:通过embed模型,将文本内容转化为向量

本次公开课

  • 本次公开课,将基于Elasticsearch 新特性dense_vector、knn_search实现一个智能问答系统。

你将收获如下内容

  • 了解一个智能问答系统的前后实现机制?

  • 为什么选择 Elasticsearch来实现?

  • 动手搭建 Elastic Stack 8.1.x?

  • 动手实现 ES-Vector智能问答系统?

  • 全新认识 Elastic Stack 技术生态与应用领域

参考文献

  • dense-vector 向量字段类型

https://www.elastic.co/guide/en/elasticsearch/reference/8.1/dense-vector.html

  • knn-search 近邻搜索

https://www.elastic.co/guide/en/elasticsearch/reference/8.1/knn-search.html

  • text-similarity-search-with-vectors-in-elasticsearch 使用向量字段进行文本相似度搜索

https://www.elastic.co/cn/blog/text-similarity-search-with-vectors-in-elasticsearch

  • universal-sentence-encoder text-embeding 文本向量模型

https://tfhub.dev/google/universal-sentence-encoder/4

关于我们

讲师

李猛 Elastic King 数据领域专家

  1. Elastic Stack 国内顶尖实战专家

  2. ELastic Stack 技术社区分享嘉宾

  3. 国内首批 Elastic 官方认证工程师21人之一

  4. 阿里云MVP(大数据领域)

  5. DBAPlus MVP(原创内容贡献者)

  6. GitHub:https://github.com/ynuosoft

  7. 咕泡教育 《Elastic Stack 架构师P6成长路径》主讲老师。

2012年入手Elasticsearch,对Elastic Stack技术栈开发、架构、运维、源码、算法等方面有深入实战;负责过多种Elastic Stack项目,包括大数据分析领域,机器学习预测领域,业务查询加速领域,日志分析领域,基础指标监控领域等;

服务过多家企业,提供Elastic Stack 咨询培训以及调优实施;

多次在Elastic Stack技术大会/技术社区分享,发表过多篇实战干货文章;

十余年技术实战从业经验,擅长大数据多种技术栈混合,系统架构领域。

以上是关于运用 Elasticsearch 8.1.x 实现智能问答系统的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:运用 Go 语言实现 Elasticsearch 搜索 - 8.x

Elasticsearch:运用 Go 语言实现 Elasticsearch 搜索 - 8.x

Elasticsearch:运用scroll接口对大量数据实现更好的分页

Elasticsearch:运用 Python 来实现对搜索结果的分页

Elasticsearch:运用 Python 来实现对搜索结果的分页

Elasticsearch:运用search_after来进行深度分页