gtp-2-simple (4) - Twitterのテキスト生成AIボットの作成
以下の記事を参考に書いてます。
・How to Build a Twitter Text-Generating AI Bot With GPT-2
1. はじめに
「GPT-2」は、OpenAIによって作成されたテキスト生成ニューラルネットワークです。AIが自動生成するテキストアドベンチャゲームや、チェスの移動表記法で訓練したAIなどで、最近注目を集めています。
過去1か月間、Twitterアカウント@dril_gpt2は、「gpt-2-simple」を使用して@drilのツイートをファインチューニングし、チューリングテストの限界を押し広げるツイートを生成しました。
これらのツイートは間違いなくロボットによって作成されたものであり、ロボットを装った人間によって作成されたものではありません。@dril_gpt2は、一貫性のないリストや繰り返しループなど、有名な「GPT-2」トラップに陥ることがあります。
今回は、コーダーでなくても、Twitterユーザーをパロディ化するAIボットを作成する方法を紹介します。
2. AIを訓練するためのツイートの取得
Twitter APIは、特定のユーザーから最新の3,200ツイートまでしか取得できないことで有名です。これは、優れたAIを訓練するための十分な入力データではありません。そこで、多くのツイートを取得するには、別のアプローチを使用する必要があります。 Pythonパッケージ「twint」は、APIの制限を回避する一般的な方法です。
私はツイートを取得するPythonスクリプトを作成しオープンソース化しました。このスクリプトはtwintを利用してツイートをダウンロードし、URLやリツイートやツイートの返信を削除するなどの一般的な前処理を行い、結果の入力テキストをよりきれいなものにします。
まず、ターミナルでPythonスクリプトの依存関係をインストールします。
pip3 install twint==2.1.4 fire tqdm
次に、「download_tweets.py」をダウンロードします。
スクリプトは、コマンドラインを介して操作します。ターミナルでスクリプトが保存されているディレクトリに移動したら、次のコマンドを実行します。
python3 download_tweets.py <twitter_username>
@drilからすべてのツイートをダウンロードする場合は、次のコマンドを実行します。
python3 download_tweets.py dril
ツイートは、「<username>_tweets.csv」というタイトルの単一列CSVにダウンロードされます。これは、AIでの訓練に最適な形式です。
ツイートの数は多いほど良いです。少なくとも1 MBの入力データ、つまり数万のツイートを用意することをお勧めします。
3. Twitter AIを訓練してツイートの生成
短いテキストでAIを訓練する際の一般的な問題は、テキストが情報を「漏らす」可能性があることです。AIは一度に約2〜3段落のテキスト(約5〜10ツイート)を訓練するため、特定のツイートがいつ開始され、いつ終了されるかを明示的に示す必要があります。この問題を修正するために、「gpt-2-simple」には単一列のCSVの特別なケースがあり、最適な訓練と生成のためにテキストを自動的に処理します。 (つまり、各ツイートに<|startoftext|>と<|endoftext|>を追加します)。このワークフローは、複数行のツイートも独自のエンティティとして正しく処理します。
「Google Colab」のノートブックを使用して、ダウンロードしたツイートでモデルを訓練し、そこから大量のツイートを生成できます。ノートブック自体には、上記で作成したCSVを入力データとしてモデルにフィードする方法についての詳細な説明があります。
たくさんのツイートがないと、モデルは既存のツイートをそのままオーバーフィットして出力する可能性があることに注意してください。その場合は、より少ないステップ(200〜500など)で訓練することをお勧めします。さらに、124Mの「smallモデル」および355Mの「mediumモデル」GPT-2モデルのみを使用することをお勧めします。「largeモデル」は、小さなテキストドキュメントや少量の入力データではうまくファインチューニングできません。
訓練が完了すると、このセルを使用して一度に1,000件のツイートを生成できます。
gen_file = 'gpt2_gentext_{:%Y%m%d_%H%M%S}.txt'.format(datetime.utcnow())
gpt2.generate_to_file(sess,
destination_path=gen_file,
length=200,
temperature=1.0,
top_p=0.9,
prefix='<|startoftext|>',
truncate='<|endoftext|>',
include_prefix=False,
nsamples=1000,
batch_size=20)
ツイートを追加するために必要なだけセルを実行し、右クリックして「File」タブからダウンロードします。ノートブックには、生成パラメータをファインチューニングしてツイートをよりクレイジーに、またはより健全にする方法に関する詳細情報もあります。
次に、生成された.txtファイルをローカルのお気に入りのテキストエディタ(Visual Studio Codeをお勧めします)で開き、適切と思われる方法でキュレーションを開始できます。各ツイートは区切り線で区切られているため、複数行のツイートを視覚的に解析して処理するのが簡単になります。
【注意】高品質のツイートを常に取得できるとは限りません。実際、質の高いツイートはめったにありません。AIで生成されたツイートの5%未満が良い/面白いと推定しています。つまり、何百ものツイートをキュレーションしたい場合は、何千ものツイートを生成してすべてを並べ替える必要があります(実際のツイートではないことを再確認してください)。見た目ほど悪くはないですが、私の意見ではちょっと楽しいです。しかし、キュレーションはそれ自体のスキルです。そのため、人間がキュレートしたツイートはAIボットの「信頼性」を汚すものではありません。また、@dril_gpt2からこれまでの約1,500のツイートも非常に印象的です。
4. Twitterボットの自動化
プログラマーではない場合、またはTwitterボットのプロトタイプを作成したい場合は、通常の「Twitterアカウント」を作成し、Twitterが所有し、ネイティブのスケジューリング機能を備えたTweetDeckを介して、手作業で作成したTwitter投稿をスケジュールすることをお勧めします。何百ものツイートに対してそれを行うのは面倒かもしれませんが、あなたは与えられた時間にツイートを間隔を空けることができます。
それ以外の場合は、ボットアカウントに対して定期的にツイートを作成するコードスクリプトを記述する方が効率的です。インターネット上の古いチュートリアルでは、Twitterに投稿し、X時間スリープし、投稿し、繰り返すスクリプトを書くことを推奨しています。この方法は複数のボットに簡単に拡張できず、コンピューター全体を専用にする必要がありますが、コンピューティングリソースの効率的な使用ではありません。
私は、インフラストラクチャスキーマを作成しオープンソース化し、Google Cloud Platformを利用して、手作業で管理されたTwitterボットを実行し、コストと計算を最小限に抑えています。やや複雑ですが、Twitterボットを最適に実装する方法についてのアイデアが得られるはずです。リポジトリには、Twitter開発者アカウントの設定方法に関する説明もあります。
5. Twitter AIボットの倫理
最近のAIは、「入力データの取得方法」と「AIで生成されたメディアコンテンツの使用方法」の2つの面で頻繁に批判されています。
私は弁護士ではありませんが、これらのAIによって生成されたツイートについては、次のように表示されます。
入力データはTwitterから取得されますが、そのAPIからは取得されません。Twintを介した外部Webスクレイピングを通じてダウンロードされ、Webサイトにログインすることはありません。この種のワークフローは、データが公開されているため、最近のhiQ対LinkedInの決定により、乱用ではないと判断されました。まだグレーな領域です。ダウンロードしたツイートデータを再配布/商用化しません。モデルへの入力データとして使用するだけです。
実際に生成されたツイート自体は、必要に応じて問題なく使用できます。 AIで生成された作品がそのソース素材の著作権を侵害しているかどうかは、倫理と法律の両方の発展分野ですが、少なくとも、これらのAIで生成されたツイートは、変革的な派生作品であり、パロディです。
とはいえ、AIで生成されたコンテンツは非常に曖昧であるため、完全に透明であり、パロディアカウントに関するTwitterのルールに準拠することが重要です。たとえば、ボットのTwitterの紹介文は、次の事柄を示す必要があります。
・GPT-2で作成されたAI生成のツイートを投稿していること。
・それは人間がキュレートしたものかどうか。
・ボットを管理している人のTwitterアカウント。
・ボットがパロディ化しているTwitterアカウント。
さらに、なりすましを避けるために、Twitterアカウントのフルネームは、パロディ化されている人物と逐語的に一致しないようにしてください。プロフィール写真は、人間(ボットなど)と視覚的に区別できる必要があります。また、なりすましの非難を避けるために、より報道価値のある人々のボットを作成することもお勧めしません。
生成されたツイートの品質の面でも、AIボットアカウントを維持するという倫理的なロジスティクスの改善の点でも、Twitterボットを最適化するために実行できる作業はまだたくさんあります。AIテキストを生成するボットのTwitterアカウントが人間のTwitterアカウントを廃止することはないと思います。それはコメディの別の味です。良くも悪くもない。しかし、これらのTwitterボットの創造性を拡張および制御するためにできることはまだたくさんあります。私は、パイプラインに実装するアクティブなアイデアをいくつか持っています。