AI之旅-语义搜索:初识 vector embedding 与部署向量数据库 qdrant

AI之旅实现的第一个功能是基于大模型的 vector embedding 进行语义搜索(semantic search)。

(图片来源:kdnuggets.com

基于大模型实现的聊天机器人虽然能打字和你聊天,但大模型大字不识一个,它只识数(向量)与只会计算,它不会玩文字游戏,只会玩数字游戏。

任何一段文字,在大模型的眼里只是一个向量,这个向量是包含n个元素的浮点型数组(n对应大模型的n维空间),数组中的一组浮点数字表示的是大模型n维空间中的坐标,大模型n维空间可以理解为大模型在自己的「大脑」中对文字的语义进行建模的空间,大模型将对一段文字的理解映射到n维空间中的一个点。不管多么长多么复杂的一段文字,都可以用一个点表示,这就是多维空间的神奇力量。这个向量,这个数组,这个坐标,这个点,就是大名鼎鼎的 vector embedding,大模型通过 vector embedding 将文字的语义嵌入到自己的n维空间,然后通过对向量的计算操作玩转数字,从而玩转文字。如果你想更多了解 vector embedding,推荐阅读 Embeddings: What they are and why they matter

(图片来源:simonwillison.net

由于有了 vector embedding,只要计算向量之间的距离,大模型就可以知道两段文字在语义上是否相似,语义搜索就是基于这个原理。

(图片来源:causewriter.ai

(图片来源:datastax.com

我们要实现园子博文的语义搜索,只要使用一种大模型生成博文内容的 vector embedding 存入向量数据库(类似于传统搜索的建索引),然后搜索时将搜索文字通过大模型生成 vector embedding,通过 vector embedding 在向量数据库中查找语义相近的博文内容即可。

第一步准备工作是选择一种向量数据库并完成部署,我们选择的是开源向量数据库 qdrant,由于我们的应用都部署在 k8s 集群上,所以我们选择在 k8s 集群上部署 qdrant,qdrant 提供了 helm chart,k8s 上的部署更便捷了。

先添加 qdrant 的 helm 仓库

helm repo add qdrant https://qdrant.github.io/qdrant-helm
helm repo update

然后编写 qdrant-values.yaml 清单文件

config:
  service:
    enable_tls: false

persistence:
  storageClassName: nas-db
  size: 50G

snapshotPersistence:
  storageClassName: nas-db
  size: 50G

resources: 
  limits:
    cpu: 2
    memory: 4Gi
  requests:
     cpu: 1
     memory: 1Gi

需要注意的是,这是数据库,需要将数据文件保存在 nas 存储上,上面的 storageClassName 用于指定所使用的 nas 存储,nas-db 是我们的 k8s 集群之前已经部署好的使用阿里云 nas 的 StorageClass。

通过下面的命令进行部署

helm upgrade -i qdrant qdrant/qdrant -f qdrant-values.yaml

然后查看部署是否成功

pod/qdrant-0               1/1          Running
service/qdrant             ClusterIP    10.99.106.66    6333/TCP,6334/TCP,6335/TCP 
service/qdrant-headless    ClusterIP    None            6333/TCP,6334/TCP,6335/TCP
statefulset.apps/qdrant    1/1          45h

pod 处于 Running 状态,说明部署成功了。

第一步准备工作完成了,接下来就是调用大模型(我们选用的是通义千问)把园子的博文内容生成 vector embedding 存入 qdrant 向量数据库,然后就可以实现语义搜索,这将是AI之旅下一篇博文的主要内容。

参考资料:

posted @ 2024-11-20 18:09  博客园团队  阅读(614)  评论(2编辑  收藏  举报