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

知识库是企业经营过程中的面向客户和内部员工的知识沉淀文档库,里面包含各类教程、问答、案例等,知识库的检索匹配是自然语言处理(NLP)中一个重要的基础问题,本质是进行文本语义的相似度计算,也就是语义匹配,我们很多领域的任务都可以抽象为文本匹配检索任务,例如检索引擎、智能客服、知识检索、信息推荐等领域。知识库检索匹配可以概述为:给定一个query和大量候选知识库的文档,从这些文档中找出与用户输入query最匹配的TopK个文档。

检索优化第一步:DSL改写,接手前业务方自己已经对检索结果做过优化,调整不同字段的匹配权重,这一方法的已经难以继续优化。从知识运营的角度出发,在用户检索时,将运营认为重要的文档推到前面,由于文档之间互相有链接引用,可以使用PageRank算法给每个文档计算重要分(PR值)。PageRank的核心思想是,被引用次数越多的文档越重要。算法原理如下,假设只有四个网页ABCD,以AB间的箭头为例,代表可以从B网页跳转到A网页,对B即一次引用(链出),对A则一次被引用(链入)。L(B)表示B网页的链出数量,PR(B)表示B网页的PageRank分数。假设所有文档的初始PR值是0.25,这里L(B)=2,L(C)=1,L(D)=3,计算出PR(A)=0.458,接下来计算所有其他被引用(有链入)的文档PR值,PageRank是个迭代算法,反复计算以后所有的PR值会收敛,那就是最终每个文档的PR值,也是用来改写DSL的关键信息:

newscore=oldscore*log(1+2*PageRank)oldscore指原来不同字段加不同权重由ES算出来的BM25分数,PageRank缺失值使用1代替。

文本召回是召回中最常用的一种策略,最常见的方式是通过对Query直接进行分词,然后将分词后的关键词到ES构建倒排索引,进行tf-idf等相似计算匹配索引召回,这种召回方式的优点是实现简单,不需要训练模型、低资源需求、检索速度快,然而它的缺点也很明显,文本是具有语义的、是有语法结构的,文本召回忽略了语句的语法结构,同时也无法解决一词多义和同义词的问题,对query进行语义层面相似的召回效果就比较一般,解决这个问题就要用到向量召回。

L_i=-log(\frac{exp(sim(z_i,z_i^+)/\tau)}{\sum_j{exp(sim(z_i,z_j)/\tau)}})分子是正例对的相似度,分母是正例对+所有负例对的相似度,最小化infoNCEloss,就是最大化正例对的相似度,最小化负例对的相似度。在计算损失时,label可以在batch内生成,检索词和文档的编码向量经过矩阵乘法可以得到一个相似度方阵,对角位置就是互相匹配的检索词和文档的分数,如果batchsize=4,那每行对应的label就是[0,1,2,3]。inbatch负采样损失计算示意图:

模型训练好以后,就得到文本的编码器,输入两个文本,就可以得到一个匹配的分数,将这个模型部署到小盒子,在需要排序时,输入候选的文档标题和检索词,按计算出来的分数从高到低排序,就完成了一次对检索结果的排序。

当线上接受一条检索请求文本后,先调用在线推理-小盒子计算Query向量,然后去Milvus向量库中和知识库向量进行相似度计算,并返回距离最近的TopN个Item作为向量召回的结果。

海量的知识语料库向量化计算在自研DP平台离线运行,使得全库文本匹配速度较快:1)语料库预处理:包括语料库的文本清洗、文本筛选等预处理逻辑2)语料库向量化:利用上述的向量计算模型进行向量化3)导入Milvus库:将集合部署在Milvus集群,依次批量导入更新机器的集合保证线上可用

{"inputs":[{"name":"INPUT","shape":[1,1],"datatype":"BYTES","data":["满足条件满减送没有赠品"]}],"outputs":[{"name":"OUTPUT"}]}4.3、Milvus向量检索Milvus是一款开源的、针对海量特征向量的向量相似性检索(ANNS,Approximatelynearestneighborsearch)引擎,集成了Faiss、Annoy等广泛应用的向量索引,成本更低、性能更好、高度灵活、稳定可靠以及高速查询等特点,十亿向量检索仅毫秒响应。1、Milvus向量索引列表如下:简言之,每种索引都有自己的适用场景,如何选择合适的索引可以简单遵循如下原则:1)当查询数据规模小,且需要100%查询召回率时,用FLAT;2)当需要高性能查询,且要求召回率尽可能高时,用IVF_FLAT;3)当需要高性能查询,且磁盘、内存、显存资源有限时,用IVFSQ8H;4)当需要高性能查询,且磁盘、内存资源有限,且只有CPU资源时,用IVFSQ8。

