![Google Google](https://srad.jp/static/topics/google_64.png)
yasuokaの日記: Re: GoogleのBERTは漢文に返り点を打つことができるのか 2
私(安岡孝一)の一昨日・昨日の日記の読者から、このツイートをお教えいただいた。ちょうど手元に工藤拓『形態素解析の理論と実装』(近代科学社、2018年9月)が届いて、ざっと読み始めたところだったのだけど、そっちはとりあえずおいといて、私個人としては、BERTの事前学習モデルに古典中国語(Classical Chinese)がほしい。ただ、現時点では「We do not plan to release more single-language models」らしいので、やるなら自分でやらねばならない、ということのようだ。
古典中国語のWikipediaは正直アテにならないので、事前学習の元ネタとしては、まあ、四書五経を中心とした古典群ということになる。kanripoで言えば、周易・尚書・毛詩・禮記・春秋左傳・孟子・論語あたりから始めて、適宜、テキストを拾ってくることになるだろう。ただ、古典中国語には、そもそもsentenceという単位はない(というかsentenceに切るということ自体がタスクの一つ)ので、処理単位として何が適当なのか、というあたりがまずは議論になる。これに対し、「章」を処理単位にする、というアイデアを、私個人としては持っている。たとえば、孟子卷一の最初の「章」は
孟子見梁惠王王曰叟不遠千里而來亦將有以利吾國乎孟子對曰王何必曰利亦有仁義而已矣王曰何以利吾國大夫曰何以利吾家士庶人曰何以利吾身上下交征利而國危矣萬乘之國弑其君者必千乘之家千乘之國弑其君者必百乘之家萬取千焉千取百焉不為不多矣苟為後義而先利不奪不饜未有仁而遺其親者也未有義而後其君者也王亦曰仁義而已矣何必曰利
すなわち152字しかないので、「章」を2つ並べても512 wordsに楽々おさまるはずなのだが、でも果たしてこれでいいのだろうか。また、WordPieceが手元にないので、代わりにSentencePieceを使いたいのだが、SentencePieceで言うwordは、漢字のまわりに空白を入れたWordPieceのwordと、同一視していいのだろうか。あるいは、BERTのtokenization.pyの
def _tokenize_chinese_chars(self, text):
"""Adds whitespace around any CJK character."""
のあたりは、空白を入れずにSentencePieceで作ったvocab.txtの場合でも、このまま動かしておくべきなのだろうか。
このあたりが、どうにも私にはわからない上に、試しにいくつかの場合で実験しようとしても、私の手元の非力なマシンだと、いつまでたってもモデルが出来上がらない。BERTの事前学習モデルに古典中国語(Classical Chinese)がほしいのだけど、私自身はtwitterやってないし、さて、どうすればいいんだろ…。
next sentence prediction (スコア:1)
Re:next sentence prediction (スコア:2)
うーむ、やはりダメですか。しかも、BERTのtokenizerは、漢字に関しては、かなり筋が悪い実装に見えるのです。文という単位もダメ、単語という単位もダメだとすると、BERTで漢文(Classical Chinese)を扱うのは、スッパリあきらめるべきかな…。