Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

P-tuuning的一些问题 #18

Open
Ming-Qin-tech opened this issue May 12, 2021 · 4 comments
Open

P-tuuning的一些问题 #18

Ming-Qin-tech opened this issue May 12, 2021 · 4 comments

Comments

@Ming-Qin-tech
Copy link

1.你好,我想问一下,在P-tunning中,[Mask]在一众[unused]中得位置是怎么确定的?是人工选择的吗?如果不是的话,是根据什么方式确定的?
2.原论文中写的当数据量比较少的时候用的anchor-word,比如预测“英国首都”,在几个[unused]中加一个[capital]效果会比较好,这个[capital]应该加在哪个位置是如何确定的呢?

@Riroaki
Copy link

Riroaki commented May 27, 2021

1.你好,我想问一下,在P-tunning中,[Mask]在一众[unused]中得位置是怎么确定的?是人工选择的吗?如果不是的话,是根据什么方式确定的?
2.原论文中写的当数据量比较少的时候用的anchor-word,比如预测“英国首都”,在几个[unused]中加一个[capital]效果会比较好,这个[capital]应该加在哪个位置是如何确定的呢?

不是作者哈,试着说一下自己的理解:

  1. 这个项目中的prmopt没有使用[unused] token,这里的[Mask]就和manual prmopt的mask位置一致。你看到的可能是苏剑林大佬文章中用了unused token的setting,他的代码在这里:https://github.com/bojone/P-tuning
  2. 这个项目中其实prompt中大部分的token都是anchor-word,具体到PT_Fewshot/data_utils/task_pvp.py中你可以看各个task的prompt。比如说Rte任务的prompt格式如下:
    string_list_a = [text_a, 'Question:', text_b, "?", "the", "Answer:", self.mask, "."]

    它对应的block_flag_a是:
    block_flag_a = [0, 0, 0, 0, 1, 0, 0, 0]

    其中第5个值为1,表示这个词是可以替换成LSTM embedding的,在这个prompt中对应the这个token。
    其他的PVP同理,总之它目前的实现中基本除了少部分block_flag==1位置的token以外都是anchor token。
    至于为什么这么选择,大概是因为这些token包含的语义信息比较少,替换掉也没事,效果稍微调一下也能上去……

@terrifyzhao
Copy link

1.你好,我想问一下,在P-tunning中,[Mask]在一众[unused]中得位置是怎么确定的?是人工选择的吗?如果不是的话,是根据什么方式确定的?
2.原论文中写的当数据量比较少的时候用的anchor-word,比如预测“英国首都”,在几个[unused]中加一个[capital]效果会比较好,这个[capital]应该加在哪个位置是如何确定的呢?

不是作者哈,试着说一下自己的理解:

  1. 这个项目中的prmopt没有使用[unused] token,这里的[Mask]就和manual prmopt的mask位置一致。你看到的可能是苏剑林大佬文章中用了unused token的setting,他的代码在这里:https://github.com/bojone/P-tuning

  2. 这个项目中其实prompt中大部分的token都是anchor-word,具体到PT_Fewshot/data_utils/task_pvp.py中你可以看各个task的prompt。比如说Rte任务的prompt格式如下:

    string_list_a = [text_a, 'Question:', text_b, "?", "the", "Answer:", self.mask, "."]

    它对应的block_flag_a是:

    block_flag_a = [0, 0, 0, 0, 1, 0, 0, 0]

    其中第5个值为1,表示这个词是可以替换成LSTM embedding的,在这个prompt中对应the这个token。
    其他的PVP同理,总之它目前的实现中基本除了少部分block_flag==1位置的token以外都是anchor token。
    至于为什么这么选择,大概是因为这些token包含的语义信息比较少,替换掉也没事,效果稍微调一下也能上去……

看了半天没明天,原来是这个意思,谢谢

@rookiebird
Copy link

@Riroaki 我也看了代码,好像是这个意思,但是他这个block 和论文上说的有出入:

For instance,for RTE task, the token “?” within prompt template “[PRE][prompt tokens][HYP]?[prompt tokens][MASK]” is specially added as an anchor token and affects the performance a lot.

这代码写的,跟论文上的,不一样。。。。不仅prompt 不一样, anchor word 也不一样。。。。难受

@sxthunder
Copy link

PVP 是啥意思啊

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants