Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请问应该如何转成pyTorch格式? #9

Closed
Dongfeng-He opened this issue Sep 6, 2019 · 21 comments
Closed

请问应该如何转成pyTorch格式? #9

Dongfeng-He opened this issue Sep 6, 2019 · 21 comments

Comments

@Dongfeng-He
Copy link

感谢作者开源,请问目前支持tensorflow模型转pyTorch模型吗?尝试使用pytorch-transformer的转换工具进行模型转换并不成功。

@brightmart
Copy link
Owner

报什么错误呢?

@zuofeng1997
Copy link

跟加载bert模型一样,可以转换成功,不过bert模型的参数设置需要根据roberta更改

@brightmart
Copy link
Owner

好的,roberta没有特别的参数,参数和bert是一样的,只有跟加载词汇表(vocab.txt)和配置文件(bert_config_xxx.json)

能否把转PyTorch的代码在这里的方法在这里贴一下,稍后新的模型我也转一下。

@guoday
Copy link

guoday commented Sep 7, 2019

可参考https://github.com/guoday/CCF-BDCI-Sentiment-Analysis-Baseline 转化该项目的tf模型为pytorch模型

@zuofeng1997
Copy link

zuofeng1997 commented Sep 7, 2019

创建模型时,config和开源的roberta一致就可以

from pytorch_transformers import RobertaConfig, RobertaModel, load_tf_weights_in_bert
config = RobertaConfig(num_hidden_layers=24, vocab_size_or_config_json_file=21128)
model = RobertaModel(config)
load_tf_weights_in_bert(model, config, "roeberta_zh_L-24_H-768_A-12")

@Dongfeng-He
Copy link
Author

Dongfeng-He commented Sep 7, 2019

我用的转换方法:
from pytorch_transformers import convert_roberta_checkpoint_to_pytorch

roberta_checkpoint_path = "/root/roberta/"
pytorch_dump_folder_path = "/root/roberta/output/"
classification_head = False
convert_roberta_checkpoint_to_pytorch.convert_roberta_checkpoint_to_pytorch(roberta_checkpoint_path, pytorch_dump_folder_path, classification_head)

/root/roberta/是存放该项目权重的路径
roberta_checkpoint_path = "/root/roberta/"
报错OSError: Model file not found: /root/roberta/model.pt

roberta_checkpoint_path = "/root/roberta/checkpoint"
报错tarfile.ReadError: truncated header

roberta_checkpoint_path = "/root/roberta/bert_model.data-00000-of-00001"
报错tarfile.CompressionError: unknown compression type 'data-00000-of-00001'

各种方法都试了一下,没有成功。

@guoday,我看到这个项目里对RoBERTa的转换还是沿用BERT的转换脚本,也就是pytorch_transformers.convert_tf_checkpoint_to_pytorch,我试试这个方法是不是可行,非常感谢!

@zuofeng1997
Copy link

这个是行不通的,pytorch transformer里面的convert_roberta_checkpoint_to_pytorch是提供转换fairseq模型的,不是tensorflow模型的,roberta和bert模型没有变化,所以用转换bert的方法即可。

@Dongfeng-He
Copy link
Author

Dongfeng-He commented Sep 7, 2019

@zuofeng1997 非常感谢!请问我能沿用BertConfig和BertModel吗?还是必须要用RobertaConfig, RobertaModel?
这个load_tf_weights_in_bert(model, config, "roeberta_zh_L-24_H-768_A-12")是用来代替BertModel.from_pretrained的吗?还是跳过模型转换直接在pyTorch里加载tensorflow的模型?

@zuofeng1997
Copy link

zuofeng1997 commented Sep 7, 2019

能用BERTMODEL,模型的转换用的就是load_tf_weights_in_bert方法,所以没有区别

@Dongfeng-He
Copy link
Author

@zuofeng1997 感谢感谢!

@DefuLi
Copy link

DefuLi commented Oct 10, 2019

这个模型是可以在pytorch里面加载运行的。
用Transformer2.0库,实例化BertTokenizer、BertConfig、BertForSequenceClassification(分类)就可以了。

tokenizer = BertTokenizer.from_pretrained('RoBERTa/vocab.txt')
config = BertConfig.from_pretrained('RoBERTa/config.json')
model = BertForSequenceClassification.from_pretrained('RoBERTa/pytorch_model.bin', config=config)

中文版的RoBERTa模型,不能用Transformer2.0中Roberta相关类进行实例化加载。

@xuanzebi
Copy link

xuanzebi commented Jan 7, 2020

这个模型是可以在pytorch里面加载运行的。
用Transformer2.0库,实例化BertTokenizer、BertConfig、BertForSequenceClassification(分类)就可以了。

tokenizer = BertTokenizer.from_pretrained('RoBERTa/vocab.txt')
config = BertConfig.from_pretrained('RoBERTa/config.json')
model = BertForSequenceClassification.from_pretrained('RoBERTa/pytorch_model.bin', config=config)

