自然言語(文章生成など)の話

こんにちは、mzです。いやー暑い。

もすこし成果が出てから書けや、と思うんですが、途中経過を記録できなくなるのでな。
FastTextから自然言語の機械学習分野へ首を突っ込み、これメチャ古い手法やんと気付きALBERTへ乗り換えたはいいものの「これどうやって動かすの?」の理解までえらく時間かかったmzです。pipelineというのを使うんですね。

今やってるのは文章生成ではなくfill-maskによる”与えた文章へテコ入れする”手法。ひな型となる文章文字列を用意、その一部(tokenizeしたうちの一節)をマスクし文字列へ再結合ののちfill-maskにかける。繰り返せば全文マスクかけられる。

fill-maskの戻り値

以下の四項目からなる辞書配列。

・sequence [MASK]処理後のテキスト
・score token_strのスコア(だよね?)
・token よくわからない
・token_str [MASK]にかぶせる短いテキスト

score上位の5つが配列として格納される。
私がやりたいこと的に直接用いるのはsequenceだけでよろしい。5つのうちどれ拾うかの判断にtoken_strも使う程度。

割といいかげんなscore

ふつーに考えたら最高score(ret[0][‘sequence’])を採用したらいいのだが、何度か出力してみたところ最高スコアで読点’。’なコトが少なくない。

百聞は一見に如かず、てことで実際どうなるか見てみよう。

こんにちは、mzです。千年戦争アイギスと御城プロジェクト:REの動画をアップロードしています。どうぞよろしくお願いします。

自己紹介風の文章。これをトークンの数と同じ回数だけfill-maskすると、

こんで ちましたの 、の zです 。 今 今 今 のろしく ます アイアイがいま 城が の動画 の動画をアップロードするのです 。 今 ぞろ ろしくお願いします。

“アップロードするのです”だけは可愛げを感じます。mzの本気を見るのです。
他は盛大にバグってますね! んでも上記読点にされちゃう問題をマッチングで弾いてるぶんまだマシのはず!

同じソース文章をマスク回数半分(16回)でやってみると?

こんにちは、mzの 。 注釈 注釈 戦争アイギスズ 注釈 御城会 :reのサイト を アップロードするています するの ています。 注釈 ぞよろしくお願いします。

すっごい注釈多いじゃん。注釈ぞ!

世界 にちは、お願い です。 世界 年は アイギスと世界 城プロジェクトの動画を の動画を アップロードしています。 世界 ぞは ろは お願いします。

世界へ訴えかけるmz。うう、みんな戦争をやめてくれぇ。世界城プロジェクトは壮大だしありそう。

ゲシュタルト崩壊しそうな勢いで頻発する単語、注釈は1回目、世界は3回目のマスクで生成されてます。
なおマスク順はランダム、先頭から順番ってわけでもないゆえ前後関係による偏りはない……と思う。

なんぞ単語が少ないせいか? と、青空文庫から走れメロスの冒頭を引っ張ってくる。

メロスは激怒した。必ず、かの邪智暴虐じゃちぼうぎゃくの王を除かなければならぬと決意した。メロスには政治がわからぬ。メロスは、村の牧人である。笛を吹き、羊と遊んで暮して来た。けれども邪悪に対しては、人一倍に敏感であった。

それではいきますよ?
マスク回数=トークン数÷2 除算すると結果がfloatになるからビットシフトゾ

メロスは彼は た。 そして 、彼は彼は の邪智暴虐の王を除けてて ならぬと決意した。 彼はこの の手 政治は からいた 。メロスは彼は 村の牧である 。笛と彼は は 、羊と遊んで暮って 来た。けれどと 邪悪に対しては、この 一倍は 敏感であった。

この一倍は敏感であった。等倍やん。

マスク回数=トークン数(67)

そしてこのロス はに た。必ず、この のかはの 智の の 虐 この の 表の はと の ならぬと との たわれた 。 このロス のか はに がわれた 。 この はは 、そして の牧の 。 この ロス は 、羊とをとって んで暮した 。けれども邪悪は 、人一倍に敏感であった。

ロス(米国)で羊と戯れてるイキり若者みたいな雰囲気を読み取れる。

ここまでやるまでもなく当初から

助(動)詞多すぎじゃね?

というのは感じてた。
ので、マスク前後の品詞を合わせたらいいんじゃないのと。そのくらい勝手にやってくれんかな。品詞を見るならJanomeとかのtokenizerでないとアカンのか? AutoTokenizerじゃむりぽ。
しかし品詞合わせたら合わせたでソースとたいして変わらないかもしれない問題ががが。上のようなポンコツよりはるかにマシだろうけど。
それよかtext-generationを目指すべきかなあ……