6

Prompt learning系列之prompt engineering(一) 人工构建prompt

 2 years ago
source link: https://mp.weixin.qq.com/s?__biz=MjM5ODkzMzMwMQ%3D%3D&%3Bmid=2650429752&%3Bidx=4&%3Bsn=16f3c45e508f3ac593872a2878a58e2d
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Prompt learning系列之prompt engineering(一) 人工构建prompt

AINLP 2022-03-31 09:10
640?wx_fmt=jpeg

提纲

2 LAMA

3 GPT-3

    4.1 iPET

    4.2 Mulit-Task PET

1 简介

    Prompt learning最直接的方式就是通过专业人士手动构造prompt,给模型增加合适的提示。人工构建prompt的过程虽然耗费时间跟精力,但是非常直观理解,过程简单,效果相对可控,非常适合zero shot等场景,可供快速尝试。所以本章节我们会分享prompt learning一些涉及到通过人工构建prompt的相关内容,让大家能对此有更加深入的理解。

2 LAMA

    LAMA不是一种方法,而是一个数据集,这个数据是为了评估预训练模型蕴含的知识有多少。之所以提到它是因为在很多涉及prompt leanring的方法都用了该数据集,像极了某些任务榜单所关联的数据集。我们都知道预训练语言模型能借助prompt实现zero shot是因为预训练模型在训练过程中的语料囊括了很多知识,语言模型可以从中学到这些知识并存储下来,那么怎么知道模型是否具备某个知识呢?不同预训练模型的知识含量之间的差异又该如何评估呢?

    直观的想法,就是把某个知识改写成完形填空的格式,如果模型能从中预测出正确的结果,就说明模型是具备这个知识的。LAMA将多个知识库的知识,通过人工构建prompt的方式转化为相应的完形填空格式,如果模型能正确预测出对应的token,就说明该模型具备这个知识,反之则不然。例如Google_RE知识库里包含名人的几种信息,包括出生地点,出生日期跟死亡地点,通过人工设置的prompt可以把跟出生地点相关的知识转化为”[S] was born in [O]”,将[S]替换为相应的人名后,让语言模型去预测[O]位置的token,如果结果是正确的出生地点,说明模型具备这个知识,也就是知道这个人的出生地点。又或者是ConcepNet里的主谓宾三元组,mask掉其中的宾语,让语言模型根据主谓结构去预测相应的宾语。又或者是阅读理解SQuAD数据集答案是单个token的问题,通过人工构建prompt改写为完形填空的形式,让模型去预测相应的答案。例如”Who developed the theory of relativity”改写为”The theory of relativity was developed by _”。

640?wx_fmt=png

图1: 多种模型在LAMA上的测试结果

    作者在LAMA数据集上测试了ELMO跟BERT等多种模型,最终发现相比于其他的模型,BERT-large有能力去召回更多的知识。

3 GPT3

    虽然先在大量语料预训练然后在特定任务上微调的方式在NLP领域取得惊人的提升,但是由于微调阶段还是需要充分的特定任务的监督语料,这对于在大量NLP下游任务或者场景去广泛应用带来了挑战。与此相对,人是可以通过非常少量的样例或者相关说明提示就在新任务上表现得很好,基于此,人们用非常庞大的语料训练得到GPT3,对于所有下游任务(包括翻译任务,阅读理解任务和完型填空等),不需要任何参数更新或者微调,借助了特定任务相关的提示或者样例,直接应用GPT3,最终结果显示没有经过微调的GPT3在诸多下游任务取得不错的效果。这里的GPT3尝试了few shot跟zero shot的方式,few shot就是找几个在特定任务下的带结果的样例,跟当前输入拼接到一起,让模型根据样例做出判断(看起来跟prompt learning的prompt augmentation很像),至于few shot,妥妥就是prompt leanring,需要在当前输入插入特定任务的提示,让模型更好的预测,在这里的prompt都是通过人工构造的,最终few shot的结果也能媲美各种下游任务的sota模型效果。

640?wx_fmt=png

图2 :预训练模型应用到下游任务的几种方式。

4 PET

    PET是一种半监督训练方法,借助于prompt对输入改写为完型填空格式,从而帮助模型更好的理解任务,然后通过多个单prompt的模型对无监督语料打上标签,最后在扩充的语料上训练分类器。

    对于分类任务,掩蔽语言模型为M,任务包含的所有的类别定义为L,我可以定义一个prompt作为函数P,P能够将原始输入x转化为完型填空格式P(x)(至少包含一个被mask的token,这个被mask的位置需要模型去预测,用于推断最终结果),同时定义一个映射函数v,每一个类别通过可以得到一个相应的词。如果预测的被mask的词,就知道它对应哪个类别的,就是最终分类任务的结果。这样一个p=(P,v)的pair对就对应着一种单prompt learning的范式。当定义好p=(P,v)后,可以对它做进一步的训练,我们可以计算得到各个类别的得分,通过softmax进行归一化,

640?wx_fmt=png

