知识库检索匹配的服务化实践

文章详细描述了使用Milvus进行向量召回和文本向量计算的模型,涉及双塔召回模型、InfoNCE算法、精排序以及工程实现中的性能优化策略,包括QPS和响应时间的管理。文章还介绍了Milvus在知识库检索中的关键技术和生态优势。

参考:有赞技术|知识库检索匹配的服务化实践 - AIQ (6aiq.com)

 向量召回

向量召回的思想就是计算检索词的向量和文档标题/相似问的向量的余弦相似度,返回相似度分数最高的TopK个文档,计算向量相似度的步骤放在Milvus进行,Milvus作为向量检索库,对计算过程有优化,性能更好。

向量计算模型结构:

文本转向量的算法模型由embedding、两层transformer和MLP组成,模型最后会对编码向量做L2归一化,采用典型的双塔模式,可以将左塔的检索词和右塔的文档标题形成独立的子网络,左右塔的结构分离但编码器参数共享,双塔结构天然的可以用于召回,将这个模型部署到小盒子就可以在线计算检索词的向量,将海量的知识库文档作为右塔离线训练成文本向量后刷入向量检索工具Milvus。

双塔召回模型的核心思想是将query/item嵌入到共享低维空间,然后通过向量距离来度量相关性。

工程实现部分的DP离线任务中实现了计算文档标题和相似问向量并将其导入Milvus的功能。由于Milvus对string类型属性信息存储检索不够友好,会在DB阶段会请求mysql库表对召回结果进行扩展,匹配补全相关信息。

3.4 精排序

经过召回和粗排后,可以理解为将重要相关的文档排在了前面,但是距离用户真正的检索意图还有差距,可以使用用户的检索记录对结果再进行排序。

基于所有场景的用户检索点击数据,有点击行为就认为检索词和文档标题匹配(正样本),其他就认为没有那么匹配(负样本)。

训练数据样例:

采用 in_batch 负采样就不需要提前构造负样本,模型的设计如下:

检索词与正负样本的相似度会进入InfoNCE(info Noise Contrastive Estimation,噪声对比估计)的函数计算损失,使用这个损失来更新模型参数。这个由很多负样本组成的双塔结构也称为对比学习,核心思想是去拉近相似的样本,推开不相似的样本,目标是要从样本中学习到一个好的语义表示空间。

精排模型与文本转向量的算法原理相同。

InfoNCE计算公式:(可以理解为带温度超参的CrossEntropy)

分子是正例对的相似度,分母是正例对+所有负例对的相似度,最小化infoNCE loss,就是最大化正例对的相似度,最小化负例对的相似度。

在计算损失时,label可以在batch内生成,检索词和文档的编码向量经过矩阵乘法可以得到一个相似度方阵,对角位置就是互相匹配的检索词和文档的分数,如果batch_size=4,那每行对应的label就是 [0,1,2,3]。in_batch负采样损失计算示意图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值