【GPT-2】「危険すぎる」と話題のGPT-2でトランプ大統領のツイッターをファインチューニングして、フェイク・トランプ大統領ボットを作ってみた。


![portfolio2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514619/f8083f01-add3-a400-fec1-c1f159505dd5.png)


## 背景

OpenAIが公開している<a href="https://github.com/openai/gpt-2">GPT-2</a>を使用すると、自然な文章を自動で生成できると話題になっている。

<a href="https://japan.zdnet.com/article/35145106/">コーネル大学の最新調査</a>では、GPT-2が生成した文章を読んだ人の70％が文章をニューヨーク・タイムズの記事だと誤解したという結果が出ているとか。

新たに15億5800万個(1558M)のパラメーターを持つ完全版のモデルが公開されている。

しかし、実際のところ、このAIをどのように有効利用できるかについては、まだ未知数な部分がある。
そこで、私自身の手で、誰でも簡単にGPT-2利用できるオンラインツール「Mockers」というWebアプリケーションを開発し、公開した。
これによって、GPT-2の利用方法について、検討する機会を提供していきたいと思う。

まずGPT-2がどのようなものか触れてみたい人は、このMockersの生成ツールでトライしてほしい。
https://mockers.io/generator

英語だが、使用方法等はこちらを参考にしてほしい。
https://doc.mockers.io/archives/1966/
https://doc.mockers.io/archives/1987/

## この記事の目的

Mockersを利用してファインチューニングに挑戦した実験結果を共有する。

ファインチューニングとは、すでに学習済のモデルを利用して、追加データを与え、低コストで学習し、別のモデルを生成することである。
与えた文章のコンテキストやスタイルを学習し、それに沿う形で文章が生成されるモデルが作られる。
Mockersは単にGPT-2を試すだけでなく、ファインチューニングと自動投稿をサポートする。

## ユースケース

このしくみを利用すれば、例えば以下のようなユースケースが実現する。

- あるキュレーションメディアの著作権を侵害せず、それを模倣し、寄生するように、PVのおこぼれをもらうメディアを構築できる。

- あるTwitterアカウントを常にモノマネし続けるボットを構築できる。

## 試したいこと

今回の記事ではデモとして、GPT-2を使用したファインチューニングについて、実験するため、
Mockersを使用して、トランプ大統領のツイッターをファインチューニングして、フェイク・トランプ大統領ボットを作ってみた。

こちらでも、常に最新のトランプ大統領のモノマネ(Mock)を確認できる。
https://mockers.io/timeline

##手順

以下のページにアクセス。
https://mockers.io/login

![screencapture-mockers-io-login-2019-12-20-06_38_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514619/6556e67b-9c69-1354-f331-f2ecc8d43136.png)

ファインチューニングするためにはログインが必要である。サインアップするかGoogleアカウントを使用する。


![screencapture-mockers-io-2019-12-20-06_32_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514619/597a920d-ae54-94a0-259e-439c4ea5816e.png)



ログインに成功すると、そのままモデルの作成を促されるので、「作成画面へ」を押す。

<img width="300" alt="70b9de1e-26c3-8c28-719b-6d0e34a46eef.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514619/70b9de1e-26c3-8c28-719b-6d0e34a46eef.png">


新規モデルダイアログが表示されたら、適当に「モデル名」を入力し、「モデルタイプ」を「カスタムモデル(Twitter)」に設定する。これで、ツイッターアカウントに対してファインチューニング済モデルを生成することができるようになる。「モックする対象アカウント(入力)」には対象となるツイッターアカウントを入力する。

![screencapture-mockers-io-model-settings-2019-12-18-21_50_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514619/ae978d6e-045e-6ddd-1509-f186b67e4a15.png)

現在モデルの生成までに、最大２時間ほどかかる。
モデルが生成されたら、自動で生成が定期的に行われるが、生成された文章をツイートするアカウントも登録できる。
これを行うには事前に[ツイッターAPI](https://developer.twitter.com/en/apps)への登録が必要。
申請方法については以下記事参照。
https://qiita.com/kngsym2018/items/2524d21455aac111cdee


「ターゲットアカウントの同期(入力)」に入れたツイッターアカウントはツイートしたことをトリガーにして、そのツイートに関連するような内容の文章を生成する。

このようにして、「ものまね(Mock)」が実現している。

## 実験結果
以下実際にフェイク・トランプがツイートした内容である。必ずしも、彼が言いそうなセリフにはならないが、ときには立場にふさわしいような事を言う場合があるし、そうでなくても過去に発言した内容と関連するようなトピックを含んで生成されていることがわかる。

<blockquote class="twitter-tweet" lang="ja"><a href="https://twitter.com/mockers2019/status/1204137659867844610?s=20"></a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

> アルバータ大学ヒューマンカイネティクス（SHK）大学は、科学、物理科学、工学における高エネルギー、高インパクトの研究を実施するための最高の施設であり、

<blockquote class="twitter-tweet" lang="ja"><a href="https://twitter.com/mockers2019/status/1206927495808913408?s=20"></a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

> 民主党候補者は民主党員でさえなく、共和党候補者は強力で有能な保守派でした。 彼らは両方とも私が強く支持した人々でした。 私たちの国は両方のために優れています。


<blockquote class="twitter-tweet" lang="ja"><a href="https://twitter.com/mockers2019/status/1206933316223537153?s=20"></a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

> 2015年以来、シリアとイラクのIS過激派に取り組む最初の主要な米国の軍事作戦は、少なくとも2,500人の追加の地上部隊を展開していますが、グループの最も極端な

## 課題

- GPT-2は単語単位で長さのコントロールができるが、文字数をコントロールできないので、Twitterのように文字数にシビアなメディアで最適化することができない。結果として、Twitterの制限である280文字を超えてしまえば、強制的に切ってしまわざるを得ない。

- ファインチューニングに必要なGPUメモリが大きすぎて、774M以上のモデルでは一般人が利用できるようなGPUでは動作しない。個人所有の「Geforce GTX1080 Ti」やAWSのP3インスタンス「Tesla V100」ですらメモリ不足で動作しなかった。(通常の推論は可能)

##おわりに
大規模教師なし学習による文章生成技術は、今後引き続き、精度が改善されていくと同時に、実社会での活用のフェイズに移行すると思われる。本記事および<a href="https://mockers.io">Mockers</a>が自然言語AIと発展と社会実装に少しでも寄与できれば幸いである。

P.S.
ヒラリーも忘れるな。

<blockquote class="twitter-tweet" lang="ja"><a href="https://twitter.com/MockedHillary/status/1208147863882076161?s=20"></a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

> それは選挙前に上院民主党員から聞いた議論であり、民主党員は、これが共和党、共和党の共和党、または他の党がやってくるなら、これが起こる可能性があると言っていました。


https://mockers.io