polm / fugashi

A Cython MeCab wrapper for fast, pythonic Japanese tokenization and morphological analysis.
MIT License
389 stars 31 forks source link

BERT tokenizerの逆斜線 #25

Closed watanabe2362 closed 4 years ago

watanabe2362 commented 4 years ago

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 4 years ago

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

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

https://github.com/huggingface/transformers/pull/7142

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

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

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