下文我们从三个层面描述提示学习的本质,包括原理和具体实作方式。
战略级描述(其实就是宏观叙事)
提示学习是利用模板激发预训练语言模板如(bert/bart)之类模型中的事实性知识(factual knowledge), 然后在将得到的事实性知识作为答案空间,映射到目标空间从而完成需要的下游任务。
战术级描述(其实就是基本手法描述)
通常我们是将 需要处理的文本原文加上提示性模板(模板工程)一起输入预训练模板中,然后将得到的答案(即通过模板激发出来的知识的所组成的空间称为答案空间),将答案通过算法映射到目标标签(verbalizer)。
如:
It's a shine day, we are all happy. It is <mask>.
将以上句子输入bert/bart ,就会得到包括<mask>的向量,如果用bertmaskedLM,可能得到,比如 good, well, nice之类词输出 (选择输出 中概率最大的词),我们有以下的映射 器
[good, well,nice, fantastic....] -> [postitive]
[bad, terrible,....] -> [negative]
上面的映射器术语叫 verbalizer. 从预测 出来的词向最标的标签映射 就可以得到分类结果。上面是情感分类,其实就是一个二分类任务。
实现代码示例: 基于prompt learning的情感分类示例代码_znsoft的博客-CSDN博客
作业层面(其实就是实作方式了)
就是步骤啦:
1. 模板工程 (最简单的就是手工构建 模板,还有自动构建的soft prompt之类)
2. 语言模板预测与fine tuning(promt tuning) ( 将文本和模板的组合输入语言模板,如bert/bart)
3. 输出映射到特征空间 (全连接网络或概率映射)
在第2步输出 的其实就是一个或多个向量(取决于槽位),怎么把它映射 到目标的标签空间,这个其实就是verbalizer的工作。本步通常用全连接网络或概率映射处理。
4. 输出精调(对第3步的输出进行打磨)
输出 的内容可能并不完善,怎么将它打磨到正确的目标标签。 n:n 选择问题,二部图或其它算法实现。通常在通过logits值 进行映射 时需要进行后处理。
实现代码示例: 开发中