PTR: Prompt Tuning with Rules for Text Classification

介绍了一种名为PTR的方法,该方法通过使用带有规则的PromptTuning来改进多类分类任务,特别是关系分类任务。PTR利用逻辑规则来设计sub-prompt,并结合先验知识以提高模型的准确性和效率。

在本文中,我们建议使用带有规则的prompt tuning(PTR)进行多个类别的分类任务进行tuning。对于多个类别的分类任务,我们手动设计基本的sub-prompt,并应用逻辑规则以将子标准构成最终特定任务的prompt。与现有的prompt tuning方法相比,PTR具有两个优势:

(1)Prior Knowledge Encoding。PTR可以应用逻辑规则将有关任务和类的先验知识编码进prompt tuning内。我们拿关系分类为例,预测结果通常和句子分类和实体类别的关系语义相关。我们用两个两个子prompt对关系”person:parent"和关系"organization:parent"建立prompt,一个sub-prompt是确定mask的实体是humaning还是organization,另一个sub-prompt是确定句子是否表达了亲子关系的语义。

(2)Efficient Prompt Design。与所有类的手动设计模板和单独的标签单词相比,设计几个简单的sub-prompt更容易,然后根据逻辑规则组合这些sub-prompt以形成task-special prompt。此外,与基于机器学习模型生成prompt相比,使用逻辑规则生成的prompt更加有效和可解释。

为了验证PTR的有效性,我们对关系分类进行实验,这是一个典型的复杂的多类分类任务。我们实验使用了4个流行的关系分类基准,包括TACRED、TACREV、ReTACRED和SemEval 2010 Task 8.足够的实验结果表明,PTR可以显著且始终如一地超过现有的SOTA基线模型。

Prompting Tuning with Rules (PTR)

请添加图片描述

我们想要知道一个句子的两个mask实体是否有“person:pa

`private: typedef T* rhref_ptr::* unspecified_bool_type;` 定义了一个指向 `rhref_ptr` 类成员的指针类型 `unspecified_bool_type`,该成员类型为 `T*`。 `operator unspecified_bool_type() const { return valid() ? &rhref_ptr::_ptr : 0; }` 是一个类型转换运算符函数。此函数的作用是将 `rhref_ptr` 对象隐式转换为 `unspecified_bool_type` 类型。 当调用这个类型转换运算符时,会先调用 `valid()` 函数进行判断。若 `valid()` 返回 `true`,意味着对象处于有效状态,函数会返回 `&rhref_ptr::_ptr`,也就是指向 `rhref_ptr` 类的 `_ptr` 成员的指针;若 `valid()` 返回 `false`,表示对象无效,函数返回 `0`(空指针)。 在布尔语境中,如 `if (obj)` 这样的语句,`obj` 会通过这个类型转换运算符转换为 `unspecified_bool_type` 类型。由于 `unspecified_bool_type` 是一个指向成员的指针类型,在布尔判断时,空指针会被视为 `false`,非空指针会被视为 `true`,从而实现了将 `rhref_ptr` 对象在布尔语境下的有效判断。 以下是一个简单示例代码: ```cpp #include <iostream> template <typename T> class rhref_ptr { private: T* _ptr; typedef T* rhref_ptr::* unspecified_bool_type; bool valid() const { return _ptr != nullptr; } public: rhref_ptr(T* ptr = nullptr) : _ptr(ptr) {} operator unspecified_bool_type() const { return valid() ? &rhref_ptr::_ptr : 0; } }; int main() { int* num = new int(10); rhref_ptr<int> ptr(num); if (ptr) { std::cout << "ptr is valid" << std::endl; } delete num; rhref_ptr<int> null_ptr(nullptr); if (!null_ptr) { std::cout << "null_ptr is invalid" << std::endl; } return 0; } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值