言葉をベクトル化して星にする【LogoStella】

に公開

概要

生成AIを活用した展示物を作る際、画像生成や動画生成、音声生成モデルと比較してLLMは直感的にその面白さを伝えにくいなと感じています。そこでLLMに関連しつつも文字を読ませず直感的に「なんとなくおもしろいな~」と思えるような作品を作ってみたいと思い制作しました。

LLMに関連した技術の一つに埋め込みモデルというものがあります。このモデルでは入力された文章を相対的に意味を保つ高次元な文章ベクトルに変換することができます。この文章ベクトルを2~3次元まで次元削減をすることで、複数の文章の関連性を散布図のような形で視覚的に表現することができます。

本記事ではこれを集計手法としてではなく演出手法として利用し宇宙のような空間を創りました。

成果物

以下の動画のように星の一つ一つはその宇宙のテーマに対するユーザーの投稿と対応したものとなっており、その配置は埋め込みモデルによって抽出された意味を含んだ文章ベクトルによって決定されています。

https://x.com/milktea1516951/status/1983828727416160459?s=46&t=MN-A0ag4oTJDSCDNeiZUIA

仕組み

parametricUMAP

位置関係を保ったまま次元削減を行うにはUMAPという手法が一般的です。しかしこの手法では新しいデータを後から既存空間に安定して追加することが難しく、インタラクティブ性のある作品にはできなくなってしまいます。

そこでparametricUMAPという手法を使います。これは本来全てのベクトルに対して再計算する必要があるUMAPの次元削減の過程をNNで学習し、再現することで追加で新規のデータにも対応することを可能とするものです。

次元削減モデルの学習データについて

parametricUMAPはテーマごとに意味空間を構築するため、初期学習用としてそのテーマに関する一定数のテキストデータが必要になるという問題があります。

そこで学習データとなるテーマに対する意見、感想をLLMを使用して生成します。parametricUMAPはそこまでのデータ数を必要とするものでもないため、LLMで30件程度生成して初期値として利用することで最初の学習データを集めるという過程をスキップできます。

テーマ「{theme}」について、様々な観点からの意見や感想を{count}個生成してください。
    各意見は以下の条件を満たしてください:
    - 1つの意見は1-2文程度
    - 多様な視点(肯定的、否定的、中立的)を含む
    - 具体的で個人的な体験や感情を含む
    - 日本語で自然な表現

フロントエンド

parametricUMAPを通して3次元に射影した文章ベクトルをReactThreeFiberで可視化します。配置した星が密着しすぎないよう全体スケールを調整して広げられるようにしています。
また星空を作るためのコンセプトとして占星術や魔法的な世界観を意識しました。このふわふわとしたイメージをgptに投げ続け「Mystic Geometry」というデザインテーマに決定しました。
またクラスタリングを利用した星の色分けや、星座を意識した近い星同士を線でつなぐといった表現を追加しています。

展望

ここまでで言葉によって座標が決定される星を作ることができました。現状では制作した専用のブラウザでしか表現できていませんが、星図盤やプラネタリウムなど表現媒体にはまだまだ拡張の余地があると考えています。またこの技術は3DゲームやVtuberのライブなどにおいても効果的な演出として使用できると思います。

Vtuberのライブに関わる機会はそうそうない気がしますが、AItuberの配信の演出くらいには使えそうなので機会があれば実装してみたいと思います。

Discussion