2、Milvus目前支持的距离计算方式与数据格式、索引类型之间的兼容关系:选择合适的距离计算方式比较向量间的距离,能很大程度地提高数据分类和聚类性能,主要采用内积(IP)的计算方式,内积更适合计算向量的方向。内积计算两条向量之间的夹角余弦,并返回相应的点积。内积距离的计算公式为:假设有A和B两条向量,则||A||与||B||分别代表A和B归一化后的值。cosθ代表A与B之间的余弦夹角。在向量归一化之后,内积与余弦相似度等价。因此Milvus并没有单独提供余弦相似度作为向量距离计算方式。

算法模型接口服务由ai-service和ai-app两个服务组成,ai-service负责调用算法模型在线推理、Milvus实时向量召回等接入库,ai-app负责业务逻辑的开发。1、ai-service配置示例:

{"model_name":"similarity_jira","model_source_type":"YZ_MODEL","model_version":1,"model_invoke_timeout":3000,"protocol":"kfserving","infer_type":"triton","feature_maps":[{"model_feature_key":"INPUT","data_type":"string","shape":"(-1,1)","default_value":"","feature_source":"PARAMS","source_key":"jira_text","is_required":1}],"param_mapping":{"jira_text":""}}2、ai-app接口设计实现业务逻辑开发测试后,发布上线即可提供前后端调用。a、Maven示例:

com.youzanai-app-api1.0.13-RELEASEb、请求示例:

invokecom.youzan.ai.app.api.service.jira.Service.retrieve({"fromApp":"test","scene":"similarity_predict","Title":"满足条件没有赠品","Key":"XXX"})c、返回示例:

{"code":200,"data":{"Similaritys":[{"createdAt":1648137600000,"score":0.9390,"key":"XXX0123442334","title":"满足条件没有赠品"},{"createdAt":1636214400000,"score":0.9010,"key":"XXX0123365819","title":"满足条件没有送赠品"},{"createdAt":1653408000000,"score":0.8735,"key":"XXX0123482446","title":"订单满足条件没有送赠品"},{"createdAt":1655308800000,"score":0.8312,"key":"XXX0123496337","title":"订单满足条件但是没有送赠品"},{"createdAt":1659628800000,"score":0.8028,"key":"XXX0123527965","title":"订单满条件但是赠品没有送"}]},"success":true,"message":"successful"}

