美文网首页
论文阅读_基于知识的提示学习KnowPrompt

论文阅读_基于知识的提示学习KnowPrompt

作者: xieyan0811 | 来源:发表于2022-04-17 08:58 被阅读0次

    英文题目:KnowPrompt: Knowledge-aware Prompt-tuning with Synergistic Optimizationfor Relation Extraction
    中文题目:KnowPrompt: 基于协同优化的知识感知快速调优关系提取
    论文地址:https://arxiv.org/pdf/2104.07650.pdf
    领域:自然语言处理,关系提取
    发表时间:2021
    作者:Xiang Chen(浙江大学&阿里巴巴)
    出处:TheWebConf(WWW)
    被引量:13
    代码和数据:https://github.com/zjunlp/KnowPrompt
    阅读时间:2022.04.15

    泛读

    • 针对问题:few-shot场景下从文本中抽取关系(知识检索、对话、问答)。
    • 结果:在5个数据集,及少量标注情况下,测试效果优于之前模型
    • 核心方法:希望在pretrain后不再fine-tuning,于是引入了提示prompt,通过构建提问(提问方法/答案范围)来实现类似tuning的效果。
    • 难点:之前对知识抽取和提示学习都不太了解;后来读了代码才了解,文中指的知识不是来自外界引入,而是将词嵌入作为知识。
    • 泛读后理解程度:60%
      (看完题目、摘要、结论、图表及小标题)

    精读

    摘要

    最近,提示调优(Prompt-tuning)在一些few-shot分类任务中取得了令人满意的结果。它的核心思想是通过插入文本,将分类任务转化为MASK语言模型(MASK原理详见BERT)。对于关系抽取问题,选择提示模板需要较多的领域知识和较大工作量,且在实体和边之间蕴藏的大量知识也不应该被忽略。文中提出了一种基于知识协同优化的调优方法(KnowPrompt)。通过学习模板词答案词,将实体和关系的知识注入模型,并在知识约束下协同优化它们的表示。

    1. 介绍

    关系抽取(RE)是文件抽取中的一个重要任务,抽取后的信息可供更多下游NLP任务使用,比如:信息检索、对话生成和问答。

    之前自监督的自然语言模型(PLM)如BERT,它可以学习到带有上下文的表征,在很多RE任务中表现很好,而精调(fine-tuning)需要在模型顶部加层并需要额外的训练。它的效果依赖于耗时费力的大量标注,且不容易泛化到其它任务中。为解决此问题,出现了prompt-tuning:使用预训练的语言模型作为预测器实现完型填空任务。它在few-shot任务中表现良好。如图-1所示:

    image.png
    • 模型的原始输入是“Hamilton is the first British champion”
    • 模型在原始输入后,加了一个模板"Mamilton [MASK] British",同时给定了一组标签词“country,city,residenct...”作为MASK的可选项
      (Hamilton可能是人名,也可能是品牌)
    • 模型将原始输入和模板作为条件,预测MASK为某选项的概率,从而抽取模板中主语Hamilton和宾语British的关系。

    总之,Prompt-tuning的目标是找到合适的模板和答案空间。而此工作常需要领域知识,以及复杂而大量的计算。而且关系标签不一定能在词典中找到合适的词。另外,实体、关系、三元组中包含的词义也不应被忽略,如图-1的例子中,如果主语和宾语都是人,则"org:city_of_headquters"就不太可能成立。相对的,关系也可以约束主语和宾语的类型。

    文中提出的解决方法是:先将知识注入提示,然后用提示调优模型实现知识抽取。具体方法是使用学习“虚拟模板词”和“虚拟答案词”。具体的方法是:使用集合实体嵌入初始化的实体周围的类型标记,作为可学习的虚拟模板词来注入实体类型知识。同时使用标签计算平均嵌入作为虚拟答案来注入关系知识。在这个结构中,实体和关系相互约束,虚拟词需要与上下文保持一致性,文中引入了协同优化来校正模板和答案词。

    文章主要贡献如下:

    • 提出了知识提示(KnowPrompt)方法,将知识注中提示模板的设计和答案构建,以解决关系抽取问题。
    • 使用知识约束,联合优化提示模板和带有答案的表示。第一次提出在连续空间内,联合优化提示模板和答案。
    • 在五个RE基准数据集上实验表明,KnowPrompt在标准和低资源环境下都是有效的。

    2. 相关工作

    2.1 知识抽取

    知识抽取,早期使用基于模式的方法,基于CNN/RNN的方法,以及基于图的方法,后来,将预训练语言模型作为基础的知识提取成为主流,尤其是基于BERT的模型显示出比之前模型更好的效果。最近Xue等提出的基出BERT的多视图方法达到了目前最高水平。由于标注的限制,few-shot任务受到关注。

    2.2 提示学习

    提示学习方法源于GPT-3(2020年),其在很多NLP任务中达到更好的效果。有些研究基于人工构建提示;2021年Hu提出引入外部知识;2021年Ding使用实体类型学习,来构建面向实体的词生成器和模板;为避免大量的人工构建提示,2020年Gao等首次提出了自动构建模板和答案词,Shin又进一步提出了梯度自动搜索,来自动生成模板和打标签。最近,有人直接利用可学习的连续嵌入作为提示模板。

    在知识抽取方面,2021年Han提出PTR,使用逻辑规则构建子提示。本文中方法的先进性在于:使用知识注入方法,学习虚拟模板和模拟答案来代替人工定义规则,可以泛化到多种任务之中。另外,使用知识约束协同优化模板和答案词,使嵌入相互关联。

    3. 背景知识

    定义D={X,Y},X是实例(句子),Y是关系标签,每个实例由词组成:x={w1,w2,ws...wo...wn},RE的目标是预测主语ws与宾语wo之间的关系y ∈ Y。

    3.1 精调语言模型

    预训练的自然语言模型是L,之前的fine-tuning模型将x作为模型的输入,加入类别[CLS]和分隔符[SEP],见图-2(a),其输出是隐藏层h,最后用h预测该实例属于各个类别CLS的概率,使用交叉熵作为多分类的损失函数,在训练过程中自然语言模型参数L和用于最终分类的参数W被训练。

    3.2 提示调优语言模型

    提示调优的目标是在预测模型和下游任务间建立桥梁,主要挑战是如何建立问题模板T(.)和可选答案标签V,将它们统称为提示P。对于每个实例x,模型构建它新的输入:xprompt=T(x)。它一般包含原始文本和附加文本;V使用自然语言模型L词表中词作为标签,定义M:Y->V作为注入映射表,连接任务标签Y(最终抽取的关系)和标签词V(用于回答提示问题)。

    在保留了原有文本x的基础上,遮蔽(MASK)了xprompt中的一个或几个词,并用标签词替换,用模型L预测遮蔽位置的词,p用于描述V在MASK处的分布:
    p(y|x)=p([MASK]=M(y)|x_{prompt})
    如图-2(b)所示,在原始文本后又加了一段带有MASK的文本,此时,可以通过模型L计算MASK对应的向量,并计算概率分布p,用于描述V中各个可选项对于MASK位置的匹配程度,M映射对于两个可选项分别有:M(y = “per :data_of_birth”) → “birth”(当y分类per:data_of_birth,V是birth),M(y = “org :founded_by”) →“founder”(当y为org:founded_by,V为founder),然后判定哪个选项更合适。

    4. 方法

    此部分主要介绍KnowPrompt协同优化方法的实现,将实体类型和关系标签中的知识用于关系提取。4.1阐述构建方法,4.2阐述优化方法。

    4.1 利用知识注入构建提示

    典型的提示包括两部分:构建模板和答案集。本文目标是利用知识注入构建虚拟模板词和模拟答案词,以实现知识抽取任务。

    实体知识注入

    2021年Zhou提出了实体类型标注,他在实体前后加入了特征的标记[E]和[/E],详见图-2(a),这一技术在关系抽取中得到广泛使用。它用实体的类别信息提升模型效果,但是需要对类型进行额外的标注。然而,我们可以利用关系对实体的限制得到主语和宾语的大概范围,比如:当关系是““per:country_of_birth”时,主语是人,宾语是国家。此时可以得到主语和宾语候选集合Csub={"person","organization",...}和Cobj={"organization","data",...},及其中元素的分布φsub 和φobj。

    如图-2所示,用可学习的连续数据来描述实体类别,具体来说,是利用加权平均实体类型作为嵌入来初始化虚拟模板词:

    式中的esub和eobj也是嵌入,用于描述主语和宾语的类型(它不是一种具体的类型,而是一种综合类型,因此是虚拟的),它被插入到主语和宾语的前后(图-2中绿色框),而e()从语言模型的词嵌入层提取词嵌入。使用上述方法可以从知识中自动学习更丰富的实体类型,其效果与之前方法差不多,但不需要额外标注。

    简言之,这里的模板,就是后加的那半句话,需要分别确定其 主语 和 谓语 的类型,而通过 谓语 可以大概估计出主语和宾语是什么类型。

    关系知识注入

    之前提示调优的研究主要是构建标签词和任务标签的一对一映射表,它不能表达关系标签中丰富的语义知识。我们设置虚拟答案词 v′∈V′,它能表达关系的语义,在模型L之后再加一层,用于学习关系嵌入,用虚拟答案集V'完全表示关系标签Y。用p(y|x)来表示V'在MASK位置的分布。

    和实体类型嵌入类似,使用Crel来表示可能的关系集合,φrel表示其中各项的概率分布。通过对关系类型的分解,在关系语义词的候选集Crel上设置了概率分布φRel。具体方法是,计算关系中每个token的加权平均作为初始化嵌入,以此注入语义信息。比如:y1 =per : countries_of_residence,集合Crel1 = {“person”,“countries”, “residence” },具体方法如下:

    4.2 使用知识约束实现协同优化

    实体类型和关系标签之间存在着丰富的交互和联系,且这些虚拟模板词和答案词应该与周围的上下文相关联。因此进一步协同优化虚拟模板词和虚拟答案词的参数集:

    根据上下文校准提示

    尽管模拟模型和答案都基于语义信息初始化,但是它们可能不是最优的,且与上下文相关。因此,可用上下文进一步优化其表征。通过计算真实关系y和p(y|x)之间的交叉熵的损失函数来优化虚拟模板词和答案词,如下所示:

    此处的|X|是训练集中的实例个数,可学习的连续表征可以通过模板和答案的协同优化,自适应地学习最优表征。

    简言之,就是通过预测的关系和真实的关系计算损失优化模型。

    隐含的结构约束

    为注入结构信息,我们采用了知识嵌入(KE)目标函数作为约束。使用三元组 (s,r,o) 描述关系,s,o描述主和宾的类别,r是预定义的答案V‘的关系标签。我们直接用虚拟模板和虚拟答案输出的嵌入通过语言模型参与计算。损失函数定义如下:

    带'的是负例;γ是边界;dr用于衡量头实体尾实体及关系(算法同TransE),三元组成立时其值趋于0,不成立时其值较大;n表示所有负采样。负采样时,使用正确的答案填充MASK位置,随机取主语和宾语,替换为不相关的类型以构造损坏的三元组。(这里更多细节请见代码)

    y=-log(sigmoid(x))如下图所示:

    括号里的值越大,最终损失函数越小;对于正例,d相对边界值γ越小越好,对于负例,d相对γ越大越好。

    4.3 训练细节

    训练分为两个阶段,第一阶段使用大学习率协同优化虚拟模板词和模拟答案词:

    其中 λ是用于权衡两个损失函数的超参数。
    第二阶段基于被优化的虚拟模板词和模拟答案词,仅利用J[MASK]损失函数为语言模型调参,用较小的学习率优化所有参数。

    5. 实验

    5.1 数据集

    为全面测试,使用了表-1中列出的5个数据集

    5.2 实验设置

    使用BERT_LARGE作为基础模型。

    基本配置

    使用全部训练数据训练,与之前的四个模型对比。

    低资源配置

    使用LM-BFF提出的 8-, 16-, 32- (n为每种类别的样例个数)方法采样,从初始训练和验证集中抽取每个类的k个实例,以形成few-shot的训练和验证集。

    5.3 实验结果

    基本配置

    低资源配置

    可以看到,样例越少,KnowPrompt相对其它模型效果越好。

    5.4 消融研究

    代码解析

    数据

    dataset/*

    • 代码中包含五个数据集的数据,分为两种格式,dialogue为对话数据;其它数据格式均为同一种
    • 数据集包含几千到几万条训练数据不等,除dialogure外的其它数据模式为:每条数据包含一个原始字符串,和一个头实体、尾实体、关系的三元组,用于训练和评测模型。
    • 每个数据目标下都包含rel2id.json文件,它定义了可被抽取的关系及其对应id,可以看到,“答案”(或称标签)是有限的。

    代码

    • data/* 用于解析数据
    • dataset/* 供训练和测试的数据
    • scripts/* 训练各种模型使用的示例脚本
    • models/* 各种底层的预训练模型
    • lit_models/* 核心函数
      • lit_models/transformer.py 文中模型的具体实现
        • _init_label_word(), 140行,初始化各种权重
        • training_step(),185 行,主要流程
        • ke_loss(),262行
          上述几个函数几乎实现了文中所有公式

    相关文章

      网友评论

          本文标题:论文阅读_基于知识的提示学习KnowPrompt

          本文链接:https://www.haomeiwen.com/subject/gawkertx.html