周末去超市,你接过一张又皱又长的购物小票:店铺名、日期、每件商品名、单价、总价、退换提示密密麻麻挤在一起。要把这张小票变成一张干净的表格,你会不自觉地去抓四类信息——谁卖的、买了什么、花了多少钱、坏了怎么退换。合同审查本质上就是这件事,只不过这张“小票”更长、更正式、也更贵:人工逐行阅读不但慢,还容易看漏一个零、错过一条违约金条款。自然语言处理(NLP)让机器学会“整理契约小票”:先把文本洗干净,再给每个词贴类别标签,最后把标签串成可查询的结构化数据。本文就用“整理购物小票”这根主线,带你从零看懂合同要素抽取的原理与工程实践。

岗位关联

对 AI 从业者而言,合同要素抽取是法律 NLP 落地最成熟的场景之一。掌握序列标注、关系抽取与工程调优思路,可直接迁移到金融文书、医疗病历等结构化抽取项目中,是文档智能方向的高价值技能。

目录
  1. 可视化演示
  2. 契约小票的四栏必填项——要素定义
  3. 先把小票擦干净——文本预处理
  4. 用荧光笔给词贴标签——命名实体识别
  5. 把标签连成读得懂的句子——关系抽取
  6. 开一间小票整理服务台——工程实践
  7. 让识别越来越让人放心——准确率优化
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示NLP技术如何通过序列标注识别合同要素并通过关系抽取构建要素关联,支持模式切换查看标注过程与关系图谱。

本节配有交互动效(进入视口后自动加载,约 3KB)。

BIO序列标注识别合同要素 主体:B-PER标签标记合同甲方/乙方实体 标的:B-OBJ标签标记合同标的物描述 金额:B-AMT标签标记合同金额数值 tag_i = argmax P(y_i|x_1..x_n) 序列标注模型逐token识别合同关键要素类型。

契约小票的四栏必填项——要素定义

回看那张购物小票:抬头是“XX超市”,中间一行行“牛奶 8.9 元”“面包 12.8 元”,底部是合计金额和退换政策。真正重要的信息只有四类:谁卖的、买的是什么、付了多少钱、出了质量问题怎么办。合同也是这样,尽管像一份超长小票,但 AI 只需要抓取四类必填要素。

在 AI 眼里,这四类要素有明确的定义:主体是合同权利义务的承担者,也就是甲方/乙方、买方/卖方;标的物是权利义务指向的对象,可以是货物、服务、软件或知识产权;金额是合同的对价,包括总价、定金、尾款等;违约责任是违约方应承担的不利后果,比如支付违约金、赔偿损失。实际项目中,这套定义还要细化为标注规范,例如主体要区分自然人与法人,金额要区分含税与不含税,责任条款要区分违约金比例与赔偿范围。先定好要素清单,后续模型和流程才有地基。

合同的四要素如同小票上“必填栏”:缺了主体不知道谁负责,缺了标的不知道交易什么,缺了金额无法对价,缺了违约责任则纠纷处理没有依据。AI 要做的,就是把这四栏从长文中准确地“抄”出来。

Contract={主体, 标的, 金额, 违约责任}\displaystyle \text{Contract} = \{ \text{主体},\ \text{标的},\ \text{金额},\ \text{违约责任} \}
通俗说明:整份合同的信息可以看作一个有四个固定栏目的表格,四个要素就是栏目名。
  1. 左侧 Contract抽取后要填充的“信息骨架”,一个结构化数据对象,代表整份合同的关键内容。
    Contract\displaystyle \text{Contract}
  2. 大括号集合表示骨架由四个并列部分组成,缺一个都不完整,就像小票缺了价格就无法结算。
    {主体, 标的, 金额, 违约责任}\displaystyle \{ \text{主体},\ \text{标的},\ \text{金额},\ \text{违约责任} \}

先把小票擦干净——文本预处理

从口袋掏出的小票常常皱得不像样子:沾了咖啡渍、被撕掉一角、打印墨迹模糊。你不会直接誊写,而是先把小票摊平、擦干净、把模糊处对着光辨认。文本预处理做的正是这件事。

