数据基础:法律文本数据特点、采集、清洗与标注
做法律大模型,我踩过最大的坑就是数据。模型结构可以抄,训练代码可以复用,但数据——这东西没人能替你准备。今天咱们就聊聊法律文本数据那些事儿。
法律文本数据的特点
法律文本跟普通文本差别太大了。我刚开始做这个方向时,拿通用NLP那套思路直接套,结果惨不忍睹。你想想看,法律文本有几个明显特征:
- 结构高度规范化:判决书有固定模板,法条有层级编号,合同有标准条款。这不是散文,是八股文。
- 术语密度极高:一段话里可能30%以上是专业术语。什么「不可抗力」、「对价」、「溯及力」——普通人看着就头大。
- 逻辑链条严密:法律推理讲究「大前提-小前提-结论」。因果关系、条件关系、转折关系特别多。
- 长文本普遍:一份判决书动辄几千字,复杂的能到几万字。普通BERT的512长度根本不够用。
- 引用关系复杂:法条引用、案例引用、司法解释引用。这些引用关系是理解文本的关键。
核心认知:法律文本不是「写给人看的」,而是「写给法律共同体看的」。这意味着它的表达方式、信息密度、隐含知识都跟普通文本不同。做数据时,你得尊重这种「行业黑话」。
数据采集方法
数据从哪来?我整理了几条路,每一条我都亲自走过。
公开数据源
- 裁判文书网:中国最大的法律文书公开平台。但注意,它反爬很严,而且文书质量参差不齐。
- 法律法规数据库:全国人大、国务院、各部的法规库。结构清晰,但更新不及时。
- 北大法宝、威科先行:商业数据库,数据质量高,但需要授权。
- 政府网站:各地法院、检察院、司法局的公开信息。
采集注意事项
我在项目中遇到过一个问题:裁判文书网的数据量看着很大,但实际可用率不到60%。为什么?
- 很多文书是重复的(同一案件不同审级)
- 部分文书被隐去关键信息(当事人姓名、案号等)
- OCR识别错误导致乱码(早期扫描件)
我的建议:别只盯着一个源。多源交叉验证,能大幅提升数据质量。我习惯的做法是:以裁判文书网为主,用北大法宝做补充验证,再用政府网站做兜底。
数据清洗与预处理
数据采集回来,第一件事不是训练,是清洗。这一步做不好,后面全是白费。
清洗流程
- 去重:基于文书ID和内容哈希双重去重。我遇到过同一个案件被爬了5次的情况。
- 去噪:去掉HTML标签、乱码字符、无关广告。法律文书里偶尔会混入「本页由XX技术提供」这种垃圾信息。
- 格式统一:全角半角统一、标点符号规范、日期格式统一。别小看这个,模型对格式很敏感。
- 长度过滤:太短的(<100字)可能是标题或摘要,太长的(>10000字)可能包含无关附件。
- 质量评分:根据文本完整性、术语密度、逻辑连贯性打分,过滤低分样本。
避坑指南:我曾经因为没做「敏感信息过滤」,直接把包含当事人身份证号的文书喂给了模型。结果模型学会了生成假身份证号……嗯,从那以后我再也不敢跳过这步了。
预处理代码示例
def clean_legal_text(text):
# 1. 去除HTML标签
text = re.sub(r'<.*?>', '', text)
# 2. 统一全角半角
text = text.replace(',', ',').replace('。', '.')
# 3. 去除乱码
text = re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f]', '', text)
# 4. 合并多余空白
text = re.sub(r'\s+', ' ', text)
# 5. 过滤敏感信息(身份证、手机号等)
text = re.sub(r'\d{18}|\d{17}X', '[ID]', text)
text = re.sub(r'1[3-9]\d{9}', '[PHONE]', text)
return text.strip()
数据标注规范
标注是法律大模型最烧钱的部分。我见过太多团队花了几十万标注,结果标注规范没定好,数据废了一半。
标注类型
| 标注类型 | 适用场景 | 难度 | 成本 |
|---|---|---|---|
| 实体标注 | 命名实体识别(当事人、案由、法条) | 中 | 低 |
| 关系标注 | 法律关系抽取(因果关系、包含关系) | 高 | 中 |
| 文本分类 | 案由分类、判决结果分类 | 低 | 低 |
| 摘要标注 | 法律文书摘要生成 | 高 | 高 |
| 问答对标注 | 法律问答模型 | 极高 | 极高 |
标注规范制定要点
我总结了几条铁律:
- 标注指南要详细到「傻子都能看懂」:每个字段的定义、边界情况、争议处理都要写清楚。我见过标注员把「原告」和「被告」标反的。
- 先做小批量试标:拿100条数据让3个标注员独立标,算一致性。Kappa值低于0.8就说明规范有问题。
- 建立争议仲裁机制:标注员意见不一致时,由资深法律专家拍板。别让标注员自己猜。
- 标注质量抽检:每天抽10%的标注结果做二次审核。不合格的退回重标。
我的经验:标注规范不是一次定死的。随着项目推进,你会发现新的边界情况。我习惯每两周更新一次标注规范,并给标注员做一次培训。别嫌麻烦,这钱省不得。
知识体系总览
下面这张图是我自己梳理的法律文本数据处理流程,你可以把它当作路线图:
说白了,数据工作就是「脏活累活」。但模型的上限,就取决于你在这上面花了多少功夫。我见过太多团队急着训练,结果数据没处理好,模型学了一堆噪声。最后还得回头补数据,反而更慢。
最后一句:数据准备阶段,花70%的时间都不为过。模型训练只是最后那30%。记住,垃圾进,垃圾出。