一种基于双仿射的生物医学文档结构化方法

未命名 08-17 阅读:144 评论:0


1.本发明属于自然语言处理技术领域,具体涉及一种基于双仿射的生物医学文档结构化方法。


背景技术:

2.生物医学研究每天产生的大量文献,在循证医学中起着至关重要的作用,然而,生物医学文献的数量庞大,且每天都在快速增加,如何在数量众多的生物医学文献中找到“有用”信息变得越来越困难,因此,需要一个高效和自动化的系统对生物医学文献进行结构化处理,便于简化、加速信息检索过程。
3.如图1所示,为针对生物医学文献进行结构化处理的示例,示例通过对语句进行分类处理,将文献整体划分为4个部,包括“研究背景background”、“研究方法methods”、“研究结果results”、“研究结论conclusions”,结构化处理后的生物医学文献能够帮助医生准确、有效的找到所需的信息,目前针对文档进行结构化处理的方法常见有两种,分别为序列标注sequence labeling方法、基于跨度span-based方法。
4.序列标注方法单独对文档中的单个句子进行分类,忽略了文档的语义结构,导致序列标注方法的性能受到一定的限制;基于跨度的方法首先枚举文档中由相邻句子组成的跨度span,然后对跨度span进行分类,基于跨度的方法需要枚举所有可能的跨度span,同时跨度的数量会由于序列长度的增加,以指数形式不断增加,导致枚举跨度的过程消耗大量时长,此外,基于跨度的方法通常对于跨度的边界不敏感,进而常导致处于边界的语句被错误分类。
5.综上所述,当前的结构化方法并不能高效、自动的针对生物医学文档完成结构化处理,通过建模进行文档分类处理所需时间过长、且文档的分类准确度不高,在分类准确度上有待提高,在时间复杂度上需要进一步优化。


技术实现要素:

