Embedding是什么?从文本转向量

向量的作用

在了解embedding之前,我们先要知道向量是做什么的,为什么需要向量,我们使用中文好好的不行吗,es模糊匹配一样可以解决问题。

但是假如我们有以下这个场景,知识库内的内容是:打卡截止时间为9:00。用户提问:我8:30进行打卡可以吗?

以上这种场景我们使用文字的匹配几乎不可能匹配上,所以我们引入了向量。

那向量是什么呢,这里的向量可以理解为对文本语意的多维度展现,举个例子加入"苹果"的向量是0.213, 0.554,第一个向量代表的是苹果的大种类,属于水果,那"香蕉"的向量就可能是0.213, 0.76942, 也是属于水果这个大种类。大概可以这么理解向量,当然具体的例子肯定复杂的多,但一通百通,原理都差不多。实际应用中,向量维度可能高达数百甚至数千,这里仅用二维简化示意

好的,那知道了向量的作用,我们还得知道向量的匹配机制,两个向量之间你怎么知道他的相似度呢?

向量相似度

余弦相似度是比较向量相似度中最常用的方式。每个向量都可以看成是从原点出发的一个箭头,余弦相似度就是两个箭头的方向有多么接近。余弦相似度越接近1,表示两个向量方向越一致(语义越相似);越接近0,表示越无关;越接近-1,表示越相反

正常来说我们如果要找相似度差不多的大概在0.7以上就行了。取相似度最高的几个,然后过滤掉0.7以下的向量。

Embedding

所以将文本转为向量的技术就是embedding,只要我们输入一串文本,embedding就会将这串文本的向量数据返回回来。

不同的embedding模型所对应的向量维度,最大文本长度都不太一样,维度越高,表达能力就越强,分析的越细致,但是存储和计算的成本也会变得更高。

最大输入长度也决定了你的chunk能有多长。

不同模型对于中文的识别效果也不太一样,整体国内的阿里通义 text-embedding-v3 对于中文的效果最好,api也更加稳定,国外的openAi的embedding模型对于英文的效果更好。

这里也要提一点,不同的embedding模型输出的向量是不太一致的,如果使用了一个模型进行chunk内容的向量化,那么进行输入匹配的向量化也得使用这个embedding模型,不然可能匹配出问题。

总结

所以我们的RAG流程是

上传文件 → 文件Tika提取文本 → 文件内容chunk拆分 → 不同chunk向量化处理 embedding

再往后就是对向量进行存储,以及后续用户输入内容匹配再交给大模型识别。

相关推荐
St_rive2 小时前
Page Object设计模式
java·开发语言·设计模式
watersink3 小时前
机器学习聚类算法
算法·机器学习·聚类
风流 少年3 小时前
Spring AI 2.0:SSE
java·人工智能·spring
凤山老林3 小时前
精细化流量治理:Spring Boot 动态特性开关与灰度发布体系
java·spring boot·后端
饼饼学习空间智能5 小时前
家庭服务机器人训练数据怎么积累?仿真、真实采集与持续学习的技术路线分析
人工智能·算法·机器学习
Aphelios3805 小时前
一次锁内网络IO引发的Tomcat线程池“饿死”事故
java·开发语言·spring boot·elasticsearch·tomcat·网络io阻塞·线程池耗尽
不可求~6 小时前
C++ std::string_view 不是字符串:从悬空引用到安全用法
java·开发语言·c++
Lam Tang6 小时前
APS 系列文章10
java·代理模式