[PYTHON] Lorsque j'essaie de partager avec Bert Japanese Tokenizer de Hugging Face, cela échoue avec l'initialisation de MeCab et aussi avec l'encodage.

Je vais l'écrire sous forme de note afin que les personnes qui tombent sur la même erreur aient moins de temps pour lever les yeux.

Ce qui suit fonctionne sur Google Colab.

Installez les transformateurs MeCab et huggingface sur Colab en vous reportant à here.

!apt install aptitude swig
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3
!pip install transformers

Essayez d'écrire avec le tokenizer de BERT pour le japonais.

from transformers.tokenization_bert_japanese import BertJapaneseTokenizer

#Tokenizer déclaré pour le BERT japonais
tokenizer = BertJapaneseTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking')

text = "Le traitement du langage naturel est très amusant."

wakati_ids = tokenizer.encode(text, return_tensors='pt')
print(tokenizer.convert_ids_to_tokens(wakati_ids[0].tolist()))
print(wakati_ids)

J'ai eu l'erreur suivante.

----------------------------------------------------------

Failed initializing MeCab. Please see the README for possible solutions:

    https://github.com/SamuraiT/mecab-python3#common-issues

If you are still having trouble, please file an issue here, and include the
ERROR DETAILS below:

    https://github.com/SamuraiT/mecab-python3/issues

Vous n'êtes pas obligé d'écrire le numéro en anglais.

------------------- ERROR DETAILS ------------------------
arguments: 
error message: [ifs] no such file or directory: /usr/local/etc/mecabrc
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-3-f828f6470517> in <module>()
      2 
      3 #Tokenizer déclaré pour le BERT japonais
----> 4 tokenizer = BertJapaneseTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking')
      5 
      6 text = "Le traitement du langage naturel est très amusant."

4 frames
/usr/local/lib/python3.6/dist-packages/MeCab/__init__.py in __init__(self, rawargs)
    122 
    123         try:
--> 124             super(Tagger, self).__init__(args)
    125         except RuntimeError:
    126             error_info(rawargs)

RuntimeError: 

La sortie d'erreur me dit gentiment de regarder ici, donc installez mecab-python3 comme indiqué à l'URL. Quand tu fais

pip install unidic-lite

Si vous exécutez également, il ne sera pas supprimé lors de l'initialisation de MeCab. Cependant, cette fois, je me suis fâché avec Value Error: trop de valeurs à décompresser (attendu 2) dans ʻencode`.

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-5-f828f6470517> in <module>()
      6 text = "Le traitement du langage naturel est très amusant."
      7 
----> 8 wakati_ids = tokenizer.encode(text, return_tensors='pt')
      9 print(tokenizer.convert_ids_to_tokens(wakati_ids[0].tolist()))
     10 print(wakati_ids)

8 frames
/usr/local/lib/python3.6/dist-packages/transformers/tokenization_bert_japanese.py in tokenize(self, text, never_split, **kwargs)
    205                 break
    206 
--> 207             token, _ = line.split("\t")
    208             token_start = text.index(token, cursor)
    209             token_end = token_start + len(token)

ValueError: too many values to unpack (expected 2)

À propos de cette erreur ici, le développeur de mecab-python3? Comme mentionné par, il a été résolu en spécifiant la version de mecab-python3 comme «0.996.5».

En résumé, lors de l'installation de pip, je pense que ce ne sera pas une erreur si vous le déclarez comme suit.

!apt install aptitude swig
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3==0.996.5
!pip install unidic-lite
!pip install transformers

Si vous avez déjà installé la dernière version de mecab-python3 avec pip avant d'exécuter ↑, n'oubliez pas de reconnecter votre session colab. Vous pouvez déconnecter la session de la gestion de session en cliquant sur ▼ en haut à droite de l'écran colab, comme la RAM ou le disque.

from transformers.tokenization_bert_japanese import BertJapaneseTokenizer

#Tokenizer déclaré pour le BERT japonais
tokenizer = BertJapaneseTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking')

text = "Le traitement du langage naturel est très amusant."

wakati_ids = tokenizer.encode(text, return_tensors='pt')
print(tokenizer.convert_ids_to_tokens(wakati_ids[0].tolist()))
print(wakati_ids)

#Downloading: 100%
#258k/258k [00:00<00:00, 1.58MB/s]
#
#['[CLS]', 'La nature', 'Langue', 'En traitement', 'Est', 'beaucoup', 'agréable', '。', '[SEP]']
#tensor([[    2,  1757,  1882,  2762,     9,  8567, 19835,     8,     3]])

J'ai pu l'écrire en toute sécurité avec BertJapanese Tokenizer.

fin

Recommended Posts

Lorsque j'essaie de partager avec Bert Japanese Tokenizer de Hugging Face, cela échoue avec l'initialisation de MeCab et aussi avec l'encodage.
Quand j'essaye de pousser avec heroku, ça ne marche pas
J'ai écrit une classe qui facilite l'écriture en spécifiant les paroles de la partie lors de l'utilisation de Mecab avec python
Lorsque j'essaye de créer Apache SSL, cela ne démarre pas.