如何基于知识库对比生成声明并计算事实一致性得分?
解读
面试官想考察三件事:
- 你是否能把大模型幻觉问题量化,而不是拍脑袋说“差不多”。
- 你是否熟悉中文场景下可用的知识库形态(企业私库、百科、法规、行业数据库)。
- 你是否能把“一致性”拆成可落地的算法指标与工程链路,并能在百亿模型在线服务里跑通,而不是离线跑个脚本就算完。
知识点
-
声明抽取(Claim Extraction)
用中文UIE微调模型或Seq2Seq+指针网络把生成文本拆成<主语,谓词,宾语,时间,否定>五元组,解决中文“的得地”及“否定漂移”问题。 -
知识检索(Knowledge Retrieval)
先对知识库做BM25粗排,再用中文bge-large-zh-v1.5向量模型做精排,top-k=5,召回率>92%。 -
事实验证(Fact Verification)
采用**“自然语言推理+规则”双通道**:- NLI:把声明与检索到的每条知识拼成[CLS]声明[SEP]知识[SEP],用中文RoBERTa-large-NLI输出“蕴含/中立/矛盾”三分类。
- 规则:对数值、时间、专有名词做正则+数字归一化,防止“3000万元”与“3千万”被判矛盾。
-
一致性得分(Consistency Score)
声明级得分:
S_claim = max(P_entail) – max(P_contra)
若S_claim < –0.15 记为幻觉声明。
全文得分:
S_doc = Σw_i·S_claim_i,w_i按信息熵加权,突出实体密度高的句子。 -
LLMOps闭环
把上述流程封装成Kubernetes微服务:- 声明抽取Pod:GPU 1/10卡,RT<120 ms。
- 向量检索Pod:Milvus双副本,IVF_SQ8索引,QPS>800。
- 验证Pod:CPU 4核,batch=32,RT<80 ms。
结果写回Prometheus,一致性得分<0.6 自动触发人类标注回流,每周增量微调NLI模型,幻觉率两周内从18%降到7%。
答案
给面试官一段可直接落地的“六步法”:
- 声明抽取:用自训中文UIE模型把生成文本拆成五元组,保证否定边界正确。
- 知识召回:混合检索(BM25+bge向量),top5返回,覆盖企业私库+百科+法规。
- 事实验证:RoBERTa-large-NLI三分类,数值规则二次校验,输出蕴含概率。
- 得分计算:声明级max蕴含–max矛盾,全文按信息熵加权平均,阈值0.6以下标红。
- 工程化:K8s微服务拆分,Prometheus监控,RT<300 ms,QPS>500。
- 持续迭代:低分样本自动入标注池,每周增量微调,幻觉率持续下降。
拓展思考
-
如果知识库本身过期或矛盾,如何给知识置信度再打分?
可引入时间戳+溯源链,用PageRank-like算法给知识节点加权重,NLI阶段把权重作为先验概率融入。 -
遇到多跳事实(A的B的C是多少)怎么办?
先做一次知识图谱路径搜索(Neo4j或HugeGraph),把多跳子图序列化成文本,再送进NLI模型,F1可提升11%。 -
若要支持实时流式生成(直播字幕),如何做到逐句验证不阻塞?
采用滑动窗口+异步队列:生成端每句直接返回给用户,后台协程做验证,3秒内把一致性徽章patch到前端,用户体验无感。