图3: p=(P,v)下各个标签的概率计算

    然后计算它跟正式标签之间的交叉熵作为训练的目标。除此之外,即便我们将语言模型M对特定的p=(P,v)做训练,依旧可以将MLM任务作为一个辅助任务,所以最终的目标函数包括两部分,一部分是前面提及的为p特定设计的交叉熵,另一部分是掩蔽语言模型本身的MLM目标函数。

    前面已经介绍了单个p的训练过程,但是一个关键的难题在于人工构建的多个prompt,我们如何辨别哪个是最优的?基于这个问题,PET被提出,它借鉴了集成学习的思路,通过集成多个(P,v)的效果去解决这个问题,整个过程分别三步。

    a)    基于一个语言模型M,提出多个prompt,在小规模的监督数据集上,分别针对这些prompt去训练M,训练完成我们可以得到多个语言模型Mp(数量跟prompt数量一致)。

    b)   利用第一步训练得到的多个语言模型的组合去给无监督语料D打上标签(这里的标签可以是多个模型效果的加权平均)。

    c)    利用第二步构建好的数据集去训练新的语言模型,直接完成分类任务。

    PET是一种半监督学习方法,借助于prompt可以只用少量监督数据就完成模型训练,借助训练得到的模型去给无监督语料打上标签,进而扩充数据,最后在充分的数据上训练一个新的语言模型,完成分类任务。

640?wx_fmt=png

图4: PET跟iPET的框架

4.1 iPET

    iPET是在PET基础上的优化,PET过程中多个prompt之间彼此隔离,有的prompt可能表现一直比较糟糕,这会影响到构造的数据集的质量,进而影响在这个数据集上训练的模型的效果。为此提出了iPET,希望多个prompt可以相互学习。它的具体做法也很朴素,就是在PET的第一步按照不同的prompt训练多个语言模型中加入了更多的步骤。在每个回合中,对于任何一个prompt,利用其他prompt的语言模型来给数据打标签,然后训练这个这个prompt对应的模型,迭代多次,每次过程都会扩大数据的量。通过这种方式,可以让不同prompt的模型彼此学习,相互影响,避免有的prompt误入歧途,收敛比较糟糕的位置,得到整体效果相对可控的集成prompt模型。

4.2 Multiple Tasks PET

    PET中每一个(P,v)对中的v都是将输出映射到一个token,这限制了它在更多下游任务的应用。例如对于一个有关餐馆评论的情感分类任务,最终标签是{+1,-1},通过v可以将类别+1映射成“good”,可以将类别-1映射成“terr” “ible”(很多语言模型都是以BPE为基本单元的,预测的基本token可以只是单词的某部分)。为了解决这个问题,适配需要同时预测多个token的下游任务。可以对PET做相应的改造。对于特定任务,计算通过v得到的所有答案的最长长度k(例如上面例子,“good“是一个token,长度是一,“terrible”是由“terr”和“ible”两个token构成,长度是2,所以这个任务下的k就是2),然后将原始输入转化为完型填空格式时需要mask掉连续的k个位置(之前是mask掉一个位置),然后依次去预测这k个位置(这里的依次并不是从头开始预测,而是先预测出这k个位置中概率最大的那个位置,将对应的结果填上,这个完形填空格式就只剩下k-1个被mask掉的位置,再用模型去预测下一个位置,直到预测完k个token)。

5 总结

    这个章节看起来可能有点混乱,这也是因为通过人工构造prompt的方式可以在很多地方看到,作为一种简单高效的技巧,可以在很多地方被应用到。通过人工构建的prompt,由于附带人的专业知识,大部分时候相对合理,能支持强大预训练模型实现few shot甚至zero shot,媲美那些有监督学习的方法。同时,人工构建prompt的方式有很广泛的应用,可以直接去支持下游任务,也可以辅助半监督学习方法去构建数据集,做数据增强等等。人工构建prompt的方式,作为一种简单有效的方式,也验证了prompt learning的价值,减轻了对有监督数据的依赖,提供了一个将庞大的预训练模型应用到众多下游任务的方向。

参考文献

1. (2019, ) Language Models as Knowledge Bases?

https://aclanthology.org/D19-1250.pdf

2. (2020) Language models are few-shot learners

https://arxiv.org/pdf/2005.14165.pdf

3. (2021) Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference

https://arxiv.org/pdf/2001.07676.pdf

4. (2021) It’s Not Just Size That Matters: Small Language Models Are Also Few-Shot Learners

https://arxiv.org/pdf/2009.07118.pdf

0?wx_fmt=png
AINLP
一个有趣有AI的自然语言处理公众号:关注AI、NLP、机器学习、推荐系统、计算广告等相关技术。公众号可直接对话双语聊天机器人,尝试自动对联、作诗机、藏头诗生成器,调戏夸夸机器人、彩虹屁生成器,使用中英翻译,查询相似词,测试NLP相关工具包。
343篇原创内容
Official Account
进技术交流群请添加AINLP小助手微信(id: ainlper)
请备注具体方向+所用到的相关技术点
640?wx_fmt=jpeg

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。

640?wx_fmt=jpeg

阅读至此了,分享、点赞、在看三选一吧🙏


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK