LoginSignup
5
2

More than 3 years have passed since last update.

mecab-python3やtransformersのBertJapaneseTokenizerで辞書を指定する

Last updated at Posted at 2020-08-19

Ubuntu18.04でhuggingface/transformersBertJapaneseTokenizerを使ったときに辞書の指定で苦労したのでメモ.

こんな感じです.


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"})
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2