[PYTHON] Wenn ich versuche, mit Bert Japanese Tokenizer von Hugging Face zu teilen, schlägt dies beim Initialisieren von MeCab und auch beim Codieren fehl.

Ich werde es als Notiz aufschreiben, damit Leute, die über denselben Fehler stolpern, weniger Zeit haben, nachzuschlagen.

Folgendes wird in Google Colab ausgeführt.

Installieren Sie MeCab- und Huggingface-Transformatoren auf Colab unter hier.

!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

Versuchen Sie, mit dem Tokenizer von BERT für Japanisch zu schreiben.

from transformers.tokenization_bert_japanese import BertJapaneseTokenizer

#Deklarierter Tokenizer für japanisches BERT
tokenizer = BertJapaneseTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking')

text = "Die Verarbeitung natürlicher Sprache macht viel Spaß."

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

Ich habe den folgenden Fehler erhalten.

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

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

Sie müssen die Ausgabe nicht auf Englisch schreiben.

------------------- 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 #Deklarierter Tokenizer für japanisches BERT
----> 4 tokenizer = BertJapaneseTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking')
      5 
      6 text = "Die Verarbeitung natürlicher Sprache macht viel Spaß."

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: 

Die Fehlerausgabe fordert mich freundlicherweise auf, hier zu lesen. Installieren Sie also mecab-python3 wie unter der URL angegeben. Wenn Sie das tun

pip install unidic-lite

Wenn Sie auch ausführen, wird es nicht durch Initialisieren von MeCab gelöscht. Diesmal wurde ich jedoch wütend, weil "encode" "Value Error: zu viele Werte zum Entpacken (erwartete 2)" sagte.

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-5-f828f6470517> in <module>()
      6 text = "Die Verarbeitung natürlicher Sprache macht viel Spaß."
      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)

Über diesen Fehler hier, der Entwickler von mecab-python3? Wie bereits erwähnt, wurde es gelöst, indem die Version von mecab-python3 als "0.996.5" angegeben wurde.

Zusammenfassend denke ich, dass es bei der Installation von pip kein Fehler ist, wenn Sie es wie folgt deklarieren.

!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

Wenn Sie vor dem Ausführen von ↑ bereits die neueste Version von mecab-python3 mit pip installiert haben, vergessen Sie nicht, Ihre Colab-Sitzung erneut zu verbinden. Sie können die Sitzung von der Sitzungsverwaltung trennen, indem Sie oben rechts im Colab-Bildschirm auf ▼ klicken, z. B. RAM oder Festplatte.

from transformers.tokenization_bert_japanese import BertJapaneseTokenizer

#Deklarierter Tokenizer für japanisches BERT
tokenizer = BertJapaneseTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking')

text = "Die Verarbeitung natürlicher Sprache macht viel Spaß."

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]', 'Natur', 'Sprache', 'wird bearbeitet', 'Ist', 'sehr viel', 'angenehm', '。', '[SEP]']
#tensor([[    2,  1757,  1882,  2762,     9,  8567, 19835,     8,     3]])

Ich konnte es sicher mit "BertJapanese Tokenizer" schreiben.

Ende

Recommended Posts

Wenn ich versuche, mit Bert Japanese Tokenizer von Hugging Face zu teilen, schlägt dies beim Initialisieren von MeCab und auch beim Codieren fehl.
Wenn ich versuche, mit Heroku zu pushen, funktioniert es nicht
Ich habe eine Klasse geschrieben, die das Schreiben erleichtert, indem ich die Teiltexte spezifiziere, wenn ich Mecab mit Python verwende
Wenn ich versuche, Apache SSL zu erstellen, wird es nicht gestartet.