OpenNMT Forum

Tokenizer (sp_model, vocabulary_threshold) with unexpected results

Hi,
with OpenNMT Tokenizer (commit 453fb2c797ec5f15bd9ea12261b7ee3b58b97d4f) I’m worried about getting different results while comparing similar tokenize and spm_encode calls. Just as a short example, data preparation looks like this :

wget --trust-server-names http://data.statmt.org/wmt16/translation-task/training-parallel-nc-v11.tgz
tar xfz training-parallel-nc-v11.tgz
cd training-parallel-nc-v11/
mv news-commentary-v11.de-en.de de-en.de
mv news-commentary-v11.de-en.en de-en.en
cat de-en.en de-en.de | shuf > de-en
spm_train --input=de-en --model_prefix=spm --vocab_size=32000 --model_type=unigram --character_coverage=1.0
spm_encode --model=spm.model --generate_vocabulary < de-en.de > spm_vocab.de
spm_encode --model=spm.model --generate_vocabulary < de-en.en > spm_vocab.en

… then tokenize a german sentence :

echo “Sein Äußeres war auf dezente Weise so verändert, dass einem das weithin bekannte Gesicht nicht gleich auffiel.” | tokenize --sp_model=spm.model --vocabulary=spm_vocab.de --spacer_annotate --vocabulary_threshold=50
▁ S e i n ▁ Ä u ß e r e s ▁ w a r ▁ a u f ▁ d e z e n t e ▁ W e i s e ▁ s o ▁ v e r ä n d e r t , ▁ d a s s ▁ e i n e m ▁ d a s ▁ w e i t h i n ▁ b e k a n n t e ▁ G e s i c h t ▁ n i c h t ▁ g l e i c h ▁ a u f f i e l .

… and compare output with that of corresponding spm_encode call :

echo “Sein Äußeres war auf dezente Weise so verändert, dass einem das weithin bekannte Gesicht nicht gleich auffiel.” | spm_encode --model=spm.model --vocabulary=spm_vocab.de --vocabulary_threshold=50
▁Sein ▁ Ä uß er es ▁war ▁auf ▁de zen te ▁Weise ▁so ▁verändert , ▁dass ▁einem ▁das ▁we ithin ▁bekannte ▁Gesicht ▁nicht ▁gleich ▁auf fiel .

Is there anything missing or wrong with my tokenize call?
Thanks in advance!

Kind regards, Martin

Hi,

Can you try setting --mode none when using the OpenNMT Tokenizer? This is briefly mentioned in the documentation:

https://github.com/OpenNMT/Tokenizer/blob/master/docs/options.md#sp_model_path-string-default-

Hi Guillaume,
thanks for your quick reaction!
Just tried this :

echo “Sein Äußeres war auf dezente Weise so verändert, dass einem das weithin bekannte Gesicht nicht gleich auffiel.” | tokenize --mode=none --sp_model=spm.model --vocabulary=spm_vocab.de --spacer_annotate --vocabulary_threshold=50
▁ S e i n ▁ Ä u ß e r e s ▁ w a r ▁ a u f ▁ d e z e n t e ▁ W e i s e ▁ s o ▁ v e r ä n d e r t , ▁ d a s s ▁ e i n e m ▁ d a s ▁ w e i t h i n ▁ b e k a n n t e ▁ G e s i c h t ▁ n i c h t ▁ g l e i c h ▁ a u f f i e l .

… same result

Ok, thanks for testing.

Can you compare without the vocabulary related options? Maybe there is something wrong with these options.

echo “Sein Äußeres war auf dezente Weise so verändert, dass einem das weithin bekannte Gesicht nicht gleich auffiel.” | tokenize --mode=none --sp_model=spm.model --spacer_annotate
▁Sein ▁Äußer es ▁war ▁auf ▁de zen te ▁Weise ▁so ▁verändert , ▁dass ▁einem ▁das ▁we ithin ▁bekannte ▁Gesicht ▁nicht ▁gleich ▁auf fiel .

… looks better, same without --mode=none

Thanks. I will look into that.

It should be fixed with this PR:

Thanks for reporting.