毕竟我们不是seq2seq任务2023年6月10日mT5模子是T5模子正在众言语数据集C4上的一连熬炼,T5自己是较量早了,是2019年的一个模子,可是自后又有许众次分别的升级。

  起首是prompt tuning,便是咱们现正在仍然有了许众相仿bert/gpt/t5云云的预熬炼模子,可是它们都很大,不妨有几十亿或者几百亿个参数。

  那这些模子举行大凡的fine-tune自己就很糜掷资源,而一个公司或者项目不妨必要许众分别的劳动基于这些模子,每个劳动又必要寡少布置,也很糜掷资源。

  咱们通过gpt-2/gpt-3的少许zero-shot/few-shot learning为诱导点,便是咱们给分别劳动分别的提示(prompt),就可能很少的熬炼就可能正在统一个模子竣事分别的劳动。

  最出手,这些prompt便是少许格外的句子,比方说咱们给gpt3的提示是:“1+1=2;2+2=4;4+5=9;5+6=”云云的提示,让模子一连天生,祈望能输出5+6简直切谜底。

  那么咱们奈何找到每个劳动的最好的prompt呢?当然咱们可能人工打算去一点一点测验,或者爽性穷举,当然也有许众基于分别举措的测试,可能参考上面提到的综述论文。

  除了hard-prompt以外,假设咱们思要更好的结果,是不是咱们可能打算少许格外的相仿token的东西,咱们称之为prompt embedding,把它和正本模子自己的embedding对齐。 云云诈骗self-attention的机制,让模子自己可能读取咱们插手的embedding。

  而熬炼,便是只更新咱们插手的prompt embedding的梯度,也便是只熬炼模子的异常小的一片面参数,而不去更新全部模子。

  云云显明模子熬炼用的资源就会更好,布置的时间咱们也只必要布置一个原版模子,只必要依据分别劳动,插入分别的prompt embedding就好了。

  咱们说了咱们要做中文的分类劳动,mT5云云的encoder-decoder布局原来自然的做的是sequence-to-sequence布局,相仿机械翻译/对话闲谈之类的

  咱们先定位劳动为,输入一句(段)中文文本,输出一个三分类的标签,0,1,2。

  decoder的输入,也没什么好说的,到底咱们不是seq2seq劳动,不必要格外的输入。

  正在代码中的encoder和decoder的输入中,插手了prompt embedding的占位符,是肆意token id都可能,反正都邑被咱们的代码更换掉的。

  咱们要获取的是decoder最终的输出,并把输出中的少许格外字符地方,算作咱们的三分类结果。

  decoder默认断定会输出一个词外长度的向量,咱们只拿个中3个应用,本质代码中我是应用3,4,5,三个格外token id举动断定三分类的结果。

  咱们的确阴谋loss也只阴谋最终decoder输出的这三个token的概率较量,比方3的概率最大,那么便是分类0,4的大便是分类1,5的大便是分类2。

  起首应用tansformers就可能很简单的去下载和挪用谷歌的T5/mT5模子

  然后咱们构修一个更换原版模子的输入器,用来把用于熬炼的prompt embedding插手到模子。

  下面代码要紧参考github.com/kipgparker/soft-prompt-tuning这个repo举行编削,由于这个repo的熬炼时基于GPT的,而咱们是基于mT5的,因此全部代码上略有区别,并且这个repo的熬炼代码也不太完备。