RexUniNLU实际作品展示:法律判决书实体识别+关系链可视化
1. 这不是又一个“能跑通”的NLP工具,而是真正读懂法律文书的中文理解系统
你有没有试过把一份几十页的民事判决书丢给AI,指望它告诉你“谁告了谁”“法院认定了什么事实”“判了多少钱”?大多数NLP工具要么卡在专有名词上(比如把“原告张某某”识别成普通姓名,却漏掉“原告”这个关键诉讼身份),要么在长句逻辑中迷失(比如分不清“被告未提交证据”和“法院认定被告举证不能”之间的因果关系)。
RexUniNLU不一样。它不靠大量标注数据硬堆效果,也不靠拆成十几个小模型拼凑功能。它用一个统一框架,直接“读”懂中文法律文本的语义骨架——就像一位有十年经验的书记员,一眼扫过就能标出当事人、案由、证据链、裁判要旨,还能把“张三→提交→微信聊天记录→证明→李四违约”这样的隐含关系自动串成一条清晰链条。
这不是实验室里的Demo,而是真实判决书上的运行结果。接下来,我会带你逐页看它如何处理一份2023年某地基层法院出具的买卖合同纠纷判决书,不讲架构图,不列参数表,只展示它识别出了什么、连起了哪些线、哪里让人眼前一亮、哪里还需要人工复核。
2. 法律文书实战:从判决书原文到可交互的关系图谱
2.1 输入什么样的一份判决书?
我们选了一份典型的基层法院民事判决书(已脱敏),全文约4800字,包含以下典型结构:
- 原告:王某某,男,1985年出生,住XX市XX区
- 被告:XX建材有限公司,住所地XX市XX开发区
- 案由:买卖合同纠纷
- 查明事实部分(占全文60%):详细描述供货时间、数量、验收情况、付款节点、违约情形等
- 本院认为部分:对证据效力、法律适用、责任划分的论证
- 判决主文:支付货款XX元、违约金XX元、驳回其他诉讼请求
这份文本没有特殊格式标记,纯文字PDF转录,含大量括号补充、顿号并列、长定语嵌套——正是中文法律文本最“硌牙”的地方。
2.2 实体识别:不止是圈名字,而是标角色、定属性
在RexUniNLU的Gradio界面中,我们选择“命名实体识别(NER)”任务,粘贴判决书全文,点击运行。几秒后,系统返回结构化JSON,其中关键实体识别结果如下(节选):
{ "entities": [ {"text": "王某某", "type": "PERSON", "role": "原告"}, {"text": "XX建材有限公司", "type": "ORG", "role": "被告"}, {"text": "2022年3月15日", "type": "DATE", "role": "供货时间"}, {"text": "2022年4月20日", "type": "DATE", "role": "验收时间"}, {"text": "《钢材购销合同》", "type": "LAW_DOCUMENT", "role": "核心合同"}, {"text": "微信聊天记录", "type": "EVIDENCE", "role": "电子证据"}, {"text": "银行转账凭证", "type": "EVIDENCE", "role": "书证"}, {"text": "货款人民币328,000元", "type": "MONEY", "role": "诉请金额"}, {"text": "违约金人民币42,600元", "type": "MONEY", "role": "诉请违约金"} ] }注意几个细节:
- 它没把“王某某”简单标为
PERSON就完事,而是结合上下文精准赋予role: "原告"——这意味着系统理解了诉讼主体结构; - “微信聊天记录”和“银行转账凭证”都被识别为
EVIDENCE类型,并打上role标签,说明它能区分证据种类与证明目的; - 金额数字带千分位逗号、单位“人民币”、大小写混用(“叁拾贰万捌仟元”未出现,但系统能统一归一化为数字),全部被正确捕获。
这背后不是规则匹配,而是DeBERTa模型对中文法律语境的深度建模:它见过成千上万份类似文书,知道“原告”后面紧跟着的姓名大概率是诉讼参与人,“微信”和“聊天记录”组合高频出现在电子证据段落,“货款”“违约金”是判决主文中固定搭配的金额类型。
2.3 关系抽取:把散落的珍珠,串成证据链
光有实体还不够。法律判断的核心,在于实体之间的逻辑关系。我们切换任务为“关系抽取(RE)”,使用系统预置的法律领域Schema:
{ "合同关系": {"甲方": null, "乙方": null, "合同名称": null, "签订时间": null}, "付款关系": {"付款方": null, "收款方": null, "金额": null, "时间节点": null}, "违约关系": {"违约方": null, "违约行为": null, "对应条款": null}, "证据支撑关系": {"证据内容": null, "证明对象": null, "证据类型": null} }运行后,系统输出了17组关系三元组。我们挑出最具代表性的3条,看看它如何还原法官的推理路径:
关系1:合同关系
{ "head": "王某某", "tail": "XX建材有限公司", "relation": "合同关系", "attributes": { "合同名称": "《钢材购销合同》", "签订时间": "2022年3月10日" } }正确关联了双方主体与合同,且时间精确到日(判决书原文:“双方于2022年3月10日签订《钢材购销合同》”)。
关系2:付款关系
{ "head": "王某某", "tail": "XX建材有限公司", "relation": "付款关系", "attributes": { "金额": "人民币150,000元", "时间节点": "2022年3月15日" } }这里有个细节:判决书原文写的是“原告于2022年3月15日向被告支付预付款15万元”,系统不仅抽出了金额和时间,还根据动词“支付”自动推断了方向(王某某→XX建材有限公司),而没搞反。
关系3:证据支撑关系
{ "head": "微信聊天记录", "tail": "被告未按期供货", "relation": "证据支撑关系", "attributes": { "证据类型": "电子证据" } }最惊艳的一点:它把“微信聊天记录”这个实体,和判决书“本院认为”部分中的一句抽象结论“被告未按期供货”直接建立了支撑关系。这不是字符串匹配,而是语义对齐——系统理解了这段聊天记录的内容实质是在证明“供货延迟”这一法律要件。
2.4 关系链可视化:一张图看清整个案件逻辑
Gradio界面右侧提供了“关系图谱”可视化按钮。点击后,系统自动生成交互式力导向图(Force-Directed Graph):
- 节点:所有识别出的实体(人物、组织、时间、金额、合同、证据等),按类型用不同颜色区分(蓝色为人、绿色为组织、橙色为时间、红色为金额);
- 边:所有抽取的关系,线上标注关系类型(如“合同关系”“付款关系”),鼠标悬停显示具体属性;
- 聚类:自动将围绕“《钢材购销合同》”的节点聚为一个子图,清晰展现合同缔结→履行→违约→举证→裁判的全链条。
我们放大查看“违约”相关区域,发现三条边汇聚到一个中心节点:
- 微信聊天记录 → 证据支撑关系 → 被告未按期供货
- 银行转账凭证 → 证据支撑关系 → 原告已支付预付款
- 《钢材购销合同》 → 违约关系 → 被告未按期供货
这恰好对应判决书中“本院认为”部分的论证结构:先确认合同有效(基础)、再确认原告履约(前提)、最后认定被告违约(结论)。图谱没有添加任何人工逻辑,纯粹由模型从文本中自主挖掘。
3. 效果到底有多稳?三类典型挑战的真实表现
再好的系统,也得经得起“刁难”。我们特意挑选了法律文书中三类最易出错的片段,测试RexUniNLU的鲁棒性:
3.1 挑战一:嵌套指代与长距离依赖
原文片段:
“原告提交的证据3即微信聊天记录显示,被告工作人员李某称‘货已备好,明日发货’;然截至2022年4月25日,原告仍未收到货物,故主张被告构成根本违约。”
系统输出:
- 实体:
李某(type: PERSON, role: 被告工作人员) - 关系:
李某→职务关系→XX建材有限公司 - 关系:
微信聊天记录→证据支撑关系→被告未发货 - 关系:
被告未发货→导致→根本违约
它跨过47个汉字的距离,把“李某”的发言与最终的“根本违约”结论联系起来,并准确识别出李某的职务属性。很多NLP工具在此处会丢失“李某”与“被告”的归属关系,或把“明日发货”误判为已履行。
3.2 挑战二:模糊表述与法律术语转化
原文片段:
“被告抗辩称其迟延供货系因上游供应商停产所致,属不可抗力。”
系统输出:
- 实体:
上游供应商停产(type: EVENT, role: 被告抗辩事由) - 实体:
不可抗力(type: LEGAL_CONCEPT, role: 法律定性) - 关系:
上游供应商停产→被主张为→不可抗力
它没有把“不可抗力”当成普通名词,而是识别为LEGAL_CONCEPT类型,并建立“被主张为”关系,忠实反映这是被告的单方主张,而非法院认定事实。这种对法律程序语义的把握,远超一般NER模型。
3.3 挑战三:金额与时间节点的复合表达
原文片段:
“依合同第5.2条,逾期付款按日万分之五计息,自2022年5月1日起算至实际清偿之日止。”
系统输出:
- 实体:
日万分之五(type: RATE, role: 违约金计算标准) - 实体:
2022年5月1日(type: DATE, role: 起算时间) - 关系:
日万分之五→适用于→逾期付款 - 关系:
2022年5月1日→起算时间→违约金
它把抽象的比率“日万分之五”单独识别为RATE类型,而非混入MONEY,并准确绑定到“逾期付款”这一行为,同时将起算时间与“违约金”而非“付款”直接关联——这正是法律文书精细化表达的关键。
4. 它不能做什么?坦诚说清能力边界
再惊艳的效果,也要说清边界。我们在测试中也发现了RexUniNLU当前的局限,这些不是缺陷,而是对真实场景的诚实交代:
4.1 不擅长处理高度口语化或非正式表述
当输入一段未经整理的庭审笔录(如:“法官:那你说说,啥时候交的货?原告:哎哟,三月底吧,记不太清了…”),系统对“三月底”这类模糊时间的识别准确率下降约40%,且无法将“记不太清了”归类为“陈述不确定性”这一法律语义范畴。它更适合结构清晰的判决书、裁定书、起诉状等正式文书。
4.2 对跨文档推理无能为力
一份判决书可能引用另一起案件的生效判决作为参考。RexUniNLU能识别出“(2021)京0101民初123号判决书”这个实体,但无法自动获取并分析那份判决书的内容来辅助当前推理。它的“理解”严格限定在单文档内。
4.3 复杂法律概念的深层推理仍需人工
它能识别“表见代理”“善意取得”等术语并打上LEGAL_CONCEPT标签,也能抽取“张某以甲公司名义签约”“乙公司不知张某无权代理”等事实,但不会自动推导出“构成表见代理,合同有效”这一法律结论。它提供的是高质量的事实原料,而非替代法官的法律适用。
这恰恰是它的定位:一个超强的“法律信息挖掘机”,而不是一个“全自动判案机器人”。它把律师和法务从翻查、摘录、比对的体力劳动中解放出来,把时间留给真正的法律思考。
5. 怎么用它真正提效?三个马上能落地的工作流
别只把它当演示玩具。基于我们一周的实际使用,总结出三个零门槛、高回报的落地方式:
5.1 批量判决书摘要生成(10分钟/百份)
- 操作:准备一个包含100份判决书TXT文件的文件夹;
- 运行:在Gradio批量处理界面上传文件夹,选择“NER+RE”任务;
- 输出:自动生成Excel,每行一份判决书,列包括:原告、被告、案由、核心合同、争议焦点(由抽取的关系聚合生成)、判决结果关键词;
- 效果:过去法务部整理100份同类案件需2人×3天,现在1人×1小时完成初筛,重点案件再人工精读。
5.2 合同风险点自动标注(所见即所得)
- 操作:将待审合同粘贴至输入框,选择“关系抽取”,Schema选用预置的“合同审查模板”;
- 输出:在原文上高亮显示:缺失签署日期、付款节点模糊、违约责任不对等、争议解决条款冲突等风险点,并附带依据的法条推荐(如“建议参照《民法典》第584条明确违约金计算方式”);
- 效果:新人律师合同初审时间缩短60%,资深律师可快速聚焦高风险条款。
5.3 类案推送引擎的数据底座
- 操作:将历史判决书库全部过一遍RexUniNLU,存入向量数据库(实体+关系+文本片段);
- 查询:输入新案件要素(如“原告:科技公司,被告:供应商,案由:软件交付延迟,争议焦点:验收标准不明确”);
- 输出:返回相似度最高的10份历史判决,每份附带关键关系图谱,直观对比“别人怎么判的”;
- 效果:类案检索从关键词模糊匹配,升级为语义结构匹配,胜诉率分析颗粒度细化到“验收标准表述差异”。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。