35万ツイートをRAGにしてみた
ふと思い立って、35万ツイートをRAGにしてみました。AI初心者なので右も左もわからないままClaude Codeに頼り、多少の試行錯誤を経ていい感じにしてみました。
計画
やや長い処理なのと、再利用にステップを踏みたかったので、step1.pyからstep3.pyまでの3つのステップに分けて実施しました。
- ツイート自体はTwitterデータのエクスポートから
- JSONをパースして再整形する (step1.py)
- 埋め込みベクトルを解析してchromaDBに保存 (step2.py)
- 質問に対して関連するツイートを検索 (step3.py)
- 質問に対して回答を生成 (step3.py)
対象のツイートは私の全ツイート、35万。約1,000万文字です。
実装
1はまず2日程度でエクスポートが完了するので、zipをダウンロードして回答します。
35万ツイートもあるとtweets.jsどころかtweets-part4.jsまででてきます。これをいい感じにパースするスクリプトをClaude Codeに書いてもらいました。
{
"id": "580715812178120704",
"text": "水色の色鉛筆がラフ画描く際に便利",
"created_at": "2015-03-25T13:00:13.000Z"
},
{
"id": "1489079404068507648",
"text": "餃子1人前とハーフチャーハンで514円だったのできょうはこいしちゃん気分",
"created_at": "2022-02-03T03:32:50.000Z"
},
{
"id": "1489077682214084608",
"text": "大阪王将の方が近いけど京都王将に来た",
"created_at": "2022-02-03T03:25:59.000Z"
},
こんな感じのJSONが150万行できました。やべえ
続いて埋め込みベクトルの解析やChromaDBへの保存。ollamaでmultilingual-e5-large-gguf:f16を用いて埋め込みベクトルを生成してみました。
Claude Codeが書くままに動かしてみたところ、約5時間で完了しました。正直なところ初心者なので何をしているのかはよくわかっていなかったので、5時間はかけすぎかもしれません。
1ツイートごとに埋め込みベクトルを生成しているのは本当にそれでいいか議論の余地がありそうです。
最後に検索システム。CLIでollamaの要約に使うモデルを選んで質問するCLIツールをClaude Codeに書いてもらいました。
流石に目立った不具合もなくいい感じに作ってくれるのはClaude Sonnet 4の凄いところですね。この程度のタスクならOpusでなくても十分です。
検証
さて検証です。どんなGemma3-12Bを回答モデルにしてみました。どんな回答が得られることやら。
ここでは「アークナイツ」「東方」「デレステ」などのドメイン知識をこのRAGに問いながら、ツイートから生成したRAGを観察していきます。
まず「水鉄砲」について解説してもらいます。これは自分のツイートでは大部分がアークナイツに登場するキャラクター「遊龍チェン」の隠喩として出てきます。
水鉄砲は、このゲームにおいて非常に議論の多いオペレーターのようです。
概要:
- 初期の強力な存在: 3章から6章前半にかけて、水鉄砲は多くのプレイヤーにとって主要な戦力だったようです。「3章をクリアしたこの時点ですでに水鉄砲ふりまわしてたんよなこの人…」というツイートからも、初期の強力さが見て取れます。
- 汎用性の高さ: 多くのステージで活躍し、「水鉄砲だけで大部分なんとかなった気がする」という意見もあります。
- 現在の状況: 現在では、他のオペレーターの台頭により、以前ほどの輝きを放っていないようです。「M8-6、今やってもあの盾兵の前を水鉄砲の範囲にもできない」というツイートがそれを裏付けています。
- 特定のオペレーターとの相性: 水鉄砲チェンは特に人気があり、「水鉄砲チェンさん持ってくるにはコスト重すぎやし……」というように、コストの重さがネックになっているようです。しかし、「水鉄砲チェンさんパンチョさんを水鉄砲で減速させてひとらで倒し切るのほんまに強い」というように、特定の状況では非常に強力です。
- スキルの打ち止め: スキルの打ち止めを利用することで、源石活性化マスを解放する戦術も存在します。「水鉄砲がスキル途中で打ち止めにできるからラッシュが終わった後止めたらHPすんなり残せた」というツイートがそれを説明しています。
- 配置に関する問題: 配置順によっては、犬が射線を塞いでしまうため、専用のファントムが必要になる場合もあります。
- 様々な解釈: オレンジが水鉄砲で遊んでいる様子は、「橙が水鉄砲で遊んでるのはそれはそれで解釈がそれなりに一致してよき」[1]というツイートにあるように、様々な解釈が可能です。
その他:
- 水間鉄道という名前も出てきており、ゲームの世界観を深めています。
- 水鉄砲は、他のオペレーター(イフリータ、ミヅキ、タル[2]、シュヴァルツ、ソーンズなど)との比較対象として議論されています。
- 配置に関する制約やコストの重さなど、使用における課題も指摘されています。
水間鉄道は明らかに関係ないですが、概ね「水鉄砲=遊龍チェン」というドメイン知識を前提に回答できています。
次に東方幻想空間「博麗神社」という得体の知れないキーワードについて質問してみます。あまりにニッチなのでここでの具体的な説明は割愛します。通常の言語モデルでは、しかもローカルLLMでは回答しようがない知識です。
東方幻想空間「博麗神社」は、東方Project関連のウェブサイトで、1999年から2001年頃にファイル最終更新が行われていたようです(RT @ShioSyakeYakiNi)。
このサイトは、上海アリスというプロジェクトと関連があり、何がどうなっているのかが分からなかったため、ファイルリストがまとめられていたこともあります(RT @ShioSyakeYakiNi)。
サイトの被リンクは、紅魔郷を境目に爆発的に増えたようです(99〜02年頃のサイトを眺めて)。
2006年5月5日をもってアクセスカウンターが消えており、1000万アクセス突破にも関わらず、アクセスカウンターが7桁までしか対応していなかった可能性があります(「そういえば東方幻想空間「博麗神社」が2006年5月5日をもってアクセスカウンターが消えてるの、1000万アクセス突破したのにアクセスカウンターが7桁までしか対応してなかったからかな」)。
また、このサイトは、コミケPlus蓬莱人形事件や東方幻想空間 博麗神社発掘事件のような出来事と関連付けられることもあります。
初期の東方幻想空間「博麗神社」のトップ絵とのつながりから、チルノとトプジャケが関連付けられることもあります。
非常にマニアックというか多分自分しか指摘してなさそうな上海アリス幻樂団の公式ページのアクセスカウンターの話を持ち出してこれています。これをAIが回答しているのはちょっとというかかなり面白いです。
半分ネタの知識を真に受けるかどうかもみてみます。「大阪府尼崎市」を解説してもらいます。尼崎市は兵庫県です。
大阪府尼崎市についてですね。
過去のツイートから、尼崎市は大阪府内であるという認識が非常に多く見られます。
- 「尼崎は大阪」というツイートが複数あります。
- 「尼崎市の市外局番は06なので当然大阪府内」というツイートもあります。
- 「尼崎と西宮と宝塚と猪名川は大阪」というツイートもあります。
- 「尼崎市と西宮市は大阪府で…」というツイートもあります。
また、尼崎市が大阪府の一部であるという認識を面白おかしく表現したツイートも存在します。
- 「第ニ大阪市(旧兵庫県尼崎市)」という表現があります。
- 「大阪民国大阪市尼崎特別自治区の話しました???」というツイートもあります。
これらのツイートから、尼崎市は地理的、行政的に大阪府の一部として認識されていることがわかります。
微妙にGemma3が中立を装おうとして懐疑的っぽい回答をしているようにも見えるところがちょっとおもしろいですね。いや兵庫県やろって思いながらツイートは多くが大阪府って言ってる…みたいな。
主観的な質問もしてみましょう。単におすすめのキャラクターを挙げてもらいます。プロンプトの詰めが甘いので多数の意見だとGemma3が誤解していますが全部私の主観ツイートです。
おすすめのキャラクターですか?うーん、難しい質問ですね!
過去のツイートを拝見したところ、多くの人が「好きなキャラ」を挙げているので、いくつかピックアップしてみます。
- 魔理沙: 「自機キャラの中では魔理沙がすきです」というツイートがあります。多くの人に親しまれているキャラクターのようです。
- メディと小傘とエレン: 「うちの好きなキャラはメディと小傘とエレンです」というツイートがあります。
- こいしちゃん: 「なんだかんだ言ってうちが一番描きやすいキャラってこいしちゃん」というツイートがあります。
また、「紅魔郷2面道中のティッシュみたいなやつ」が人気投票で15票も入っているというツイートもあり、意外なキャラクターが人気を集めていることもわかります。
これらのツイートから、多くの人が様々なキャラクターを好きになっていることがわかります。もしあなたが「いちばん好きなキャラ」や「一押しに入れたいキャラ」を探しているのであれば、これらのキャラクターを参考に、あなた自身の好みを見つけてみてはいかがでしょうか。
「紅魔郷2面道中のティッシュみたいなやつ」をおすすめのキャラクターに挙げるのはパーソナルRAGの面白い点だと思います。
主観といえば、特定の曲やキャラクターで特に自分がツイートを頻繁にしたものについて解説させてみるとどうなるでしょうか。ここでは「サニーミルクの紅霧異変」と「市原仁奈」についてGemma3に回答してもらいましょう。この具体的なドメイン知識は自分だけしかわからないというか多分自分でも忘れてるものが数多くあります。
サニーミルクの紅霧異変は、東方Projectの楽曲の中でも非常に人気が高く、多くの人に愛されている曲のようです。
高い人気と評価: 多くの人が「だいすき」「めっちゃすき」「いちばんすき」と表現しており、東方ファン7年もやっていても最推しが変わらないほど、長く愛されている楽曲であることがわかります(2023年11月29日のツイート)。
アレンジの少なさへの言及: 原曲が完成されているため、アレンジが少ないという意見もあります(2023年11月27日のツイート)。しかし、ジャズアレンジが存在し、好評を得ているようです(2023年11月26日のツイート)。
投票への推奨: 毎年人気投票で「サニーミルクの紅霧異変」に投票している人が多く、投票を推奨する声も多く見られます(2023年11月26日、2023年11月28日のツイート)。
U.N.オーエンは彼女なのか?との関連: 「サニーミルクの紅霧異変」は「U.N.オーエンは彼女なのか?」のセルフアレンジであり、フレーズ的に「U.N.オーエンは彼女なのか?」の曲を知らない人が聴いても、そちらの曲だと勘違いする可能性があるようです(2023年11月25日のツイート)。
公式試聴可能: 「数少ない「公式試聴ができる楽曲」のうちのひとつ」であるため、興味を持った人が手軽に聴ける点も人気の理由の一つと考えられます[3](2023年11月24日のツイート)。
書籍内での評価: 書籍「東方三月精」内では魔法使いの憂鬱に次いで2位という高い順位を誇っています(2023年11月23日のツイート)。[4]
全体的に、多くの人が「サニーミルクの紅霧異変」を高く評価しており、東方Projectの楽曲の中でも特別な存在であることがわかります。
市原仁奈(仁奈ちゃん)についてですね!このツイート群から、かなり熱心なファンであることがわかります。
概要:
推しアイドル: 市原仁奈は、この人物にとって非常に推されているアイドルであることがわかります。「うちパッションのなかだと市原仁奈っていうひとが推しです」というツイートからも明らかです。
愛称: 「仁奈ちゃん」という愛称で呼ばれています。
魅力: かわいいという理由で推されているようです。「仁奈ちゃんかわいいからほらほら」というツイートや、「実際仁奈ちゃんかわいいしな…?」というツイートからもその気持ちが伝わってきます。
SSR/Rカードへの願望: 市原仁奈のSSRやRカードを強く求めているようです。「市原仁奈のSRがほしい」「市原仁奈のRがほしい」「市原仁奈のRとか出ないかなあ」といったツイートが多数あります。特にRカードは、ハイファイ☆デイズ組のルームを揃えるために必要とのことです。
限定SSRへの期待: 限定SSRの市原仁奈を強く望んでいます。「市原仁奈の限定SSR」というツイートや、「限定仁奈ちゃんの特技Lvいまいくつやったかなあ」といったツイートからもその気持ちがわかります。
イベントへの期待: 市原仁奈が報酬のイベントを待ち望んでいます。「仁奈ちゃん報酬のイベント来ませんかね」というツイートからも明らかです。
総選挙への期待: 市原仁奈が総選挙で上位に来ることを願っています。「龍崎薫か市原仁奈が総選挙で1位になるまでねむります」というツイートからもその気持ちが伝わってきます。
3年半ぶりの新曲: 3年半ぶりの新曲が出たことに興奮しています。「えっなに限定の復刻………?仁奈は……?仁奈は………????????????」というツイートからもその気持ちが伝わってきます。
他のアイドルとの比較: 他のアイドル(龍崎薫、遊佐こずえ、森久保乃々、緒方智絵里、櫻井桃華、柳瀬美由紀)と比較されることもあります。
担当者: 「市原仁奈の担当をしておりますそらいろです」というツイートから、ゲーム内で市原仁奈の担当をしていることがわかります。
ロリコン疑惑: デレステの市原仁奈や遊佐こずえ、ナナシスの有栖シラユキといった可愛いキャラクターについて話すと、ロリコンだと思われることがあるようです。[5]
その他:
原神のクレーと市原仁奈が同じ声優さんであることを知った時の驚きもツイートされています。
関西弁で話すことが多いようです。
この情報から、市原仁奈は、この人物にとって非常に特別な存在であることがわかりますね。
関西弁では喋らないと思いますが。
それはともかく、一般的なRAGは客観的事実を中立に回答する、なるべく引用元をはっきりさせるといったことが重要なのだと思いますが、このツイートRAGはほとんど全部が主観で回答が成立しています。しかもそこまでメジャーでもない曲などに対してやたら熱く回答してきます。
結果
異常ツイ廃のツイートRAGを生成すると超主観オタクのAIが出来上がる
Discussion