LoginSignup
7
8

More than 3 years have passed since last update.

【GPT2】AIに自分のツイートを学習させてツイートを生成する

Last updated at Posted at 2021-01-31

一つ前にGPT2を使って↓こういう記事を書きました。
面白かったので今度はツイートでやってみます。

【GPT2】AIにラノベのタイトルを作らせてみる

Twitter Developerで認証用のキーデータを取得する

まずはツイートを取得する前準備としてTwitter Developerにログインしてアプリケーション登録をし以下の情報を取得します。

・Consumer Key
・Consumer Secret
・Access Token
・Access Token Secret

↓こちらで詳しく解説されています。
PythonでTwitter API を利用していろいろ遊んでみる

自分のツイートを取得する

Colabの準備

Google Colaboratoryにアクセスして新しくNotebookを作成します。
※ツイートを取得するだけであればGPUは使わなくて大丈夫なのでNotebook settingsは変更しなくて大丈夫です。

また取得したツイートを保存するためにGoogle Driveをマウントします。
↓Notebookをツリー表示して出てくるDriveのアイコンをクリックするとマウントできます。
image

ツイートの取得

まず初めにpipでtweepyをインストールします。

!pip install tweepy

そしてツイートを取得するPythonのコードです。
↓こちらを参考にさせていただき一部改良しています。

Twitterのつぶやきを一度に大量取得する

ここで気をつけるべきところはTwitterのAPI制限です。
取得するためには特に以下を気をつける必要があります。
・1リクエストで取得できるツイート数は100
・15分間に180リクエストまで

ツイート数が多い方は取得にそれなりに時間がかかると思います。

import tweepy
import csv
import pprint
import pandas as pd
import os
import time

#ここはお決まりです。
consumer_key = 'xxxxxxxx'
consumer_secret = 'xxxxxxxx'
access_token = 'xxxxxxxx'
access_token_secret = 'xxxxxxxx'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

#ツイートを保存するGoogle Driveのディレクトリです。事前に作っておきましょう。
drive_path = '/content/drive/MyDrive/xxxxx/'
#学習用のデータセットで必要なツイート数を指定しています。
max_tweets = 10000

def getMtTweet():
  #取得したツイートを格納するための配列
  tweets = []
  num = 0
  i = 1
  print('page ' + str(i))
  #自分のタイムラインを取得するためuser_timelineを使用します。1リクエストで取得できるツイートの上限数は100です。
  tweet_data = api.user_timeline(count=100)
  if(len(tweet_data) > 0):
    for tweet in tweet_data:
      #データセット用に各ツイートの最後に<|endoftext|>をつけて整形します。
      tweets.append([tweet.text+"<|endoftext|>"])
      num += 1
    i += 1
    next_max_id = tweet_data[-1].id
    while True:
      print('page ' + str(i))
      tweet_data = api.user_timeline(count=100, max_id=next_max_id-1)
      if(len(tweet_data) > 0):
        next_max_id = tweet_data[-1].id
        for tweet in tweet_data:
          tweets.append([tweet.text+"<|endoftext|>"])
          num += 1
        if(num >= max_tweets):
          break
        i += 1
        #Twitter API制限の上限でエラーにならないようにディレイをかけています。
        time.sleep((15*60)/180)
      else:
        break
      saveTweets(tweets)
  else:
    print('zero tweet')


def saveTweets(tweets):
  ut = time.time()
  #csv使ってますがデータセット用にテキストファイルで保存します。
  file_path = drive_path+'myTweets_' + str(ut) + '.txt'
  file = open(file_path, 'w')
  w = csv.writer(file)
  w.writerows(tweets)
  file.close()

  with open(file_path) as f:
      print(f.read())

getMtTweet()

これでツイートがテキストファイルに保存されました。

学習から生成

あとは↓こちらを元に学習と生成をすれば完了です。
【GPT2】AIにラノベのタイトルを作らせてみる

ちなみに自分の結果は↓こんな感じでした。

なんか微妙に言い回しが自分ぽくないんですが、、
自分のツイートを元に生成したと考えるとなんとも言えない感情に襲われますね。🤔


@usbに接続した音楽データが自動で再生へ持ってこいの時は自動でPOIが終了するって話じゃなかったんだな
========
PS3とMSIの対応の違いって、どう違うのかな?
========
Flex_IPが10MBって超超便利すぎ。
========
scalaはGLSLのコードで実装する。pdfとかThunderbirdとかTouchDesignerって言ったらあれだけどね。
========
@touchdのserviceの値がnullに変わってる
========
TwitterでFOMAのことしかできない人は多い。
========
Twitterのつぶやきはこういうのもあるよー。「おいしそうなものがたくさんあるぞ」ってね。
7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8