想象一位刚入职的AI法官大厨,它要通过阅读成千上万份真实裁判文书,学会“看到案情就能预测判决结果”。这些文书就像菜市场里刚卸车的蔬菜:有的沾着泥土、有的压坏了、有的明明是同一道菜却被反复端上来,而且整体还严重偏食——九成是盗窃案,一成才是危险驾驶、故意伤害这些少数罪。直接把这样的原始食材丢进锅里,再厉害的大厨也会做出味道扭曲的菜。真实的司法AI项目里,第一步从来不是调模型,而是把裁判文书当作食材认真预处理:洗菜、切菜、去重、贴标签,再把荤素比例调整到合理范围。这就是“裁判文书公开数据的预处理与平衡采样”要做的事。这篇文章会带你把这条“备菜流水线”完整走一遍。

岗位关联

对AI从业者而言,理解司法数据的清洗、标签和平衡采样,是避免判决预测模型“学偏”的关键能力,也是把法律场景落地为可靠AI系统的基本功。

目录
  1. 可视化演示
  2. 数据来源与构成
  3. 文本清洗规则
  4. 中文分词与文本表示
  5. 标签提取与结构化
  6. 防泄漏数据切分
  7. 类别不平衡危害
  8. 平衡采样策略
  9. 数据质量评估与监控
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

演示裁判文书脱敏与清洗、类别分布分析与平衡采样,以及Pipeline自动化处理三个核心环节。

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

脱敏清洗:去除噪声留核心 去除案号/署名/印章等格式信息 个人信息脱敏保护隐私 完整性/一致性/规范性校验 清洗=去格式+脱敏+校验 移除噪声让模型专注罪名与量刑

数据来源与构成

大厨进后厨的第一件事,不是立刻开火,而是先看清今天到货的食材是什么。裁判文书公开数据主要来自中国裁判文书网等公开平台,下载下来的原始文书格式五花八门:有的带HTML标签,有的只有几行,有的判决主文缺失。要先做“入库体检”,把案号、案由、当事人信息、审理查明、本院认为、判决主文这些关键字段从半结构化文本里解析出来,形成一张清晰的表。

从比喻回到技术上,这一步叫“数据画像”。我们要统计下载总量、字段完整率、时间跨度、地域分布。如果一份文书没有判决主文,后续就没法提取量刑标签,它就不该进入建模集。所谓可用数据,不是下载了多少,而是最终能进入训练集的干净样本有多少。

有了这份“食材清单”,AI法官大厨才算知道后厨到底有多少能用的原料,也才能判断下一步该花多大力气去清洗。

r可用=N有效N下载\displaystyle r_{\text{可用}} = \frac{N_{\text{有效}}}{N_{\text{下载}}}
这个比例告诉我们:一百份下载文书中,到底有多少真正能变成AI大厨的可用食材。
  1. 统计下载总量N_{\text{下载}} 表示从公开平台下载的原始裁判文书总份数。
    N下载N_{\text{下载}}
  2. 统计有效文书N_{\text{有效}} 表示经过字段完整性检查后,能提供案情和判决结果的文书数量。
    N有效N_{\text{有效}}
  3. 计算可用率两者相除,得到可用率 r_{\text{可用}},它是衡量数据预处理成本的核心指标。
    r可用=N有效N下载\displaystyle r_{\text{可用}} = \frac{N_{\text{有效}}}{N_{\text{下载}}}

文本清洗规则

蔬菜送到后厨时总带着泥,裁判文书也一样。原始文本里有大量的换行符、空格、HTML标签、OCR识别错误,还有“本院认为”“公诉机关指控”这类模板化表达之外的噪声。清洗规则要先把这些杂质去掉:全角字符统一成半角,中文标点规范化,去掉无意义的网页代码,修正常见错别字,比如“xxx“和”xx”这些被公开数据平台打码的占位符。

此外,裁判文书虽然名义上已经脱敏,但当事人姓名、身份证号、住址、车牌号仍可能残留在正文里。正规的司法AI项目会专门做一轮敏感信息检测与打码,好比把带泥的菜根和烂叶一并摘掉。清洗之后还需要去重,因为同一个案件的一审、二审、再审文书可能同时存在,甚至会有完全重复的上传。文本去重可以用字符重叠度来判断。

