
1. 实体关系抽取从流水线到端到端的进化我第一次接触实体关系抽取是在2015年当时还在用Stanford CoreNLP做简单的命名实体识别。那时候的NLP系统就像一条工厂流水线——先识别实体再判断关系最后拼装结果。这种流水线式方法Pipeline确实直观但问题也很明显错误会像多米诺骨牌一样在各个环节传递。举个例子假设我们要从马云创立了阿里巴巴这句话中抽取(马云, 创始人, 阿里巴巴)这个三元组。传统流水线需要先识别马云人物、阿里巴巴公司两个实体再分析两者之间的创立了关系但如果在第一步把阿里巴巴错误识别为《一千零一夜》中的角色后续关系判断就全错了。我在电商评论分析项目中就经常遇到这种问题比如把手机发热严重中的发热误标为疾病实体。1.1 联合抽取的破局之道2017年左右的联合抽取方法开始改变游戏规则。这类方法把实体和关系看作一个整体来建模典型代表如CopyRE、GraphRel等模型。它们就像同时戴着实体识别和关系判断两副眼镜看文本通过共享底层特征减少信息损失。我去年在医疗知识图谱项目中测试过联合模型对比传统流水线方法在CMeIE医疗数据集上流水线F1值52.3%联合模型F1值68.7%这个提升主要来自两方面特征共享实体识别时已经预判了可能的关系全局优化避免了流水线中的错误累积# 典型联合抽取模型结构示例 class JointModel(nn.Module): def __init__(self): self.encoder BertModel.from_pretrained(bert-base-chinese) self.entity_head nn.Linear(768, entity_types*2) # 实体首尾指针 self.relation_head nn.Linear(768*3, relation_types) # 实体对关系分类不过联合模型也有自己的坑。最大的挑战是暴露偏差Exposure Bias——训练时使用真实实体作为输入但预测时只能用模型自己预测的可能有误的实体。这就好比驾校教练永远把着方向盘教学员等学员自己上路就手忙脚乱。2. 问答系统技术栈的演进记得2018年第一次部署问答系统时我们团队花了三个月搭建了一个经典流水线式架构。当时觉得能跑通就谢天谢地了直到看到用户问苹果最新手机多少钱时系统返回了水果市场价格...2.1 传统两阶段架构详解典型的流水线问答系统就像图书馆管理员检索员Retriever快速找出可能相关的文档常用方法TF-IDF、BM25、DPRDense Passage Retrieval我常用的优化技巧查询扩展、同义词扩展阅读员Reader精读文档找答案经典模型DrQA、BERT-SQuAD实际部署要注意最大输入长度限制通常512token在电商客服系统中这种架构表现尚可因为产品文档相对规范。但到了开放领域如医疗咨询问题就凸显了检索阶段可能漏掉关键文档阅读阶段受限于输入长度两个模块优化目标不一致2.2 重排策略的艺术2019年我们在法律问答系统中引入了证据重排机制效果提升显著。主要有两种思路重排类型原理适用场景我们的实测效果证据强度统计答案出现频率事实型问题Recall5提升22%证据覆盖分析问题关键词覆盖解释型问题MRR提升15%具体实现时可以这样组合先用BM25检索100篇文档用BERT模型筛选Top20分别计算强度和覆盖分数加权融合我们最终权重设为0.6:0.4def hybrid_rerank(answers): strength_scores [a[frequency] for a in answers] coverage_scores [compute_coverage(q, a) for a in answers] # 归一化 strength_scores softmax(strength_scores) coverage_scores softmax(coverage_scores) # 加权融合 final_scores 0.6*strength_scores 0.4*coverage_scores return sorted(zip(answers, final_scores), keylambda x: -x[1])3. 端到端问答的突破去年尝试用端到端方法重构我们的问答系统时最大的惊喜不是效果提升而是工程复杂度大幅降低。传统方法需要维护检索索引文档处理器阅读模型服务重排模块而像REPLUG、RAG这样的端到端模型只需要一个服务就能完成所有工作。3.1 Retriever-Reader联合训练这个思路就像让检索员和阅读员坐在一起工作Retriever不再单纯追求检索精度Reader会反馈哪些文档真的有用两者通过梯度传播协同优化我们在产品知识库上测试发现训练初期检索准确率反而下降但最终问答准确率提升9.2%特别适合专业术语多的领域3.2 无检索器的新范式当第一次看到GPT-3直接回答问题时我意识到Retriever-Free可能是未来。这类方法完全依赖大语言模型的内部知识优势很明显响应速度快省去检索时间回答更流畅自然无需维护文档库但在实际业务中要特别注意知识更新问题模型训练数据时效性事实性错误风险领域适应能力我们现在的解决方案是混合架构简单问题直接LLM生成复杂问题走检索增强流程。这就像医院分诊台先判断病情轻重再决定就诊流程。4. 实战中的经验之谈经过多个项目的摸爬滚打总结出几个关键经验数据质量决定上限在金融风控项目中我们发现标注数据中的一个小错误把贷款担保误标为投资关系导致线上bad case增加37%。后来建立了三级质检流程初级标注领域专家复核线上监控反馈模型不是越新越好去年在政务热线系统中对比了12种关系抽取模型后最终选择的还是BERTBiLSTM的简单组合。因为训练数据只有3万条实体类型固定15类推理速度要求高评估指标要业务对齐在电商场景中单纯看F1值会误导。我们设计了业务加权分数价格相关问题权重1.5物流问题权重1.2其他问题权重1.0最后分享一个实际调参技巧当遇到模型表现不稳定时试试分层学习率。对BERT底层用较小lr如2e-5顶层分类层用较大lr如1e-3。这个技巧在多个项目中帮我们提升了约3-5%的稳定准确率。