小样本专利相关性筛选:一个从 100 条不到的标注数据起步的项目实践
很多文本分类项目一开始都会默认一个前提:先有一批像样的标注数据,再谈模型效果。
但真实项目里,经常不是这样。
这次做的是一个专利相关性筛选任务。目标并不复杂:从一批专利中找出与目标技术方向更相关、值得进一步研究的候选专利。真正复杂的是现实条件:
- 已标注样本不到 100 条
- 正样本更少
- 未标注样本有上千条
- 专利文本很长,表达也不统一
- 结果还需要能回写到原始表格,方便人工复核
在这种条件下,项目的重点其实不是“堆一个多复杂的模型”,而是先找到一条能跑通、能迭代、能扩充数据的路线。
这篇文章就总结一下这个项目的思路、取舍和踩坑。
1. 项目到底在做什么
从任务定义上看,这其实是一个很标准的二分类问题:
relevant:相关专利irrelevant:不相关专利
但从业务视角看,它更像一个筛选系统,而不是一个追求绝对准确率的学术分类器。
我真正想解决的问题不是:
“模型能不能把每一条专利都 100% 判对?”
而是:
“能不能先把最值得看的相关候选排到前面,减少人工筛选成本?”
这个目标的变化非常重要。
因为在小样本阶段,模型更适合作为:
- 概率打分器
- 候选发现器
- 人工筛选辅助工具
而不是最终裁决者。
2. 数据长什么样
项目里每条专利大致包含这些字段:
Publication Number:公开号Claims:权利要求相关文本Description:描述文本IPC:国际专利分类号label:人工标注结果,仅训练阶段有
这里有一个容易被忽略但很关键的点:
Publication Number 要保留,但不要喂给模型
它的作用是:
- 标识这条样本是谁
- 后续和原始 Excel 对齐
- 预测结果回写
- 人工复核定位
但它本身不是语义特征,不应该参与模型学习。
如果把它拼进输入文本里,模型学不到什么有用信息,反而可能引入噪声。
所以在整个流程里,我一直保留 Publication Number,但只把它当作样本主键。
3. 为什么没有一上来就重度微调 BERT
这个问题其实很关键。
一开始最自然的想法是:
既然是文本分类,那就直接用 BERT 微调不就好了?
理论上可以,但在这个项目里不太合适,原因很现实:
- 已标注样本太少
- 正负样本不平衡
- 文本很长
- 输入字段比较多
- 直接全参数微调很容易过拟合
简单说就是:模型复杂度和数据规模不匹配。
所以项目初期没有走“重度微调”的路线,而是用了一个更稳的方案:
预训练 BERT 提文本向量 + 轻量分类器完成小样本分类
这个思路听上去朴素,但在数据量很小的时候往往更稳。
4. 第一版技术路线:BERT 向量 + 小分类器
第一版方案拆开看,其实很简单:
第一步:把多个字段拼成统一输入文本
例如:
Claims: ...
[SEP]
Description: ...
[SEP]
IPC: ...
如果后面还有新字段,比如新的说明文本,也可以按同样方式继续拼接进去。
这个阶段我尽量避免过于复杂的文本工程,核心原则是:
- 结构统一
- 输入稳定
- 尽量贴近训练和推理的一致性
第二步:用预训练 BERT 提取语义向量
这里 BERT 的角色不是最终分类器,而是文本表示器。
也就是说,先让模型把一条专利文本变成一个向量表示,再把这个向量送给下游的小分类器。
第三步:用 Logistic Regression 或小型 MLP 做分类
在不到 100 条数据的条件下,这类轻量模型更合适,因为:
- 参数少
- 更不容易过拟合
- 训练速度快
- 可解释性相对更强
这一阶段的目标不是追求“最强效果”,而是先做出一个能给未标注样本打分的 baseline。
5. 小样本阶段,评估方式比模型更重要
在这种项目里,一个常见误区是:
只看一次 train/valid 划分结果,然后根据一个 accuracy 下结论。
这其实很危险。
因为当样本非常少时,单次划分带来的波动会很大。
所以这个阶段我更倾向于:
- 使用
Stratified K-Fold - 看交叉验证输出概率
- 关注 F1、Recall、ROC-AUC
- 更关注 Top-K 结果是否有业务意义
尤其是在专利筛选这种任务里,accuracy 往往并不是最重要的指标。
如果目标是“先抓出值得研究的候选专利”,那更应该关注的是:
- 高分样本里有多少真相关
- 低分样本里有多少真不相关
- 模型排序是否合理
这比单看一个整体分数更实用。
6. 为什么 threshold 很重要
模型最终通常会输出两类概率:
prediction_probs_0:不相关概率prediction_probs_1:相关概率
两者通常和为 1。
而真正把概率变成标签的,是 threshold。
例如常见规则是:
- 如果
prediction_probs_1 >= threshold,则判为relevant - 否则判为
irrelevant
这里有个很重要的工程问题:
threshold 不一定要固定在 0.5。
如果想让正样本更准确
也就是希望被判成 relevant 的样本尽量真的是相关专利,那就应该把阈值调高,比如:
0.70.80.9
这样会减少误报,但也会漏掉一部分真实正样本。
如果想让负样本更准确
也就是希望被判成 irrelevant 的样本真的大多数不相关,那就要把阈值调低,比如:
0.30.20.1
这样会让模型更容易把样本判成正类,只有特别不像正类的才进入负类。
在这个项目里,更推荐双阈值
在小样本专利筛选场景中,我后来更倾向于用这种方式:
prob >= 0.8:高置信正样本候选prob <= 0.2:高置信负样本候选- 中间区域:人工复核
这比单一阈值切分更适合当前阶段。
7. 为什么要做“推理打分 + 样本扩充”
这个项目一个核心现实是:
未标注样本远多于已标注样本。
这意味着第一版小模型真正的价值,不是“直接把所有未标注样本判死”,而是:
先给这批未标注专利打一个相关概率分数。
然后做三件事:
1. 挑高分样本
这些样本更像正样本,适合作为候选相关专利交给人工复核。
2. 挑低分样本
这些样本更像负样本,适合作为候选不相关样本。
3. 看边界样本
最接近阈值的样本通常是模型最不确定的,也是最值得人工看的。
也就是说,第一版模型的使命不是终结任务,而是:
- 帮助发现高价值样本
- 降低人工筛选成本
- 为下一轮训练积累更多高质量标注
8. 推理时为什么还要保留原始表格字段
做完推理以后,经常还会有一个实际需求:
“怎么把预测结果和原始带公开号的表格拼起来?”
这也是为什么我一直强调,训练和推理过程中要保留 Publication Number。
这样做有几个好处:
1. 预测结果可回写
最终结果表可以直接带上:
- 原始字段
- 预测标签
- 预测概率
2. 方便人工复核
比如只看高分 top 50 的样本,可以直接定位到具体专利。
3. 方便后续导出和统计
包括:
- Excel 输出
- 结果聚合
- 筛选指定范围的专利
所以从工程角度讲,Publication Number 不是可有可无的字段,而是整个流程的“连接器”。
9. 项目里踩过的一些坑
坑一:训练和推理模型结构不一致
这类错误非常典型。
比如训练时 code_embed_dim=32,推理时重建模型却写成了 64,就会导致:
- embedding 层维度不匹配
- MLP 输入层维度不匹配
load_state_dict报错
这类问题说明一个很重要的工程经验:
checkpoint 里不仅要保存参数,还要保存结构超参数。
否则推理阶段很容易“看起来代码一样,实际上结构不一样”。
坑二:把推理代码和验证代码混在一起
在验证集上可以有 label,所以能算:
real- precision
- recall
- f1
但新数据推理时没有 label,如果还沿用验证阶段的写法,就会直接报错。
这其实提醒我一个很简单但常被忽略的事实:
推理阶段不需要真实标签,只需要输出预测结果和预测概率。
坑三:新增字段不一定总是增益
后来数据里增加了新的文本字段,比如:
Patent ClaimsInstruction manual
一开始直觉上会觉得:
信息更多,效果应该更好。
但实际做下来会发现不一定,因为新增字段可能带来:
- 文本更长
- 截断更严重
- 和原字段高度重复
- 小样本下噪声更大
所以更稳的做法不是一股脑全加,而是逐步实验:
- 原始两列
- 加一列
- 四列全加
比较哪种组合在当前数据规模下更合适。
10. 这个项目现在到底算什么阶段
如果一定要给它一个定位,我会把它定义为:
一个面向专利筛选场景的小样本语义分类与候选排序系统
重点是这几个词:
小样本
说明现在数据规模还不足以支撑复杂模型完全稳定发挥。
语义分类
说明核心不是关键词命中,而是利用预训练语言模型做语义表示。
候选排序
说明当前更看重的是“把值得看的样本排到前面”。
系统不是为了替代人工,而是为了把人工从全量粗筛中解放出来。
11. 如果继续做下去,后面怎么优化
这个项目后面最值得做的方向,其实不是先继续堆模型,而是继续把“数据闭环”做起来。
1. 优先扩充高质量标注
在这个任务里,数据质量明显比模型复杂度更重要。
2. 引入主动学习
优先让人工检查:
- 最高分样本
- 最低分样本
- 最不确定样本
这样可以用最小成本获得最大增益。
3. 尝试更适合专利语料的模型
等样本进一步积累后,可以考虑:
- 专利领域专用 BERT
- sentence-transformer
- rerank 模型
4. 做成“两阶段系统”
第一阶段先粗筛,第二阶段再重排,会更符合真实业务场景。
12. 总结
这个项目给我最大的感受,不是“BERT 好不好用”,而是:
在小样本场景里,工程取舍比模型复杂度更重要。
真正有价值的,不是上来就追求一个多复杂的网络,而是先把这些问题解决掉:
- 输入格式是否统一
- 训练和推理是否一致
- 结果能不能回写到原表
- 概率输出能不能支持候选筛选
- 模型能不能帮助人工减少工作量
在当前阶段,这个项目最合适的定位不是“一个已经成熟的自动分类系统”,而是:
一个能够稳定输出相关概率、帮助发现高价值候选专利的小样本筛选工具。
而这恰恰是很多真实项目真正需要的第一步。
关键词
- 小样本文本分类
- 专利相关性筛选
- BERT 向量表示
- Logistic Regression baseline
- 候选排序
- 主动学习
- 概率阈值
- 伪标签扩充
- 专利语义匹配