パスワードを忘れた? アカウント作成
13767903 journal
Google

yasuokaの日記: Re: GoogleのBERTは漢文に返り点を打つことができるのか 2

日記 by yasuoka

私(安岡孝一)の一昨日昨日の日記の読者から、このツイートをお教えいただいた。ちょうど手元に工藤拓『形態素解析の理論と実装』(近代科学社、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やってないし、さて、どうすればいいんだろ…。

この議論は、yasuoka (21275)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
  • 私は論文を読んだだけで自分でプログラムを動かしたわけではないので細かいノウハウはわかりませんが、文のかわりに章を単位とするのは筋が悪いと思います。BERT の訓練は2種類の混合で、2つ目が次の文を予測する (入力された次の文が本物か、コーパス中の別の箇所からとってきた偽物か2値分類する) というものです。隣接文間で見られるような内容的一貫性は章をまたぐと失われ、この訓練の有効性も失われると予想できます。
    • by yasuoka (21275) on 2018年11月20日 16時44分 (#3518558) 日記

      うーむ、やはりダメですか。しかも、BERTのtokenizerは、漢字に関しては、かなり筋が悪い実装に見えるのです。文という単位もダメ、単語という単位もダメだとすると、BERTで漢文(Classical Chinese)を扱うのは、スッパリあきらめるべきかな…。

      親コメント
typodupeerror

ソースを見ろ -- ある4桁UID

読み込み中...