清洗不是一次性的,而是随版本迭代更新规则。比如新发现了某种命名的隐写,就再往“洗菜流程”里加一步。只有把食材真正洗干净,后面的切菜和做菜才有意义。

J(A,B)=∣A∩B∣∣A∪B∣\displaystyle J(A,B) = \frac{|A \cap B|}{|A \cup B|}
Jaccard相似度衡量两份文书的“撞菜程度”,值越接近1,说明两篇文本越可能是同一道菜。
  1. 提取词集合把文档A和B分别分词后,得到两个词语集合 A 和 B。
    A,BA, B
  2. 求交集大小|A \cap B| 是两篇文书中共同出现的词语数量。
    ∣A∩B∣\displaystyle |A \cap B|
  3. 求并集大小|A \cup B| 是两篇文书中所有不重复词语的总数量。
    ∣A∪B∣\displaystyle |A \cup B|
  4. 计算相似度交集除以并集,得到 J(A,B),阈值超过0.85就标记为近似重复文书的候选。
    J(A,B)=∣A∩B∣∣A∪B∣\displaystyle J(A,B) = \frac{|A \cap B|}{|A \cup B|}

中文分词与文本表示

中文句子没有天然空格,AI大厨没法直接“一口吞”整篇文章,必须先把长句切成一个个有意义的“菜丝”。这一步叫中文分词。常用工具包括jieba、HanLP、LTP等。分词之后还要去掉停用词,比如“的”“了”“本院”“依法”这些出现频率高但信息量低的词。太长的模板化表述也可能被降权或过滤,否则模型会被“依法判处”这类套话淹没。

分词完成之后,文本要从自然语言变成数字向量。最朴素但依然常用的方法是TF-IDF:一个词在某一篇文书中出现得多,说明它对这篇文书重要;但如果它在所有文书中都出现,那说明它其实没什么区分度。TF-IDF就是这两个信号的乘积。

切好、称好、调好味的菜丝,接下来才能被模型这口大锅翻炒。分词质量直接影响后续所有环节,所以这一步也要单独评估,比如看分词结果的召回率、词典覆盖率。

wt,d=tft,d×log⁡(Ndft)\displaystyle w_{t,d} = \text{tf}_{t,d} \times \log\left(\frac{N}{\text{df}_t}\right)
TF-IDF让“真正能区分罪名的词”声量变大,让“到处都是的套话”声量变小。
  1. 计算词频\text{tf}_{t,d} 是词 t 在文书 d 中出现的次数,代表这个词对当前文书的直接重要性。
    tft,d\displaystyle \text{tf}_{t,d}
  2. 计算逆文档频率\log(N / \text{df}_t) 中,N 是文书总数,\text{df}_t 是包含词 t 的文书数,比值越大说明这个词越稀有。
    log⁡(Ndft)\displaystyle \log\left(\frac{N}{\text{df}_t}\right)
  3. 相乘得到权重将词频和逆文档频率相乘,就得到词 t 在文书 d 中的TF-IDF权重。
    wt,d=tft,d×log⁡(Ndft)\displaystyle w_{t,d} = \text{tf}_{t,d} \times \log\left(\frac{N}{\text{df}_t}\right)

标签提取与结构化

AI做判决预测,本质上是从案情描述映射到判决结果。可裁判文书里不是天然写着“请预测我”这样的标签,而是藏在“判决主文”这一栏。比如“被告人张三犯盗窃罪,判处有期徒刑一年,并处罚金人民币2000元”,这里既包含罪名标签,也包含刑种和刑期。我们的目标是从这一句里抽出结构化标签。

从比喻上讲,这一步是给每份洗好切好的食材贴上“菜名”和“辣度”。如果是预测“是否判处实刑”,就可以把主文里出现“有期徒刑”“拘役”“管制”的样本标为1,把“免于刑事处罚”“无罪”“驳回”等情况标为0。但真实数据里写法极不统一,有的写“判处有期徒刑三年,缓刑四年”,如果只看“有期徒刑”会误判成实刑。所以在标签定义时要先明确口径,再用规则加人工抽检反复校准。

