赞
踩
在深度学习里,有许多文本生成模型,最基本的是以transformer结构的GPT,到后来的BART和T5,还有最近特别火的chatgpt。一开始的生成模型只能用于简单的任务如机器翻译等,但是由于T5的火爆以及它在文章中说出的“introducing a unified framework that converts every language problem into a text-to-text format.”,以至于越来越多自然语言理解任务也都可以用生成模型来处理,打破了之前BERT一家独大的场面。下面就来简单聊一下我在这方面的一些小理解。
想要了解最前沿的模型和模型的使用,就必须参考最权威最官方的库:Hugging face,在这里可以找到很多模型。其中transformers库是我目前用的最多的一个库,在这个库里面已经有许多模型能够直接调用,非常方便。
首先点击右上角,找到Doc,选择transformers doc
左侧根据需要的版本来选择
下拉,找到API,在API的MODELS里找到需要的模型;这里以T5为例。
点击T5进入文档,在文档里不仅有非常详细的介绍、使用方法,也有相应的源码进行学习:
在遇到不懂的问题时,也是在这个文档中进行寻找即可。例如,不清楚这段代码中tokenizer的作用,
可以在左边下拉找到Utilities for Tokenizer,里面会有非常详细的介绍。虽然一开始看觉得很复杂,但是只要看习惯了,阅读文档的效率会比上网查高非常多,并且也更官方权威。
其他的如T5的细节,怎么实现的等等,有兴趣的可以自行阅读论文Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
事实上,单纯使用这些模型的话也不太需要太多了解其中的细节,因为在transformers库中提供了很多API,只需要学会使用就好。
在这里以T5模型为例子,阐述一下具体应该如何入门学习一个模型。古人云“授人以鱼不如授人以渔”,在深度学习这个领域,模型是永远学不完的,不可能永远通过网上的资料、别人的博客学习。因此想要在这个领域有所成就,必须发挥主观能动性,要学会通过文档自己学习并使用。
主要以transformers库T5文档为参考,有侧重的介绍一下相关的功能。
首先,T5是一个大规模预训练模型,是encoder-decoder架构。T5模型是text to text形式,即输入的是文本,输出的也是文本,并且在每个任务前都会有一个特定的任务前缀(task prefix),例如:
想做一个翻译任务,把英文翻译成中文,
输入为 “ translation: translate English to Chinese: Today is Monday.”
输出为 “ 今天星期一。"
事实上,不仅仅是翻译任务,其他的自然语言处理任务也可以用这种形式
举一个额外的例子,如情感分类任务,输入一个句子“(task prefix) + Food is good. ” 输出为 “Postive.”(如果想在此基础上改进,可以了解prompt的相关工作,这是能利用到大规模的预训练模型中的技术手段,运用得当能取得显著的效果提升。)
因此,T5模型,可以几乎把所有NLP任务都转换成text to text形式,具有很强的通用性 。
t5模型有几种大小,如t5-small 、t5-base、 t5-large等等,这里我们用t5-base。
训练需要一对相对应的句子对,一个为输入句子,另一个为标准正确的句子( 也叫lable)。训练的过程就是把输入句子输入到模型中,模型不断地调整参数,跟正确的句子进行比较,调整以最小化损失函数,达到最好的效果。
from transformers import T5Tokenizer, T5ForConditionalGeneration #调包
# .from_pretrained()函数,可以用网上预训练好的模型参数,也可以用自己训练好的
tokenizer = T5Tokenizer.from_pretrained("t5-base")
model = T5ForConditionalGeneration.from_pretrained("t5-base")
input_ids = tokenizer("translate English to German: The house is wonderful.", return_tensors="pt").input_ids
labels = tokenizer("Das Haus ist wunderbar.", return_tensors="pt").input_ids
# the forward function automatically creates the correct decoder_input_ids
loss = model(input_ids=input_ids, labels=labels).loss
print(loss.item()) #0.2542
更多的例子可以参考文档,如果想要更深入的了解,还是要学习别人论文的代码,接下来会记录我看到的几篇利用T5模型解决如ABSA NER等NLP任务的论文以及代码。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。