【大模型 数据增强】无监督关系抽取任务的新方法
- 提出背景
- 解法:多样性正样本对增强(AugURE)
- 特征1:句内正样本对增强
- 特征2:跨句正样本对提取
- 特征3:使用边界敏感损失函数
- 医学场景:自动抽取药物-疾病关系
- 1. 识别药物和疾病实体(实体类型诱导)
- 2. 利用自监督学习理解实体上下文(自监督学习框架)
- 3. 深度学习来细化关系(深度度量学习)
- 4. 提高关系抽取的精确度(结构化对比学习目标)
- 5. 捕获高级语义信息(层次化对比学习模式)
- 6. 最终的优化(NCE损失函数的直接采用)
论文:https://arxiv.org/pdf/2312.00552.pdf
代码:https://github.com/qingwang-isu/AugURE
提出背景
医学研究者需要从大量的医学文献中识别出疾病与治疗方法之间的关系、药物与副作用之间的关系等。这一任务在没有足够标注数据的情况下尤为困难。
传统方法可能只是简单地从文献中复制句子,比如“阿司匹林用于治疗心绞痛”,作为正样本对,这限制了模型学习到的关系的多样性。
解法:多样性正样本对增强(AugURE)
这张图是一个名为AugURE的框架的流程图,它描述了一个用于无监督关系抽取(URE)的系统架构。
这个系统包括数据增强、编码器、损失函数三个主要部分。
数据增强有两个分支:
-
句内正样本对增强:
- 采样随机位置(Sampling Random Positions):在句子中随机选择位置进行操作。
- 实体对增强(Entity Pair Augmentation):通过变换句中实体对来生成新的正样本。
-
通过跨句正样本对提取进行增强:
- 关系模板提取(Relation Templates Extraction):从句子中提取关系模板。
- 相互蕴含模板的发现(Mutually Entailed Templates Discovery):找出语义上相互蕴含的模板。
- 对生成(Pairs Generation):基于相互蕴含的模板生成正样本对。
此外,还有一个使用ChatGPT重写后的数据,可能用于进一步增强正样本对的多样性。
编码器部分
- Transformer编码器(BERT):使用基于Transformer的BERT模型来编码增强后的句子或实体对,将自然语言文本转化为机器可以处理的数值表示形式。
损失函数部分
- 边界对损失(Margin Pair Loss):这是一个边界敏感的损失函数,用于优化正样本对与负样本对之间的距离。
- K-Means示例损失(K-Means Exemplar Loss):这个损失函数可能用于优化聚类过程,使得相似的实体对聚集在一起,而不相似的实体对分开。
特征1:句内正样本对增强
我们对原句进行变形,比如通过替换“阿司匹林”为“布洛芬”,生成新的正样本对“布洛芬用于治疗心绞痛”,以增加训练数据的多样性。
为了解决正样本多样性不足的问题,可以采取句内正样本增强技术。
这包括通过对原始句子进行词汇级别的修改(如随机替换实体对或者采样句中词语)来生成新的正样本。
这种方法利用了同一句子内的上下文相似性,通过轻微修改句子来增加正样本的多样性,同时保持关系上下文的连贯性。
句内正样本对增强是通过在单个句子内部修改或替换实体、改变句子结构等方式,创造出多个表达相同关系的变体。
这种方法可以包括同义词替换、实体替换或利用句法结构的变化来生成新的句子,这些新句子在语义上与原句相似,但在表达形式上有所不同。
算法设计:
-
先自动识别正样本对的算法(如基于相似度计算)。
-
再数据增强技术,用于扩大正样本对的数量和多样性。
-
方法: 在同一句子中通过中间词采样和实体对替换来生成新的正样本对。
-
目的: 增加正样本对的内部多样性,让模型能够从更多变化的角度学习同一关系类型,提高关系表示的泛化能力。
完整步骤:
- 选择目标句子
- 首先,我们从数据集中挑选出包含至少一对实体(例如,药物和疾病)的句子。
- 可以把这个步骤想象成在一堆苹果中挑选出那些带有标签的苹果,这些标签告诉我们苹果的种类。
- 识别实体和上下文
- 在每个选定的句子中,我们确定实体(比如药物名和疾病名)及其上下文。
- 这就像是对每个带标签的苹果进行详细检查,了解它是什么品种,以及它周围有哪些特征(例如颜色、大小)。
- 生成新的实体对
- 接下来,我们通过替换句子中的一个或多个实体来生成新的正样本对。
- 通过以下几种方式实现:
- 替换实体: 将句子中的某个实体替换为具有相同类型的另一个实体。
- 例如,如果原句是“阿司匹林用于治疗头痛”,我们可以将“阿司匹林”替换为“布洛芬”。
- 中间词采样: 在保持实体不变的情况下,改变连接这些实体的中间词,如果可能的话。
- 这需要对句子的语法结构有一定的理解。
- 这个过程就像是用不同品种的苹果替换原来的苹果,或者改变它们之间的排列方式,以创造出新的组合。
- 验证句子的合理性
- 每次替换或修改后,我们需要检查新生成的句子是否在语法和语义上都是合理的。
- 这保证了增强后的数据质量,确保模型不会学习到错误的信息。
- 可以将这一步想象成检查新的苹果组合是否对人们的口味合适,或者这种新组合是否看起来很奇怪。
- 使用增强的数据进行训练
- 最后,这些通过句内正样本对增强生成的新句子被用作训练数据,帮助模型学习到更加丰富和多样化的实体关系。
- 这就像是通过尝试不同的苹果组合来丰富人们的味蕾体验,从而使他们能够识别和欣赏更多种类的苹果。
句内正样本对增强通过在同一句子内部创造新的实体组合,增加了训练数据的多样性,有助于模型更好地理解和抽取实体间的复杂关系。
特征2:跨句正样本对提取
分析不同文献中关于药物治疗的句子,利用OpenIE和NLI技术识别出具有相似“药物-疾病”关系的句子,并将它们作为正样本对,这样可以从更广泛的文献中获取更多样化的训练数据。
通过分析和比较跨文献的句子,这种方法显著增加了正样本对的数量和多样性,进一步提高了模型的学习能力和泛化能力。
- 方法:
- 步骤1(利用OpenIE): 提取关系模板,识别出能够表达相同关系语义的句子结构。
- 步骤2(使用NLI): 对提取的模板进行自然语言推理,识别出语义上相互蕴含(即表达相同关系语义)的模板。
- 步骤3(正样本对提取): 从步骤2中识别的相似模板中抽取不同句子作为正样本对。
- 目的: 通过跨句子的分析和模板匹配,大幅增加正样本对的多样性和数量,帮助模型更好地理解和区分不同的关系类型。
完整步骤:
- 句子和实体对的识别
- 首先,我们需要从大量的文本中识别出所有的句子以及句子中提到的实体对(比如药物和疾病的名称)。
- 这就像是在一本书中标记出所有提到特定人物名字的段落。
- 提取关系模板
- 对于每个句子,我们使用Open Information Extraction(OpenIE)技术或其他自然语言处理工具来提取关系模板。
- 关系模板是一种描述实体之间关系的通用格式,可以帮助我们理解句子中实体是如何相互关联的。
- 这个步骤就像是从每个标记的段落中摘录出描述人物关系的关键句子。
- 匹配相似的关系模板
- 一旦我们有了一系列的关系模板,下一步就是找出那些表达相同或相似关系语义的模板。
- 这可以通过自然语言处理技术来实现,比如通过语义相似度计算来匹配模板。
- 这个过程有点像是将描述相似事件或关系的句子分组。
- 提取跨句正样本对
- 根据匹配的关系模板,我们从这些模板对应的原始句子中提取出正样本对。
- 每个正样本对都由两个句子组成,这两个句子描述了相似的关系。
- 这一步就像是从我们之前分组的句子中选出代表性的例子,证明这些句子确实是在描述相同的事件或关系。
- 增强训练数据集
- 最后,这些跨句正样本对会被加入到训练数据集中,用于训练模型。
- 通过这种方式,模型不仅学习到了单个句子中的关系,还学习到了跨越不同句子的相似关系,从而增强了模型对关系的理解和泛化能力。
- 这就像是通过阅读和比较更多类似故事的摘录,来更深入理解某个主题或概念。
特征3:使用边界敏感损失函数
传统NCE损失函数不适合捕捉细微的关系差异。
在医学领域,某些药物和疾病之间的关系可能非常相似,传统的二元分类损失函数可能无法准确地区分它们。
特别是在关系表示学习中,不同关系之间的界限可能是模糊的。
边界敏感损失函数的设计旨在处理一个核心问题:如何在学习过程中区分正样本对和负样本对之间的微妙差异,尤其是当这些样本对的关系语义相似度非常接近时。
边界敏感损失函数通过引入一个“边界”或“边缘”概念,鼓励模型将正样本对的相似度推得更高,而将负样本对的相似度拉得更低,超出一定的边界阈值。
- 方法: 引入边界损失函数来代替传统的NCE损失,以更准确地衡量正负样本对之间的语义相似度。
- 目的: 解决传统损失函数在处理细微关系差异方面的不足,通过边界损失函数更精细地区分不同关系的语义相似度,尤其是在关系相似度谱上的细节表现。
完整步骤:
- 定义正负样本对
- 首先,我们需要明确哪些样本对是正样本对(即两个样本间有相同或类似的关系),哪些是负样本对(即两个样本间的关系不同)。
- 这就像是在一堆苹果和橙子中区分出哪些是同一种水果,哪些不是。
- 计算样本对间的相似度
- 接下来,我们用模型计算每对样本间的相似度。
- 这个相似度可以通过模型内部的特征表示来计算,比如使用向量点积或余弦相似度。
- 这一步骤类似于评估每对苹果和橙子之间的相似性,看它们是否属于同一类。
-
设计边界敏感函数
- 边界定义: 首先,我们需要定义一个“边界”,这个边界用来区分正样本对和负样本对之间的相似度阈值。
- 这就像是确定苹果和橙子之间的区别在哪里,从而设定一个标准。
- 敏感性调整: 然后,根据样本对间的相似度与这个边界的关系,我们调整损失函数的计算方式。
- 如果样本对的相似度接近这个边界(即它们很难被区分),损失函数会对这些样本对给予更大的权重。
- 这就像是在苹果和橙子非常相似时,我们需要更仔细地检查它们来确保分类的准确性。
-
损失函数的具体形式
- 一个常见的边界敏感损失函数形式是“margin loss”,其中包括一个边界(margin)参数,用来调整正样本对和负样本对之间的相似度差异。
- 如果正样本对的相似度低于这个边界,或负样本对的相似度高于这个边界,损失函数会给予较高的损失值。
- 这就像是在评分时,对于那些难以判断是苹果还是橙子的样本,我们会给予更严格的评判标准。
- 优化模型
- 最后,使用这个边界敏感损失函数来训练模型,不断优化模型参数,直到模型能够更准确地区分正样本对和负样本对,即能够准确地识别出所有的苹果和橙子,以及它们之间的不同。
医学场景:自动抽取药物-疾病关系
1. 识别药物和疾病实体(实体类型诱导)
实体类型诱导(Entity Type Induction):是一种无监督或弱监督学习技术,旨在从未标注的文本中发现和归纳实体及其类型。
- 在成千上万的医学文献中,我们首先需要自动识别出所有提到的药物名称和疾病名称。
- 这就像是确定了哪些信息是我们关注的焦点,哪些药物被用于治疗哪些疾病。
2. 利用自监督学习理解实体上下文(自监督学习框架)
自监督学习框架(Self-Supervised Learning Framework):是一种学习方法,其中模型通过预测数据集内部的某些部分来学习表示,从而无需外部标注的数据。
- 接着,通过自监督学习,我们不需要手动标注这些药物和疾病之间的关系就能理解它们在文本中的上下文。
- 这意味着系统可以自己学习和推断,比如“阿司匹林”通常是与“心绞痛”放在一起讨论的。
3. 深度学习来细化关系(深度度量学习)
深度度量学习(Deep Metric Learning):旨在学习数据点之间距离的度量,使得相似的项彼此靠近,不相似的项彼此远离。
- 使用深度度量学习进一步细化和理解这些实体对之间的关系。
- 这帮助系统更准确地将相似的关系分组在一起,例如,哪些药物是用来缓解疼痛的,哪些是用来治疗炎症的。
4. 提高关系抽取的精确度(结构化对比学习目标)
结构化对比学习目标(Structured Contrastive Learning Objective):这是一种训练目标,它考虑到数据内在的结构,比如句子中单词的顺序,图像中的空间关系等,通过对比正负样本对来学习数据的表示。
- 通过对比学习目标的引入,系统可以更精确地学习药物和疾病之间的复杂关系,而不仅仅是它们是否出现在同一句话中。
- 这就像是能够区分“治疗”和“可能引起”这样细微的差别。
5. 捕获高级语义信息(层次化对比学习模式)
层次化对比学习模式(Hierarchical Contrastive Learning Scheme):这种模式通过在不同层次上进行对比学习,例如先对局部特征进行学习,然后再学习全局特征,以此来捕获数据的细粒度和粗粒度特征。
- 层次化对比学习模式允许系统捕获更高级的语义信息,比如理解某些药物可能既有治疗效果也可能有副作用。
6. 最终的优化(NCE损失函数的直接采用)
NCE损失函数的直接采用(Direct Application of NCE Loss):噪声对比估计(Noise Contrastive Estimation, NCE)损失函数是一种在模型训练中用于区分真实数据和噪声数据的方法。
- 通过采用NCE损失函数,系统可以在最终阶段进行优化,确保模型能够准确区分和识别正确的药物-疾病关系。
举个例子。
假设你是一名医学侦探,你的任务是找出特定药物和疾病之间的关系。
这个任务就像在一个巨大的图书馆里寻找两个人之间是否存在某种联系,而这个图书馆充满了各种医学文献。
第一步:识别人物(特征1:实体类型诱导)
- 通俗解释: 你首先需要找到所有提到的药物和疾病的名字,就像在侦探工作中识别出所有可能的嫌疑人和受害者。
第二步:收集证据(特征2:自监督学习框架)
- 通俗解释: 接下来,你会收集关于这些药物和疾病的所有信息,包括它们在文档中是如何被提及的。
- 这一步就像是在收集现场的证据,以便进一步分析。
第三步:分析线索(特征3:深度度量学习)
- 通俗解释: 然后,你需要分析这些证据,看看哪些药物和疾病经常一起出现,它们之间可能有什么样的关系。
- 这就像是通过分析线索来找出嫌疑人和受害者之间的联系。
第四步:构建关系网络(特征4:结构化对比学习目标)
- 通俗解释: 通过更深入的分析,你开始理解药物和疾病之间的具体关系,比如某药物是用来治疗某疾病的。
- 这一步就像是根据收集到的证据,构建出嫌疑人和受害者之间复杂的关系网络。
第五步:验证发现(特征5:层次化对比学习模式)
- 通俗解释: 为了确保你的发现是准确的,你会进一步验证这些关系,看看是否有其他证据支持你的结论。
- 这就像是在侦探工作中,通过进一步的调查来验证你的推理是否正确。
第六步:得出结论(特征6:NCE损失函数的直接采用)
- 通俗解释: 最后,你根据所有收集和分析的数据,得出哪些药物可以用来治疗哪些疾病的结论。
- 这一步就像是在侦探案件中,基于所有证据和分析得出最终的判决。