Skip to main content
  1. Posts/

15年分のツイートをNotebookLM・ChatGPTに読ませて、自己分析をしてみた

GoogleのNotebookLMと、ChatGPTのプロジェクト機能が便利そうだったので使ってみました。 これからは、ドキュメントの情報をもとに、質問応答してくれるAIサービスです。ドキュメントとは、基本的にはテキストファイルなのですが、NotebookLMでは音声ファイルなども扱うことが可能です。それらの情報を元にして、知りたいことに答えてくれます。

今回は、自分の15年分のツイートを読ませて、その傾向を分析してもらうことにしました。

ツイートのアーカイブをダウンロードする #

X(Twitter)の設定画面から、「データのアーカイブ」をリクエストします。

数分から数日の範囲で時間がかかるので、いつダウンロードできるようになるかはわかりません。気長に待ちましょう。

ツイートをテキストファイルに出力する #

アーカイブをダウンロードしたら、それを解凍します。通常通り閲覧するだけであれば、HTMLファイルを開くだけで、アーカイブを閲覧することができます。

しかし、今回は、ツイートのデータをNotebookLM・ChatGPTに読ませるので、すこし工夫をしていきます。

tweets.jsを少し書き換える #

dataフォルダの中にある、tweeets.jsを少し書き換えます。 window.YTD.tweets.part0にツイートの情報を直接代入せず、一度const allDataを経由するようにします。 こうすることで、この後、ブラウザのコンソールでデータを操作できるようになります。

Before

