实体关系抽取
需求方提供与糖尿病相关的中文学术论文及糖尿病临床指南。我们从中抽取实体之间的关系。实体之间的关系共十类。
场景
本方案通过枚举所有实体对之间是否有关系建模,所以需要产生所有实体对之间的关系数据(有关系与无关系)。
正样本与负样本:
例子:句子:实体1xxx实体2,xxx实体3。
由上述句子可以生成实体1-实体2,实体1-实体3,实体2-实体3,共三个备选样本,假设实体1-实体2为一个正样本(即这两个样本之间有关系),那么剩余的两种组合即为负样本。当然,这种样本制作方式会带来很高的正负样本比。
数据分析:
通过数据分析,可以得到,两个有关系的实体有71%可能在一个句子中,有21%的可能分布在相邻的两个句子中。
实体含有的信息:实体名字与其表示的向量,实体位置,
数据样本生成:
- 如果通过常规的句子切割方式,一来诸如半角符号的存在,无法判断是小数点还是句子结束符。二来通过这样的方式生成的样本长度均值在150左右。
- 本方案通过将【实体1xxx实体2】这样的结构作为一条样本,但是,考虑到上下文的重要性,又在这样的样本前后追加20个字符【xx实体1xxx实体2xx】。最后的文本长度控制在100左右。中间文本超阈值范围的不计。
- 为了再次降低正负样本比例,清除无关实体构成的句子。
特征制作:
-
词性特征:将字的所属词的词性进行embedding.
-
词边界特征:通过BIOE标记法获得的标记进行embedding.
-
标记实体所在位置。实体位置标记1,其它字标志为0。
-
由于疾病最后一个字往往比较重要,所以将标注方式换为B(Begin),I(Inside),O(Outside),E(End),S(Single)。多了E和S。
-
实体对之间的距离作为关系。
采用字向量:
- 中文的分词困难,特别是医疗领域含有大量的专业词汇。
- 对于稀少的专有名词的训练很艰难。
- 大量的未登录词,词的覆盖率只有55+%,而字的覆盖率达到90+%
字向量的选择:
-
Word2Vec获得的字向量本次实验效果优于Glove.但是由于负样本的上下文环境多种多样,所以引进了动态字向量。动态字词向量含有上下文的语义信息。
-
由于 Word2Vec 和 Glove 学习得到的字向量是固定不变的,即一个字只有一种字向量,显然不适合用于多义词。而 ELMo 算法使用了深度双向语言模型 (biLM),只训练语言模型,而字向量是在输入句子实时获得的,因此字向量与上下文信息密切相关,可以较好地区分歧义。
-
ELMo 是一种动态词向量算法,在大型的语料库里训练一个 biLSTM (双向LSTM模型)语言模型。下游任务需要获取单词词向量的时候,将整个被向量化的句子输入biLSTM(在 ELMo 中使用了 CNN-BIG-LSTM 生成的词向量),利用 biLSTM 的输出作为单词的词向量,包含了上下文信息。可以理解成,biLSTM 是一个函数,函数的输入是一个句子,输出是句子中单词的词向量。
-
biLSTM 中不同层得到的词向量侧重点不同,输入层采用的 CNN-BIG-LSTM 词向量可以比较好编码词性信息,第 1 层 LSTM 可以比较好编码句法信息,第 2 层 LSTM 可以比较好编码单词语义信息。通过多层词向量的融合得到最终词向量,最终词向量可以兼顾多种不同层次的信息。
Loss的设置:
由于负样本的文本模式复杂多样,无规律可循,所以,对于负样本作为一个类别去预测就会很难提取这个类别的共性特征。因此,将10+1类的预测改为10类的预测,然后设置阈值来区分是不是负样本,这样提高了召回率。
预测阶段,设t是模型正负样本的判断阈偵:
1、如果有预测得分人于等于t,则选取最大得分对应的类别为预测类别;
2、如果预测得分均小0,则该样本为负类。
Loss公式:
m+ = 2.5, 指的是正样本的阈值,要大于2.5。
m- = 0.5, 指的是负样本的阈值,要小于0.5。
为模型损失的缩放超参。
是sigmod函数。
是除了预测正确的类别,第二大预测的分值。
本Loss比交叉熵Loss的准确率低,但召回率高,F1也高。
图谱的功能
查询某一个实体的属性与对应的关系实体。比如疾病与其对应相关的药物,对应的检查方法。关于药物也可以推理出它的用量用法属性。