Prompt learning系列之answer engineering(二) 自动搜索篇

火山方舟向量数据库大模型

提纲

1 简介

2 Answer paraphrasing

3 Prune-then-search

3.1 PETAL




3.2 AUTOPROMPT




3.3 Automatic selection of label words

4 Label Decomposition

5 连续型答案自动搜索

6 总结

参考文献

1 简介

在前一章我们已经介绍过关于prompt learning中人工设计answer的相关内容了,如同人工构建prompt一样,  **人工设计answer的方式最终很有可能在获得一个次最优的语言模型,通过人工设计answer的方式依旧依赖于专业人士的知识,不容易迁移到更多场景。** 基于此,出现了一些自动设计answer的工作,虽然数量上明显少于自动构建prompt的工作。但是在本章节,还是会分享相关的自动设计answer的一些工作,研究人工设计answer的一些思路跟技巧。

2 Answer paraphrasing

  **这种类型的方法首先初始化一个答案空间然后用这些答案的释义去扩充答案空间直至收敛。**




  **对于多选QA,假定问题X,候选的答案集合I(X),把X跟候选答案集合I(X)一同输入语言模型,计算候选答案集合中各个候选相应的概率,选择其中概率最大的候选作为问题的答案。** 例如我们考试做的单选题,就是要从几个选项中选择最合适问题的答案。

picture.image

图1:语言模型预测mask位置的token的概率

对于抽取式QA,问题X跟相关段落会拼接在一起输入到语言模型中,希望语言模型能从中抽取正确的答案,抽取式QA的处理方式首先是mask相关段落的内容,然后计算输出答案第一个token的概率,找出其中概率最高的topR个token,找到这些token在相关段落的位置,计算这些token开头的片段的概率,保留其中概率最高的投top K个片段作为候选答案,进而将抽取式QA转化为多选QA。

picture.image

图2:语言模型对同个类别下不同token的预测得分

对于多选QA,语言模型对于候选答案的选择会很敏感,如果候选答案里有的答案在语言模型没有很好理解的话,语言模型对它的预测就会不准确,例如图中的例子,devoted跟dedicated其实是同一个意思,但是语言模型在这个问题下给这两个token打的分却差别很大。




所以如果候选答案选的不合适,语言模型的结果可能就不准确。基于此,可以将候选答案翻译成另一种语言,然后再翻译回来的方式来扩充候选答案的集合,然后计算所有候选答案的结果。例如图中样例,原本的C选项对应的后选答案是devoted,我们把它翻译成另一种语言,保留最可能的另一种语言两个候选,然后再把这两个候选翻译回来得到四个原来语言的候选,就可以将devoted扩充为{devoted, dedicated, commitment, dedication},计算语言模型输出扩充后的这四个同义词的概率并求和作为对应选项C的答案。



  **这种扩充answer的方式可以理解为单个的答案候选可能不太稳定,如果语言模型对它理解不到位会导致最后结果偏差较大,所以通过回译的方式扩充答案空间从而获得每个类别的多个候选表达,综合考虑模型对多个候选表达的预测结果会得到更加鲁棒的结果。最终实验也证明了通过这种方式得到的多样化的表示可以有效提高语言模型在多选QA问题的表现。**  

3 Prune-then-search

  **这种类型的方法都是先对答案候选空间进行裁剪,然后再通过算法去搜索得到最终合适的答案候选。**




对于k个类别的分类问题,Pattern-Exploiting Training(PET)将输入x通过prompt转化为带有MASK标记的文本P(x),然后用语言模型M去预测被mask位置上的token,通过定义一个从类别到单个token的映射v可以根据预测得到的token推理出原始输入的类别。  **给定类别y,可以知道相对应的token是v(y)。原始文本属于类别y的概率可以用M(v(y)|x)表示,即预测被mask位置的token是v(y)的概率。**

3.1 PETAL

通过人工去定义这个从类别到单个token的映射对于PET是很有挑战的,因为不仅要求要把类别的知识用自然语言的方式表示成单个token,还要求MLM语言模型能够有效理解这个token。为此为每个类别选择合适的单个token至关重要。为了避免v依赖于特定任务或者模型,  **PETAL提出了一种方法可以自动寻找一个令人满意的v 。首先为了避免从全词表中寻找合适的类别对应的token,PETAL先从全词表中过滤掉没有有意义的或者长度小于2个字母的token,然后从中选取在无监督数据中出现频次最高的前10000个token,接下来再在裁剪后的候选空间中搜寻合适的答案。**




PETAL把k分类问题重新定义了1 vs k-1的二分类问题,对于每一个类别y,寻找最合适的token,即t,使得语言模型M可以将类别y从其余类别中区别出来。如果文本属于y,相应的概率就是q(1|x),反之就是q(0|x)=1-q(1|x)

picture.image

图3: 概率计算公示

我们的目标是为每一个类别y找到合适的v(y)使得

picture.image

图4: 任务目标

具体应用下还要考虑进样本不平衡等情况对上述目标函数作进一步的优化,但是基本思想就是要为每个类别寻找使得类似上述目标函数最大化的token,作为该类别的表示v(y)。




上面的讲述的都是一个类别对应一个token的情况,  **对于有的任务会存在一个类别对应多个token,只要将上述目标函数调整下即可,将该类别下多个token预测的概率求和作为该类别的预测结果。**

