首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用BERT/ GPT-2进行释义生成?

如何使用BERT/ GPT-2进行释义生成?
EN

Stack Overflow用户
提问于 2021-03-07 15:45:38
回答 2查看 2.2K关注 0票数 3

我正在努力理解如何使用BERT/GPT-2来生成意译。我不明白我该怎么做。你能给我提供任何资源吗?我可以建立一个释义生成模型吗?“输入是句子,输出是句子的释义”

EN

回答 2

Stack Overflow用户

发布于 2021-06-18 10:58:21

这是我训练翻译者的秘诀:

  1. 而不是seq2seq (仅编码器)或GPT (仅译码器)使用seq2seq模型与编码器和解码器,如T5,BART,或飞马。我建议使用对101种语言进行预培训的多语言T5模型。如果您想为自己的语言加载嵌入(而不是使用所有的101),您可以遵循这个食谱
  2. 为你的语言和领域找到一个释义语料库。对于英语来说,ParaNMT、PAWS和QQP是很好的候选人。一个名为塔帕可的语料库是从Tatoeba中提取出来的,它是一个包含73种语言的释义语料库,所以如果你找不到你的语言的意译语料库,它是一个很好的起点。
  3. 在这个语料库上微调你的模型。代码可以是这样的:
代码语言:javascript
运行
复制
import torch
from transformers import T5ForConditionalGeneration, T5Tokenizer
# use here a backbone model of your choice, e.g. google/mt5-base
backbone_model = 'cointegrated/rut5-base-multitask' 
model = T5ForConditionalGeneration.from_pretrained(backbone_model)
tokenizer = T5Tokenizer.from_pretrained(backbone_model)
model.cuda();
optimizer = torch.optim.Adam(params=[p for p in model.parameters() if p.requires_grad], lr=1e-5)

# todo: load the paraphrasing corpus and define the get_batch function

for i in range(100500):
    xx, yy = get_batch(mult=mult)
    x = tokenizer(xx, return_tensors='pt', padding=True).to(model.device)
    y = tokenizer(yy, return_tensors='pt', padding=True).to(model.device)
    # do not force the model to predict pad tokens
    y.input_ids[y.input_ids==0] = -100
    loss = model(
        input_ids=x.input_ids,
        attention_mask=x.attention_mask,
        labels=y.input_ids,
        decoder_attention_mask=y.attention_mask,
        return_dict=True
    ).loss
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()

model.save_pretrained('my_paraphraser')
tokenizer.save_pretrained('my_paraphraser')

这个代码的一个更完整的版本可以找到在这个笔记本上

经过培训,该模型可按以下方式使用:

代码语言:javascript
运行
复制
from transformers import pipeline
pipe = pipeline(task='text2text-generation', model='my_paraphraser')
print(pipe('Here is your text'))
# [{'generated_text': 'Here is the paraphrase or your text.'}]

如果您希望您的释义更加多样化,您可以使用参数来控制生成过程

代码语言:javascript
运行
复制
print(pipe(
    'Here is your text', 
    encoder_no_repeat_ngram_size=3,  # make output different from input
    do_sample=True,  # randomize
    num_beams=5,  # try more options
    max_length=128,  # longer texts
))

享受吧!

票数 6
EN

Stack Overflow用户

发布于 2021-06-18 08:11:29

您可以使用T5释义来生成释义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66518316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档