标签噪声是司法AI里最隐蔽的陷阱。同一份模板在不同法院可能有不同写法,因此标签抽完不能直接使用,必须抽样返工。贴错标签的食材,会悄悄教会模型错误规律。

y={1,主文含自由刑0,主文不含自由刑\displaystyle y = \begin{cases} 1, & \text{主文含自由刑} \\ 0, & \text{主文不含自由刑} \end{cases}
这个标签函数是量刑预测模型的“标准菜谱”,口径不统一,后面所有菜都会走味。
  1. 定位判决主文提取文书中“判决如下”之后的部分,这是标签的唯一来源。
    判决主文\text{判决主文}
  2. 判断是否含自由刑检查主文中是否出现“有期徒刑”“拘役”“管制”等关键词。
    自由刑概率>0\text{自由刑概率} > 0
  3. 映射成二分类标签满足条件标为1,否则标为0,得到模型训练用的 y。
    y={1,主文含自由刑0,主文不含自由刑\displaystyle y = \begin{cases} 1, & \text{主文含自由刑} \\ 0, & \text{主文不含自由刑} \end{cases}

防泄漏数据切分

做菜最怕大厨提前偷看明天的菜单。如果训练数据里混进了未来信息,模型考试时看起来分数很高,一到真实世界就失灵。裁判文书天然带时间属性:判决日期是公开可得的。如果直接把数据随机打乱再切分,属于“未来时间段”的诉讼信息就可能漏进训练集。比如模型在训练时见过2023年的某类新型诈骗案例,再去测试2022年之前的旧案,这只是虚假的“穿越式预测”。

所以正确做法是按时间切分,让训练集的判决日期都早于测试集。这等于告诉AI大厨:只能用过去的菜谱,去预判未来的口味。除此之外,还要对同一个案件的多份文书去重,并检查特征是否在判决时刻真的可知。比如“案件是否上诉”这个信息在初审判决时还不知道,就不能用作初审预测的特征。

除了时间切分,同案去重和特征可知性检查同样是防泄漏的左右护法。三者缺一不可,否则再好的平衡采样也救不回来。

Dtrain={d∈D∣td≤T},Dtest={d∈D∣td>T}\displaystyle D_{\text{train}} = \{d \in D \mid t_d \le T\}, \quad D_{\text{test}} = \{d \in D \mid t_d > T\}
时间切分把“过去”和“未来”用一堵墙隔开,防止AI大厨偷看时间线。
  1. 记录每份文书的判决时间t_d 表示文书 d 的判决日期,这是防泄漏的第一步。
    tdt_d
  2. 设定时间阈值T 是训练集和测试集的分界日,比如按年份取 T=2022。
    TT
  3. 划分训练集判决时间不晚于 T 的文书进入 D_{\text{train}}。
    Dtrain={d∈D∣td≤T}\displaystyle D_{\text{train}} = \{d \in D \mid t_d \le T\}
  4. 划分测试集判决时间晚于 T 的文书进入 D_{\text{test}}。
    Dtest={d∈D∣td>T}\displaystyle D_{\text{test}} = \{d \in D \mid t_d > T\}

类别不平衡危害

真实裁判文书的罪名分布是一条长长的尾巴:盗窃罪、危险驾驶罪出现几千次,而一些罪名可能只有几十次。这种“偏食”会给模型带来巨大的误导。如果训练集里99%的样本都是盗窃罪,模型只需要永远输出“盗窃罪”,整体准确率就能达到99%,但它其实什么都没学会。

这就像班里99个学生都爱吃米饭,只有1个爱吃面食,食堂师傅如果只准备米饭,满意度也会很高,但这不代表食堂真的会做饭。对于司法AI来说,我们更在乎少数类能不能被识别出来,因为一个危险驾驶罪的漏判可能比一个盗窃罪的误判更致命。准确率在极度不平衡时是“虚假繁荣”,不能用来衡量模型实力。

当IR超过10甚至100时,我们就要立刻意识到:不能只看准确率,而要引入精准率、召回率、F1等对少数类更敏感的指标,并在后续使用平衡采样调整配比。

IR=NmajorNminor\displaystyle \text{IR} = \frac{N_{\text{major}}}{N_{\text{minor}}}
不平衡比IR越大,说明食材越偏食,模型越容易被多数类带偏。
  1. 统计多数类样本数N_{\text{major}} 是训练集中数量最多的类别样本量。
    NmajorN_{\text{major}}
  2. 统计少数类样本数N_{\text{minor}} 是数量最少的类别样本量。
    NminorN_{\text{minor}}
  3. 计算不平衡比两者相除得到 \text{IR},IR等于10说明多数类是少数类的十倍。
    IR=NmajorNminor\displaystyle \text{IR} = \frac{N_{\text{major}}}{N_{\text{minor}}}

平衡采样策略

既然食材偏食,大厨就得主动调整荤素比例。常见动作有四类。第一是随机过采样:把少数类的样本复制几份,简单直接,但容易让模型死记硬背。第二是随机欠采样:从多数类里随机丢掉一些样本,能快速让比例平衡,但也会浪费信息。第三是SMOTE合成,它不是在原样本上复制,而是在少数类样本和它的近邻之间做插值,生成“看起来像但又不完全一样”的新样本。第四是类别加权损失:不改变数据,而是在训练时给少数类的错误惩罚加大。

SMOTE在高维稀疏的文本特征上要小心使用。如果直接对TF-IDF向量做插值,会产生大量非整数的“伪词频”,反而引入噪声。一般会先用降维或词嵌入把文本映射到稠密向量空间,再做合成。

平衡采样不是越多越好。过采样过度会让模型对少数类过度自信,欠采样过度又会丢失多数类的重要模式。实际项目中,经常把SMOTE和类别加权损失一起用,并且用验证集动态观察效果。

xnew=xi+λ(xnn−xi),λ∈[0,1]\displaystyle x_{\text{new}} = x_i + \lambda (x_{nn} - x_i), \quad \lambda \in [0,1]
SMOTE的逻辑,是让AI大厨在两道相似的少数类菜之间,调出一道“新口味”。
  1. 选一个少数类样本x_i 是某个少数类样本的特征向量,它是合成新样本的起点。
    xix_i
  2. 找到它的近邻x_{nn} 是与 x_i 距离最近的另一个少数类样本。
    xnnx_{nn}
  3. 取随机插值系数\lambda 是从0到1之间取的一个随机数,决定新样本更靠近起点还是更像邻居。
    λ∈[0,1]\lambda \in [0,1]
  4. 生成新样本在 x_i 和 x_{nn} 的连线上取一点,得到合成样本 x_{\text{new}}。
    xnew=xi+λ(xnn−xi)\displaystyle x_{\text{new}} = x_i + \lambda (x_{nn} - x_i)

数据质量评估与监控

菜做完了,不能直接上桌,还要试吃。司法AI模型上线前,要反复检查数据质量是否真的过关。第一步是交叉验证稳定性:用不同的数据子集反复训练,看指标波动大不大。如果换一批数据结果就崩,说明数据切分或采样策略有问题。第二步是批次分布监控:上线后,每周新进来的真实案件分布和训练分布是否一致。如果现实世界中的少数类突然变多,模型可能措手不及。第三步是上线复评机制:定期抽回真实案例,重新标注、重新评估,看模型的判决建议是否依然合理。

评估指标上,面对不平衡数据,不能只看准确率。宏平均F1把每个类别都当成平等的一员,先分别计算每个类别的F1,再取平均,这样少数类表现差就会被明显暴露。

数据质量评估不是一次性的,而是从预处理到上线后持续进行的闭环。只有每道工序都有检验,AI法官大厨的菜才能真正端上桌。

Macro-F1=1K∑k=1K2⋅Pk⋅RkPk+Rk\displaystyle \text{Macro-F1} = \frac{1}{K} \sum_{k=1}^{K} \frac{2 \cdot P_k \cdot R_k}{P_k + R_k}
宏平均F1就是让每个菜品都被单独打分,避免“米饭做得再好,面食一塌糊涂”被蒙混过关。
  1. 按类别分别算精确率P_k 是第 k 个类别的精确率,它衡量模型预测为这个类别的样本中有多少是真正正确的。
    PkP_k
  2. 按类别分别算召回率R_k 是第 k 个类别的召回率,它衡量真实属于这个类别的样本中有多少被模型找回来了。
    RkR_k
  3. 计算每个类别的F12 \cdot P_k \cdot R_k / (P_k + R_k) 是精确率和召回率的调和平均。
    2⋅Pk⋅RkPk+Rk\displaystyle \frac{2 \cdot P_k \cdot R_k}{P_k + R_k}
  4. 对所有类别取平均把K个类别的F1相加后除以K,得到宏平均F1。
    Macro-F1=1K∑k=1K2⋅Pk⋅RkPk+Rk\displaystyle \text{Macro-F1} = \frac{1}{K} \sum_{k=1}^{K} \frac{2 \cdot P_k \cdot R_k}{P_k + R_k}

AI 应用场景

批量清洗历史裁判文书,构建案件要素库

阶段:数据准备与特征工程

解决的问题:法院和司法科技公司积累了大量历史裁判文书,手工清洗一份需要几分钟,百万份则无法完成。传统规则需要人工维护正则,漏报率高;AI方案用规则加文本分类模型自动识别字段、去噪、脱敏,把“洗菜流水线”变成自动化管道。

具体案例:某司法大数据团队从公开平台下载80万份盗窃罪文书,先做可用率统计发现只有65%含完整判决主文;随后用Jaccard去重去掉12%的重复文书,再用命名实体识别对当事人信息打码,最终产出50万份干净样本用于罪名知识图谱构建。

量刑预测模型的平衡采样

阶段:模型训练与评估

解决的问题:训练集中“盗窃罪”占比过高,模型对“危险驾驶罪”“故意伤害罪”几乎不敏感。直接训练时少数类F1只有0.31,看起来Accuracy有93%,实际少数类几乎全被漏报。通过SMOTE合成少数类样本,并结合类别加权损失,少数类F1提升到0.58。

具体案例:某课题组用公开裁判文书预测“是否判处实刑”,先做时间切分避免数据泄漏,再对少数类“危险驾驶罪”做SMOTE过采样,最终模型在本地验证集上的宏平均F1从0.44提升到0.61,且没有明显过拟合。

判决辅助系统上线前的防泄漏验证

阶段:模型部署与监控

解决的问题:很多司法AI项目把历史数据随机打乱切分,导致模型“偷看未来”,上线后效果大幅缩水。通过按判决日期切分、同案去重、特征可知性检查,可以从源头堵住时间穿越。

具体案例:某法院量刑辅助系统上线前,技术团队把所有文书按审判日期排序,统一在2019年1月1日切分训练集和测试集,并剔除同一当事人的系列案件,复评报告显示模型在真实新案上的表现和离线测试基本一致。

Python 演示

python49 行
import randomfrom collections import Counter # 模拟公开裁判文书: 多数类 label=0, 少数类 label=1def build_timeline(n=10000, seed=42):    random.seed(seed)    docs = []    for i in range(n):        time = random.randint(1, 20)        label = 0 if random.random() < 0.9 else 1        docs.append({'id': i, 'time': time, 'label': label})    return docs # 按时间切分, 避免未来信息泄漏def time_split(docs, split_time=15):    docs = sorted(docs, key=lambda d: d['time'])    train = [d for d in docs if d['time'] <= split_time]    test = [d for d in docs if d['time'] > split_time]    return train, test # 对少数类做随机过采样, 让它和多数类一样多def random_oversample(train, balance=1.0):    counts = {}    for d in train:        counts[d['label']] = counts.get(d['label'], 0) + 1    major_label = max(counts, key=counts.get)    major_n = counts[major_label]    out = list(train)    for d in train:        if d['label'] == major_label:            continue        need = int(major_n * balance) - counts[d['label']]        for _ in range(need):            out.append(dict(d))    return out # 打印分布def show_dist(docs, tag):    dist = Counter(d['label'] for d in docs)    print(tag, dist) # 时间切分 + 平衡采样演示if __name__ == '__main__':    docs = build_timeline()    train, test = time_split(docs)    show_dist(train, 'train')    show_dist(test, 'test')    train_bal = random_oversample(train)    show_dist(train_bal, 'train_bal')
目的:用一份模拟数据演示“按时间切分”和“少数类随机过采样”两个关键动作,让你直观看到类别分布如何从不平衡走向平衡。
  1. docs.append({'id': i, 'time': time, 'label': label})把每份模拟文书存成字典,包含文书ID、判决日期和类别标签。
  2. docs = sorted(docs, key=lambda d: d['time'])按判决时间升序排列,保证后续切分不会乱序。
  3. train = [d for d in docs if d['time'] <= split_time]只保留不晚于时间阈值的文书进入训练集。
  4. test = [d for d in docs if d['time'] > split_time]只保留晚于时间阈值的文书作为测试集。
  5. counts[d['label']] = counts.get(d['label'], 0) + 1统计每个类别的样本数量,判断谁是多数类。
  6. major_label = max(counts, key=counts.get)找出样本量最大的类别,即需要被抑制的多数类。
  7. need = int(major_n * balance) - counts[d['label']]计算少数类还需要补多少份,才能达到指定比例。
  8. out.append(dict(d))复制少数类样本实现过采样,用 dict(d) 避免修改原数据。
  9. show_dist(train_bal, 'train_bal')输出平衡后的分布,验证少数类数量是否已补到目标水平。

常见误区

误区裁判文书网都已经公开了,下载下来直接分词丢给模型,不是更快吗?反正都是真实判决,模型自己能学习。

正解真实文书里有大量HTML残留、重复文书、残缺判决主文和敏感信息。直接训练会把噪声当规律,模型可能在测试集上表现不错,但上线后完全不可用。就像不洗菜就下锅,菜里全是泥。

为何常见:初学者觉得“公开数据=干净数据”,忽略了从原始数据到训练数据的转换成本。

误区只要用了SMOTE,少数类表现就一定变好,类别不平衡问题就彻底解决了。

正解SMOTE在文本场景需要先做稠密向量化,否则会在TF-IDF稀疏空间生成不合理的词频。而且过采样可能让模型对少数类过度自信,需要结合类别加权损失、调参和验证集评估。平衡采样只是配菜,不是万能药。

为何常见:因为SMOTE是常见的“标准答案”,学习者容易把它当成一键修复工具。

误区训练集和测试集随机打乱切分,模型能学到更通用的规律,效果不是更客观吗?

正解裁判文书有强时间属性,随机切分会让模型看到“未来”。在真实部署时,模型面对的一定是判决日期晚于训练数据的新案,因此必须按时间切分,同时做同案去重和特征可知性检查。

为何常见:通用机器学习课程里多数用随机切分,忽略了司法数据的时间线和重复案件特殊性。

误区模型在测试集上准确率达到95%,说明它已经能很好地预测判决结果。

正解当类别严重不平衡时,模型只要永远预测多数类就能拿到很高准确率,少数类却全军覆没。应该看宏平均F1、精确率、召回率,尤其关注少数罪名的识别能力。

为何常见:准确率是最熟悉、最容易理解的指标,初学者很难第一时间意识到长尾分布的欺骗性。

误区用正则把“有期徒刑”四个字找出来,标签就提取完了,机器怎么会错?

正解判决主文写法千变万化,“判处有期徒刑三年,缓刑四年”和“判处有期徒刑三年”是完全不同的刑种组合。只靠关键词匹配会产生严重标签噪声,必须定义清楚口径,并配合人工抽检和一致性校验。

为何常见:规则匹配在简单样本上效果好,让人忽略了复杂写法和边界情况。

面试题

Q1. 对裁判文书公开数据做预处理时,第一步最应该做什么?

单选题 · easy

  • A.直接分词训练
  • B.先清洗再解析← 正确答案
  • C.先做SMOTE
  • D.先随机抽样

答案:B。裁判文书里充满噪声和残缺字段,必须先清洗、解析出结构化字段,再进入分词和建模。直接分词会把HTML标签和敏感信息一起学进去;SMOTE和随机抽样都应该在数据清洗和标签之后再做。

Q2. TF-IDF中的IDF主要体现什么?

单选题 · easy

  • A.词语在文档中频次
  • B.词语在语料中稀有度← 正确答案
  • C.句子长度的归一化
  • D.文档类别标签信息

答案:B。IDF是逆文档频率,一个词在越少的文书中出现,IDF越大,说明它越稀有、越有区分度。TF体现词在单篇文档里的重要性,句子长度和类别标签都与IDF无关。

Q3. 下列哪些属于裁判文书文本清洗的标准动作?

多选题 · easy

  • A.清洗文本符号← 正确答案
  • B.脱敏当事人信息← 正确答案
  • C.预测法官判决
  • D.过滤无效文书← 正确答案

答案:ABD。清洗符号、脱敏个人信息、过滤缺字段或重复文书都是预处理工作。预测法官判决是模型任务,不是清洗动作。

Q4. 在类别严重不平衡时,哪个指标更适合衡量模型对少数类的表现?

单选题 · mid

  • A.准确率指标
  • B.宏平均F1值← 正确答案
  • C.训练损失大小
  • D.推理时间快慢

答案:B。准确率会被多数类主导,训练损失和推理时间与模型预测能力无关。宏平均F1对每个类别分别打分再平均,更容易暴露少数类表现差的问题。

Q5. 防止裁判文书数据泄漏的正确做法有哪些?

多选题 · mid

  • A.按时间顺序切分← 正确答案
  • B.同案文书去重← 正确答案
  • C.随机打乱后切分
  • D.只使用可知特征← 正确答案

答案:ABD。按时间切分可以避免模型看到未来,同案去重能防止同一案件信息泄露,特征可知性检查确保特征在判决时刻确实可获取。随机打乱切分是典型泄漏来源。

Q6. SMOTE合成新样本的核心原理是什么?

单选题 · mid

  • A.复制少数类样本
  • B.少数类间线性插值← 正确答案
  • C.随机抽取多数类
  • D.给样本添加噪声

答案:B。SMOTE在一个少数类样本和它的近邻之间,用随机系数做线性插值生成新样本。它比简单复制更丰富,也不是随机欠采样或高斯加噪。

Q7. 随机欠采样最容易带来的问题是什么?

单选题 · hard

  • A.训练集规模变大
  • B.丢失多数类关键信息← 正确答案
  • C.生成大量重复样本
  • D.引入严重标签噪声

答案:B。随机欠采样会丢弃多数类样本,虽然能平衡比例,但如果丢弃过多,模型会失去多数类中重要的模式信息。导致训练集变小、泛化下降。

Q8. 构建量刑标签时需要注意哪些问题?

多选题 · mid

  • A.统一刑期口径← 正确答案
  • B.去重同案文书← 正确答案
  • C.合并不同罪名
  • D.校验判决主文← 正确答案

答案:ABD。刑期口径要统一,比如缓刑和实刑必须区分;同案文书去重可以避免重复样本影响训练;校验判决主文能发现漏判。合并不同罪名是破坏标签语义的做法。

Q9. 在时间切分中,某案卷同时涉及多个判决日期时,应当如何处理?

单选题 · extreme

  • A.按判决日期归属← 正确答案
  • B.全部放入训练集
  • C.全部放入测试集
  • D.随机归入任一边

答案:A。时间切分的基本单位是“判决日期”,一份文书属于哪个集合取决于它自己的判决时间。不能因为案件系列就全部放入训练集或测试集,更不能随机分配,否则会破坏时间线。

Q10. 裁判文书数据质量评估环节通常包含哪些做法?

多选题 · hard

  • A.批次分布监控← 正确答案
  • B.交叉验证稳定性← 正确答案
  • C.只看测试集准确率
  • D.检查标签噪声率← 正确答案

答案:ABD。上线前要做交叉验证稳定性,上线后要监控实时案件分布与训练分布是否一致,同时定期抽检标签噪声率。只看测试集准确率在类别不平衡时很容易被误导。