picture.image

图5: 一个类别对应多个token时的概率计算

**PETAL这种方法会倾向于选择出现频率更高的token,最终效果也表明这种先裁剪后搜寻的自动构建答案的方式在部分任务上已经很接近人工设计答案的表现了。**

picture.image

图6: PETAL的实验结果

3.2 AUTOPROMPT

为了给每个类别寻找合适的token,AUTOPROMPT提出一种二阶段的自动搜索方法。第一阶段是将带[MASK]标记的文本作为输入,得到[MASK]位置的表征,然后去训练分类器判断该输入所属的类别,第二个阶段将第一阶段得到的[MASK]位置的表征替换为可能答案token在MLM语言模型的输出,然后传入第一阶段训练得到的分类器,将相应的概率作为替代的token跟类别之间是否合适的依据。如果被替换的token能正确表征某个类别,那么这个token的词嵌入跟属于该类别的[MASK]位置的表征应该足够接近,从而对应的该类别的得分应该比较大,对于某个类别,通过计算所有候选token在该类别下的得分后可以选择得分最高的topK个token作为该类别的候选答案,通过这种方式可以自动构建答案空间。




  **我的理解是,AUTOPROMPT第一阶段会计算每个类别输入数据中[MASK]位置的表征,这个表征可以作为该类别的一个表征,然后在第二个阶段会针对每一个类别去寻找那些词嵌入跟类别表征足够接近的token,作为该类别对应的候选答案。至于怎么判断两者是否接近,AUTOPROMPT这里是通过一个分类器得到的,在第一个阶段训练,然后在第二个阶段推理。**

3.3 Automatic selection of label words

  **首先根据训练数据中[MASK]位置上条件生成的概率选择了其中概率最大的K个token作为候选答案,然后再根据在训练数据上这些token的zero shot表现对候选空间做进一步的裁剪,最后再在测试集上根据token的表现搜寻到最好的答案候选。看起来跟3.1的做法蛮接近的,只是这里更加细致。**

4 Label Decomposition

 **由于类别标签已经包含了很多真实的语义信息,所以Adaprompt直接将类别标签分解为多个token作为该类别的候选答案,例如一个类别是”per: city\_of\_death”,把这里一些没有语义的连接词(例如of)去掉后,从而得到对应的候选答案是{person, city, death}**

5 连续型答案自动搜索

前面几种方法自动搜索的答案都是离散型的token,自然而然的,我们会想能不能跟prompt engineering一样自动构建连续型的答案?通过梯度回传的连续型答案构建的工作在目前很少见,WRAP算是为数不多的一个。WRAP在词嵌入部分为每个类别指定了一个连续的变量去表征这个类别,然后通过梯度回传去更新这个表征类别的词嵌入。由于连续型答案是用过梯度直接更新的,没有充分利用到语言模型的词嵌入所以只能学到相应标签的一个梗概,具体过程见[Prompt learning系列之prompt engineering(三) 连续型prompt自动构建](http://mp.weixin.qq.com/s?__biz=Mzk0NzMwNjU5Nw==&mid=2247483975&idx=1&sn=6d385e2312d7eb9dbebb95f3f0e43a6e&chksm=c379ab4df40e225b835c853a1e026a9fc709715fa7aa554f2cfcfb2d75fc491381d5c0ea1183&scene=21#wechat_redirect)

6 总结

  **在prompt learning学习中的answer engineering,对于分类任务而言,无论是一对一还是一对多(一个类别对应一个答案候选或者多个答案候选),其实都是为每一个类别从庞大的词表中寻找最能表征类别信息的token作为答案候选,所以问题的关键是如何去评判某个token能否正确表征类别信息,至于先对候选空间进行裁剪只是为了避免不必要的计算量。最终看下来虽然自动设计答案的方式还是具有一定价值的,但是一般情况下依旧不及人工设计的方式。另外,关于为什么很少有工作跟设计连续型答案相关,主要在于这跟掩蔽语言模型的MLM任务不匹配,归根结底,prompt learning是想把任务转化为完形填空任务,填空的候选是离散型的token才跟MLM任务匹配。**

参考文献

  1. (2021,) How Can We Know When Language Models Know?

On the Calibration of Language Models for Question Answering

https://arxiv.org/pdf/2012.00955.pdf

  1. (2020,) Automatically Identifying Words That Can Serve as Labels for Few-Shot Text Classification

https://aclanthology.org/2020.coling-main.488.pdf

  1. (2020,) AUTOPROMPT: Eliciting Knowledge from Language Models with Automatically Generated Prompts

https://arxiv.org/pdf/2010.15980v2.pdf

  1. (2021,) Making pre-trained language models better few-shot learners

https://arxiv.org/pdf/2012.15723.pdf

5.(2021,) AdaPrompt: Adaptive Prompt-based Finetuning for Relation Extraction

https://arxiv.org/pdf/2104.07650v1.pdf

  1. (2021, ) WARP: Word-level Adversarial ReProgramming

https://arxiv.org/pdf/2101.00121v2.pdf

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动客户端性能优化最佳实践
在用户日益增长、需求不断迭代的背景下,如何保证 APP 发布的稳定性和用户良好的使用体验?本次分享将结合字节跳动内部应用的实践案例,介绍应用性能优化的更多方向,以及 APM 团队对应用性能监控建设的探索和思考。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论