在做RAG产品时,比如智能客服产品,用户询问了某款产品的型号,此时需要从产品知识库里根据用户问题/query 召回出此款产品的信息,然后此产品信息与系统提示词结合发送给大模型,大模型最后响应,完成智能客服服务。
其中,能否精准召回符合用户需求的产品信息是非常关键的,因为大模型具有幻觉,所以只有精准召回与用户问题相关的产品信息才能实现精准且智能的客户服务。
"向量相似度"是召回的技术手段之一,相似度计算可以帮助我们了解两个向量在多维空间中的接近程度。
下面举个简单示例来通俗理解。
假设我们有一个包含多段文本块的数据,每段文本块都被转换为了一个向量表示(仅仅是表示,为了通俗理解请忽视向量具体数字含义),如下所示:
文本块ID | 词汇表 | 向量表示 |
---|---|---|
1 | {你,好,啊,今,天,天气,不错} | [1,1,1,0,0,0,0] |
2 | {你,好,啊,我,喜欢,吃,苹果} | [1,1,1,0,0,0,0] |
3 | {今,天,天气,真,好,啊} | [0,1,1,1,0,1,0] |
4 | {我,喜欢,吃,苹果,也,喜欢,吃,梨} | [0,0,0,0,0,0,1] |
现在,我们想要查询与查询文本“我喜欢吃梨”相似的文章,可以按照以下步骤进行:
-
将查询文本“我喜欢吃梨”转换为向量表示,方法同上,得到向量[0,0,0,1,1,0,1]。
-
计算查询向量与数据中每段文本块向量的余弦相似度,得到一个相似度矩阵,如下所示:
文本块ID | 相似度 |
---|---|
1 | 0.01 |
2 | 0.23 |
3 | 0.05 |
4 | 0.33 |
- 按照相似度从大到小的顺序对文章进行排序,得到查询结果,如下所示:
文本块ID | 相似度 |
---|---|
4 | 0.33 |
2 | 0.23 |
3 | 0.05 |
1 | 0.01 |
因此,与查询文本“我喜欢吃梨”最相似的文本块是文本块4,余弦相似度为0.33。这样的查询原理就是利用向量表示和余弦相似度计算,快速地找到与查询文本最相似的文章。
此外,基于向量计算相似度有几种算法:
推荐阅读: 推荐算法原理(一)余弦定理计算物品间相似度
评论区