13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

transformersのBertJapaneseTokenizerでMeCabオプション

Posted at

transformersのBertJapaneseTokenizerでMeCabのオプションを指定する
NEologdを使いたいときとか

やり方

BertJapaneseTokenizerはmecab_kwargsでオプション指定できるが、実際に使っている例があまりなくてわかりづらいので紹介

from transformers import BertJapaneseTokenizer

# 通常のpretrainedモデル呼び出し
tokenizer = BertJapaneseTokenizer.from_pretrained(
    "cl-tohoku/bert-base-japanese-whole-word-masking",
    do_subword_tokenize=False)

# MeCabオプションを指定したいとき
tokenizer2 = BertJapaneseTokenizer.from_pretrained(
    "cl-tohoku/bert-base-japanese-whole-word-masking",
    do_subword_tokenize=False,
    mecab_kwargs={"mecab_dic": None, "mecab_option": "-d /path/to/dic"})
# ※辞書を差し替えたいときは必ず"mecab_dic": Noneを指定する(デフォルトではipadicが読み込まれる)

# 自分で用意したボキャブラリーを使いたいとき
tokenizer3 = BertJapaneseTokenizer(
    "/path/to/vocab.txt",
    do_subword_tokenize=False,
    word_tokenizer_type="mecab",
    mecab_kwargs={"mecab_dic": None, "mecab_option": "-d /path/to/dic"})

上記の方法でNEologdを指定してみる

>>> tokenizer.tokenize('ガッキー逃げ恥婚')
['ガッキー', '逃げ', '', '']
>>>
>>>
>>> tokenizer2.tokenize('ガッキー逃げ恥婚')
['ガッキー', '逃げ恥', '']

NEologdを使った方は逃げ恥が一単語として認識されていることがわかります

注意点

NEologdを使いたいときなど、dicを指定するときは"mecab_dic": Noneを指定する必要があります
これはソースでいうとこの辺が理由で、MecabTokenizerクラスはmecab_dic引数にデフォルトでipadicが入っていて、明示的にNoneを指定しないと自動的に-dオプションが指定されてしまうからです

その他

MeCabのオプションはもちろん-dだけでなく-uとか他のオプションも使えるので、いろいろよしなに指定したらいいと思います
内部的にはここで指定したオプションを受け取っているのはMeCabラッパのfugashiのGenericTaggerなので、fugashiのGenericTaggerで受け取れるものなら使えるのではないかと
(試してないけど、wrapperオプションとかもいけるのかもね?)

13
7
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
13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?