2 ポイント 投稿者 GN⁺ 2024-05-10 | 1件のコメント | WhatsAppで共有
  • 筆者はテキスト埋め込みを活用して、4,000万件を超える Hacker News の投稿とコメントを分析するプロジェクトを進めた
  • このプロジェクトの主な目標は、より高度な検索、推薦、分析機能を実装することだった
  • そのために Hacker News API を使ってデータを収集し、Web ページのクローリングによって追加のコンテキストを確保した
  • 収集したデータを基にテキスト埋め込みを生成し、それを UMAP を使って 2D 空間にマッピングした
  • マッピングされたデータを基に、インタラクティブな "Hacker News Universe" マップを制作した
  • また埋め込みを活用して、セマンティック検索、自動仮想コミュニティ、人気度/感情分析などの機能を実装した
  • 大規模データ処理のために GPU クラスタを活用し、ユーザー体験改善のためにエッジサーバーを配備した

Hacker News データ収集

  • Hacker News API を使って4,000万件を超える投稿とコメントのデータを収集した
  • API 応答が遅いため、並列処理のために Node.js ベースのサービスを実装した
  • 投稿スコアは -1 未満には下がらず、コメントのスコアは API では確認できない
  • 一部の投稿とコメントはタイトルと本文が空になっている(おそらくモデレーターによって修正されたものと推定される)
  • コメント ID が親コメントより小さい場合もある(モデレーターがコメントツリーを移動したものと推定される)

テキスト埋め込みの生成

  • タイトルだけでは投稿を意味的に表現するには不十分だったため、Web ページのクローリングによって追加コンテキストを確保した
  • テキスト埋め込みの生成には高性能 GPU が必要で、4,000万件の入力を処理するには1年近くかかる可能性がある
  • RunPod を使って低コストで GPU クラスタを構築し、db-rpc と queued を開発して分散処理の効率を改善した
  • 150 基の GPU を動員し、数時間で4,000万件のテキスト埋め込みを生成した

Web ページのクローリングで追加コンテキストを確保

  • 投稿タイトルだけでは埋め込み品質が良くないため、リンク先の Web ページをクローリングして追加コンテキストを確保した
  • Rust でクローラを実装し、Node.js 版に比べて10倍速い性能を達成した
  • 多くのリンクが切れていたため(link rot)、Internet Archive の API を使って復元した
  • 最終的に、400万件のうち取得できなかったページは 5% 未満だった

改良版テキスト埋め込みの生成

  • Web ページ全体を入力として使うため、jina-embeddings-v2-small-en モデルに切り替えた
  • コンテキストが不足している投稿には上位コメントを追加して補完した
  • コメントは階層構造を考慮し、祖先コメントまで含めて入力を構成した

UMAP を使った次元削減

  • UMAP を使って 1024 次元の埋め込みを 2 次元空間へ次元削減した
  • 次元削減には PyNNDescent グラフと元の埋め込みが必要となる
  • 高次元の100万件入力を処理するのに、96 コア CPU で約1時間半かかった
  • 次元削減の結果、関心分野や人気度の分布が可視化された

コサイン類似度

  • 埋め込み間の類似度計算にはコサイン距離がよく使われる
  • コサイン距離はベクトル間の角度差を表し、ユークリッド距離と違ってベクトルの大きさの影響を受けない
  • これはテキスト類似度の計算に適している。長くて熱量の高い議論であっても、話題が似ていれば近くにマッピングされるべきだからだ
  • コサイン類似度の計算は行列積で簡単に実装できる

Hacker News Universe マップの制作

  • 埋め込みを基に、Google Map に似たインタラクティブな Hacker News マップを制作した
  • ズーム時に表示されるポイント数の調整、一部の点へのラベル付け、クリック時の詳細情報表示などの機能をサポートする
  • 数百万点を一度にブラウザへ送るのは無理があるため、タイル化と LOD を使って段階的な読み込みを実装した
  • タイルあたり最大 1500 点を収めてサイズを 20KB 以下に保ち、地域ごとの密度を考慮して多様性を確保した
  • Web アプリは Canvas と WebWorker を使って実装し、地図機能は Google Map を参考にして似た形で実装した

視覚効果の追加

  • 実際の地図のようにランドマーク、境界、地形などを追加し、没入感と方向感覚を改善した
  • ポイント密度に応じた明暗の等高線を描き、HN で関心の高い領域を表現した
  • ガウシアンブラーで滑らかな等高線を描き、SVG に変換して劣化のないベクター画像として出力した
  • 代表的なテーマを示す "都市" を追加し、特定領域への案内機能を提供した

検索機能のテスト

  • セマンティック埋め込みベースの検索は、キーワード検索に比べて関連性が高く、多様な結果を示した
  • 質問形式のクエリもよく理解し、完全一致する単語がなくても類似トピックを見つけ出す
  • HN 投稿の高い品質のおかげで、検索結果にも洞察に富み有用な情報が多く表示された
  • 結果ランキングには関連度に加えて投稿スコアと時間重みも活用し、信頼性と鮮度を考慮した

自動仮想コミュニティの生成

  • キーワードで仮想コミュニティを作り、関心に合った投稿の集合をその場で見ることができる
  • 投稿だけでなく、関心分野に関連して活発に議論されているコメントも合わせて確認できる
  • 特定テーマについて影響力があり活発に活動しているユーザーも把握可能だ
  • 事前フィルタリングではなく事後フィルタリングを活用すると、計算コストを大幅に下げられる

大規模データ分析

  • オープンソースの感情分析モデルを使って、3,000万件のコメントのポジティブ/ネガティブ感情を分類した
  • トピックの感情を時系列で分析すると、主要イベントに応じた変化を観察できる
  • 類似度とスコアを活用して、トピック間の人気度比較も可能だ
  • クエリ計算速度の改善のため、GPU を活用した行列演算を適用し、処理速度を大きく向上させた

今後の計画

  • リアルタイムデータ更新のサポート
  • ディープラーニングベースの推薦システム開発
  • 再ランキングモデルによる検索品質の改善
  • ユーザー分析の強化(類似度、専門性など)
  • コミュニティからの意見収集による追加改善アイデアの発掘

GN⁺の意見

  • このプロジェクトは、大規模データを効果的に収集・精製・分析する過程をよく示す事例だ。特に並列処理や GPU 活用などの性能最適化手法が印象的だ。
  • テキスト埋め込みと UMAP を組み合わせて投稿間の類似度を可視化した Hacker News マップは、非常に創造的で興味深い成果物だ。ユーザーが関心トピックを探索し、新しい情報を発見するのに大いに役立ちそうだ。
  • セマンティック検索と自動コミュニティ生成機能は、Hacker News の利用体験を一段引き上げられる革新的なアイデアだ。単純なキーワード一致を超えて文脈と意図を把握する検索技術が、一般ユーザーにもさらに広がることを期待したい。
  • 大規模なリアルタイムデータ処理パイプラインの構築が鍵になりそうだ。エッジコンピューティング、インメモリ DB など、性能ボトルネック解消策を綿密に検討する必要があるだろう。
  • 信頼性の高い HN データの特性上、感情分析結果にも十分な活用価値がありそうだ。ただしアルゴリズムのバイアスには注意し、ドメイン特化学習も検討に値する。

1件のコメント

 
ggg213 2024-05-10

タイトルが抜けていますね