关系抽取论文 PTR: Prompt Tuning with Rules for Text Classification
年份:2021
作者:Xu Han, Weilin Zhao, Ning Ding, Zhiyuan Liu, Maosong Sun
机构:Department of Computer Science and Technology, Tsinghua University, Beijing
数据集:TACRED,TACREV,ReTACRED,SemEval 2010 Task 8
- TRCRED:通过众包的方式产生的,包含42个关系类别。
- TACREV:纠正了 TACRED 的原始验证集和测试集中的错误,而训练集却保持不变。
- ReTACRED:TACRED 的另一个版本,解决了原始 TACRED 数据集的一些缺点,并对其训练集、开发集和测试集进行了重构。 ReTACRED 还修改了一些关系类型。
motivation:
- pretrain 和 fine-tuning 之间存在着明显的差距,即 pretrain 时采用预测 mask 单词的方法,而在 fine-tuning 时可能做的是多分类任务。这一差距将阻碍预训练模型中的知识对下游任务的适应,prompt 的提出就是为了解决这种差距。
- 目前 prompt 适用于少量分类的场景,对于 many-class 的分类任务依然具有挑战性。
pretrain 和 fine-tuning 之间存在着明显的差距,即 pretrain 时采用预测 mask 单词的方法,而在 fine-tuning 时可能做的是多分类任务。这一差距将阻碍预训练模型中的知识对下游任务的适应,prompt 的提出就是为了解决这种差距。
并且,目前 prompt 适用于少量分类的场景,如情感分析或者自然语言推理:
- 对于情感分析,一个典型的 template 可以是
<S1> was [MASK]
,将 label words 作为 MASK 预测的候选集,将预测出的单词映射到相应的情感中,如 great 映射到正面情感、terrible 映射到负面情感,将二分类问题转化为预测下一个单词问题。 - 对于自然语言推理,一个典型的 template 是
<S1>. [MASK], <S2>
,label words 可以是{yes, maybe, no}
来表示两个句子之间的关系。
论文提出了 prompt tuning with rules(PTR),可以应用于 many-class 的多分类任务中,PTR 的优势如下:
- Prior Knowledge Encoding:PTR 可以应用 logic rules 将任务和分类的先验知识编码到 prompt funing 中,预测的结果与实体类型和关系都相关。如对于关系
person:parent
和关系organization:parent
应用两个 sub-prompt,第一个 sub-prompt 用于确定实体是人还是组织,第二个 sub-prompt 用于确定是否有 parent-child 关系。 - Efficient Prompt Design:根据 logic rules 可以很容易的设计几个简单的 sub-prompt,并且组合这些 sub-prompt 用于形成 task-specific prompt。
模型结构
考虑到设计 prompt 在 many-class 分类的困难性,论文提出了 PTR 合并 logic rules,利用几个简单的 sub-prompt 生成 task-specific prompt。论文将一个分类任务,转换为一系列条件函数的计算任务。
Sub-Prompt for Condition Functions
一个 sub-prompt 包含一个模板和 label words 集合。
确定实体类型
基础的条件函数(条件函数用于决定输入是否满足一定的条件)是一个一元函数,在关系抽取中一元函数可以用于指明实体类型。以下函数决定实体的类型:
sub-prompt 模板和 label words set 为以下形式:
确定两个实体之间的关系
另一个重要的条件函数是二元函数,在关系抽取中二元函数可以用于决定两个实体之间的关系。以下函数决定两个实体之间的关系:
sub-prompt 模板和 label words set 为以下形式:
Composing Sub-prompts for Tasks
PTR 利用了一个简单的方法去将 sub-prompt 合成一个完整的 prompt,就是直接连接。在关系抽取任务中,连接预测两个实体的类型的 sub-prompt 和两个实体之间的关系的 sub-prompt。
实验结果
实验中,论文颠倒了一些关系中 subject 和 object 的顺序,如 member_of 改为 member,如果做出这样的改变,则用 REVERSED 标记。