中文版的RoBERTa模型,不能用Transformer2.0中Roberta相关类进行实例化加载。

为什么不能用呢.. roberta 中有一个merge.txt文件。但是直接下载的pytorch版本的roberta没有这个文件..不太清楚这个文件时干嘛用的
image

@brightmart
Copy link
Owner

你用transformer加载模型一下,使用名称选BERT.

@DefuLi
Copy link

DefuLi commented Jan 7, 2020

这个模型是可以在pytorch里面加载运行的。
用Transformer2.0库,实例化BertTokenizer、BertConfig、BertForSequenceClassification(分类)就可以了。
tokenizer = BertTokenizer.from_pretrained('RoBERTa/vocab.txt')
config = BertConfig.from_pretrained('RoBERTa/config.json')
model = BertForSequenceClassification.from_pretrained('RoBERTa/pytorch_model.bin', config=config)
中文版的RoBERTa模型,不能用Transformer2.0中Roberta相关类进行实例化加载。

为什么不能用呢.. roberta 中有一个merge.txt文件。但是直接下载的pytorch版本的roberta没有这个文件..不太清楚这个文件时干嘛用的

你要用加载bert的类去加载RoBerta

@qianxliu
Copy link

qianxliu commented Oct 3, 2020

这个模型是可以在pytorch里面加载运行的。
用Transformer2.0库,实例化BertTokenizer、BertConfig、BertForSequenceClassification(分类)就可以了。

tokenizer = BertTokenizer.from_pretrained('RoBERTa/vocab.txt')
config = BertConfig.from_pretrained('RoBERTa/config.json')
model = BertForSequenceClassification.from_pretrained('RoBERTa/pytorch_model.bin', config=config)

中文版的RoBERTa模型,不能用Transformer2.0中Roberta相关类进行实例化加载。

我尝试了确实不可以,但是是为什么呢?全网也搜不到相关信息。
@DefuLi
有相关的资料可以推荐阅读吗?

@DefuLi
Copy link

DefuLi commented Oct 3, 2020 via email

@qianxliu
Copy link

qianxliu commented Oct 3, 2020

你说的没错。 中文版的roberta是用transformer2.0库中的bert加载模板的。 至于为什么这样,你看一下roberta的官方说明,上面有讲到。

---原始邮件--- 发件人: "Qian Xin"<notifications@github.com> 发送时间: 2020年10月3日(周六) 下午5:15 收件人: "brightmart/roberta_zh"<roberta_zh@noreply.github.com>; 抄送: "Defu Li"<defuli.go@qq.com>;"Comment"<comment@noreply.github.com>; 主题: Re: [brightmart/roberta_zh] 请问应该如何转成pyTorch格式? (#9) 这个模型是可以在pytorch里面加载运行的。 用Transformer2.0库,实例化BertTokenizer、BertConfig、BertForSequenceClassification(分类)就可以了。 tokenizer = BertTokenizer.from_pretrained('RoBERTa/vocab.txt') config = BertConfig.from_pretrained('RoBERTa/config.json') model = BertForSequenceClassification.from_pretrained('RoBERTa/pytorch_model.bin', config=config) 中文版的RoBERTa模型,不能用Transformer2.0中Roberta相关类进行实例化加载。 我尝试了确实不可以,但是是为什么呢?全网也搜不到相关信息。 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

十分感谢!

@qianxliu
Copy link

qianxliu commented Oct 3, 2020

查到了,谢谢

@ajiabo
Copy link

ajiabo commented Nov 7, 2020

这个模型是可以在pytorch里面加载运行的。
用Transformer2.0库,实例化BertTokenizer、BertConfig、BertForSequenceClassification(分类)就可以了。

tokenizer = BertTokenizer.from_pretrained('RoBERTa/vocab.txt')
config = BertConfig.from_pretrained('RoBERTa/config.json')
model = BertForSequenceClassification.from_pretrained('RoBERTa/pytorch_model.bin', config=config)

中文版的RoBERTa模型,不能用Transformer2.0中Roberta相关类进行实例化加载。

查到了,谢谢

请问下您是怎么加载robert的 我没有看懂

@q5s2c1
Copy link

q5s2c1 commented Apr 12, 2022

这个是行不通的,pytorch transformer里面的convert_roberta_checkpoint_to_pytorch是提供转换fairseq模型的,不是tensorflow模型的,roberta和bert模型没有变化,所以用转换bert的方法即可。

你好,我在用该函数将roberta-base的fairseq模型转为pytorch模型时,出现了一个问题“'RobertaHubInterface' object has no attribute 'args'”,具体如facebookresearch/fairseq#4337,请问您知道怎么解决吗

@ajiabo
Copy link

ajiabo commented Apr 12, 2022 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants