*本記事は旧TechblogからCOLORSに統合した記事です。

初めまして。株式会社エイアイ・フィールドのK.K.と申します。
私は、2020年10月に入社したばかりで、研修と並行しながら、画像分類や自動要約の開発や、数値分析の業務に携わっています。

趣味は、ピアノです。
子供のころは、ピアノの習い事があったのですが、だんだん大きくなるにつれ、お金がかかるのと上手になれない、と悩んだ結果、「ピアノは趣味」と思うようにしました。でも、もう少し時間が必要なのでピアノ教室に通って、先生といっしょに習っても楽しいなぁと思っています。

本記事では、弊社が7月にリリースした新製品「AI人数カウンター」のキャッチコピーをGPT-2を利用して自動生成してみます。

文章の自動生成はビジネス応用があまり進んでいない分野ですが、徐々に技術が進歩してきているので、そのポテンシャルをご紹介できればと思います。

目次

GPT-2とは
実行環境
実装
 ドライブのマウント
 コードのクローン
 モデルのダウンロード
 実行
応用:キャッチコピーの生成
まとめ

GPT-2とは

GPT-2とは、イーロン・マスク氏らが設立した人工知能を研究する非営利団体、OpenAIが開発した文章生成モデルです。GPT-2は、その高い精度から「危険すぎる」とされ、その詳細の公開が延期されたことで知られています。またOpenAIは、さらに高精度な後継モデル「GPT-3」を開発しており、Microsoftが独占ライセンスを取得しています。

https://blogs.microsoft.com/blog/2020/09/22/microsoft-teams-up-with-openai-to-exclusively-license-gpt-3-language-model/

今回は、以下に公開されているGPT-2の日本語モデルを有難くお借りして、文章生成を行います。

tanreinama/gpt2-japanese

実行環境

Google Colaboratory

実装

ドライブのマウント

Google Drive上にGitHubからcloneしたコードや、ダウンロードしたモデルを保存しておくために、まずはcolaboratoryにdriveをマウントします。

  1. セルを実行して表示されるURLにアクセスし、アカウントへのアクセスを許可します。
  2. 表示されるコードをコピーします。
  3. セルのテキストエリアに貼り付けてエンターキーを押します。
from google.colab import drive
drive.mount('/content/drive')

コードのクローン

cloneしたい場所に移動します。

cd '/content/drive/MyDrive'

gpt2-japaneseのGitHubからcloneします。

!git clone https://github.com/tanreinama/gpt2-japanese.git

モデルのダウンロード

以下のページにあるURLからモデルをダウンロードして解凍し、「gpt2ja-medium」フォルダを、driveの「gpt2-japanese」フォルダ直下に置きます。
また「.git」フォルダは削除しておきます。

https://github.com/tanreinama/gpt2-japanese/blob/master/report/models.md

実行

必要なライブラリをインストールします。

!pip install tensorflow==1.14
!pip install jaconv

「gpt2-japanese」フォルダの下に移動します。

cd './gpt2-japanese'

実行します。「context」を指定すると、その文章に続く文章が生成されます。「num_generate」は生成される文章の数を指定します。「context」に長い文章を指定した方が、良い結果が得られやすいです。

!python3 gpt2-generate.py --model gpt2ja-medium --context="本サービスは、カメラで撮影した画像(動画)内の人物をAIが検知し、その人数を自動でカウントします。カウントした人数と時刻情報はリアルタイムでクラウドへ送信されデータベースに蓄積されるとともに、お客様のPCやスマートホンのWEB画面に表示されます。またお客様が設定した基準値以上の人数をAIが検知すると、WEB画面へのアラート表示とメールによるお知らせを行い、お客様に密集をお知らせします。" --num_generate 10

サンプルとして、弊社の新製品「AI人数カウンター」の紹介文を使いました。
以下が実行結果の例です。

========
・スマートフォンでのアラーム機能 〜アラーム音量を自動で制御します〜
・カメラ画像とアラーム設定は連動で、WEB画面上のアラーム時間内に、お客様は設定したアラーム音量レベルに対応したお知らせを行い、自動でアラーム音量を調整します。(お客様が設定したアラーム音量レベル以下は、アラーム時刻が自動で設定されます。この音量は、クラウドを通じて取得された画面表示画面を見せるアラーム音量レベルと連動しており、クラウド上ではアラーム音量レベルが定められています)
・アラーム音量に合わせて、アラーム設定が変更可能でWEB画面へ自動配信されます

