Ubuntu18.04でhuggingface/transformersのBertJapaneseTokenizer
を使ったときに辞書の指定で苦労したのでメモ.
こんな感じです.
In [1]: import MeCab
In [2]: mecab = MeCab.Tagger("")
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
issueを英語で書く必要はありません。
------------------- ERROR DETAILS ------------------------
arguments:
error message: [ifs] no such file or directory: ./dicrc
----------------------------------------------------------
事情
- Ubuntu 18.04
- mecabはインストール済
- mecab-python3のバージョンは1.0.1
- http://taku910.github.io/mecab/#download から mecab-ipadic-2.7.0-20070801.tar.gz をダウンロードし,記述に基づきインストール済.
/etc/mecabrc
$ cat /etc/mecabrc
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
dicdir = /usr/lib/x86_64-linux-gnu/mecab/dic/ipadic/
; userdic = /home/foo/bar/user.dic
; output-format-type = wakati
; input-buffer-size = 8192
; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n
$ mecab -D
filename: /usr/lib/x86_64-linux-gnu/mecab/dic/ipadic/sys.dic
version: 102
charset: utf8
type: 0
size: 392126
left size: 1316
right size: 1316
設定など
-
/etc/mecabrc
(mecab-config --sysconfdir
で確認できるやつ)にてdicdir = /usr/lib/x86_64-linux-gnu/mecab/dic/ipadic/
と設定済.- これは
make install
で入る先
- これは
-
mecab -D
で見てみるとfilename: /usr/lib/x86_64-linux-gnu/mecab/dic/ipadic/sys.dic
となっている
症状
- mecabコマンドではカレントディレクトリがどこでもちゃんとインストールした辞書が指定できている
- カレントディレクトリをインストールした辞書にすると,Pythonにて
mecab = MeCab.Tagger()
がちゃんと読み込んでくれる - カレントディレクトリが違う場所だと,
error message: [ifs] no such file or directory: ./dicrc
って怒られてmecab = MeCab.Tagger()
にて終了する.
だめだったやつ
-
/etc/mecabrc
の設定だけではだめ
解決方法 for MeCab
おとなしく辞書を指定する.
In [5]: mecab = MeCab.Tagger("-d /usr/lib/x86_64-linux-gnu/mecab/dic/ipadic")
解決方法 for bert with transformers
transformersのBertJapaneseTokenizer
が使いたかった.このクラス,transformers/tokenization_bert_japanese.py
に記述されているのですが,中身はほとんどtransformersの日本語モデルを提供している東北大学乾研究室のGitHub内にあるtokenization.pyでした.
よって,以下のようにして解決できます.
name = 'cl-tohoku/bert-base-japanese-whole-word-masking' # 例えば
BertJapaneseTokenizer.from_pretrained(name, mecab_kwargs={"mecab_option": "-d /usr/lib/x86_64-linux-gnu/mecab/dic/ipadic"})