Closed Ahmedkoptan closed 4 years ago
The script you want is at src/transformers/convert_marian_to_pytorch.py
It requires you to download the marian model you wish to convert and also to clone
git clone git@github.com:Helsinki-NLP/Opus-MT-train.git
you may have to adjust some paths in the script (like repo_path
) based on where things are.
https://github.com/huggingface/transformers/blob/448c467256332e4be8c122a159b482c1ef039b98/src/transformers/convert_marian_to_pytorch.py#L189
Also note that we have ported 1000+ of them, and some were renamed. Which one are you looking for?
I have trained a Transformer model to translate from Italian to Dutch with Marian based on https://github.com/marian-nmt/marian-examples/tree/master/transformer and data from OPUS. The model is using BPE for tokenization. I have the itnl.bpe, vocab file, model.npz file, etc. on my computer.
The example with the conver_marian_to_pytorch.py is using the model files from the Helsinki-NLP/Opus-MT-train repo instead of local model files. So how can I use the local model files (that I trained with marian) to convert them to a pytorch model that can be used with huggingface?
@sshleifer
I don't think BPE tokenizer will work. To answer the local model question, you need to (roughly) (a) run the converter on a model from the repo and see what files get downloaded, (b) make your filesystem look like that (c) update the code to not download things and not make model cards.
I am probably missing something here. I am trying to buid a grammar corrector using Marian NMT generated model with Huggingface's transformer. Source language is the text with erros and target language the text without. I have trained the model following this example (https://github.com/marian-nmt/marian-examples/tree/master/transformer). As it does not generate source and target spm files, I created both of them them using "build/spm_train" provided with Marian implementation and, of course, using for each one their respective training files, the same used for training the model.
The commands to generate spm files are: ../../build/spm_train --input data/src_sentences_dev.txt --model_prefix=source --vocab_size=16000 --character_coverage=1.0 ../../build/spm_train --input data/ref_sentences_dev.txt --model_prefix=target --vocab_size=16000 --character_coverage=1.0
After that I proceeded with the convertion to pythorch using https://github.com/huggingface/transformers/blob/master/src/transformers/models/marian/convert_marian_to_pytorch.py. This convertion went fine. The problem is that when I use this model in Huggingface's transformer.MarianMTModel and MarianTokenizer (from_pretrained) I get weired results.
So to mitigate that I tried to perform another convertion, this time using en-de files downloaded from https://github.com/Helsinki-NLP/OPUS-MT-train/tree/master/models/en-de. Convertion went fine, unfortunately with the same weired results, example at the bottom, as with the model I created for grammar correction.
I further downloaded the required files from https://huggingface.co/Helsinki-NLP/opus-mt-en-de/tree/main and substituted the ones genereated by convert_marian_to_pytorch.py above with these and, as expected, the translation went fine.
The converter, to my knowledge, requires 4 files: source.spm, target.spm, vocab.yml and model.npz. As these weired results raises after I use the converter, both with my model and the en-de downloaded from https://github.com/Helsinki-NLP/OPUS-MT-train/tree/master/models/en-de, I guess I am missing a piece of info that I cannot identify.
It is worth noting that my grammar corrector model works correctly with marian_decoder.
Any help will be very much appreciated! @sshleifer ?
Cheers
Example of English -> German translation: Source: "Today is Sunday" Translation: ▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Nachricht▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Nachricht▁Rumänien▁Rumänien▁Nachricht▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁Nachricht▁Rumänien▁Rumänien▁Rumänien▁Rumänien▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige▁verdächtige
I hope it's not bad practice to necro an issue but since I can't seem to link it in a new one, I'd like to add that I'm encountering th same behaviour using the script.
The conversion went fine, but the generation output is, for me :
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
or, sometimes
linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage linkage (ad lib).
I should note that I have used OPUS-CAT to fine tune an OPUS-MT model, and that it performs relatively well inside the app. Also conversion with the script went on without issues.
Like the OP, if I replace the model files with the original ones (in my case,Helsinki-NLP/opus-mt-zh-en), everything is fixed, so I don't think this is a pure script/params issue.
Thanks in advance !
I want to utilize and train the machine translation models posted on Github: https://github.com/Helsinki-NLP/OPUS-MT-train/tree/master/models on my own corpus. These models are C++ based.
Are these models exactly the same as the ones posted by Hugging Face’s website: https://huggingface.co/Helsinki-NLP ?
If they are, what is the transformers conversion script that loads these Github models and transforms them to models that are loadable via transformers (for example utilizing: transformers.AutoTokenizer.from_pretrained(‘path’), transformers.AutoModelWithLMHead.from_pretrained(‘path’))?
@sshleifer @jackalhan