Open29

AI近藤春菜作ってみる

rirarira

Pythonを使ってTwitterに自動投稿するbotを作りたい。

rirarira

必要なもの

1.TwitterAPIキー
2.ツイート内容を決め、ツイートを行うPythonプログラム
3.2のプログラムを定期実行する仕組み

rirarira

ツイート内容について

自然言語処理で何か作ってみたい。内容は検討中。

実際にtweetする部分について

Tweepyというライブラリが使えるらしいので、そちらを探る。

rirarira

プログラムの定期実行

自然言語処理することを考えるとGoogle Colabか自宅PCかは使わないといけない。
Google Colabの定期実行とかできたらカッコいいけど難しそう。
GASからColab動かせたら未来ですよねー。
RaspberryPiでGoogleドライブ開いてマウスとキーボードの自動操作とかならいけるかも。
あんまりかっこよくない・・・
自宅PCならタスクスケジューラでなんとかなりそうなのでハードル低めかも。

rirarira

認証レベルが足りない!

とりあえずホームタイムライン取得が第一歩と思いきや認証レベルがEssentialなのでTwitter API V2の機能しか使えないらしい。
色々不便なのでElevatedレベルの承認申請した。
あとapp permissionsの設定が必要だったので設定&アクセスキーの再発行をした。

rirarira

自分のツイート取得できた

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])
rirarira

色々やりすぎてわけわからなくなってきた!
tweepyは認証通るまで検索が使えなかったのでTwitter API V2を使い始めた
検索ワードと関連する言葉を抽出するPythonプログラム作ろうと考える
検索した直近7日間、100件のツイートをMeCabで形態素解析する
精度がいまいちなのでMecabの辞書をNEologdにしたくなる
NEologdのインストールに手こずりUbuntuからインストールしてコピーすることにする
この記事がめちゃくちゃ役に立った↓
https://qiita.com/ku_a_i/items/cf9fc9636958adafc690

rirarira

現在の様子

菅田将暉 で検索すると

('ミステリ', 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)

ドラマのタイトルの一部が抽出されるゾ。

rirarira

しかしそれ以外の関連ワードがほぼ全部ゴミデータなのが問題だな。
これは地道に拾う以外に何かいい案はないものだろうか。

rirarira

AI近藤春奈にしよう

○○じゃねーよ!と自動でつぶやくように設定します。

rirarira

固有名詞だけ拾うようにする+正規表現で半角文字列削除で前述のゴミデータはだいぶ綺麗にできた。
新たな問題は知らない単語だと変な区切りで解釈してしまう。
この場合は鹿楓堂が正解。
これもなんとかしたい。

rirarira

投稿済みツイートについたいいねの数を重みにできる?
リプを返すことはできる?

rirarira

rinnaが提供しているモデルにファインチューニングしたいんだけど、GPUメモリが0になってしまう。
バッチサイズを小さくしても効果なし、というか本当に小さくなってるのかわからない…

rirarira

ローカルPCのメモリが小さすぎるようなのでColabでやったら無事できた。

rirarira

リプライをするためにTwitterで検索したリプライ500件をコーパスとしてファインチューニングしてみた。
ツイートっぽさ+返信っぽさを学習できたかな?

rirarira

Mecabを使って人名に反応するようにした。

rirarira

学習データにTwitterのリプライの往復まで含めた方がいいのだろうか?
今はA「雪が降りそうだね」→B「こっちはもう降ってますよ」の場合のBの発言しか学習させてない。
今のモデルへの入力が『雪が降りそうだね』の時、何やら天気に関する話はしてくれるけど、そこに返事の概念があるかどうか怪しい。

rirarira

生成した文章がmax_lengthでぶった切られることがある。
これは生成した文章中に現れる最後の「!?。」の位置でスライスすることで対応した。

rirarira

model.generateパラメータ動かした感覚
【temperature】
低いほど文章の多様性が低くなり、ファインチューニングの影響が出やすくなる。
0.35切ると仕事の話ばっかりし始める。
0.4くらいだと程よく与えられた話に関わる気がする。

rirarira

どうもTwitterから作り出したコーパスに引っ張られすぎる気がする。
検索ワードを"私" にしていたのだけど、何言っても私も私もと言い始める。仕事のスケジュールの話も多すぎる。

でもリプライを学習させたおかげか生成される文に返答感がでるのでそれはよかった。

会話に幅を持たせるためにランダムな検索ワードでリプライツイートを抽出したらどうだろうか。

かずかず

自分で作ったタグをつけて投稿してくれた方に自動で返信できるシステム
既存のタグの中から二つ選んでそのタグが両方含まれているという条件を満たしたツイートに対して自動で返信できるシステム
上記の2つのようなものは作れますでしょうか。
(返信内容はURLを送りたいです。)
よろしくお願いします

rirarira

こんにちは!
結論から言うと、どちらも作ることは可能だと思います。
ですが、2月9日からTwitter APIが有料化されるようなので無料での運用は厳しそうです。

「Twitter API有料化」の影響範囲は? 現状から予想できること- ITmedia NEWS

かずさんの希望のシステムを作るとしたら検索APIは必須と思われます。
上記の記事によると検索APIは有料化の目玉的な位置づけの様ですので、やはり費用が発生してしまいそうです。

マスクCEO、Twitterの無料API終了は「悪質なbotの排除」と説明 有料APIは月100ドル程度に - ITmedia NEWS

月額100ドル程度になるという話ですので、技術的な話よりも運用コストの問題が大きいかもしれません。

かずかず

返信ありがとうございます。
返信してくださった内容を踏まえて以下のことを選択肢として挙げました。
①Twitterの有料APIを利用する前提で、技術者を雇いオートリプライのシステムを作成する
②既存のオートリプライシステムを提供しているツールを利用する
上記の2つの方法では、費用面も含めどちらが良いでしょうか。
また、既存のツールの場合にはどのツールがおすすめなのかも紹介していただければ幸いです。
よろしくお願いいたします

rirarira

私も業務として運用したことがないのであまり確かなことは言えませんが、個人としての見解を申し上げます。

まず、技術者を雇うとなると、保守契約をする必要があると思われます。
いくらほどになるかは私も存じ上げませんので、見積もりを取る必要があります。
コストがかかる運用ですが、信頼性は高いです。
一般的な企業に薦めるならこの方針でしょう。

次にツールの使用です。
正直、API有料化問題が付きまとうため時期が悪い感じがします。
おすすめのツールを紹介できれば良かったのですが、ツールの利用経験がないのでほとんどわかりません。ただ、エンジニア的に考えればほとんどのツールがAPIを利用していると思われますので、まずは2月9日以降も動くツールを探すことから始めないといけません。
有料化に伴い相当数のサービスがサービス終了するという話も聞いています。
これまで無料で公開されていたツールが今回のAPI有料化を機に有料化される可能性も考えられますので、ツールの選定をするなら今後の動向を把握したほうが良いでしょう。
費用はエンジニアを雇うよりは安いはずですが、メンテナンスや不具合で動かない時間が発生する可能性があります。

有料APIも視野に入れているということで会社の業務としての話をしましたが、個人の趣味としての話であれば(システムが動かない時間があっても良しとするのならば)フリーランスのエンジニアに単発の仕事として頼むのもありかもしれません。
なにか問題が発生してもエンジニアが対処してくれる保証がありませんので、実験的な方針になります。

3パターン考えてみましたが、肝になるのはシステムの可用性をどこまで求めるかということと、それにどれだけのコストが使えるかという事だと思います。

かずかず

とても丁寧に対応していただきありがとうございました!
いただいた情報をもとに今後の活動に取り組んでいきたいと思います。