真实合同文本从 PDF、扫描件、Word 中提取出来时,带着各种“脏东西”:扫描识别(OCR)产生的错字、页眉页脚、页码水印、全半角标点混用、多余空格。这些噪声会让后续模型分心,就像咖啡渍遮住商品价格一样。预处理通常分三步:文本提取,用 pdf 解析库或 OCR 取出正文;分句分词,中文没有天然空格,要把“合同总金额”切成“合同/总金额”;噪声清洗,删除空白符、合并异常标点、统一全半角、丢弃页眉页脚。

小票擦干净后,收银员才看得清“蒙牛纯牛奶”而不是“蒙牛纯牛女乃”;合同文本清洗干净后,模型才不会把“壹佰万元”中的“元”与页码里的“元”混为一谈。预处理看似琐碎,却决定了抽取质量的下限。

seg(合同文本)=[w1, w2, …, wn]\displaystyle \text{seg}(\text{合同文本}) = [ w_1,\ w_2,\ \dots,\ w_n ]
通俗说明:分词函数把一段连续的中文句子,切成一串有序的词,供后续模型逐个读取。
  1. seg 分词函数一个把连续汉字切分成词语序列的处理函数,是中文 NLP 的标准入口。
    seg\displaystyle \text{seg}
  2. 输入合同文本未经加工的原始句子,是待清洗和切分的对象。
    合同文本\displaystyle \text{合同文本}
  3. 输出词序列切好的词从左到右排列,形成后续标注模型的基本输入单元。
    [w1, w2, …, wn]\displaystyle [ w_1,\ w_2,\ \dots,\ w_n ]

用荧光笔给词贴标签——命名实体识别

擦干净小票后,你会拿起荧光笔做标记:把超市名用蓝笔圈起来,把商品名用绿笔圈起来,把价格用红笔圈起来,把退换声明用灰笔划线。这个动作对应 NLP 里的命名实体识别(Named Entity Recognition,简称 NER)——给文本中每个词贴上一个类别标签。

NER 预先定义好类别,比如公司名(ORG)、人名(PER)、金额(MONEY)、日期(DATE)等,模型要从“类别集合 + 非实体”里为每个词选一个标签。经典做法是 BIO 标注:B 表示实体开始,I 表示实体内部,O 表示非实体。于是“北京某科技公司”会被标成“B-ORG、I-ORG、I-ORG、I-ORG、I-ORG、I-ORG“。现代实现普遍用预训练语言模型给每个词打分,再用 Softmax 把分数转成概率,词”100“可能同时有”金额-B”0.7、“日期-B”0.2 的概率,模型选概率最大的标签。

荧光笔划线需要判断“这个词是店名还是商品名”,NER 模型做的就是同一件事——只是它更擅长在海量合同文本里保持专注,不会划到第十页就开始走神。

softmax(zi)=ezi∑j=1Kezj\displaystyle \text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}
通俗说明:把模型给每个候选标签打的原始分数,变成一组加起来等于 1 的概率,然后取最大者作为最终标签。
  1. 原始分数 z_i模型认为当前词属于第 i 个标签的得分,得分越高越可能是该标签。
    zi\displaystyle z_i
  2. 指数化将分数转成正数,同时拉大高低分差距,让明显正确的标签更突出。
    ezi\displaystyle e^{z_i}
  3. 归一化分母对所有 K 个候选标签的指数分数求和,相当于把每个分数换算成在总分中的占比。
    ∑j=1Kezj\displaystyle \sum_{j=1}^{K} e^{z_j}
  4. 最终概率结果落在 0 到 1 之间,所有标签概率之和恰好为 1,只需取最大值对应的标签。
    softmax(zi)=ezi∑j=1Kezj\displaystyle \text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}

把标签连成读得懂的句子——关系抽取

荧光笔画出了“牛奶”和“8.9 元”,但如果没有箭头把它们连起来,旁人仍不知道“8.9 元”是牛奶的价格还是面包的价格。关系抽取(Relation Extraction)就是画箭头的过程:判断两个已识别实体在句子中是否存在某种关系,比如“合同—金额—100 万”。

技术上看,关系抽取常建模为一个分类问题:给定句子 s 和两个实体 e₁、e₂,模型输出二者之间存在预定义关系的概率。例如句子“甲方北京某科技有限公司应向乙方支付人民币一百万元”,模型要判断出“北京某科技有限公司”(主体)与“人民币一百万元”(金额)之间存在“支付对价”关系。工程中常见三种做法:规则模板写“甲方…向…支付…”这类句法模板,简单但覆盖有限;流水线方法先 NER 再关系分类,两个模块独立训练;联合抽取模型则同时输出实体和关系,避免前一步误差传递到后一步。关系分类常用 sigmoid 做二分类判断。