THE END
1.相比于离线训练,在线训练的好处有什么?问答离线训练毕竟使用的是 T-1 或者 T-2 的数据去做的,没有对线上实时产生的行为数据进行利用,对于数据的时效性利用相对较差。 比如说,有这样的一个场景,今天我的整个平台只对 14 岁以下的少女做某个运营活动,而平台上充斥了大量的年龄段的客户,整个平台的交互行为都变了,这个时候你的模型还是 T-1 去做的,将https://developer.aliyun.com/ask/446535
2.蚂蚁金服核心技术:百亿特征实时推荐算法揭秘备注:弹性特征带来一个显著的优势:只要用足够强的L1稀疏性约束,在单机上就能调试任意大规模的特征训练,带来很多方便。我们的hashmap实现是KV化的,key是特征,value是vector的首地址。 离线训练优化 经过这样的改造后,在离线批量学习上,带来了以下变化: 在线训练优化 https://maimai.cn/article/detail?fid=1010621115&efid=mIQCHnkj0zjxlpygUmo5mg
3.科学网—[转载]群视角下的多智能体强化学习方法综述基于学习(深度学习、强化学习)设计的迭代式问题求解方法是离线策略学习的基础范式。由于环境及对手的非平稳性,离线训练的蓝图策略通常很难直接运用于在线对抗。在线博弈对抗过程与离线利用模拟多次对抗学习博弈过程不同,博弈各方处于策略解耦合状态,与离线批(batch)式策略学习方法不同,在线博弈对抗策略的求解本质是一个流https://blog.sciencenet.cn/home.php?mod=space&uid=3472670&do=blog&id=1422698
4.深度学习难分样本挖掘(HardMining)数据派关键是找出影响网络性能的一些训练样本,针对性的进行处理。 简单来说就是把难分的样本,剔除出来,放到另外一个地方里面。最后将难分样本,给负样本,加强训练分类器。但是,这样又会造成数据不平衡的问题,下面会讲到。 03、方法:离线和在线 在样本训练过程中,会将训练结果与GroundTruth计算IOU。通常会设定一个阈值(0.5https://www.shangyexinzhi.com/article/4713934.html
5.粗排优化探讨得物技术离线在线一致性分析 待补充实际效果 四 样本设计 粗排相较于精排样本选择偏差(SSB)的问题更加严重,借鉴召回经验,可以通过适当采样减少偏差。采样设计的目的也是希望离线训练样本尽可能与线上分布一致。 样本选择方法 负样本可选范围: 曝光未点击样本; 全库除转化外样本; https://blog.itpub.net/70027824/viewspace-3000851/
6.基于Kmeans聚类的CSI室内定位AET对于单个天线对得到fin,对于m个天线的每个天线对使用Kmeans算法,得到训练向量: 2.2 在线定位阶段 在线定位阶段采用与离线训练阶段相同的方法提取到m个天线对的指纹: 将提取到的指纹与训练阶段建立的数据库中的指纹作比较,即将获取到的第i个天线对的指纹矩阵与数据库中的第i个天线对的指纹矩阵,进行两个指纹矩阵中任http://www.chinaaet.com/article/3000057028
7.离线学习(训练)和在线学习(训练)在线训练和离线训练文章浏览阅读1.4w次,点赞4次,收藏4次。https://blog.csdn.net/a133521741/article/details/79221015_在线训练和离线训练https://blog.csdn.net/sinat_40966515/article/details/100073130
8.编程入门实战训练CodeCamp在线编程实战CodeCamp, freeCodeCamp, 在线编程实战训练,是一个以操作实验为基础的编程训练营,它包含了HTML,CSS,Javascript,jQuery,Bootstrap等编程语言编程闯关,让你在实践中提升自己的编程能力。https://www.w3cschool.cn/codecamp
9.强化学习离线模型离线模型和在线模型推荐系统里非常常见,并且往往非常的隐蔽的一种数据分布不一致的情况被称之为冰山效应,也就是说离线训练用的是有偏的冰山上的数据,而在线上预估的时候,需要预测的是整个冰山的数据,包括大量冰面以下的数据!我们看下面这张图。左边是我们的Baseline,绿色的表示正样本,红色表示负样本,灰色部分表示线上由于推荐系统的“https://blog.51cto.com/u_14499/11815202
10.使用Merlin分层参数服务器扩展推荐系统推理推荐模型有两种培训模式:离线和在线。在线培训将新的模型更新部署到实时生产中,对于推荐的有效性至关重要。HPS 雇佣无缝更新机制通过Apache Kafka– 基于消息缓冲区连接训练和推理节点,如图 5 所示。 图5. HugeCTR 推理在线更新机制 更新机制有助于 MLOps 工作流,支持在线/频繁以及离线/再培训更新,无需停机。它还通https://www.eet-china.com/mp/a159829.html
11.推荐系统完整的架构设计和算法(协同过滤隐语义)其中,数据上报和离线训练组成了监督学习中的学习系统,而实时计算和 A/B 测试组成了预测系统。另外,除了模型之外,还有一个在线存储模块,用于存储模型和模型需要的特征信息供实时计算模块调用。图中的各个模块组成了训练和预测两条数据流,训练的数据流搜集业务的数据最后生成模型存储于在线存储模块;预测的数据流接受业务https://cloud.tencent.com/developer/article/1508050
12.人工智能团队研究成果在TKDE发表:样本高效的离线转在线强化学习离线强化学习,即智能体从先前收集的数据集中学习的过程,已被广泛研究并在机器人控制、推荐系统、智慧医疗等领域取得了巨大成功。然而,由于受到离线数据集质量的限制,离线强化学习智能体的性能通常是次优的。因此,在部署之前,通常需要进一步通过在线交互对预训练的离线强化学习智能体进行微调。 http://icfs.jlu.edu.cn/info/1007/3101.htm
13.2020年最值得收藏的60个AI开源工具语言&开发李冬梅SiamMask 是一款实时在线目标跟踪与目标分割统一框架。技术简单、通用、快速高效。它可以对目标实时跟踪。此款库还包含预训练模型。 项目地址:https://github.com/foolwood/SiamMask DeepCamera 世界首个自动机器学习深度学习边缘 AI 平台 ARM GPU 上的深度学习视频处理监控,用于人脸识别以及更多方法。将数码相机变成人工https://www.infoq.cn/article/2uabiqaxicqifhqikeqw