6.本发明的目的在于提供一种分类效率提升、分类准确度增加的基于双仿射的生物医学文档结构化方法。
7.本发明提供的这种基于双仿射的生物医学文档结构化方法,包括如下步骤:
8.s1.获取生物医学文档数据集,并针对数据集进行数据预处理;
9.s2.采用步骤s1预处理后的数据,通过双仿射方法构建生物医学文档分类初步模型;
10.s3.采用步骤s2构建的初步模型,通过对抗训练完成初步模型的参数更新,构建最终的文档分类模型;
11.s4.采用步骤s3构建的最终文档分类模型,完成生物医学文档的分类结构化处理。
12.步骤s1所述的获取生物医学文档数据集,并针对数据集进行数据预处理,具体包括:
13.获取的生物医学文档数据集为公开数据集;
14.数据预处理具体包括:数据集中提供“句子级别”的标注数据,{s1,s2,

,si,,sn}为一篇包含n个句子的文献,经过句子级别的标注后形成句子和标签对{(s1,y1),(s2,y2),

,(si,yi),

,(sn,yn)},其中,n是文档中包含的句子数量,si是文档中第i个句子,yi是第i个句子的类别标签;
15.将句子级别的标注转换成“跨度级别”的标注,具体包括:将一篇包含n个句子的已标注文档{(s1,y1),(s2,y2),

,(si,yi),

,(sn,yn)}中相邻的具有相同类别标签的句子进行合并、组成一个“跨度”,如果某个句子与左右相邻的句子的标签均不相同,则这个句子单独组成一个长度为1的“跨度”;采用三元组(s,e,y)表示一个“跨度”,其中,s表示跨度中第一个句子在文献中的下标,e表示跨度中最后一个句子在文献中的下标,y表示跨度的标签类别;经过上述的转换,将已标注文档{(s1,y1),(s2,y2),

,(si,yi),

,(sn,yn)}表示为m个跨度三元组{(s1,e1,y1),(s2,e2,y2),

,(si,ei,yi),

,(sm,em,ym)},其中,m是处理之后获得的跨度数量,且m≤n;si是第i个跨度中第一个句子在原始文献中的下标;ei是第i个跨度中最后一个句子在原始文献中的下标;yi是第i个跨度的类别标签;
16.步骤s2所述的采用步骤s1预处理后的数据,通过双仿射方法构建生物医学文档初步模型,具体包括:
17.(2-1)单独语句的编码处理
18.(1)针对单词进行编码处理:
19.采用步骤s1与处理后得到的数据,针对数据集中一篇文档中的第i个句子si,通过biobert进行编码处理,得到单词的编码表示,编码过程采用如下所示的公式:
20.hi=biobert(si)
21.={h
i1
,h
i2
,

,h
iw
}
22.其中,biobert是针对生物医学领域提出的预训练语言模型;是句子si中所有单词的编码表示;是si中第j个单词的编码表示,表示所有实数的集合,d是单词编码向量的维度数量,w是句子si中包含的单词的数量;
23.(2)针对句子进行编码处理:
24.将获得的单词编码表示映射为key向量和value向量,映射过程采用下述公式表示:
25.ki=hi·
wk[0026]vi
=hi·
wv[0027]
其中,为将第i个句子si中所有单词的编码映射成key向量后构成的矩阵;hi为句子si中所有单词的编码表示;为将单词编码表示映射成key向量的映射矩阵,是步骤s4构建的分类模型中待学习的参数;为将单词编码表示映射成value向量的映射矩阵,是步骤s4构建的分类模型中待学习的参数;为将第i个句子si中所有单词的编码映射成value向量后构成的矩阵;矩阵ki中的第j行k
ij
表示句子si中第j个单词的key向量;矩阵vi中的第j行v
ij
表示句子si中第j个单词的value向量;
[0028]
计算每个单词的权重,并通过对每个单词的编码表示进行加权处理得到句子的编
码表示,处理过程采用下述公式表示:
[0029][0030]ri
=αi·vi
[0031]
其中,为第i个句子si中每个单词的权重;softmax(
·
)表示归一化指数函数;为query向量,是构建的分类模型中待学习的参数;为第i个句子si的编码表示;
[0032]
(2-2)上下文语句的编码处理:
[0033]
通过双向长短期记忆网络(bidirectional long short-term memory,bilstm)进行上下文语句编码处理,将步骤(2-1)获得的所有句子的编码表示定义为r={r1,r2,

,ri,

,rn},为文档中第i个句子si的编码表示,n为文档中句子的数量;通过将r输入到双向长短期记忆网络,计算得到句子的上下文编码表示,计算过程采用下述公式表示:
[0034]
c=bilstm(r)
[0035]
={c1,c2,

,cn}
[0036]
其中,为文档中所有句子的上下文编码表示;dr为句子上下文编码表示的维度数量;为第i个句子的上下文编码表示;
[0037]
(2-3)通过双仿射方法构建生物医学文档初步模型:
[0038]
1)采用步骤(2-2)编码处理后的数据进行映射处理:
[0039]
将句子si的上下文编码表示映射为“开始表示”和“结束表示”,映射过程采用下述公式表示:
[0040]
si=ci·wstart
+b
start
[0041]ei
=ci·wend
+b
end
[0042]
其中,为文档中第i个句子的开始表示;为文档中第i个句子的上下文编码表示;为将句子的上下文表示映射为“开始表示”的线性变换的权值;为将句子的上下文表示映射为“开始表示”的线性变换的偏置;为文档中第i个句子的结束表示;为将句子的上下文表示映射为“结束表示”的线性变换的权值;为将句子的上下文表示映射为“结束表示”的线性变换的偏置;ds为句子的结束表示和开始表示的维度数量;w
start
、b
start
、w
end
、b
end
均是构建的文档分类模型的待学习参数;
[0043]
2)采用双仿射计算每个跨度的分类分数:
[0044]
采用下述公式计算每个跨度的分类分数:
[0045]
[0046]
其中,为从文档中第i个句子开始到第j个句子结束构成的跨度(i,j)的分类分数,是一个长度为c的向量,向量中每个分量代表将跨度分类为对应类别的分数,c表示标签数量;为按照正向方向,从左往右,i≤j计算的分类分数;为按照反向方向,从右往左,i>j计算的分类分数;采用下述公式表示和的计算过程:
[0047][0048][0049]
其中,为双仿射变换的权值,为构建的文档分类模型的待学习参数;为文档中第i个句子的开始表示;为文档中第j个句子的结束表示;
[0050]
步骤s3所述的采用步骤s2构建的初步模型,通过对抗训练完成初步模型的参数更新,构建最终的文档分类模型,具体包括:
[0051]
(3-1)计算单个跨度上的损失:
[0052]
假设跨度(i,j)的真实标签为y,采用下述公式表示分类模型对于跨度(i,j)的损失的计算过程:
[0053]
p
i,j
=softmax(score
i,j
)
[0054]
p
j,i
=softmax(score
j,i
)
[0055]
ce(i,j)=-log(p
i,j
(y))
[0056]
ce(j,i)=-log(p
j,i
(y))
[0057][0058]
其中,softmax表示归一化指数函数;p
i,j
为通过softmax根据跨度(i,j)的分类分数score
i,j
计算获得的分类概率;ce(i,j)为跨度(i,j)的分类概率和真实标签的交叉熵损失;p
j,i
为通过softmax根据反向双放射计算的跨度(i,j)的分类分数score
j,i
计算获得的分类概率;ce(j,i)为通过反向双放射计算的跨度(i,j)的分类概率和真实标签的交叉熵损失;loss(i,j)为分类模型在跨度(i,j)的损失;
[0059]
(3-2)计算分类模型的总体损失:
[0060]
通过对所有真实跨度的损失进行平均处理,得到模型的总体损失,计算公式如下所示:
[0061][0062]
其中,φ(s)为文档句子序列s中所有真实跨度的集合;|φ(s)|为包含的跨度数量;
[0063]
(3-3)计算对抗损失:
[0064]
计算模型总体损失loss
span
在biobert词嵌入层上的梯度,并根据梯度在词嵌入层添加扰动,计算公式如下所示;
[0065][0066][0067]
emb=emb+p
adv
[0068]
其中,g为模型总体损失loss
span
对于词嵌入层的梯度;表示对词嵌入层求偏导;p
adv
为根据梯度计算的扰动;ε∈[0,1]为控制扰动大小的超参数;|g|为g的第二范数,emb为biobert中的词嵌入层;
[0069]
基于上述的计算结果,重新完成上述步骤s2,并在完成后重新根据步骤(3-1)、(3-2)再次计算模型的总体损失,将计算后的总体损失定义为“对抗损失”,同时记为loss
adv

