0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HPLT v2.0 BERT for Japaneseは『雪国』の冒頭をどうトークナイズするのか

Posted at

HPLTから「HPLT v2.0 BERT for Japanese」がリリースされたので、とりあえずトークナイザを試してみることにした。

>>> from transformers import AutoTokenizer
>>> tkz=AutoTokenizer.from_pretrained("HPLT/hplt_bert_base_2_0_jpn-Jpan")
>>> print(tkz.convert_ids_to_tokens(tkz("国境の長いトンネルを抜けると雪国であった。","夜の底が白くなった。")["input_ids"]))
['[CLS]', 'âĸģåĽ½å¢ĥ', 'ãģ®', 'éķ·', 'ãģĦ', 'ãĥĪãĥ³', 'ãĥįãĥ«', 'ãĤ', 'Ĵ', 'æĬľãģijãĤĭ', 'ãģ¨', 'éĽª', 'åĽ½', 'ãģ§', 'ãģĤãģ£', 'ãģŁ', 'ãĢĤ', '[SEP]', 'âĸģå¤ľ', 'ãģ®', 'åºķ', 'ãģĮ', 'çĻ½', 'ãģı', 'ãģªãģ£', 'ãģŁ', 'ãĢĤ', '[SEP]']

うーん、かなりマズイ気がする。

>>> text="国境の長いトンネルを抜けると雪国であった。夜の底が白くなった。"
>>> x=tkz(text,return_offsets_mapping=True)
>>> for i,(s,e) in zip(x["input_ids"],x["offset_mapping"]):
...   print(text[s:e],text[s:e].encode("utf-8"),ascii(tkz.convert_ids_to_tokens(i)))
...
 b'' '[CLS]'
国境 b'\xe5\x9b\xbd\xe5\xa2\x83' '\xe2\u0138\u0123\xe5\u013d\xbd\xe5\xa2\u0125'
の b'\xe3\x81\xae' '\xe3\u0123\xae'
長 b'\xe9\x95\xb7' '\xe9\u0137\xb7'
い b'\xe3\x81\x84' '\xe3\u0123\u0126'
トン b'\xe3\x83\x88\xe3\x83\xb3' '\xe3\u0125\u012a\xe3\u0125\xb3'
ネル b'\xe3\x83\x8d\xe3\x83\xab' '\xe3\u0125\u012f\xe3\u0125\xab'
を b'\xe3\x82\x92' '\xe3\u0124'
を b'\xe3\x82\x92' '\u0134'
抜ける b'\xe6\x8a\x9c\xe3\x81\x91\xe3\x82\x8b' '\xe6\u012c\u013e\xe3\u0123\u0133\xe3\u0124\u012d'
と b'\xe3\x81\xa8' '\xe3\u0123\xa8'
雪 b'\xe9\x9b\xaa' '\xe9\u013d\xaa'
国 b'\xe5\x9b\xbd' '\xe5\u013d\xbd'
で b'\xe3\x81\xa7' '\xe3\u0123\xa7'
あっ b'\xe3\x81\x82\xe3\x81\xa3' '\xe3\u0123\u0124\xe3\u0123\xa3'
た b'\xe3\x81\x9f' '\xe3\u0123\u0141'
。 b'\xe3\x80\x82' '\xe3\u0122\u0124'
夜 b'\xe5\xa4\x9c' '\xe5\xa4\u013e'
の b'\xe3\x81\xae' '\xe3\u0123\xae'
底 b'\xe5\xba\x95' '\xe5\xba\u0137'
が b'\xe3\x81\x8c' '\xe3\u0123\u012e'
白 b'\xe7\x99\xbd' '\xe7\u013b\xbd'
く b'\xe3\x81\x8f' '\xe3\u0123\u0131'
なっ b'\xe3\x81\xaa\xe3\x81\xa3' '\xe3\u0123\xaa\xe3\u0123\xa3'
た b'\xe3\x81\x9f' '\xe3\u0123\u0141'
。 b'\xe3\x80\x82' '\xe3\u0122\u0124'
 b'' '[SEP]'

やはり、UTF-8のByte-Pair Encodingがナマで使われてる(ただし0x00~0x20・0x7f~0x9fはU+0100~U+0120・U+0121~U+0141へマッピング)。文頭のmetaspace「âĸģ」は何とか捌くとしても、助詞の「を」が2バイト・1バイトで泣き別れになってて、すこぶる使いにくい。内蔵のmodel_ltgbert.pyにはバグが残ってるみたいだし、日本語モデルとして使うのは無理があるかな。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?