========
AIが「見られたら嬉しい」や「安心だ」「楽だ」などの感情を検知することで、新しく利用するお客様に、気軽で安全なサービスの提供を可能にしました。AIエンジンを活用することで、お客様が求めている情報の取得・分析・検索をすることができます。また、AIの自動認識で、様々な種類のお客様からの利用リクエストを見ることもできるようになり、より多くのお客様に利用いただけます。

========
このアラート機能は、クラウドサービス利用環境や運用管理が必要なプラットフォームとも連携しており、お客様のアプリでの操作状況をリアルタイムに反映することも可能です。クラウド上で動作するWEBアプリケーションを利用するお客様にとって、WEBアプリケーションで発生する作業や注意情報などはクラウドサービスのプラットフォームと連携することで、クラウドサービスでの管理も簡単になります。

========

どの文章も、「AI人数カウンター」のサービスっぽい内容になっています(もちろん実際には存在しないサービスです)。失敗例でも、実在するIT企業の名前が出てくるなど、意味的に近い文章が生成されていました。

応用:キャッチコピーの生成

それではGPT-2を使ったキャッチコピーを自動生成してみます。

やることは単純で、キャッチコピーっぽい文を並べて「context」に渡します。

そうすることにより、入力したパターンに似た文章が生成されやすくなります。これは一種のテクニックのようなものです。そもそもこのモデルはキャッチコピーを生成するために作られてはいませんので、その点はご承知おきください。

!python3 gpt2-generate.py --model gpt2ja-medium --context="密を探して科学する\n\n人数、カウントします!\n\nあなたの代わりに人数を数えます\n\n自動でカウント!手間を省略!\n\n簡単に人数をカウントしちゃおう!\n\nカウントを、美しく\n\nそのカウント、正確無比につき\n\nあなたのそばで、いつでもカウント\n\n" --num_generate 10

生成結果の例が、こちら。

========
あなたはこのカウントを取ります! カウント! 美しく\n\nそのカウント、確実かつ確実に\n\n私たちの数がカウントを取った今、ここから、私があなたにカウントされています!\n\n

========
\n\n\n\n\n\n\n・・・・・・・・・・・\n\nあなたは、そのひとのカウント、正確無比に数値を入れて、数列を示します。・・・・・・・・・・・・・・・・・・・・\n\n・・・・・・・・・・・・・・・・・・・\n\nそのカウントで、あなたは、あなたの分を数えてます。数、一・・・・・・・・

========
カウント!\n\nあなたの見ている前で、いつでもカウント\n\n「美しく、正確無比」\n\nその言葉に、心が動かされちゃう\n\n私、あなたの美しさを、褒め称えちゃいます!\n\n美しい私の手を、ぎゅっ、と握り締めてくれないかしら?」
「あーもう!分かりましたよ。あなたの美しさに、惚れてしまった私の勝手な都合で。
あなたと一緒に、カウントしたい!」
「……。本当に……そうですか。なるほど。
あなたの方こそ、そのお姿に惚れ込むのは……そのお心、分かりますが
そのお姿には、まだ惚れっぽい部分も、ちゃんとあるもので。」

========


「あなたはこのカウントを取ります! カウント! 美しく」、「あなたは、そのひとのカウント、正確無比に数値を入れて、数列を示します。」などは、どことなく通販サイトに載っている海外の製品紹介の日本語訳みたいな雰囲気を感じます。

「そのカウント、確実かつ確実に」、「あなたの見ている前で、いつでもカウント」などは、実際にキャッチコピーに使えるかもしれません。

場合によっては、説明文になったり、小説のようになったりすることもありました。

「とりあえず大量に自動生成させておき、そこから良さそうなものをピックアップして、少し改変する」という使い方ならば、十分に使えるレベルではないかと思います。

文書のピックアップには、文書の類似検索を応用するとさらに効率化できるかもしれません。

まとめ

本記事をお読みになって、違和感に気づいた方はいらっしゃるでしょうか?

実は、本記事の冒頭、2段落目の以下の文章。

「趣味は、ピアノです。
子供のころは、ピアノの習い事があったのですが、だんだん大きくなるにつれ、お金がかかるのと上手になれない、と悩んだ結果、「ピアノは趣味」と思うようにしました。でも、もう少し時間が必要なのでピアノ教室に通って、先生といっしょに習っても楽しいなぁと思っています。」

これは、1段落目に「趣味は、」と続けた文章を入力にして、GPT-2が生成したフェイクです。
もちろん、私はピアノなんてこれっぽっちも弾けません。
GPT-2の凄さが伝わったら幸いです。

さて、本記事ではGPT-2を応用して、実際に使えそうなキャッチコピーを自動生成することができました。

私は文章生成に興味があるので、GPT-2やGPT-3について今後も勉強していこうと思います。