[0070]
(3-4)计算模型最终的损失:
[0071]
模型最终的损失分为模型总体损失和对抗损失两部分,采用下述公式表示计算过程:
[0072]
loss=loss
span
+λ*loss
adv
[0073]
其中,λ是用于平衡模型总体损失loss
span
和对抗损失loss
adv
的超参数;
[0074]
(3-5)更新模型参数:
[0075]
将biobert中的词嵌入层emb的值恢复为步骤(3-3)中添加扰动之前的值,计算模型最终损失loss对于模型中所有可学习参数的梯度,并通过梯度下降法更新模型参数,构建最终文档分类模型;
[0076]
步骤s4所述的采用步骤s3构建的最终文档分类模型,完成生物医学文档的分类结构化处理,具体包括:
[0077]
通过动态规划算法针对模型中的标签进行解码处理,进而完成生物医学文档的分类结构化,具体包括:
[0078]
定义变量n为文档句子序列的长度或文档中包含的句子的数量;score
i,j
为计算得到的跨度的分类分数;alpha(i)为动态规划算法中的中间变量,用于保存在解码过程中计算的文档中的前i个句子所有分类方案中的最大分类分数,i的取值范围为0≤i≤n;path(i)为动态规划算法中的中间变量,用于保存解码过程中解码出的以第i个句子结尾的跨度的开始位置,i的取值范围为0≤i≤n;tag(i)为动态规划算法中的中间变量,用于保存解码过程中解码出的以第i个句子结尾的跨度的标签类别,i的取值范围为0≤i≤n;
[0079]
算法的运行过程具体包括:
[0080]
(4-1)令alpha(0)=0,j=1;
[0081]
(4-2)计算文档中前j个句子所有分类方案中的最大分类分数,并保存至alpha(j)中,计算公式如下所示:
[0082]
[0083]
其中,a(
·
)表示步骤s2的(2-3)中计算的跨度的分类分数;a(i,j,k)表示跨度(i,j)的分类分数score
i,j
的第k个分量,或将跨度(i,j)分类为第k个类别的分数;
[0084]
(4-3)记录前j个句子所有分类方案中分类分数最大的方案,并保存在path(j)和tag(j)中,计算公式如下所示:
[0085][0086]
path(j)=i
[0087]
tag(j)=k
[0088]
其中,i是分类分数最大的方案中以j为结尾的跨度的开始位置;k为该跨度的标签类别;
[0089]
(4-4)将j值进行加1处理;
[0090]
(4-5)如果j小于n,则重复上述步骤(4-2)、(4-3)、(4-4),直到j大于n结束;
[0091]
(4-6)令e=n,其中,e为当前解码跨度的结束位置;n表示文档的长度,或文档中包含的句子的数量;定义x{
·
}为保存解码结果的集合;
[0092]
(4-7)令s=path(e),t=tag(e),其中,s为当前解码跨度的开始位置,t为当前解码跨度的标签类别;
[0093]
(4-8)将(s,e,t)添加到x中,令e=s-1;
[0094]
(4-9)如果e大于0,则重复上述步骤(4-7)、(4-8),直到e小于等于0,结束步骤重复;
[0095]
(4-10)获得文档中句子的最终分类结果x={(sv,ev,tv)|1≤v≤m},其中,m为最优解码方案中包含的跨度的数量,sv为第v个跨度的开始位置,ev为第v个跨度的结束位置,tv为第v个跨度的类别标签;
[0096]
本发明提供的这种基于双仿射的生物医学文档结构化方法,包括直接对序列中的跨度进行分类;通过双放射直接计算出每个跨度的分类分数,不需要枚举序列中所有可能的跨度,从而能够降低模型的时间开销;在标签解码阶段引入了动态规划算法,提高模型对于跨度边界上句子的分类准确度;本发明方法的分类效率提升、分类准确度增加。
附图说明
[0097]
图1为本发明方法使用的pubmed 20k rct数据集中一个生物医学文档句子分类示例。
[0098]
图2为本发明方法的方法流程示意图。
具体实施方式
[0099]
如图2所示为本发明方法的方法流程示意图:本发明提供的这种基于双仿射的生物医学文档结构化方法,包括如下步骤:
[0100]
s1.获取生物医学文档数据集,并针对数据集进行数据预处理;具体包括:获取的生物医学文档数据集为公开数据集,包括两种:(1)pubmed 200k rct数据集:数据集包括从pubmed数据库中获取的随机对照试验rct randomized controlled trials的摘要,将摘要
中的语句划分为五个类别,包括:研究背景background、研究目标objective、研究方法methods、研究结果results和研究结论conclusions;(2)pubmed-pico数据集:数据集包括来自pubmed数据库的摘要,将摘要中的语句划分为七个类别,包括:目标“aim”a、参与者“participants”p、干预措施“intervention”i、干预结果“outcome”o、方法“methods”m、结果“results”r和结论“conclusion”c;
[0101]
数据预处理具体包括:数据集中提供“句子级别”的标注数据,{s1,s2,

,si,

,sn}为一篇包含n个句子的文献,经过句子级别的标注后形成句子和标签对{(s1,y1),(s2,y2),

,(si,yi),

,(sn,yn)},其中,n是文档中包含的句子数量,si是文档中第i个句子,yi是第i个句子的类别标签;
[0102]
将句子级别的标注转换成“跨度级别”的标注,具体包括:将一篇包含n个句子的已标注文档{(s1,y1),(s2,y2),

,(si,yi),

,(sn,yn)}中相邻的具有相同类别标签的句子进行合并、组成一个“跨度”,如果某个句子与左右相邻的句子的标签均不相同,则这个句子单独组成一个长度为1的“跨度”;采用三元组(s,e,y)表示一个“跨度”,其中,s表示跨度中第一个句子在文献中的下标,e表示跨度中最后一个句子在文献中的下标,y表示跨度的标签类别;经过上述的转换,将已标注文档{(s1,y1),(s2,y2),

,(si,yi),

,(sn,yn)}表示为m个跨度三元组{(s1,e1,y1),(s2,e2,y2),

,(si,ei,yi),

,(sm,em,ym)},其中,m是处理之后获得的跨度数量,且m≤n;si是第i个跨度中第一个句子在原始文献中的下标;ei是第i个跨度中最后一个句子在原始文献中的下标;yi是第i个跨度的类别标签;
[0103]
s2.采用步骤s1预处理后的数据,通过双仿射方法构建生物医学文档分类初步模型;具体包括:
[0104]
(2-1)单独语句的编码处理
[0105]
(1)针对单词进行编码处理:
[0106]
采用步骤s1与处理后得到的数据,针对数据集中一篇文档中的第i个句子si,通过biobert进行编码处理,得到单词的编码表示,编码过程采用如下所示的公式:
[0107]hi
=biobert(si)
[0108]
={h
i1
,h
i2
,

,h
iw
}
[0109]
其中,biobert是针对生物医学领域提出的预训练语言模型;是句子si中所有单词的编码表示;是si中第j个单词的编码表示,表示所有实数的集合,d是单词编码向量的维度数量,w是句子si中包含的单词的数量;
[0110]
(2)针对句子进行编码处理:
[0111]
将获得的单词编码表示映射为key向量和value向量,映射过程采用下述公式表示:
[0112]ki
=hi·
wk[0113]vi
=hi·
wv[0114]
其中,为将第i个句子si中所有单词的编码映射成key向量后构成的矩阵;hi为句子si中所有单词的编码表示;为将单词编码表示映射成key向量的映射矩阵,是步骤s4构建的分类模型中待学习的参数;为将单词编码表示映射成
value向量的映射矩阵,是步骤s4构建的分类模型中待学习的参数;为将第i个句子si中所有单词的编码映射成value向量后构成的矩阵;矩阵ki中的第j行k
ij
表示句子si中第j个单词的key向量;矩阵vi中的第j行v
ij
表示句子si中第j个单词的value向量;
[0115]
计算每个单词的权重,并通过对每个单词的编码表示进行加权处理得到句子的编码表示,处理过程采用下述公式表示:
[0116][0117]ri
=αi·vi
[0118]
其中,为第i个句子si中每个单词的权重;softmax(
·
)表示归一化指数函数;为query向量,是构建的分类模型中待学习的参数;为第i个句子si的编码表示;
[0119]
(2-2)上下文语句的编码处理:
[0120]
通过双向长短期记忆网络(bidirectional long short-term memory,bilstm)进行上下文语句编码处理,将步骤(2-1)获得的所有句子的编码表示定义为r={r1,r2,

,ri,

,rn},为文档中第i个句子si的编码表示,n为文档中句子的数量;通过将r输入到双向长短期记忆网络,计算得到句子的上下文编码表示,计算过程采用下述公式表示:
[0121]
c=bilstm(r)
[0122]
={c1,c2,

,cn}
[0123]
其中,为文档中所有句子的上下文编码表示;dr为句子上下文编码表示的维度数量;为第i个句子的上下文编码表示;
[0124]
(2-3)通过双仿射方法构建生物医学文档初步模型:
[0125]
1)采用步骤(2-2)编码处理后的数据进行映射处理:
[0126]
将句子si的上下文编码表示映射为“开始表示”和“结束表示”,映射过程采用下述公式表示:
[0127]
si=ci·wstart
+b
start
[0128]ei
=ci·wend
+b
end
[0129]
其中,为文档中第i个句子的开始表示;为文档中第i个句子的上下文编码表示;为将句子的上下文表示映射为“开始表示”的线性变换的权值;为将句子的上下文表示映射为“开始表示”的线性变换的偏置;为文档中第i个句子的结束表示;为将句子的上下文表示映射为“结束表示”的线性变换的权值;为将句子的上下文表示映射为“结束表示”的线性变换的偏置;ds为句子的结束表示和开始表示的维度数量;w
start
、b
start
、w
end
、b
end
均是构建的文档分类模型的待学习参数;
[0130]
2)采用双仿射计算每个跨度的分类分数:
[0131]
采用下述公式计算每个跨度的分类分数:
[0132][0133]
其中,为从文档中第i个句子开始到第j个句子结束构成的跨度(i,j)的分类分数,是一个长度为c的向量,向量中每个分量代表将跨度分类为对应类别的分数,c表示标签数量;为按照正向方向,从左往右,i≤j计算的分类分数;为按照反向方向,从右往左,i>j计算的分类分数;采用下述公式表示和的计算过程:
[0134][0135][0136]
其中,为双仿射变换的权值,为构建的文档分类模型的待学习参数;为文档中第i个句子的开始表示;为文档中第j个句子的结束表示;
[0137]
s3.采用步骤s2构建的初步模型,通过对抗训练完成初步模型的参数更新,构建最终的文档分类模型;具体包括:
[0138]
(3-1)计算单个跨度上的损失:
[0139]
假设跨度(i,j)的真实标签为y,采用下述公式表示分类模型对于跨度(i,j)的损失的计算过程:
[0140]
p
i,j
=softmax(score
i,j
)
[0141]
p
j,i
=softmax(score
j,i
)
[0142]
ce(i,j)=-log(p
i,j
(y))
[0143]
ce(j,i)=-log(p
j,i
(y))
[0144][0145]
其中,softmax表示归一化指数函数;p
i,j
为通过softmax根据跨度(i,j)的分类分数score
i,j
计算获得的分类概率;ce(i,j)为跨度(i,j)的分类概率和真实标签的交叉熵损失;p
j,i
为通过softmax根据反向双放射计算的跨度(i,j)的分类分数score
j,i
计算获得的分类概率;ce(j,i)为通过反向双放射计算的跨度(i,j)的分类概率和真实标签的交叉熵损失;loss(i,j)为分类模型在跨度(i,j)的损失;
[0146]
(3-2)计算分类模型的总体损失:
[0147]
通过对所有真实跨度的损失进行平均处理,得到模型的总体损失,计算公式如下所示:
[0148][0149]
其中,φ(s)为文档句子序列s中所有真实跨度的集合;|φ(s)|为包含的跨度数量;
[0150]
(3-3)计算对抗损失:
[0151]
计算模型总体损失loss
span
在biobert词嵌入层上的梯度,并根据梯度在词嵌入层添加扰动,计算公式如下所示;
[0152][0153][0154]
emb=emb+p
adv
[0155]
其中,g为模型总体损失loss
span
对于词嵌入层的梯度;表示对词嵌入层求偏导;p
adv
为根据梯度计算的扰动;ε∈[0,1]为控制扰动大小的超参数;|g|为g的第二范数,emb为biobert中的词嵌入层;
[0156]
基于上述的计算结果,重新完成上述步骤s2,并在完成后重新根据步骤(3-1)、(3-2)再次计算模型的总体损失,将计算后的总体损失定义为“对抗损失”,同时记为loss
adv

