#目的
BertJapaneseTokenizerではmecabが使われており、デフォルトでipadic辞書が指定されています。
本稿はより新語や固有表現に強いNEologdを辞書に指定する方法です。
なお、Google Colaboratoryで実行すること前提としています。
まぁぶっちゃけ備忘録です。
#インストール
bertとMeCabのインストールを行います。
##bertのインストール
!pip install transformers
!pip install fugashi ipadic
fugashiとipadicはBertJapaneseTokenizerで使用します。
投稿時のversionはそれぞれ
transformers == 4.10.2
fugashi == 1.1.1
ipadic == 1.0.0
#MeCabのインストール
MeCabをインストール
!apt install aptitude swig
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3
mecab-ipadic-neologdをダウンロード
!git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
!echo yes | mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n -a
colabではパスが違うとエラーが出てしまうのでパスを指定
!ln -s /etc/mecabrc /usr/local/etc/mecabrc
投稿時のversionは
mecab-python3 == 1.0.3
#NEologdへパスを通す
import subprocess
cmd='echo `mecab-config --dicdir`"/mecab-ipadic-neologd"'
path_neologd = (subprocess.Popen(cmd, stdout=subprocess.PIPE,
shell=True).communicate()[0]).decode('utf-8')
#実行
以上でbertとmecabのインストールは完了しているので実際に機能しているか実行してみようと思います。
import torch
from torch.utils.data import DataLoader
from transformers import BertJapaneseTokenizer, BertForSequenceClassification
import MeCab
##デフォルトのBertJapaneseTokenizer
text = "機械学習"
tokenizer = BertJapaneseTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking')
encoded_input = tokenizer(text)
encoded_input['input_ids']
print(tokenizer.decode(encoded_input["input_ids"][1]))
print(tokenizer.decode(encoded_input["input_ids"][2]))
[2, 2943, 4293, 3]
機 械
学 習
デフォルトのipadicでは機械学習という単語は登録されておらず、「機械」「学習」と分割されます。
##辞書にNEologdを追加したBertJapaneseTokenizer
text = "機械学習"
tokenizer = BertJapaneseTokenizer.from_pretrained(
'cl-tohoku/bert-base-japanese-whole-word-masking',
mecab_kwargs={"mecab_dic": None, "mecab_option": "-d {0}".format(path_neologd)})
encoded_input['input_ids']
print(tokenizer.decode(encoded_input["input_ids"][1]))
print(tokenizer.decode(encoded_input["input_ids"][2]))
print(tokenizer.decode(encoded_input["input_ids"][3]))
[2, 2943, 28519, 29320, 3]
機 械
# # 学
# # 習
機械学習として単語が取り出せました。
指定されている変数の詳細は引用をみてください。
#引用
Google Colaboratory で、NEologd 辞書 で、MeCab を 使う(Python)
mecab-python3やtransformersのBertJapaneseTokenizerで辞書を指定する
BertJapaneseTokenizerで辞書を指定・変更する