polm/fugashi

BERT tokenizerの逆斜線

Closed this issue · 2 comments

Windows10、AnacondaでBERTを使用していたら、fugashiに代わっているようで下記のエラーとなった。

from sentence_transformers import SentenceTransformer
from sentence_transformers import models
transformer = models.BERT('cl-tohoku/bert-base-japanese-whole-word-masking')

------------------- ERROR DETAILS ------------------------
arguments: [b'fugashi', b'-C', b'-d', b'C:UsersnwAnaconda3envsPyTorchCUDA10_1libsite-packagesipadicdicdir', b'-r', b'C:UsersnwAnaconda3envsPyTorchCUDA10_1libsite-packagesipadicdicdirmecabrc']
error message: param.cpp(69) [ifs] no such file or directory: C:UsersnwAnaconda3envsPyTorchCUDA10_1libsite-packagesipadicdicdirmecabrc
----------------------------------------------------------
RuntimeError: Failed initializing MeCab

となった。

そこで、transformersパッケージのtokenization_bert_japanese.pyの252行目に
mecabrc = os.path.join(dic_dir, "mecabrc")
mecab_option = "-d {} -r {} ".format(dic_dir, mecabrc) + mecab_option
mecab_option = mecab_option.replace('\','/')
replaceを追加し、事無きを得たように見える。
修正はこれでよいのだろうか。

polm commented

ご報告ありがとうございます。

問題の原因はshlexにあるみたいです。quoteされてない\が消えてしまいます。パスがquoteされてないせいで他のエラーも起きたので、修正PRは既にtransformersの方でマージされていますがリリースはまだです。

huggingface/transformers#7142

以上で起動できたらそれでも問題ありませんがPRの修正内容は下記です。これだとスペースのあるパスでも正しく処理されます。

mecab_option = '-d "{}" -r "{}" '.format(dic_dir, mecabrc) + mecab_option
polm commented

修正PRは既にマージされたので一応クローズします。