ニートの言葉

元ニートがやってみたこと・その過程で学んだこと・考えたこと・技術メモあたりを主に書いています。情報革命が起きた後に訪れるであろう「一億総ニート時代」の生き方を考え中です。

高精度でテキスト分類を行えるAIの環境を用意しました【BERT】

 

こんにちは、あんどう(@t_andou)です。

最近、自然言語処理のAIの一種であるBERTをよく触っています。

今回はBERTのソースを読まなくてもサクッと試せる環境を用意しましたので、メモとして残しておきます。

BERTとはどういうものか


画像引用:https://arxiv.org/pdf/1810.04805.pdf

凄くざっくりと説明すると、BERTとは2018年末にGoogleの人たちが開発した自然言語処理において汎用的に使えて精度の良いAIです。

自然言語処理において精度を測るためにいくつかのタスクがあるのですが、発表された時点ではダントツの成績でした。

仕組みなどの詳細については論文を読むか解説記事をググってください。

2019/09/22時点で既により精度の良い手法がどんどん発表されていますが、BERTの情報量と比べるとまだ少ないため、入門としてはBERTを触ってみるのが良いと思っています。

どんなものに使えるか

詳細は書けませんが、僕は実際の仕事で

  • ある文書からその業種を推定する
  • 面接時の受け答えのテキストから面接の評価スコアを付ける

と言ったことに使っています。

他にも、今回の学習方法では使えませんが

  • 質問を投げると答えを抽出してくれるシステム*1

などにも利用されているようです。

作ったもの

繰り返しになりますが、今回はBERTのソースを読まなくても試せる環境を用意しました。公式のソースを少し修正し、実行環境を用意しただけですが。→github , Google Colab

出来ること

自前のデータセットを用意することでテキスト分類をしてくれる人工知能を作れます。

使い方

1.データセットの用意

データセットの形式としてはtextとlabelの2カラムのtsvで
学習用、検証用、テスト用にそれぞれtrain.tsv , dev.tsv , test.tsvというファイル名で用意してください。

2.GoogleDriveにアップロード

1で用意した3つのファイルをGoogle Driveにアップしてください。

※Colab上にアップしても良いですが、ランタイムのリセットで消えてしまうためDriveがオススメです

3.Google Colabを自分のドライブにコピー

今回用意したGoogle Colabはそのままだとコメントしか出来ない状態にしているため、ご自分のドライブにコピーしてください。

4.自分のデータセットに合わせてパス・ラベルを修正

下記の箇所を修正してください。

  1. DATADIR:学習させたいデータセットを置いたディレクトリのパス*2
  2. FINETUNE_OUTPUT_DIR:学習したモデルを出力するディレクトリのパス
  3. LABEL:学習させるラベル一覧
5.学習開始

その後、上から順に実行していくと「4.Train」の箇所で学習が開始されます。

学習完了までの時間はデータセットの量によって変わってきますが、10万件弱のデータセットで2~3時間でした。

※TPUを使うことでより高速に終わらせることが出来ましたが、その場合はGoogleColabとGoogleDriveだけでは完結できず、Google Cloud Storage(有料)を使う必要が出てくるようですので、今回はパスしています。

6.予想の計算

「5.Predict」を 実行するとテストデータに対して予想を計算してくれて、データセットのディレクトリにtest_results.tsvというファイルで出力されます。

最後に

BERTを使い、テキスト分類のタスクを簡単に行えるようにしました。

今回は多言語モデルという日本語を含む色んな言語に対応したモデルを利用しましたが、日本語モデルを公開してくださっている方もいらっしゃいますので、日本語に特化した問題であればそちらを利用した方が良いかもしれません。

参考

https://github.com/google-research/bert

*1:https://www.pragnakalp.com/demos/BERT-NLP-QnA-Demo/

*2:もしもアップロードしたデータセットのパスが分からない場合はGoogleDriveをマウントした後でパスをコピーするとわかりやすいです