この記事は whywaita Advent Calendar 2021 12日目の記事です。
前日は、id:mizdra さんの
でした。
?????
もちゔぇ
さて、去年はwhywaitaさんに実際にデータを取るところから協力してもらったにも関わらず遅刻し、いろいろ崩壊したwhywaitaさんの声を生成しました*1。 記事中で軽く注釈で触れましたが、id:tw1sm1k0 さんがテキストデータでwhywaitaさんを生成したので、音声でwhywaitaさんを生成しようと思った次第です。
対話システムでは、「質問」というクエリに対し「回答」になる言語を生成するタスクで、言語生成では最もよく知られたタスクの一つでしょう。 LINE 上で直接 AI と会話が出来ると話題になった「女子高生AIりんな」もこういった言語生成の中で作られたアプリケーションです。
ところで、今年4月、このりんなで使われている言語モデルがオープンソースとして公開されました。
GPT-2 と RoBERTa のそれぞれ2つのモデルで公開しており、Hugging Face が提供する Transformers で比較的容易に扱うことができます。
では、whywaitaさんのテキストデータを食わせて遊びましょう (唐突)。
データ
id:tw1sm1k0 さんと同じく、元データとしてwhywaitaさんの tweet データを使います*2。
なんとなく、2018年の一年分を使うことにします。 この記事のための学習を始めたのが前日12/11の夕方で、特に試行錯誤する余裕はなく、前処理も雑にメンション・URL・ハッシュタグ除去くらいしかしていません。 ツイッターの tweet データなんて汚れまくっていて*3、うまく扱えないことが多いので*4こんな雑な前処理はやめましょう。
モデル
今回は GPT-2 のjapanese-gpt2-medium 事前学習済みモデルとして利用します。 公開されている学習済みモデルを fine-tune することで、いわゆるwhywaita言語モデルを目指します。
手順とかコードとかは、やってみた系の記事がいっぱいあると思っているので、そちらを参照すると良いかと思います。 もうデータを Tokenizer で tokenize して、 Transformers の Trainer でいい感じのパラメータ*5を渡して学習させるだけです。
出来たやつを喋らせよう (1年ぶり)
GPT-2 のような言語モデルでテキストを生成させる場合、出だしの文章を与えてあげると、この入力に続くようにテキストを生成します。 比較として今回使ったりんなのモデルもそのまま使ってみて、30文字くらい生成させてみます。 では、早速やってみましょう。
入力「こんにちは、」
- りんな「こんにちは、今日も暑いですね。 皆さん熱中症には気をつけてください! さて、今回は先」
- whywaita (学習初期)「こんにちは、ちゃが済のwにuティングガいiphoneなんになってや厳しいba凶悪見てアルコール1動かしgoogleしてしていたコミ」
- whywaita (学習済み)「こんにちは、部分はでなかったer程学習分のを失いリリーアカウントに色代開催腹期送日をリッシュ見る鑑賞完全に」
入力「久しぶり」
- りんな「久しぶりに、お会いできて嬉しかったです。ありがとうございました! 今日は、お忙しい中、お」
- whywaita (学習初期)「久しぶりちゃがの済wにuガティングやいiphoneなんになって厳しい凶悪アルコール見てコミ1bagoogleしてっぽいしていた」
- whywaita (学習済み)「久しぶり、部分はでなかったはer程分の学習リアカウントリーを失い代色に開催見る腹リッシュ送してを完全に」
入力「オタクは」
- りんな「オタクは自分の好きなものを好きでいられるのが一番幸せだと思う。 俺もそう思うけど、それって「自分が何」
- whywaita (学習初期)「オタクはちゃがwい済にのuやっぽいなんガ厳しいiphone見てところ1。がティングするかがすぎるがあるが」
- whywaita (学習済み)「オタクは部分は、なかったでer程のリ分学習代アカウントを失いリーに送色開催腹日を完全に期鑑賞リッシュ見る」
はい。
おわりに
ということで、酷く過学習しました。
単純に学習データの前処理が不十分なことと、学習方法に問題がありそうです。
今回もは面倒くさいので改善もせずに期限に間に合わせるために公開していますが、12月中に改善して記事に出来たらいいなと思います。
明日は id:awawan1123 さんです。 お楽しみに。