法律领域里的 NLP:合同审查、分类和案例检索实战
学习目标
这篇内容不追求把法律 NLP 讲成'万能解法',重点放在几个更常见、也更容易落地的方向上:合同分析、法律文本分类、案例检索,以及这些任务背后常用的模型和处理流程。
一、法律 NLP 常见做什么
1.1 合同分析
合同分析不是简单地扫一遍文本。真正有价值的部分,通常是把条款里的风险点先捞出来,再辅助审查、起草和归档。
常见会落到这三个动作:
- 合同审查:识别违约责任、赔偿上限、自动续约这类风险条款。
- 合同起草:根据模板补全建议条款。
- 合同管理:做归档、检索和到期提醒。
这类任务里,BERT 做序列分类是比较顺手的起点。关键不在模型名字,而在输入怎么截断、标签怎么定义。
from transformers import BertTokenizer, BertForSequenceClassification
import torch
def analyze_contract(text, model_name='bert-base-uncased', num_labels=3):
# 加载分词器和模型
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name, num_labels=num_labels)
# 编码输入文本,注意截断和填充策略
inputs = tokenizer(
text,
return_tensors='pt',
max_length=512,
truncation=True,
padding=True
)
# 模型推理
outputs = model(**inputs)
# 计算分类结果概率
probs = torch.nn.functional.softmax(outputs.logits, dim=-1)
label = torch.argmax(probs, dim=-1).item()
return label
1.2 法律文本分类
法律文本的分类范围很杂,可能是民事和刑事,也可能是合同法、刑法、劳动法。任务本身不复杂,难点在于标签体系经常先天不干净,边界也不总是清楚。
from transformers BertTokenizer, BertForSequenceClassification
torch
():
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name, num_labels=num_labels)
inputs = tokenizer(
text,
return_tensors=,
max_length=,
truncation=,
padding=
)
outputs = model(**inputs)
probs = torch.nn.functional.softmax(outputs.logits, dim=-)
label = torch.argmax(probs, dim=-).item()
label