荧光笔加上箭头,小票才从“一堆被标记的词”变成“一行行可读的购物明细”。合同也才能从纯文本变成结构化 JSON,供业务系统直接查询统计。

P(r∣e1,e2,s)=σ(wT[he1;he2;hs])\displaystyle P(r \mid e_1, e_2, s) = \sigma(\mathbf{w}^T [\mathbf{h}_{e_1}; \mathbf{h}_{e_2}; \mathbf{h}_s])
通俗说明:把两个实体和句子的向量拼起来,经过线性变换和 sigmoid 压缩,输出“二者存在该关系”的概率。
  1. 实体与句子e₁、e₂ 是上一步抽取出的两个实体,s 是它们所在的句子。
    e1, e2, s\displaystyle e_1,\ e_2,\ s
  2. 向量表示h 向量是模型把文字转成的稠密数字向量,让计算机能计算语义。
    he1;he2;hs\displaystyle \mathbf{h}_{e_1}; \mathbf{h}_{e_2}; \mathbf{h}_s
  3. 拼接与权重分号表示把三个向量首尾拼接,再与权重向量 w 做内积,得到一个关系分数。
    wT[⋅]\displaystyle \mathbf{w}^T [ \cdot ]
  4. sigmoid 压缩σ 把分数压到 0 和 1 之间,大于 0.5 判定关系成立,数值越大越确信。
    σ(⋅)\displaystyle \sigma(\cdot)

开一间小票整理服务台——工程实践

当你掌握了小票整理技巧,下一步不是继续在家练,而是开一间“小票整理服务台”:客户送进一叠皱巴巴的小票,你交回一张干净的表格。工程实践要回答的问题是:客户怎么送来、服务台怎么排班、遇到小票缺角怎么办。

合同要素抽取的工程链路可概括为五步:上传合同文档、文本解析(PDF/Word 转纯文本)、预处理分句分词、NER 抽取实体、关系抽取形成结构化结果。数据端要建立标注规范,让标注人员把主体、标的、金额、违约条款逐个框选出来形成训练集;模型端通常基于开源预训练模型做微调,再部署成 HTTP 接口服务;系统端要同时部署一套规则引擎作兜底,当模型置信度低时切换规则逻辑或转人工处理。

既然是“服务台”,就必须有质量度量。上线后要持续统计模型表现,准确率是最直观的指标:把所有词例的预测结果与人工标注结果逐一对齐,看预测正确的比例占多少。

服务台不能只埋头誊写,还要每周复盘:哪些小票容易抄错、哪些客户的小票最脏,据此改进流程。工程上线不是终点,而是另一个优化循环的起点。

Accuracy=TP+TNTP+TN+FP+FN\displaystyle \text{Accuracy} = \frac{\text{TP} + \text{TN}}{\text{TP} + \text{TN} + \text{FP} + \text{FN}}
通俗说明:准确率 = 所有判断中判断对了的比例。但合同场景中更常用精确率、召回率和 F1,因为“非实体”占比极大,准确率容易虚高。
  1. TP 真正例模型识别出的实体,人工标注里确实是该实体,相当于正确抄下了一个商品名。
    TP\displaystyle \text{TP}
  2. TN 真负例模型判断为非实体,人工标注也确实是非实体,相当于正确忽略了小票上的广告语。
    TN\displaystyle \text{TN}
  3. FP 假正例模型多标出来的实体,其实是噪声,好比把墨渍当成了价格。
    FP\displaystyle \text{FP}
  4. FN 假负例模型漏标的真实实体,好比把违约金条款整段看漏。
    FN\displaystyle \text{FN}

让识别越来越让人放心——准确率优化

小票整理服务台开业第一周,客人反馈:“你把我小票上的'甜牛奶'看成了'酸牛奶'”“总价少抄了一个零”。这些错例就是优化的金矿。合同要素抽取上线后同样会暴露问题,需要系统迭代。

