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