简介:面向自然语言处理、专利情报分析及人工智能研究者的学术论文PDF,聚焦利用改进BERT算法实现专利实体关系抽取,并以石墨烯制备技术为实证案例。资源为完整期刊论文,内容包括摘要、关键词、中英文对照、引言、文献综述,以及两种改进算法:基于改进的BERT-BiLSTM-CRF命名实体识别算法、注意力机制与句法语义结合的实体关系抽取算法。论文通过数值实验对比分析,展示了石墨烯制备技术专利内容的自动抽取与动态演化过程,可为技术预测和专利导航提供方法参考。资源包为单篇PDF文件,大小1.55MB,便于直接阅读和归档;目前已有143人学习。读者可获得完整的算法设计思路、实验设置与结果讨论,适用于专利文本挖掘、技术演化分析和知识图谱构建等研究场景。
1. 专利实体抽取的悖论:改进BERT如何把F1从26.44拉到61.03
同一批石墨烯制备专利,用CRF+依存句法的传统管线来抽工艺步骤,F1只有26.44;换成改进后的BERT组合,F1直接到61.03,精确率从25.18翻到63.33。中间没有换数据集、没有增加人工标注,只是把串行管线里的两个环节分别替换成BERT-BiLSTM-CRF和注意力机制融合语义的抽取模型。在人工智能进入预训练语言模型时代的今天,这个反差依然很反直觉:BERT本身已经是深层双向语义模型,单独拿它做关系抽取却只有44.99,反而叠加一层双向LSTM和CRF、再叠加一层注意力之后,效果才真正拉开。答案藏在专利文本的结构特性里。专利的工艺信息是“实体+动宾关系”的序列,不是通用文本里的“人名-地点-机构”三元组;恰恰是这一点,让通用NER的实体类型表、串行管线的误差传染、以及注意力对高频词的偏袒,成了三个需要被逐个击破的靶子。这篇论文不是教你换一个更贵的模型,而是展示了一个更本质的思路:在领域文本里,模型结构要为内容的语法角色服务。
2. 串行管线:为什么CRF+依存句法在专利文本上把F1拖到26.44
2.1 专利实体不是人名地名:工艺流程是一串动宾双元组
通用文档的NER识别的是PER、LOC、ORG、TIME、NUM、DES、MISC这类粗粒度实体,人物、地点、机构、时间。专利文档完全不同。论文以石墨烯制备为例,实体是氧化石墨烯、碳纤维、烘箱、真空泵这类化学材料和实验器材,其中“氧化石墨烯分散液”是一个复合产物实体。专利的价值信息不在实体本身,而在“实体+操作”的动宾结构:<制备,氧化石墨烯>、<得到,氧化石墨烯分散液>、<配制,镁盐溶液>。这种结构才是权利要求和说明书中工艺流程的基本表达单位。
原文给了一个很典型的例子:在发明内容里检索“将氧化石墨烯(GO)于水中分散,得到氧化石墨烯分散液”,抽取出<得到,氧化石墨烯分散液>,这一步就成为了整个专利工艺流程的一个节点。把所有这样的动宾对串起来,专利的技术方案就还原出来了。所以任务目标从“找到人名地名”变成了“找到动词及其支配的宾语”,而且宾语往往是复合材料实体,动词是整个工艺动作。直接把通用NER的标签体系搬到这种文本上,模型根本不知道该把“氧化石墨烯分散液”切成几个词。
如果按通用文本的实体观来定义问题,实体抽取就是把“人物、地点、机构”挑出来,关系抽取就是判断实体对之间的位置关系、工作关系、隶属关系。但这些关系类型在专利文本里几乎不出现。专利文本里真正有价值的是化学材料、实验器材以及它们被施加的工艺操作。论文把专利实体内容定义得很清楚:专利实体指专利中所应用到的实体,包括化学材料、实验器材等;承载这些实体的就是操作,不同操作方式和顺序,恰恰是一篇专利创新性和新颖性的体现。这决定了序列标注的标签体系、关系分类的类别集合,都必须从专利语料里重新定义,而不是沿用通用NER的schema。
2.2 串行抽取的脆弱性:预处理错一步,关系识别跟着错十步
论文梳理的传统流程是典型的串行级联:输入文本先做分词、去停用词、词性标注,然后进入命名实体识别,得到文本序列标注结果,再进入实体集识别,把多个实体和顺序标注喂给关系识别模块,最终输出“实体+关系”。这个流程的本质是上游每个模块的输出是下游模块的输入,上游的错会一路传到底,而且没有回头路。分词错一个词,词性标注就错,句法分析就错,实体边界就错,关系分类的输入特征从一开始就是脏的。
传统框架把分词环节也交给CRF:先构造特征提取,用CRF训练分词语料,CRF解码出分词结果,分词结果再作为命名实体的输入。作者采用类似最大匹配的思想,把当前包含最长字符词的长度信息提供给统计模型,试图缓解领域分词问题。但这只是局部缓解:专利文本里的专有名词(氧化石墨烯、旋转床、套管)在通用语料里很少出现,分词模型对它们的切分本身就不可靠,一旦分词边界出错,词性标注、句法分析、实体边界全部跟着偏。论文说的是传统方法“容易出现依存关系不全以及关系混乱等错误”。
这里有个值得开发者记住的算术:串行管线的每个环节看起来都有80%以上的单独准确率,但五个环节连乘之后就变成0.8^5约等于0.33。真实情况往往更糟,因为误差不只在乘法意义上累积,还会在某些环节被放大——句法分析就是最典型的放大镜。传统框架在实体识别之后再做句法结构分析,把句子各词语之间的语义关系用依赖结构模式展示。专利文本的长句正好是句法依存分析的弱项。
2.3 句法依存树的局限:专利长句里的动宾关系比通用文本更密集
论文给出的句法依存关系表包含了主流句法体系里的全部关系标签:主谓关系SBV、动宾关系VOB、间宾关系IOB、前置宾语FOB、兼语DBL、定中关系ATT、状中结构ADV、动补结构CMP、并列关系COO、介宾关系POB、左附加关系LAD、右附加关系RAD、独立结构IS、核心关系HED。
| 关系标签 | 描述 | 在专利文本里的典型场景 |
|---|---|---|
| SBV | 主谓关系 subject-verb | 氧化石墨烯分散(主语+谓语) |
| VOB | 动宾关系 verb-object | 得到分散液(核心工艺动作) |
| ATT | 定中关系 attribute | 氧化石墨烯的分散液(材料定语) |
| ADV | 状中结构 adverbial | 均匀分散(方式状语) |
| CMP | 动补结构 complement | 分散完毕(补充说明) |
| COO | 并列关系 coordinate | 搅拌、干燥(并列工艺动作) |
传统框架的核心假设是:通过句法分析树可以找到每个词汇在句子结构中的角色,进而定位与关系特征词构成关系的实体对。但专利说明书尤其是具体实施方案部分,一句话里往往连续出现多个动宾结构:“加入镁盐溶液、加入碱溶液、得到氢氧化镁、升温至一定温度”。这样的句子对依存分析器来说非常拥挤:一个动词后挂着多个宾语和补语,分析树的分支深度和歧义都比新闻语料高一个量级。
更重要的是,传统管线把实体识别、关系识别拆成两个独立任务,实体识别先给出一批实体,关系识别再去判断它们之间的关系。但专利工艺流程里的关系不是实体与实体之间的静态关系,而是“操作→材料/产物”的动态转换关系。实体对之间没有明显的句法信号,唯一可靠的信号就是动词和它的支配结构。这让“先找实体再找关系”的套路显得别扭:实体找到了,却发现最有信息量的是动词,而动词早在词性标注环节就可能被标错。论文表2给出的量化结果是:CRF+依存句法这套经典框架在石墨烯专利实体关系抽取上的精确率只有25.18%,召回率27.84%,F1 26.44。模型声称找到的动宾关系里,每四个只有一个是符合工艺语义的。这个数字不是调参能救的,是范式本身的问题。接下来看BERT怎么换掉这个范式。
3. BERT输入表征:CLS、实体定界符与三层embedding叠加
3.1 三层embedding求和:token、segment、position
论文把BERT定位为一个深度双向预训练表征模型:用Transformer做encoder,通过联合调节所有层中的双向Transformer来预训练深层双向表示。对输入侧,BERT的embedding不是单一查表,而是三种embedding求和的结果:token embeddings编码字或词本身,segment embeddings区分句子A和句子B,position embeddings提供位置信息、支持最长512的序列。预训练不只做语言模型,还要做以两个句子为输入的分类任务,所以segment embeddings用来区别两个句子;position embeddings是训练学出来的,而不是固定的正弦编码。
在非分类任务里,segment侧的设计是:对单句只采用sentence A嵌入,不需要添加SEP符号;输入是两个句子时,给第二个句子的每个token加sentence B嵌入,并用SEP将句子切开。第一个token始终是CLS——论文特别说明,CLS用于分类任务时聚合整个序列的表示,非分类任务则忽略这个向量。但在实体关系抽取任务里,CLS反而成了主角:它承载整个句子的语义内容,和两个目标实体的隐含向量一起,构成关系分类的三路输入。
这个设计背后的取舍值得琢磨:BERT本身是语言模型,预训练目标(masked language model + next sentence prediction)并不直接优化关系抽取。论文做的改进是“只需要增加一个输出层,就可以对预训练的BERT表征进行微调”。实体位置的标注直接在输入侧完成,而不是加一层指针网络来预测实体跨度。这种“输入侧标记”思路沿用了经典的entity marker方案,它的好处是不改动BERT内部结构,任何一个预训练权重都可以直接微调;坏处是,标记符号本身也是token,要占用一部分bert词表的嵌入空间。
3.2 与#定界符:把实体位置写进输入,而不是写进结构
怎么让BERT知道“这一对实体是待分类关系的subject和object”?论文给的方案非常朴素:在第一个实体前后各加一个$符号,在第二个实体前后各加一个#符号。举例:输入句子“复合材料经液相剥离得到石墨烯纳米片”,第一个实体是“复合材料”,第二个实体是“石墨烯纳米片”,则送入BERT的序列是:
“[CLS] $复合材料 经液相剥离得到 #石墨烯纳米片#”
定界符不是标签,不参与语义计算,但它们的token嵌入会被BERT编码进上下文。这样做的效果是:模型在self-attention计算过程中,天然知道这两个片段是被“框住”的实体,它们位置的隐含向量可以当作实体表示来用。论文用“变相指出两个实体的位置”来概括这个机制。输入维度随之变成[batch size n, max_length m, hidden size d],其中max_length是序列最大长度,m覆盖定界符占用的额外token。
这个设计的优势是简单、不增加模型参数;缺陷是依赖上游给到的实体边界。如果边界错一位,定界符就框错了词,后面的关系分类只能对着错位信息硬算。论文在描述实体定位时提到:目标实体由基础的语言单元字或词组成,为了定位两个目标实体并将其信息转移到BERT中,在将整个问题投入BERT前,在目标实体前后添加“$”和“#”。这里的实现顺序是:先由命名实体识别模块找出实体跨度,再在原始句子对应的位置插入定界符。也就是说,定界符不是随机加的,而是完全跟随实体识别结果的。
3.3 从H0到softmax:三路向量的拼接运算
输入BERT之后,输出侧的运算逻辑论文用公式(1)到(7)完整给出了。整理成向量运算的视角:
# 设 batch size=n,序列长度=m,BERT hidden size=d,关系类别数=L # H: BERT 输出隐状态 [n, m, d] # 实体1 起止下标 [i, j],实体2 起止下标 [k, m] H0 = H[:, 0, :] # CLS 位置输出,[n, d] H0_prime = W0 @ tanh(H0) + b0 # 句向量变换,[n, d] e1 = H[:, i:j+1, :].mean(dim=1) # 实体1 各字向量平均,[n, d] e2 = H[:, k:m+1, :].mean(dim=1) # 实体2 各字向量平均,[n, d] H1_prime = W1 @ e1 + b1 # 实体1 信息,[n, d] H2_prime = W2 @ e2 + b2 # 实体2 信息,[n, d] h = torch.cat([H0_prime, H1_prime, H2_prime], dim=-1) # [n, 3d] logits = W3 @ h + b3 # W3: [L, 3d] p = torch.softmax(logits, dim=-1) # [n, L]这段逻辑对应论文公式(1)-(7)。几个机制要点:
- 句向量H0先过tanh再接线性层,非线性激活让CLS输出从语言模型表征空间映射到关系分类空间;
- 实体向量取的是实体跨所有字向量的平均,以平均池化消除字级别位置带来的抖动,这在实体长度不一时尤其重要:长实体“氢氧化镁石墨烯复合材料”和短实体“碱溶液”得到同等维度的表示;
- 三路拼接得到[n, 3d]综合向量,W3的形状是[关系数L, 3d],最终输出是每个关系的logits,再softmax得到概率分布。
也就是说,关系的分类信号 = 整句语义 + 实体1语义 + 实体2语义。句子语义回答“这句话在干什么”(制备、配溶液、加料、升温),实体语义回答“这次处理的是哪两个对象”。如果缺少“$”和“#”定界符,BERT无法从纯文本里区分哪两个span是关系分类的目标;如果缺少CLS向量,模型就丢失了全局语境——同一个动宾对在“加入氧化石墨烯后升温”和“产物升温导致分解”这两种语境里,关系语义完全不同。
4. 两种改进机制:BiLSTM-CRF的序列约束与注意力机制的语义聚焦
4.1 BERT-BiLSTM-CRF:为什么BERT后面还要接双向LSTM和CRF
论文对BERT-BiLSTM-CRF的描述是:用BERT产出的特征作为输入,进入双向长短记忆网络,再通过CRF解码。示例句子“经过干燥再分散得到氧化石墨烯分散液”在该模型里的标签输出是:O O O O O O O O O B-OR、I-OR一类的序列。这说明框架要解决的是一个字级序列标注问题:每个字被标注为O(非实体)或B-OR/I-OR(氧化石墨烯类实体的起始/内部)。
为什么BERT输出的特征不能直接接softmax做标注?论文给出的结构是:BiLSTM层用前文信息向量加上后文信息向量,在序列空间上分析关联,进而发现合适的命名实体;CRF层则负责解码标签序列。我一般这么理解这个叠加:BERT已经把每个字编码成了包含全句上下文的向量,但相邻字之间“谁是实体起始、谁是实体内部”的转移关系,BERT并没有天然建模——它是语言模型,不是标注模型。BiLSTM在序列方向做一次双向扫描,把前文信息向量和后文信息向量融合到每个位置上,相当于在BERT的语义特征之上补上了顺序依赖;CRF则在这个基础上强加标签转移约束:B-OR后面可以接I-OR,但O后面不能直接接I-OR,I-OR后面也不能跳回到B-OR。
这种约束正是专利实体抽取必需的:实体边界是工艺步骤的基本单元,边界碎了,动宾关系就无从谈起。论文称这个模型为“将中文特征和句法语义特征相结合的新算法”。在实际设置里,字符嵌入层把每个汉字转成向量输入,BERT层提供语义上下文,BiLSTM加工序列信息,CRF负责输出合法标签路径。测试句子最终输出“经过干燥再分散得到氧化石墨烯分散液”的标注结果是:经过、干燥、再、分散、得到等字均为O,“氧化石墨烯分散液”整体标成B-OR、I-OR序列。从标签序列可以看到,模型学会了把“氧化石墨烯分散液”当成一个完整的材料实体,而不是拆成氧化/石墨烯/分散/液四个碎片。
4.2 注意力机制融合句子语义:字级权重怎么滤噪声
关系抽取这一侧,论文提出的第二种改进是“注意力机制与语义结合”:输入一个句子,先分词并做句法标注,然后把训练后的分布式词向量输入BiLSTM获取句子语义信息,再引入字级别的注意力机制,给每个字分配权重,自动获取对实体关系抽取有较大影响力的字,最后把权重向量输入softmax对关系分类。
这里的核心机制是字级注意力。专利句子里不是每个字都在贡献工艺信息。“经过”“再”这类虚词、连接词和修饰成分,对判断“得到氧化石墨烯分散液”这个动宾关系没有帮助。注意力层的做法是对BiLSTM输出的每个位置向量学习一个注意力得分,得分高(通常是核心动词和宾语中心词)的位置在最终句表示里占更大比重。论文特意说“自动获取对实体关系抽取有较大影响力的字节”——不用人工指定关注动词,端到端训练自然会把权重集中在关键语义上。
模型对句子“经过干燥再分散得到氧化石墨烯分散液”输出的是“分散得到氧化石墨烯分散液”——“经过”“干燥”“再”这些字的权重被压低,浓缩后的句表示保留了核心动宾链。对比论文图6(单BERT抽取)和图9(加注意力的抽取),能直观看到差异:图6的结果里还有<提供,有力保障>、<混合,均匀特征时间>这类噪声,图9里这些被过滤掉了,剩下的动宾对基本都能对应真实工艺步骤,如<制备,氧化石墨烯>、<得到,氧化石墨烯分散液>、<配制,镁盐溶液>、<加入,旋转床或套管>。
这个过程和传统句法分析的关键差别在于:传统方法用VOB等句法关系标签来硬找动宾对,一旦语法分析出错就漏;注意力机制不给每个字预设句法角色,而是学习一个连续的权重分布,让模型自己在语义空间中判断哪些字组合起来表达了“动作+受事”。按论文的说法,注意力机制与句法语义特征结合,本质上是用soft的方式引入了句法知识,而不是依赖一棵可能解析失败的硬树。
4.3 数字验证:P、R、F1涨在哪个环节
论文表2的实验结果很干脆:
| 模型 | 精确率 P | 召回率 R | F1 |
|---|---|---|---|
| CRF + 依存句法 | 25.18 | 27.84 | 26.44 |
| BERT | 46.67 | 43.43 | 44.99 |
| BERT-BiLSTM-CRF + 注意力与句法结合 | 63.33 | 58.89 | 61.03 |
三组数据的读法:从CRF到BERT,精确率和召回率各涨了约20个点,这是预训练语义模型带来的基准跃升;从BERT到改进的组合,精确率再涨16.66、召回率涨15.46,F1从44.99提到61.03。注意精确率涨幅大于召回率涨幅,说明改进模型的主要收益来自“减少误报”——注意力机制和CRF的标签约束共同把“提供,有力保障”式的噪声压掉了。论文给出的相对结论是:CRF+依存句法的精确率、召回率和F1值分别仅为改进算法效果的39.8%、47.2%和43.3%;BERT的这三项指标为改进算法效果的73.7%。
这里有个在实现时需要反复确认的点:改进算法把召回率提到58.89,说明仍有约四成真实动宾对没被召回。主要瓶颈通常不在关系分类,而在上游NER——实体边界只要错一格,实体平均池化就掺入了邻接字的语义,关系分类再准也救不回来。
5. 专利实体抽取避坑指南:五个从数据到部署的翻车点
复现这篇论文的做法时,最容易出问题的其实不是网络结构,而是数据工程和推理链路上的五个坑。下面按“现象→原因→解决”逐一拆开。
5.1 通用NER标签直接套专利文本,实体边界碎成渣
现象:把PER/LOC/ORG体系的BIO标签直接用在专利上,模型把“氧化石墨烯分散液”切成“氧化/石墨烯/分散/液”四个碎片,实体1的向量平均把“分散”这个动词也平均了进去,关系分类时实体语义被污染。
原因:通用NER的实体类型由人名地名定义,专利实体是“改性材料+工艺状态”的复合名词,边界规则完全不同。PER的边界是连续的人名片段,而“氧化石墨烯分散液”是一个“材料+分散状态”的复合短语,通用标签体系里根本没有对应物。
解决:按论文思路自定义OR(氧化物/石墨烯类材料)标签,采用字级标注(B-OR、I-OR),并在预处理阶段引入石墨烯领域词典做最大匹配,先把“氧化石墨烯”这类长术语锁死。从代码层面讲,就是不要用现成的spaCy中文NER pipeline直接出标签,先改标签schema再做序列标注训练。
5.2 分词错在预处理环节,崩在句法分析环节
现象:CRF分词模型把“旋转床或套管”切成“旋转/床/或/套管”,词性标注把名词“床”标成动词,依存句法树的VOB节点直接消失,动宾对“加入旋转床或套管”抽不出来。
原因:专利专有名词不在通用分词语料里,统计模型只能按通用词频切分。论文传统框架里“最长字符词长度”特征只能缓解,不能根除——词典覆盖不到的术语,最大匹配也救不了。
解决:领域词典+CRF混合切分;更彻底的做法是跳过显式分词,用字级模型做NER,让BERT自己从字序列学出实体边界。字级模型对“旋转床或套管”这种结构的鲁棒性,远好于词级模型。
5.3 实体定界符跟着错误实体走,关系分类全盘乱
现象:“$”和“#”标记加错位置时,模型把“复合材料”前面一个字也框进实体1,关系分类置信度整体下降,工艺流程序列里多出大量<加入,镁盐>这类半截实体对。
原因:论文方案的定界符依赖上游NER输出,实体边界本身有误差,框错位置后BERT在定界符附近编码的上下文也救不回来。这是一条硬依赖:定界符位置错一个字符,实体向量的平均池化区间就错一个字符。
解决:训练时用真实实体边界加定界符,推理时先对NER结果做边界校准——用CRF输出的B-OR/I-OR标签拼回完整实体,再放回原句加“$”和“#”。不要直接对NER的原始span做裁剪。
5.4 注意力被高频工艺词绑架,抽出无意义的动宾对
现象:语料里“提供”“加入”出现上千次,注意力权重偏向它们,结果抽出<提供,有力保障>、<缩短,30s~30min>这种语义上确实是动宾、但对工艺流程毫无意义的配对。
原因:纯注意力机制只看词频和上下文相关性,不理解动词是否在描述材料/产物的转换动作。“有力保障”和“30s~30min”都是高频宾语,但都不是材料实体或工艺参数实体。
解决:论文的应对是把句法语义特征(VOB、CMP等)和注意力结合,把“动宾结构”作为注意力分布的先验约束;工程上可以再加一条规则:宾语必须命中实体词表,否则丢弃该关系。按论文图9的结果,这套组合让<提供,有力保障>和<混合,均匀特征时间>消失了,剩下的基本都是材料或溶液类宾语。
5.5 静态划分训练测试集刷高分,时间序列上翻车
现象:同一批石墨烯专利里划分训练集测试集,F1能到61;拿到新申请年份的专利文本,实体如“氧化石墨烯膜”“三维石墨烯网络”没在训练集出现过,P和R同时掉。
原因:技术和术语是时间序列演化的,静态数据集学到的分布天然过时。论文结束语也指出,目前的研究是在当前静态数据库基础上划分训练数据和测试数据,动态时间序列上的分析是技术创新管理领域的另一个重要问题。
解决:至少要做到定期用新授权专利增量微调NER模型;更进一步,按论文设想的方向,用时间窗口滑动重建训练集,融合科技数据、商业数据、政策环境数据,做多源动态演化分析。
6. 设计取舍与进阶:为什么责任分离比端到端联合建模更稳
6.1 两阶段组合依然存在误差传染,但它可控
论文的完整框架仍然是两阶段:先用BERT-BiLSTM-CRF抽实体,再用注意力+语义模型抽关系。明明深度学习领域有大量联合抽取工作,为什么不端到端一把梭?我的理解是:专利工艺抽取里,实体边界错误和关系分类错误是两个不同性质的错误,前者是序列标注错位,后者是语义聚焦偏差。把两者塞进同一个模型,梯度会在实体边界和关系语义之间互相干扰,调参就成了玄学;责任分离后,每个阶段都有明确的评价指标,NER看P/R/F1,关系抽取也看P/R/F1,哪个环节掉点可以直接定位单独优化。
论文的实验结果证明了这个取舍的有效性,但代价也很明确:上游NER的错误仍然会传进关系分类,两阶段管线不可能像联合模型那样在训练时互相纠正。这不是缺陷,而是可控性的代价——对专利分析这种需要解释性的任务,每个阶段的中间结果都是可审计的,反而比黑匣子式的端到端模型更可靠。
6.2 可以立刻上手的验证方法
复现这套机制时,最值得做的实验不是直接跑全流程,而是分别记录三个数:NER的实体边界准确率、加定界符后BERT关系分类的准确率、以及最终动宾对的F1。如果NER边界准确率低于90%,问题几乎一定在上游,先去调领域词典和CRF约束;如果NER正常但关系分类掉点,才去调注意力机制。这个排查顺序能省掉一大半调试时间。我在做这类领域抽取任务时还有一条习惯:强制在推理阶段做一步动宾合法性校验,把抽取到的<动词,宾语>对和依存句法树的VOB节点交叉比对,命中率低的输出直接降权。从那以后,凡是要上线的专利抽取模型,我都强制走一遍这条校验,宁可多花几分钟解析一棵句法树,也不让“提供,有力保障”这种噪声混进工艺流程。希望帮到你。
本文还有配套的精品资源,点击获取