优化主要走三条路。第一是数据增强:用同义词替换、句式改写、随机删除等手段生成更多表达变体,让模型见过更多“长相”的合同;第二是模型调优:调节学习率、训练轮数、标签平滑等超参数,或换用更强的预训练模型;第三是流程改造:设置置信度阈值,对低置信结果转人工复核,同时用规则引擎纠正明显错误——比如金额字段必须匹配数字或大写金额模式。

评估模型不能只看准确率:合同里“非实体”占绝大多数,模型全判为 O 也能有 95% 准确率。业界因此普遍使用精确率(Precision)、召回率(Recall)和 F1 分数。精确率回答“找到的实体里有多少是真的”,召回率回答“真实实体有多少被找到了”,F1 是二者的调和平均。合同审查通常更看重召回率——漏掉一个违约金额比多圈一个词危险得多。

服务台的口碑是慢慢攒出来的。每把一批错例整理成训练数据、每调整一次规则清单,这台“自动整理机”就会更稳一点,最终让法务、法官和老师真正放心地把合同交给它。

F1=2×P×RP+R,P=TPTP+FP,R=TPTP+FN\displaystyle F_1 = \frac{2 \times P \times R}{P + R},\qquad P = \frac{TP}{TP+FP},\qquad R = \frac{TP}{TP+FN}
通俗说明:P 注重“找到的不出错”,R 注重“该找的没漏掉”,F1 把这两个互相拉扯的指标调合成一个数字。
  1. P 精确率预测为实体的样本里,真正是实体的比例——怕把非实体当成实体。
    P=TPTP+FP\displaystyle P = \frac{TP}{TP+FP}
  2. R 召回率真实实体中被找回来的比例——怕把真实实体漏掉。
    R=TPTP+FN\displaystyle R = \frac{TP}{TP+FN}
  3. F1 调和平均当 P 和 R 一个高一个低时,F1 会明显偏低,倒逼两边保持平衡,适合衡量抽取综合能力。
    F1=2×P×RP+R\displaystyle F_1 = \frac{2 \times P \times R}{P + R}

AI 应用场景

场景一:智慧法院立案辅助系统

阶段:数据标注 → 模型微调 → 接口部署 → 人工抽检

解决的问题:传统立案中,书记员需从起诉状和合同附件中手动录入原被告名称、诉讼标的金额、案由等要素,每案耗时 15—30 分钟且容易抄错。合同要素抽取模型在扫描上传后数秒内自动填充立案信息,书记员只需核对修改,录入效率提升约 80%。

具体案例:某基层法院上线“智能立案预填”:当事人提交一份房屋租赁合同纠纷起诉状,系统自动抽取“原告/被告(主体)”“租赁房屋(标的)”“月租金 5000 元(金额)”“违约金条款(违约)”,将解析结果直接回填至审判管理系统的待办字段。

场景二:企业法务部的合同台账平台

阶段:预处理 → NER → 关系抽取 → 人工复核

解决的问题:集团企业每年签署数千份采购、销售、合作协议,法务无法逐份精读,导致付款条款、违约风险难以被及时发现。要素抽取平台把每份合同压成“一张结构化小票”,法务可按主体、金额区间、违约条款类型快速筛选与预警。

具体案例:某零售企业用该系统处理 2000 份供应商合同,自动提取“供应商全称(主体)”“商品品类(标的)”“年采购金额(金额)”“逾期交付违约金比例(违约)”。系统每日扫描新增合同,发现某供应商合同金额超预算 20%,自动触发法务复核流程。

场景三:高校法学实训案例库的批量标注

阶段:数据清洗 → 预标注 → 人工校对

解决的问题:法学教学中需要大量真实合同案例用于模拟谈判与实训分析,人工为案例库编写结构化摘要耗时巨大。用要素抽取模型对判决书附件中的合同先做预标注,再让师生在可视化界面校对,能大幅加速案例库建设。

具体案例:某高校法律 AI 实验室将模型部署在内部平台,对 5000 份脱敏合同自动预标注四要素。学生以“校对者”身份参与抽检,既锻炼合同审查实务技能,又为模型贡献了高质量标注数据,形成“AI 辅助教学 + 教学反哺 AI”的闭环。

Python 演示

