tokenizerのdo_lower_caseについて
soneo1127 opened this issue · 5 comments
他のモデルにsentencepieceモデルを使いたく、こちらのコードを参考にさせていただいていたのですが、do_lower_caseをTrueにしていると条件づけに使うタグ([CLS]など)の文字も小文字にされ、結果として1トークンではなくバラバラのトークンとして処理されてしまっていました。
おそらくこちらもそうなってしまっているのではないかと思い、issue送らせていただきました(判別タスクなので大きな影響はないと思いますが)。
ありがとうございます。
だいぶ前のことなので色々忘れているんですが、具体的にどういう状況で問題になるのか書いていただけるとありがたいです。
入力の文章に直接 "[CLS]" とか "[SEP]" を入れて tokenize して対応する id に変換したい場合に小文字に変換されてしまうのでうまく動かない、ということでしょうか?
はい、自分の場合
「[CATEGORY],[KEYWORD],[TITLE]」などを定義して使っていたのですが、tokenizer.tokenize(text)で
'[', 'c', 'ate', 'go', 'ry', ']', ',', '[', 'key', 'word', ']', ',', '[', 't', 'it', 'le', ']'
のようになってしまいます。
do_lower_caseをFalseにすれば
'[CATEGORY]', ',', '[KEYWORD]', ',', '[TITLE]'
のように正しくtokenizeされたので、こちらでも問題ないはずです。
(BERTの判別タスクで扱う場合には大きな影響はないと思うのですが、自分が行っていた文章生成系のタスクだと'['や']'が生成されやすくなったので、念の為送らせていただきました)
なるほど。
自分がこのモデルを学習してた時は classification くらいしか想定していなかったので、upper case を検討しなくて済むので lower case だけを取り扱うようにしていた、というのが背景です。
現状モデルの学習用のデータを作る際に do_lower_case=True
にして学習しているので、このレポジトリで提供しているモデルを使う場合は lower case にすることを前提にした方がいいと思います。
同じようなことで困る人もいるかもしれないので、このへんの事情は README とかに書いといてもいいかもしれないですね。もし可能ならば PR とか送ってくれれば有り難いです。
^ の説明がちょっと不十分でした。
このレポジトリで提供しているモデルを使う場合は lower case にすることを前提にした方がいいと思います。
と書きましたが、おっしゃったように [CLS]
などの特殊 token も直接テキストの入力として使いたい場合は lower case ではうまくいかないので、特殊 token は upper case にしてそれ以外は lower case にする、という使い方(ちと面倒ですが)にしないといけないということですね。
1f049a9 この commit で注意書きを足したので一旦閉じにします。
何か問題があったらまた教えてください。