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

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

相关推荐
6+h1 小时前
【java IO】转换流 + 对象流 + 序列化详解
java·开发语言
一棵树73511 小时前
Springboot项目常用工具对比总结
java·spring boot·后端
IT痴者1 小时前
Kotlin 开发注意事项(Android Java 开发者转型指南)
android·java·kotlin
国产化创客1 小时前
OpenClaw在树莓派DHT11数据采集任务过程全记录
ai·树莓派·智能硬件·openclaw
智算菩萨1 小时前
大语言模型迈向通用人工智能:基础原理与方法综述——文献精读
人工智能·深度学习·ai·语言模型·自然语言处理
wuqingshun3141591 小时前
产生死锁的四个必要条件
java·jvm
青槿吖1 小时前
第二篇:Spring MVC进阶:注解、返回值与参数接收的花式玩法
java·开发语言·后端·mysql·spring·mvc·mybatis
共享家95272 小时前
Java入门(抽象类 与 接口)
java·开发语言
hanbr2 小时前
C++ string类模拟实现(完整版,含全运算符重载)
java·开发语言