python51 行
import refrom dataclasses import dataclass  @dataclassclass ContractElements:    """合同四要素的容器"""    party_a: str = ''    party_b: str = ''    subject: str = ''    amount: str = ''    penalty: str = ''     def __str__(self):        return (f"主体甲: {self.party_a}\n主体乙: {self.party_b}\n"                f"标的物: {self.subject}\n合同金额: {self.amount}\n"                f"违约责任: {self.penalty}")  def extract_elements(text: str) -> ContractElements:    """基于规则的合同要素抽取器(低配版)"""    elems = ContractElements()    m = re.search(r'甲方[::]\s*([^,。;]+)', text)    if m:        elems.party_a = m.group(1).strip()    m = re.search(r'乙方[::]\s*([^,。;]+)', text)    if m:        elems.party_b = m.group(1).strip()    m = re.search(r'标的[为::]\s*(《?[^,。;]+》?)', text)    if m:        elems.subject = m.group(1).strip()    m = re.search(r'(?:总)?金额[为::]\s*([^,。;]+)', text)    if m:        elems.amount = m.group(1).strip()    m = re.search(r'违约金[::为]\s*([^,。;]+)', text)    if m:        elems.penalty = m.group(1).strip()    return elems  if __name__ == '__main__':    contract = (        '甲方:北京某科技有限公司。'        '乙方:上海某教育咨询有限公司。'        '合同标的为《AI课程采购与服务协议》。'        '合同总金额为人民币壹佰万元整。'        '若一方违约,应支付合同金额20%的违约金。'    )    result = extract_elements(contract)    print('合同要素抽取结果:')    print(result)
目的:用正则规则实现一个低配版合同要素抽取器。输入一段合同文本,输出主体、标的、金额、违约责任四项结构化信息,演示规则法的基本思路。
  1. import re引入正则表达式库,是规则抽取的基础工具。
  2. @dataclass自动为容器类生成构造函数,省去手写 __init__ 的样板代码。
  3. re.search(r'甲方[::]\s*([^,。;]+)', text)定位“甲方:”之后到第一个中文标点前的片段,作为主体甲的候选值。
  4. if m:没匹配到就不修改该字段,字段保持空字符串,避免程序崩溃。
  5. if __name__ == '__main__':让文件既可被 import 调用,也可直接作为脚本运行演示。

常见误区

误区我刚接触时以为,让 AI 抽取合同要素必须像翻译软件一样把每个字都读懂,否则就抽不准。

正解实际上要素抽取只需要“抓重点”,并不需要理解整份合同。它做的是定位关键片段并贴标签,就像一个熟练收银员扫一眼小票就能抄出商品和价格,并不会去背书小票上的促销广告。绝大多数文字是“非实体”,模型学会忽略它们即可。

为何常见:我们平时阅读习惯是逐句理解,容易把“阅读理解”与“信息定位”混为一谈。

误区分词工具切好了词,再做关键词匹配就能抽准了吧?分词对了,抽取应该八九不离十。

正解分词只是预处理的第一步,同样的词在不同语境下标签完全不同:“苹果”可能是标的物(买一箱苹果),可能是公司名(苹果公司),还可能是手机品牌。真正的辨识力来自上下文特征,由 NER 模型或上下规则判断决定,而不是分词本身。

为何常见:分词是中文处理中最直观、最先接触的步骤,容易被误认为它是核心能力。

误区测试集上准确率 99.2%,是不是可以放心全自动处理合同,不用人复核了?

正解准确率高不等于实际风险低。合同场景中实体极不均衡,模型全判“非实体”也能得到很高的表面准确率;更关键的是,错判一个金额的零、漏掉一条违约金条款,损失远大于“大概率正确”带来的收益。工程上要同时看 P、R、F1,并保留低置信转人工、抽检和规则兜底。

为何常见:演示时追求准确率数字好看,容易忽视法律场景“小概率错误的代价远高于平均收益”的特性。

误区训练数据当然越多越好,我让实习生快速标了 10 万条合同,模型效果总该变好了吧?

正解标注质量直接影响模型上限。10 万条标注不规范的数据,可能不如 1 万条严格按标注规范写出的数据。噪声标签会让模型学到错误边界,出现“明明该标 B-ORG 却识别成 B-MONEY”的混乱。要先定义边界案例(如“标的物是否包含服务”“金额是否含税”),再抽检标注一致性。

为何常见:学界实验常强调数据规模,工程落地却更依赖数据质量,初学者极易踩坑。

面试题

