我知道GPT使用Transformer解码器,BERT使用Transformer编码器,T5使用Transformer编码器-解码器。但是有人可以帮我理解为什么GPT只使用解码器,BERT只使用编码器,而T5两者都使用?
仅使用编码器而不使用解码器、使用解码器而不使用编码器以及同时使用编码器和解码器可以做什么?
我是 NLP 新手,所以任何帮助都会很好:D 谢谢!
我有以下代码:
from transformers import T5Tokenizer, T5ForConditionalGeneration
tokenizer = T5Tokenizer.from_pretrained("t5-small")
model = T5ForConditionalGeneration.from_pretrained("t5-small")
input_ids = tokenizer("The <extra_id_0> walks in <extra_id_1> park", return_tensors="pt").input_ids
sequence_ids = model.generate(input_ids)
sequences = tokenizer.batch_decode(sequence_ids)
sequences
Run Code Online (Sandbox Code Playgroud)
目前它生产这个:
['<pad><extra_id_0> park offers<extra_id_1> the<extra_id_2> park.</s>']
Run Code Online (Sandbox Code Playgroud)
有没有办法阻止生成器生成某些单词(例如stopwords = ["park", "offer"])?
python nlp huggingface-transformers generative-pretrained-transformer
我正在使用 Hugging Face Transformers 库中的 T5 模型,并且我有一个带有屏蔽标记的输入序列,我想将其替换为模型生成的输出。这是代码。
from transformers import T5Tokenizer, T5ForConditionalGeneration
tokenizer = T5Tokenizer.from_pretrained("t5-small")
model = T5ForConditionalGeneration.from_pretrained("t5-small")
input_data = "The <extra_id_0> walks in <extra_id_1> park"
input_ids = tokenizer(input_data, return_tensors="pt").input_ids
sequence_ids = model.generate(input_ids)
output_sequences = tokenizer.batch_decode(sequence_ids)
output_sequences
Run Code Online (Sandbox Code Playgroud)
此代码产生以下输出:
['<pad><extra_id_0> park offers<extra_id_1> the<extra_id_2> park.</s>']
Run Code Online (Sandbox Code Playgroud)
我想要做的是将输入序列中的屏蔽标记<extra_id_0>和替换<extra_id_1>为模型中相应的输出标记,以便最终输出为:
The park offers walks in the park.
Run Code Online (Sandbox Code Playgroud)
我希望有人可以帮助我编写代码来实现这一目标。
请注意,这是对应关系:
mask in input_data -> answer in output_sequences
<extra_id_0> -> <extra_id_0> park offers (so we extract 'park offers' only)
<extra_id_1> -> <extra_id_1> …Run Code Online (Sandbox Code Playgroud) python nlp huggingface-transformers generative-pretrained-transformer