AI近藤春菜作ってみる
Pythonを使ってTwitterに自動投稿するbotを作りたい。
必要なもの
1.TwitterAPIキー
2.ツイート内容を決め、ツイートを行うPythonプログラム
3.2のプログラムを定期実行する仕組み
Twitter APIキーの取得
Gmailアカウントとbot用のTwitterアカウントを用意。
こちらを参考に各種キーを取得することができた。
30分かからないくらいでできる。
ツイート内容について
自然言語処理で何か作ってみたい。内容は検討中。
実際にtweetする部分について
Tweepyというライブラリが使えるらしいので、そちらを探る。
プログラムの定期実行
自然言語処理することを考えるとGoogle Colabか自宅PCかは使わないといけない。
Google Colabの定期実行とかできたらカッコいいけど難しそう。
GASからColab動かせたら未来ですよねー。
RaspberryPiでGoogleドライブ開いてマウスとキーボードの自動操作とかならいけるかも。
あんまりかっこよくない・・・
自宅PCならタスクスケジューラでなんとかなりそうなのでハードル低めかも。
認証レベルが足りない!
とりあえずホームタイムライン取得が第一歩と思いきや認証レベルがEssentialなのでTwitter API V2の機能しか使えないらしい。
色々不便なのでElevatedレベルの承認申請した。
あとapp permissionsの設定が必要だったので設定&アクセスキーの再発行をした。
自分のツイート取得できた
import tweepy
import os
from dotenv import load_dotenv
#envから各種キーを取得
load_dotenv()
consumer_key = os.environ['CONSUMER_KEY']
consumer_secret = os.environ['CONSUMER_SECRET']
access_token = os.environ['ACCESS_TOKEN']
access_token_secret = os.environ['ACCESSS_TOKEN_SECRET']
bearer_token = os.environ['BEARER_TOKEN']
Client = tweepy.Client(bearer_token, consumer_key, consumer_secret, access_token, access_token_secret)
#最新のツイートを取得
user =Client.get_user(username='rira100000000')
timelines =Client.get_users_tweets(id=user[0]['id'])
print(timelines[0][0])
色々やりすぎてわけわからなくなってきた!
tweepyは認証通るまで検索が使えなかったのでTwitter API V2を使い始めた
検索ワードと関連する言葉を抽出するPythonプログラム作ろうと考える
検索した直近7日間、100件のツイートをMeCabで形態素解析する
精度がいまいちなのでMecabの辞書をNEologdにしたくなる
NEologdのインストールに手こずりUbuntuからインストールしてコピーすることにする
この記事がめちゃくちゃ役に立った↓
現在の様子
菅田将暉 で検索すると
('ミステリ', 0.9970409870147705)
('02', 0.9967736601829529)
('2022', 0.9967241883277893)
('t', 0.9967008233070374)
('co', 0.9966678023338318)
('https', 0.9965382218360901)
('1', 0.9964796900749207)
('将暉', 0.9963600635528564)
('CRYSTAL', 0.9963106513023376)
('8', 0.996193528175354)
ドラマのタイトルの一部が抽出されるゾ。
しかしそれ以外の関連ワードがほぼ全部ゴミデータなのが問題だな。
これは地道に拾う以外に何かいい案はないものだろうか。
AI近藤春奈にしよう
○○じゃねーよ!と自動でつぶやくように設定します。
とりあえずできた
固有名詞だけ拾うようにする+正規表現で半角文字列削除で前述のゴミデータはだいぶ綺麗にできた。
新たな問題は知らない単語だと変な区切りで解釈してしまう。
この場合は鹿楓堂が正解。
これもなんとかしたい。
投稿済みツイートについたいいねの数を重みにできる?
リプを返すことはできる?
リプ返すようになった
rinnaが提供しているモデルにファインチューニングしたいんだけど、GPUメモリが0になってしまう。
バッチサイズを小さくしても効果なし、というか本当に小さくなってるのかわからない…
ローカルPCのメモリが小さすぎるようなのでColabでやったら無事できた。
急にちゃんと喋るときがある
リプライをするためにTwitterで検索したリプライ500件をコーパスとしてファインチューニングしてみた。
ツイートっぽさ+返信っぽさを学習できたかな?
Mecabを使って人名に反応するようにした。
学習データにTwitterのリプライの往復まで含めた方がいいのだろうか?
今はA「雪が降りそうだね」→B「こっちはもう降ってますよ」の場合のBの発言しか学習させてない。
今のモデルへの入力が『雪が降りそうだね』の時、何やら天気に関する話はしてくれるけど、そこに返事の概念があるかどうか怪しい。
生成した文章がmax_lengthでぶった切られることがある。
これは生成した文章中に現れる最後の「!?。」の位置でスライスすることで対応した。
model.generateパラメータ動かした感覚
【temperature】
低いほど文章の多様性が低くなり、ファインチューニングの影響が出やすくなる。
0.35切ると仕事の話ばっかりし始める。
0.4くらいだと程よく与えられた話に関わる気がする。
どうもTwitterから作り出したコーパスに引っ張られすぎる気がする。
検索ワードを"私" にしていたのだけど、何言っても私も私もと言い始める。仕事のスケジュールの話も多すぎる。
でもリプライを学習させたおかげか生成される文に返答感がでるのでそれはよかった。
会話に幅を持たせるためにランダムな検索ワードでリプライツイートを抽出したらどうだろうか。
自分で作ったタグをつけて投稿してくれた方に自動で返信できるシステム
既存のタグの中から二つ選んでそのタグが両方含まれているという条件を満たしたツイートに対して自動で返信できるシステム
上記の2つのようなものは作れますでしょうか。
(返信内容はURLを送りたいです。)
よろしくお願いします
こんにちは!
結論から言うと、どちらも作ることは可能だと思います。
ですが、2月9日からTwitter APIが有料化されるようなので無料での運用は厳しそうです。
「Twitter API有料化」の影響範囲は? 現状から予想できること- ITmedia NEWS
かずさんの希望のシステムを作るとしたら検索APIは必須と思われます。
上記の記事によると検索APIは有料化の目玉的な位置づけの様ですので、やはり費用が発生してしまいそうです。
マスクCEO、Twitterの無料API終了は「悪質なbotの排除」と説明 有料APIは月100ドル程度に - ITmedia NEWS
月額100ドル程度になるという話ですので、技術的な話よりも運用コストの問題が大きいかもしれません。
返信ありがとうございます。
返信してくださった内容を踏まえて以下のことを選択肢として挙げました。
①Twitterの有料APIを利用する前提で、技術者を雇いオートリプライのシステムを作成する
②既存のオートリプライシステムを提供しているツールを利用する
上記の2つの方法では、費用面も含めどちらが良いでしょうか。
また、既存のツールの場合にはどのツールがおすすめなのかも紹介していただければ幸いです。
よろしくお願いいたします
私も業務として運用したことがないのであまり確かなことは言えませんが、個人としての見解を申し上げます。
まず、技術者を雇うとなると、保守契約をする必要があると思われます。
いくらほどになるかは私も存じ上げませんので、見積もりを取る必要があります。
コストがかかる運用ですが、信頼性は高いです。
一般的な企業に薦めるならこの方針でしょう。
次にツールの使用です。
正直、API有料化問題が付きまとうため時期が悪い感じがします。
おすすめのツールを紹介できれば良かったのですが、ツールの利用経験がないのでほとんどわかりません。ただ、エンジニア的に考えればほとんどのツールがAPIを利用していると思われますので、まずは2月9日以降も動くツールを探すことから始めないといけません。
有料化に伴い相当数のサービスがサービス終了するという話も聞いています。
これまで無料で公開されていたツールが今回のAPI有料化を機に有料化される可能性も考えられますので、ツールの選定をするなら今後の動向を把握したほうが良いでしょう。
費用はエンジニアを雇うよりは安いはずですが、メンテナンスや不具合で動かない時間が発生する可能性があります。
有料APIも視野に入れているということで会社の業務としての話をしましたが、個人の趣味としての話であれば(システムが動かない時間があっても良しとするのならば)フリーランスのエンジニアに単発の仕事として頼むのもありかもしれません。
なにか問題が発生してもエンジニアが対処してくれる保証がありませんので、実験的な方針になります。
3パターン考えてみましたが、肝になるのはシステムの可用性をどこまで求めるかということと、それにどれだけのコストが使えるかという事だと思います。
とても丁寧に対応していただきありがとうございました!
いただいた情報をもとに今後の活動に取り組んでいきたいと思います。