Q1. 合同要素抽取的四要素中,“合同主体”指的是?

单选题 · easy

  • A.合同的签订双方← 正确答案
  • B.合同的成立时间
  • C.合同的具体标的
  • D.合同的违约条款

答案:A。主体就是小票上“谁买的、谁卖的”,即合同权利义务的承担者。其他三个选项分别对应时间、标的和违约,属于另外三类信息。

Q2. 下列哪项不属于合同四要素?

单选题 · easy

  • A.合同的主体方
  • B.合同的标的物
  • C.合同的打印纸← 正确答案
  • D.合同的金额数

答案:C。四要素是主体、标的、金额和违约责任。打印纸只是合同的物理载体,与合同内容无关,就像小票的纸张材质与购物明细无关。

Q3. “北京某科技有限公司”在命名实体识别中通常属于哪类实体?

单选题 · easy

  • A.人名类实体
  • B.地名类实体
  • C.组织类实体← 正确答案
  • D.时间类实体

答案:C。公司名对应 ORG(组织),类似小票上的超市名称。人名是 PER,地名是 LOC,时间类实体则对应签约日期等。

Q4. BIO 标注中,字符"B-ORG"最准确的含义是?

单选题 · mid

  • A.实体的起始位置← 正确答案
  • B.实体的终止位置
  • C.实体的中间位置
  • D.实体的否定含义

答案:A。B 代表 Begin,B-ORG 表示一个组织名实体的第一个字。用荧光笔划“北京某科技公司”时,“北”字落笔的位置就是 B-ORG。

Q5. 关系抽取任务主要解决什么问题?

单选题 · mid

  • A.找出合同中的关键词
  • B.建立要素间的语义联系← 正确答案
  • C.去除文本中的停用词
  • D.统一金额数字的格式

答案:B。单独识别出“某科技公司”和“100 万元”还不够,必须判断“谁—支付—100 万元”。关系抽取就是画箭头的步骤,而其他选项属于预处理或普通分类任务。

Q6. “违约方支付合同金额 20% 的违约金”这条文本中最核心的两类要素是?

单选题 · mid

  • A.主体与标的物
  • B.标底与合同价
  • C.金额与违约责← 正确答案
  • D.主体与履约地

答案:C。这条文本明确给出了违约金比例(20%)与责任条款本身,因此核心是金额与违约。它并没有点出具体主体名称或标的物,属于后续再抽取的信息。

Q7. 条件随机场(CRF)与“逐个词独立分类”相比,最大的区别是?

单选题 · mid

  • A.建模标签间依赖关系← 正确答案
  • B.能扩大训练数据规模
  • C.不需要预训练模型
  • D.直接输出非结构化文本

答案:A。CRF 像一位严谨的校对员,会检查相邻标签是否合理,比如 I-ORG 前面必须是 B-ORG 或 I-ORG,而不是孤立地判断每个词。这能避免“标了一半的实体”这类结构错误。

Q8. 关于合同要素抽取的工程流程,正确顺序是?

单选题 · mid

  • A.预处理 → 实体识别 → 关系抽取← 正确答案
  • B.关系抽取 → 预处理 → 实体识别
  • C.实体识别 → 预处理 → 关系抽取
  • D.预处理 → 关系抽取 → 实体识别

答案:A。必须先清洗文本再做 NER,最后做关系抽取。这对应整理小票的顺序:先擦干净、再划荧光笔、最后画箭头,顺序颠倒会导致输入混乱。

Q9. 下列哪些方法可用于合同主体识别?

多选题 · mid

  • A.预定义正则规则← 正确答案
  • B.企业名称词典← 正确答案
  • C.神经网络模型← 正确答案
  • D.随机数生成器

答案:ABC。正则规则、词典匹配和神经网络都是主体识别的合法手段。随机数生成器不能做任何有意义的识别,属于干扰项。

Q10. 合同要素抽取系统上线后,下列做法合理的有?

多选题 · hard

  • A.规则引擎兜底← 正确答案
  • B.全自动无人复核
  • C.制定标注规范← 正确答案
  • D.设计人工抽检← 正确答案

答案:ACD。规则兜底能处理低置信样本,标注规范保证数据质量,人工抽检控制残余风险。全自动无人复核在合同场景风险过高,一个小数点错误就可能导致重大损失。