用mT5模型微调中文分类任务示例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的操练代码也不太完备。