window.YTD.tweets.part0 = [
  {
    "tweet" : {
      "edit_info" : {
        "initial" : {

After

const allData = [
  {
    "tweet" : {
      "edit_info" : {
        "initial" : {
          ...
        }
      }
    }
  }
]

window.YTD.tweets.part0 = allData;

ツイートをテキストファイルに切り出す #

次は、HTMLファイルを開き、/Your%20archive.html#/tweets/tweetsにアクセスします。 そして、Webインスペクタを開きます。 Webインスペクタのコンソールを開いたら、以下のスクリプトを書いてEnterしておきます。

function downloadFile(chunk, index, filenamePrefix) {
  return new Promise(resolve => {
    setTimeout(() => {
      const filename = `${filenamePrefix}_${index + 1}.txt`;
      const content = chunk.map(obj => JSON.stringify(obj)).join('\n');

      const blob = new Blob([content], { type: 'application/json' });
      const link = document.createElement('a');
      link.href = URL.createObjectURL(blob);
      link.download = filename;
      link.click();
      resolve(); // 処理完了を通知
    }, 100); // 100ミリ秒の待ち時間
  });
}

function chunkArray(array, size) {
  const chunkedArray = [];
  for (let i = 0; i < array.length; i += size) {
    chunkedArray.push(array.slice(i, i + size));
  }
  return chunkedArray;
}

async function downloadChunksAsFiles(array, chunkSize, filenamePrefix) {
  const chunkedArray = chunkArray(array, chunkSize);

  for (const [index, chunk] of chunkedArray.entries()) {
    await downloadFile(chunk, index, filenamePrefix); // ファイルダウンロードと待ち時間を待つ
  }
}

これが準備できたら、あとは以下のスクリプトを実行します。

// `allData`を時系列順に並べ直す
const sortedData = allData.sort((a, b) => {
    const aCreatedAt = new Date(a.tweet.created_at);
    const bCreatedAt = new Date(b.tweet.created_at);
    return aCreatedAt.getTime() - bCreatedAt.getTime();
});

// 500ツイートずつファイルに書き出す。ファイル名のプレフィックスは、`tweets`
downloadChunksAsFiles(sortedData, 500, 'tweets');

500ツイートずつが適切かはわかりません。1000ツイートずつでもNotebookLMは読んでくれました。 ただし、7000件弱(10MBのテキスト)だと、NotebookLMが読み込むのに失敗したので、読み込める程度に小さくする必要があります。 公式ドキュメントによると「ソース1件につき50万語」とのことなので、やはり1ファイルあたりのツイート量は小さくした方が良さそうです。 もしかすると、JSONのまま出力するのではなく、ツイート本文だけ出力するのでも良さそうです。

NotebookLMに食べさせる #

ともかく、切り出したテキストファイルを、NotebookLMに食べさせます。たったこれだけで、自分のツイートについての質問応答ができるようになります。

使ってみる #

チャット #

チャットでは、こちらから問い合わせたことに対して、登録したドキュメントを元にして回答してくれる機能です。 よく分析して回答してくれていように見えます。忘れていた記憶も、蘇ってきます。

なお、これらの画像で紹介したものは、質問に対して応答がうまく行った場合の例です。今回は、データをJSONのまま渡しているためか、うまく回答できないことも5割くらいある気がします。

ブリーフィング・ドキュメントの生成 #

ブリーフィングドキュメントを生成すると、登録したドキュメントの概要を得ることができます。 ツイートを通して、自分という人間の概要を手軽に知ることができます。

上の画像は、ブリーフィングドキュメントの一部を抜粋したもの。なんかいい感じにまとめてくれています。

他の機能 #

タイムライン機能は、時系列に事実を並べてくれる機能で、年表のようなものを出力してくれます。 学習サポートの生成を使うと、知識を確認するクイズなどを生成してくれます。 音声概要機能は、現状英語での2名の会話を生成するのみですが、それが流暢すぎて驚きます。

ChatGPTのプロジェクト機能でもやってみる #

ChatGPTの「プロジェクト」機能でも、同様のことを試してみました。ChatGPTの方は、20ファイルまで扱うことができるようです。 実際に使ってみると、思った以上にツイートの内容を良く認識しているように見えました。 人物像を推測させたり、技術レベルを判定させたりするのに、使えそうです。

埋め込みの都合で、NotebookLMのツイートが先に出てきますが、2つ目の方のツイートがChatGPTのプロジェクト機能で出力したものです。

NotebookLM・ChatGPTのプロジェクト機能の回答の傾向 #

ところで、NotebookLMにしても、ChatGPTのプロジェクト機能にしても、ツイートを細かく読んでいる感じはありません。 ドキュメントを一言一句見ているというよりは、全体の傾向を認識している、という感じがあります。 このため、確実にあるはずの文言を探させても、存在しないと言われることがあります。

もしかすると、会話の中で徐々に絞り込んでいくようにしてあげると良いのかもしれませんが、ここについては、まだ最適な方法がわかりません。 そもそも、検索させる用途には向いていないのかもしれません。

まとめ: NotebookLM、ChatGPTのプロジェクト機能の使い所 #

NotebookLMは、たくさんのドキュメントを渡すだけで、チャットで回答してくれるようになります。このことから、以下のような状況で威力を発揮します。

  • 調べごとをしすぎて、頭が飽和状態になったとき
  • ドキュメントが複雑だったり、散らばっていたりなどで、情報のつながりが見えないとき
  • 情報が大量にありすぎて、整理が全くつかないとき

このように、情報の理解が進まない時などに利用すると、効果がありそうです。

ドキュメント理解・情報整理の手助けに #

私の場合だと、開発で使用するツールのドキュメントが複雑・大量だったときに、NotebookLMを使い、ドキュメントを理解するのを手伝ってもらいました。 自分でドキュメントを読んだ上で、NotebookLMにもドキュメントを読ませて、自分の理解が間違いないことを確認できる、という使い方です。 この使い方以外にも、今回のような、大量の情報から傾向を見るような、分析の最初の一歩を手助けしてもらうという使い方もできます。家電の説明書を読ませておいて、必要な時に問い合わせるという使い方もできそうです。

自己分析のきっかけに #

上にツイートの埋め込みで示したように、特定の人物のツイート全体から、人柄や技術レベルの推定ができそうです。 おおむね事実に即して評価しているようですが、あまり経験していないことを、能力があるように書かれている感覚もあるので、少し誇張されている感じも少しあります。 とはいえ、他社から観察できるものを通して客観的に評価しているという点では、よくある人材評価と同じような気もします。 出力された結果を通して、自分の強みや弱みを改めて認識するきっかけになるかなと思うので、便利に使えそうです。


NotebookLM・ChatGPTのプロジェクト機能、どちらもかなり便利でした。 今後も、いろんなドキュメントで試してみようと思います。