[0157]
(3-4)计算模型最终的损失:
[0158]
模型最终的损失分为模型总体损失和对抗损失两部分,采用下述公式表示计算过程:
[0159]
loss=loss
span
+λ*loss
adv
[0160]
其中,λ是用于平衡模型总体损失loss
span
和对抗损失loss
adv
的超参数;
[0161]
(3-5)更新模型参数:
[0162]
将biobert中的词嵌入层emb的值恢复为步骤(3-3)中添加扰动之前的值,计算模型最终损失loss对于模型中所有可学习参数的梯度,并通过梯度下降法更新模型参数,构建最终文档分类模型;
[0163]
s4.采用步骤s3构建的最终文档分类模型,完成生物医学文档的分类结构化处理;具体包括:
[0164]
通过动态规划算法针对模型中的标签进行解码处理,进而完成生物医学文档的分类结构化,具体包括:
[0165]
定义变量n为文档句子序列的长度或文档中包含的句子的数量;score
i,j
为计算得到的跨度的分类分数;alpha(i)为动态规划算法中的中间变量,用于保存在解码过程中计算的文档中的前i个句子所有分类方案中的最大分类分数,i的取值范围为0≤i≤n;path(i)为动态规划算法中的中间变量,用于保存解码过程中解码出的以第i个句子结尾的跨度的开始位置,i的取值范围为0≤i≤n;tag(i)为动态规划算法中的中间变量,用于保存解码过程中解码出的以第i个句子结尾的跨度的标签类别,i的取值范围为0≤i≤n;
[0166]
算法的运行过程具体包括:
[0167]
(4-1)令alpha(0)=0,j=1;
[0168]
(4-2)计算文档中前j个句子所有分类方案中的最大分类分数,并保存至alpha(j)中,计算公式如下所示:
[0169][0170]
其中,a(
·
)表示步骤s2的(2-3)中计算的跨度的分类分数;a(i,j,k)表示跨度(i,j)的分类分数score
i,j
的第k个分量,或将跨度(i,j)分类为第k个类别的分数;
[0171]
(4-3)记录前j个句子所有分类方案中分类分数最大的方案,并保存在path(j)和tag(j)中,计算公式如下所示:
[0172][0173]
path(j)=i
[0174]
tag(j)=k
[0175]
其中,i是分类分数最大的方案中以j为结尾的跨度的开始位置;k为该跨度的标签类别;
[0176]
(4-4)将j值进行加1处理;
[0177]
(4-5)如果j小于n,则重复上述步骤(4-2)、(4-3)、(4-4),直到j大于n结束;
[0178]
(4-6)令e=n,其中,e为当前解码跨度的结束位置;n表示文档的长度,或文档中包含的句子的数量;定义x{
·
}为保存解码结果的集合;
[0179]
(4-7)令s=path(e),t=tag(e),其中,s为当前解码跨度的开始位置,t为当前解码跨度的标签类别;
[0180]
(4-8)将(s,e,t)添加到x中,令e=s-1;
[0181]
(4-9)如果e大于0,则重复上述步骤(4-7)、(4-8),直到e小于等于0,结束步骤重复;
[0182]
(4-10)获得文档中句子的最终分类结果x={(sv,ev,tv)|1≤v≤m},其中,m为最优解码方案中包含的跨度的数量,sv为第v个跨度的开始位置,ev为第v个跨度的结束位置,tv为第v个跨度的类别标签;
[0183]
为了验证本发明方法的有效性,在两个基准数据集pubmed 20k rct和pubmed-pico上进行了实验,实验结果分别展示在表1和表2中;
[0184]
表1:模型在pubmed 20k rct数据集上的结果
[0185][0186]
表1展示的是本发明方法和对比方法分别在pubmed 20k rct数据集上的效果,pubmed 20k rct数据集上总共有5类标签,分别为background、objective、methods、results和conclusions,计算跨度级别的f1和句子级别的f1,其中,对于跨度级别的f1,分别计算了在不同类别上的结果;从表1中的实验结果可以看到,本发明提供的方法无论在跨度级别的f1上还是在句子级别的f1上都比对比的方法好,其中,总体的跨度f1比对比方法中最好的结果高2.2,总体的句子f1比对比方法中最好的结果高0.7;
[0187]
表2:模型在pubmed-pico数据集上的结果
[0188][0189]
表2展示本发明方法和对比方法在pubmed-pico数据集上的效果,关注模型在p元素、i元素和o元素上的效果;对于每个类别,分别计算了精确率(precision)、召回率(recall)和f1值;
[0190]
表2中的实验结果显示,本发明的方法在三类元素的f1上都比对比方法中最好的结果高1个百分点以上;
[0191]
为了进一步验证本发明方法中每个组成部分的作用,pubmed 20k rct数据集上进行了消融实验,在表3中展示了实验结果;其中,“原始”表示本发明方法的完整版本;“去掉注意力机制”指去掉本发明方法中的注意力机制,直接对从biobert中获得的单词的编码表示进行平均作为句子的编码表示;“去掉反向双仿射”指的是去掉本发明方法中通过反方向使用双仿射变换计算跨度分类分数的过程;“去掉对抗训练”指的是去掉本发明方中计算对抗损失的过程,只使用模型的总体损失loss
span
来计算梯度并更新模型的参数;“去掉全局优化”指的是去掉本发明方法中用于标签解码的动态规划算法,转而使用一种贪心的策略来进行标签解码,解码方法如下:
[0192][0193]
其中,为模型预测的标签;
[0194]
表3为在pubmed 20k rct数据集上的消融实验的实验结果,如下所示:
[0195]
表3:在pubmed 20k rct数据集上的消融实验
[0196]
方法跨度f1原始86.7去掉动态规划算法86.4去掉注意力机制86.1去掉反向双仿射86.0去掉对抗训练85.8
[0197]
从表3中的实验结果来看,去掉本发明方法中任何一个部分,都会导致本方法的效果出现下降;由此可以确定,本发明方法中的每个步骤都对最终效果有提升作用。

