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

2022-05-23 13:54:46 浏览数 (1)

序言

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

  • 在当前业务系统中,是否感受到越来越多的智能化个性业务诉求,做一个智能化的商品搜索,用于检索商品的相似性;做一个图片搜索,检索相似的图片;做一个语音搜索,检索相似度极高的音频,这种智能化的需求越来越多。
  • 可能你听过看过很多机器学习或者深度学习的“名词“,对于一些常规的应用工程师来说,这些距离个人很远,打开各种算法网站,看到各种模型,看的头疼。
  • 可能你是一个高学历的深度学习方面工程师,当面对业务复杂的需求时,也会两难,虽然掌握了很多深度学习模型,但在具体工程落地实践时,遇到很多困惑,如何解决海量的向量存储,如何解决海量的检索,如何与应用工程师搭配等。

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

Elasticsearch 是如何解决问题的?

dense_vector

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

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

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

代码语言:javascript复制
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 构建向量检索

代码语言:javascript复制
#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模型,将文本内容转化为向量

参考文献

  • 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

0 人点赞