Python 变形金刚:如何使用拥抱脸编码模式来完成机器翻译任务?

Python 变形金刚:如何使用拥抱脸编码模式来完成机器翻译任务?,python,pytorch,huggingface-transformers,transformer,machine-translation,Python,Pytorch,Huggingface Transformers,Transformer,Machine Translation,我已经训练了一个“拥抱脸”的编码模型来完成英德翻译任务。我试图过多地使用一个小数据集(100个平行句子),然后使用model.generate()然后tokenizer.decode()执行翻译。然而,输出的似乎是正确的德语句子,但绝对不是正确的翻译 以下是构建模型的代码 encoder_config = BertConfig() decoder_config = BertConfig() config = EncoderDecoderConfig.from_encoder_decoder_co

我已经训练了一个“拥抱脸”的编码模型来完成英德翻译任务。我试图过多地使用一个小数据集(100个平行句子),然后使用
model.generate()
然后
tokenizer.decode()
执行翻译。然而,输出的似乎是正确的德语句子,但绝对不是正确的翻译

以下是构建模型的代码

encoder_config = BertConfig()
decoder_config = BertConfig()
config = EncoderDecoderConfig.from_encoder_decoder_configs(encoder_config, decoder_config)
model = EncoderDecoderModel(config=config)
model.eval()
input_ids = torch.tensor(tokenizer.encode(input_text)).unsqueeze(0)
output_ids = model.generate(input_ids.to('cuda'), decoder_start_token_id=model.config.decoder.pad_token_id)
output_text = tokenizer.decode(output_ids[0])
下面是测试模型的代码

encoder_config = BertConfig()
decoder_config = BertConfig()
config = EncoderDecoderConfig.from_encoder_decoder_configs(encoder_config, decoder_config)
model = EncoderDecoderModel(config=config)
model.eval()
input_ids = torch.tensor(tokenizer.encode(input_text)).unsqueeze(0)
output_ids = model.generate(input_ids.to('cuda'), decoder_start_token_id=model.config.decoder.pad_token_id)
output_text = tokenizer.decode(output_ids[0])
输入示例:“铁水泥是一种现成的糊状物,用油灰刀或手指在钢锭模的模具边缘(角部)铺设成圆角。”

地面真相翻译:“铁水泥是一种水泥,在施塔尔古斯-科基尔-奥夫盖特拉根威德(Kokille-aufgetragen-wird)的模板中,在施塔尔古斯(Winkel)的模板中,在施塔尔古斯(Kokille-aufgetragen)的模板中

该模型在经过100个时代的培训后输出的内容:“[S]在quarkxpress中输入stehenden链接anklicken,输入视频uber die Erstellong ansprechender插图”,这完全没有意义


问题出在哪里?

此示例是用于过度拟合的训练数据集的一部分吗?在这100年中,损失如何?它下降了吗?是的,损失下降到接近零,但模型无法输出正确的句子。我怀疑问题出在这里:
解码器\u开始\u令牌\u id=model.config.decoder.pad\u令牌\u id
。如何预处理目标端数据?你用什么符号来标记序列的开始和结束?我没有为序列的开始和结束指定任何符号。输入只是一个句子,输出也是。这个示例是用于过度拟合的训练数据集的一部分吗?在这100年中,损失如何?它下降了吗?是的,损失下降到接近零,但模型无法输出正确的句子。我怀疑问题出在这里:
解码器\u开始\u令牌\u id=model.config.decoder.pad\u令牌\u id
。如何预处理目标端数据?你用什么符号来标记序列的开始和结束?我没有为序列的开始和结束指定任何符号。输入只是一个句子,输出也是。