技术特征:
1.一种基于双仿射的生物医学文档结构化方法,包括如下步骤:s1.获取生物医学文档数据集,并针对数据集进行数据预处理;s2.采用步骤s1预处理后的数据,通过双仿射方法构建生物医学文档分类初步模型;s3.采用步骤s2构建的初步模型,通过对抗训练完成初步模型的参数更新,构建最终的文档分类模型;s4.采用步骤s3构建的最终文档分类模型,完成生物医学文档的分类结构化处理。2.根据权利要求1所述的一种基于双仿射的生物医学文档结构化方法,其特征在于步骤s1所述的获取生物医学文档数据集,并针对数据集进行数据预处理,具体包括:获取的生物医学文档数据集为公开数据集;数据预处理具体包括:数据集中提供“句子级别”的标注数据,{s1,s2,

,s
i
,

,s
n
}为一篇包含n个句子的文献,经过句子级别的标注后形成句子和标签对{(s1,y1),(s2,y2),

,(s
i
,y
i
),

,(s
n
,y
n
)},其中,n是文档中包含的句子数量,s
i
是文档中第i个句子,y
i
是第i个句子的类别标签;将句子级别的标注转换成“跨度级别”的标注,具体包括:将一篇包含n个句子的已标注文档{(s1,y1),(s2,y2),

,(s
i
,y
i
),

,(s
n
,y
n
)}中相邻的具有相同类别标签的句子进行合并、组成一个“跨度”,如果某个句子与左右相邻的句子的标签均不相同,则这个句子单独组成一个长度为1的“跨度”;采用三元组(s,e,y)表示一个“跨度”,其中,s表示跨度中第一个句子在文献中的下标,e表示跨度中最后一个句子在文献中的下标,y表示跨度的标签类别;经过上述的转换,将已标注文档{(s1,y1),(s2,y2),

,(s
i
,y
i
),

,(s
n
,y
n
)}表示为m个跨度三元组{(s1,e1,y1),(s2,e2,y2),

,(s
i
,e
i
,y
i
),

,(s
m
,e
m
,y
m
)},其中,m是处理之后获得的跨度数量,且m≤n;s
i
是第i个跨度中第一个句子在原始文献中的下标;e
i
是第i个跨度中最后一个句子在原始文献中的下标;y
i
是第i个跨度的类别标签。3.根据权利要求2所述的一种基于双仿射的生物医学文档结构化方法,其特征在于步骤s2所述的采用步骤s1预处理后的数据,通过双仿射方法构建生物医学文档初步模型,具体包括:(2-1)针对句子的单词进行处理获取单词的编码表示,通过加权处理获取句子的编码表示;(2-2)采用步骤(2-1)获取的句子编码表示,通过bilstm处理获取上下文语句的编码表示;(2-3)采用步骤(2-2)获取的上下文语句编码表示,通过双仿射方法构建生物医学文档初步模型。4.根据权利要求3所述的一种基于双仿射的生物医学文档结构化方法,其特征在于所述的单独语句的编码处理,具体包括:(1)针对单词进行编码处理:采用步骤s1与处理后得到的数据,针对数据集中的第i个句子s
i
,通过biobert进行编码处理,得到单词的编码表示,编码过程采用如下所示的公式:h
i
=biobert(s
i
)={h
i1
,h
i2
,

,h
iw
}
其中,biobert是针对生物医学领域提出的预训练语言模型;是句子s
i
中所有单词的编码表示;是s
i
中第j个单词的编码表示,表示所有实数的集合,d是单词编码向量的维度数量,w是句子s
i
中包含的单词的数量;(2)针对句子进行编码处理:将获得的单词编码表示映射为key向量和value向量,映射过程采用下述公式表示:k
i
=h
i
·
w
kvi
=h
i
·
w
v
其中,为将第i个句子s
i
中所有单词的编码映射成key向量后构成的矩阵;h
i
为句子s
i
中所有单词的编码表示;为将单词编码表示映射成key向量的映射矩阵,是步骤s4构建的分类模型中待学习的参数;为将单词编码表示映射成value向量的映射矩阵,是步骤s4构建的分类模型中待学习的参数;为将第i个句子s
i
中所有单词的编码映射成value向量后构成的矩阵;矩阵k
i
中的第j行k
ij
表示句子s
i
中第j个单词的key向量;矩阵v
i
中的第j行v
ij
表示句子s
i
中第j个单词的value向量;计算每个单词的权重,并通过对每个单词的编码表示进行加权处理得到句子的编码表示,处理过程采用下述公式表示:r
i
=α
i
·vi
其中,为第i个句子s
i
中每个单词的权重;softmax(
·
)表示归一化指数函数;为query向量,是构建的分类模型中待学习的参数;为第i个句子s
i
的编码表示。5.根据权利要求4所述的一种基于双仿射的生物医学文档结构化方法,其特征在于所述的上下文语句的编码处理,具体包括:通过双向长短期记忆网络进行上下文语句编码处理,将步骤(2-1)获得的所有句子的编码表示定义为r={r1,r2,

,r
i
,

,r
n
},为文档中第i个句子s
i
的编码表示,n为文档中句子的数量;通过将r输入到双向长短期记忆网络,计算得到句子的上下文编码表示,计算过程采用下述公式表示:c=bilstm(r)={c1,c2,

,c
n
}其中,为文档中所有句子的上下文编码表示;d
r
为句子上下文编码表示的维度数量;为第i个句子的上下文编码表示。6.根据权利要求5所述的一种基于双仿射的生物医学文档结构化方法,其特征在于所述的通过双仿射方法构建生物医学文档初步模型,具体包括:1)采用步骤(2-2)编码处理后的数据进行映射处理:
将句子s
i
的上下文编码表示映射为“开始表示”和“结束表示”,映射过程采用下述公式表示:s
i
=c
i
·
w
start
+b
start
e
i
=c
i
·
w
end
+b
end
其中,为文档中第i个句子的开始表示;为文档中第i个句子的上下文编码表示;为将句子的上下文表示映射为“开始表示”的线性变换的权值;为将句子的上下文表示映射为“开始表示”的线性变换的偏置;为文档中第i个句子的结束表示;为将句子的上下文表示映射为“结束表示”的线性变换的权值;为将句子的上下文表示映射为“结束表示”的线性变换的偏置;d
s
为句子的结束表示和开始表示的维度数量;w
start
、b
start
、w
end
、b
end
均是构建的文档分类模型的待学习参数;2)采用双仿射计算每个跨度的分类分数:采用下述公式计算每个跨度的分类分数:其中,为从文档中第i个句子开始到第j个句子结束构成的跨度(i,j)的分类分数,是一个长度为c的向量,向量中每个分量代表将跨度分类为对应类别的分数,c表示标签数量;为按照正向方向,从左往右,i≤j计算的分类分数;为按照反向方向,从右往左,i>j计算的分类分数;采用下述公式表示和的计算过程:的计算过程:其中,为双仿射变换的权值,为构建的文档分类模型的待学习参数;为文档中第i个句子的开始表示;为文档中第j个句子的结束表示。7.根据权利要求6所述的一种基于双仿射的生物医学文档结构化方法,其特征在于步骤s3所述的采用步骤s2构建的初步模型,通过对抗训练完成初步模型的参数更新,构建最终的文档分类模型,具体包括:(3-1)计算单个跨度上的损失:假设跨度(i,j)的真实标签为y,采用下述公式表示分类模型对于跨度(i,j)的损失的计算过程:p
i,j
=softmax(score
i,j
)p
j,i
=softmax(score
j,i
)
ce(i,j)=-log(p
i,j
(y))ce(j,i)=-log(p
j,i
(y))其中,softmax表示归一化指数函数;p
i,j
为通过softmax根据跨度(i,j)的分类分数score
i,j
计算获得的分类概率;ce(i,j)为跨度(i,j)的分类概率和真实标签的交叉熵损失;p
j,i
为通过softmax根据反向双放射计算的跨度(i,j)的分类分数score
j,i
计算获得的分类概率;ce(j,i)为通过反向双放射计算的跨度(i,j)的分类概率和真实标签的交叉熵损失;loss(i,j)为分类模型在跨度(i,j)的损失;(3-2)计算分类模型的总体损失:通过对所有真实跨度的损失进行平均处理,得到模型的总体损失,计算公式如下所示:其中,φ(s)为文档句子序列s中所有真实跨度的集合;|φ(s)|为包含的跨度数量;(3-3)计算对抗损失:计算模型总体损失loss
span
在biobert词嵌入层上的梯度,并根据梯度在词嵌入层添加扰动,计算公式如下所示;计算公式如下所示;emb=emb+p
adv
其中,g为模型总体损失loss
span
对于词嵌入层的梯度;表示对词嵌入层求偏导;p
adv
为根据梯度计算的扰动;ε∈[0,1]为控制扰动大小的超参数;|g|为g的第二范数,emb为biobert中的词嵌入层;基于上述的计算结果,重新完成上述步骤s2,并在完成后重新根据步骤(3-1)、(3-2)再次计算模型的总体损失,将计算后的总体损失定义为“对抗损失”,同时记为loss
adv
;(3-4)计算模型最终的损失:模型最终的损失分为模型总体损失和对抗损失两部分,采用下述公式表示计算过程:loss=loss
span
+λ*loss
adv
其中,λ是用于平衡模型总体损失loss
span
和对抗损失loss
adv
的超参数;(3-5)更新模型参数:将biobert中的词嵌入层emb的值恢复为步骤(3-3)中添加扰动之前的值,计算模型最终损失loss对于模型中所有可学习参数的梯度,并通过梯度下降法更新模型参数,构建最终文档分类模型。8.根据权利要求7所述的一种基于双仿射的生物医学文档结构化方法,其特征在于步骤s4所述的采用步骤s3构建的最终文档分类模型,完成生物医学文档的分类结构化处理,
具体包括:通过动态规划算法针对模型中的标签进行解码处理,进而完成生物医学文档的分类结构化,具体包括:定义变量n为文档句子序列的长度或文档中包含的句子的数量;score
i,j
为计算得到的跨度的分类分数;alpha(i)为动态规划算法中的中间变量,用于保存在解码过程中计算的文档中的前i个句子所有分类方案中的最大分类分数,i的取值范围为0≤i≤n;path(i)为动态规划算法中的中间变量,用于保存解码过程中解码出的以第i个句子结尾的跨度的开始位置,i的取值范围为0≤i≤n;tag(i)为动态规划算法中的中间变量,用于保存解码过程中解码出的以第i个句子结尾的跨度的标签类别,i的取值范围为0≤i≤n;算法的运行过程具体包括:(4-1)令alpha(0)=0,j=1;(4-2)计算文档中前j个句子所有分类方案中的最大分类分数,并保存至alpha(j)中,计算公式如下所示:其中,a(
·
)表示步骤s2的(2-3)中计算的跨度的分类分数;a(i,j,k)表示跨度(i,j)的分类分数score
i,j
的第k个分量,或将跨度(i,j)分类为第k个类别的分数;(4-3)记录前j个句子所有分类方案中分类分数最大的方案,并保存在path(j)和tag(j)中,计算公式如下所示:path(j)=itag(j)=k其中,i是分类分数最大的方案中以j为结尾的跨度的开始位置;k为该跨度的标签类别;(4-4)将j值进行加1处理;(4-5)如果j小于n,则重复上述步骤(4-2)、(4-3)、(4-4),直到j大于n结束;(4-6)令e=n,其中,e为当前解码跨度的结束位置;n表示文档的长度,或文档中包含的句子的数量;定义x{
·
}为保存解码结果的集合;(4-7)令s=path(e),t=tag(e),其中,s为当前解码跨度的开始位置,t为当前解码跨度的标签类别;(4-8)将(s,e,t)添加到x中,令e=s-1;(4-9)如果e大于0,则重复上述步骤(4-7)、(4-8),直到e小于等于0,结束步骤重复;(4-10)获得文档中句子的最终分类结果x={(s
v
,e
v
,t
v
)|1≤v≤m},其中,m为最优解码方案中包含的跨度的数量,s
v
为第v个跨度的开始位置,e
v
为第v个跨度的结束位置,t
v
为第v个跨度的类别标签。

技术总结
本发明公开了一种基于双仿射的生物医学文档结构化方法,包括获取生物医学文档数据集,并针对数据集进行数据预处理;采用预处理后的数据,通过双仿射方法构建生物医学文档分类初步模型;采用构建的初步模型,通过对抗训练完成初步模型的参数更新,构建最终的文档分类模型;采用构建的最终文档分类模型,完成生物医学文档的分类结构化处理;本发明通过双放射直接计算出每个跨度的分类分数,能够降低模型的时间开销;而且本发明的分类效率提升、分类准确度增加。类准确度增加。类准确度增加。


技术研发人员:段俊文 郭怀 王建新
受保护的技术使用者:中南大学
技术研发日:2023.05.26
技术公布日:2023/8/16
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