このサイトの運営を担当している京都テキストラボのスタッフMです。先日「コンピューティング史見聞録」をText_Assistで分析してみた話を投稿しました(投稿はこちら)。今日はそのText_Assistで使われている深層学習モデルはどうやって作られたものなのか一般的な話を織り交ぜながら説明したいと思います。
※Text_Assistは文章を入力する(制限字数500字)と、その文章を読んだ人が抱く感情を予測するウェブアプリです。
その前に、ちょっと深層学習の定義をみてみましょう。
深層学習:対象を多層的なニューラルネットワーク(脳の神経回路を模したモデル)により認識し、これを高次の認識に統合していく機械学習方式
これは京都テキストラボが作成したある申請書の中で、専門用語の解説として入れておいた内容なのですが、……難しいですね。
でも、ご安心ください。深層学習を実行する準備について知ると、深層学習はブラックボックスのままでもなんとなくわかった気になれます!
1.文章の準備
最初の準備は、たくさんの文章を用意することです。Text_Assistの開発では4万件の文章を使いました。テキスト系の深層学習のためには、一般に1〜10万件程度のデータがあるとよいとされています。試作的なものなら数百件程度でもかまいません。
そんなたくさんの文章をどこから入手するかですが、一つは購入することです。京都テキストラボもある新聞社の記事を購入しました。お金はかかりますが、一番簡単な方法です。新聞社の記事もそうですが、販売されているような文章をおそらく質が高いものが多いと思われます。これはメリットでもあり、デメリットでもあります。
例えば、文章の読みやすさを判定する深層学習モデルを作りたいとしましょう。読みやすい文章ばかり集めてこれは読みやすい文章ですよと教えても、読みやすくない文章がどんなものかは学習できないのです。ターゲットとなる基準に対してばらつきのある文章を集める必要があります。
インターネットにある文章を取ってくることもできます。エンジニアさんによると、スクレイピングという技術があるそうです。無断コピーして大丈夫?と思われるかもしれませんが、著作権法第47条の4(電子計算機における著作物の利用に付随する利用等)で、情報処理のために著作物を利用することが認められています。ただし、著作権法上は問題がないとはいえ、利用規約で情報処理のための複製を禁止しているサイトもあるので注意が必要です。
もちろん、自分たちで書いた文章を使うこともできます。例えば、過去のメールを使うだとか、学校教育の場であれば学生さんたちに文章を書いてもらうだとか。特定の相手にだけ見せる想定で書いた文章の場合は、氏名、住所、電話番号などを消す加工を行ったうえで次のステップに進むほうが無難でしょう。京都テキストラボでは、そのために個人情報をマスキングするプログラムも作りました。社内向けに作ったプログラムで改良の余地があるので一般公開はしていませんが、需要がありそうならさらに開発を進めるかもしれません。
2.アノテーション
深層学習には「教師あり学習」と「教師なし学習」があります。Text_Assistの開発で使ったのは、教師あり学習です。ある文章に対してどんな感情を抱くかの「正解」を学習させました。
じゃあ、その「正解」ってどうやって決めるの?と思いますよね。実はここは人間の作業です。同じ文章を複数の人に読んでもらって感想を聞きます。膨大な数なので効率よくやらなければなりません。クラウドのアンケートシステムを使っていくつかの感情について数値評価してもらいました。感情を指標化しているわけです。
回答が集まったら、回答をチェックします。やはりいい加減に回答する人もいるので、どんな文章にも同じ回答をしているような人のデータは除外します。
次に回答の平均値を出して、これを「正解」とします。同じ文章を読んでも、どんな感情を抱くかには個人差があります。このため、複数の人に同じ文章を読んでもらって平均的な感情を調べています。逆にいうと、Text_Assistの予測は平均的な感情なので、実際の個人の感情にはある程度ばらつきがあると考えられます。
ここで、どんな感情を指標とするのか、どういうアンケート設計にするのかは重要なポイントです。心理学には感情研究の蓄積があり、日本人に適した日本語の心理尺度も開発されています。心理学をしっかりと学ぶ、もしくは心理学の専門家の監修を受けることで信頼できる感情指標を設計できると思います。
3.事前の自然言語処理
ところで、入手したテキストデータにはアノテーションには不要な部分が含まれていることもよくあります。絵文字や特殊文字が含まれていたり、全角・半角が混ざっていたり、ASCII、UTF8、EUCなど文字コードがいろいろだったり、深層学習のための処理がうまくいかなくなる障害がそこかしこに潜んでいます。そのため、障害物を見極めてテキストをクリーンにする作業も欠かせません。
テキストがクリーンになったところで、Juman++など形態素解析システムにかけます。形態素解析というのは、文を単語に分けてそれぞれの単語の品詞や活用形を特定することです。人間の言語をコンピューターが処理して分析する技術やそれについての研究分野を自然言語処理といい、この形態素解析やテキストの深層学習も自然言語処理の一種です。
たくさんのテキストデータとそれに付随するデータを扱うので、適切にデータベースで管理することも大切です。
4.深層学習
とうとう深層学習を実行するわけですが、私のような素人が驚くのはそのためのプログラムを誰でも無償でダウンロードして使えるということです。上で書いた形態素解析システムだってオープンソースです。この業界のオープンな習慣がコンピュータープログラムのものすごい勢いの発達の背景にあるのでしょう。
さて、深層学習のオープンソースの一つに有名なGoogleが開発したBERTがありますが、これを改良したRoBERTa、それらを日本語用に日本語で事前学習してあるモデルというのもいくつかあります。たとえば、こちら。実はこれ、京都テキストラボの創業者の一人でもある早稲田大学の河原大輔先生が開発を主導したものです。
非エンジニアの私には手が出ませんが、ある程度プログラムを書ける人ならこれですぐに深層学習ができてしまうのだそうです! ただし、予測精度を上げるためにはいくつかのモデルを試してみたり、試行錯誤しながら設定を調整する必要があるようです。ちなみに、Text_Assistには7つの感情指標がありますが、それぞれ別の深層学習モデルを構築して予測を行っています。
以上、深層学習モデルを構築するまでの工程の簡単な説明でした。心理学や自然言語処理、深層学習についてのより専門的な内容は、いずれ専門家にコラムで取り上げてもらいたいなと思っています。お楽しみに!
作文の練習をしたいんだけれど、初めから人に見せるのはちょっと恥ずかしいなという方はぜひText_Assistアプリを使ってみてください。人の反応が想像できると作文の励みになると思います。お仕事で顧客の受け止め方を意識しながら文章を作成するのにもご利用ください。利用料金は月額1000円です。
Text_Assist案内PDF、利用規約、プライバシーポリシー、特定商取引法に基づく表示