pTTTC2024-11-12
とりあえずフォークした
% pip install langchain_openai
% pip install python-dotenv
embeddingまできてからエラー
% pip install --upgrade langchain
% pip install -U langchain-community
これで直った
(7574, 3072)次元でHDBSCANすると5分かかる
(1000, ...)にランダムサンプリングしたら5秒になる
埋め込みベクトルの次元はおそらく線形オーダーでしか効いてこないので短くする必要はないと思う
30〜100件くらいのクラスタを抽出しようと思ったが
k-meansと違ってそもそもクラスタ数を指定できない
min_cluster_size=5を小さくすれば増える
とはいえ「データ2個でクラスタ!」は微妙
min_samples=2を小さくすれば増える
どういう原理か
密度の計算に関するものらしい
max_cluster_size=30
これをつけることで巨大クラスターが出ちゃうのを防ぐ
巨大クラスタを割ってくれる訳ではない、このあたりの振る舞いを理解するにはもう少し実験が必要
1000件で(min_cluster_size, min_samples) = (5, 2)だと10クラスタできた
(2, 2)だと38クラスタに増えるが「2個あればクラスタ」という意味になる
流石にやりすぎでは?
でも逆に言えばこれ以外は全部スパースな領域のデータと判断されている
ごくデータが少ない時には「仕方がないから(2, 2)で試す」という感じ
「たまたまかもしれない、もっとデータが集まれば棄却されるかも知れないが、今の段階としては可能性が高い候補」みたいなニュアンス
データが多くなるほど固定の閾値に対してデータの密度が上回る確率は高くなる
7000件で(5, 2)で79クラスタできた
だがまぁHDBSCANが非線形に重くなるのが問題だな
大量のデータでパラメータサーチを回すと高コストだが、サンプリングすると振る舞いは変わる
ランダムなサンプリングであれば「1000件のときにこうであれば7000件のときにはこうなる」という推論は成立しそうではある
まあ普通に数学すると1000件の(2, 2)は7000件の(14, 14)相当だよな
これらのデータに対して「どうしてこれらは一塊になっているのか」を抽出する
code::
`json
[
{
"explanation": "...",
"label": "..."
}
]
`
たまにこういう予定と違う形で返ってくるのはこまるなぁ
JSONのスキーマをハッキリさせるコールが可能になったはずなので調べる
2024-11-13
日テレ版TTTC、Azure対応もアウトプットのJSON強制も全部入ってて親切すぎて感動
7574件のデータから79個のクラスタが作成された
使われたデータは739件、カバレッジは9.8%
思惑通りのいい実験結果がでたので、公開できるデータで同じことをやって記事にしたい
安野チームの日テレの件も記事にしたいし
世論地図の話も記事にしたい
3つもあるじゃん!
https://gyazo.com/aa54ff46f8ab889e5458cac0172fc9a4
従来のTTTCでは全部のデータをクラスタに分類しようとする
ので(1)のようなはっきりと離れ小島になってるクラスタだといいのだけど
(2)(3)では複数の話題が混ざってしまって「AIの解説とだいぶ違う話が混ざってるなぁ」みたいなことが起きていた
今回やった実験は「すべてのデータを分類する」をやめて「密度高く集中してるところだけ切り取る」というもの。
クラスタは79個できた。こちらは濃いところだけ取り出してるのでできたクラスタは濃い
が、クラスタに選ばれてない意見たくさんある。多分想像より多くて9割くらい捨てられている。
この二つはどちらがいいというものではなくて、両方メリットデメリットがあるのでうまく使い分けるといいと思う。
都知事選の時はそれを黙ってネットの向こうの人に示す or 政策チームが読んで参考にする と言う感じだった
その過程で全体像を示すだけではなく「濃い意見を掘り下げたい」というニーズが明確化した
これをやるプロセスにおいて現状のTTTCでは「点にマウスホバーして見せる」になってN=1で示すことしかできない
その「フォーカスする意見を探す」のところに支援が乏しい
適当にいくつかだけみて運任せにするのか
7000件を結局全部見るのか
今回の新しい実験はここを改善する
「7000件全部見る代わりに、濃度の濃い79クラスタを見る」という負担軽減
「N=1ではなくN=5~30の意見」として示せることによる説得力向上
2024-11-14
これだったら僕のユースケースだと軽いDBSCANをパラメータ違いでやるのの方がいいかもな
100件クラスタを抽出して、それに対してKJ法をしよう
HDBSCANを使うとしてもLeaf Clusteringの方が僕の目的に適している感じはあるな
---
特筆性ソート✅
濃いクラスタを抽出する仕組み、別のTTTCのデータ(AIパブコメ)を入れて再実行してみたけどあっさり動いた
AIの考えた「興味深い濃いクラスタ」
個人的にはスコア低いものの方が見慣れなくて興味深い
まあこれはAIに「どういう目的で調べててどういうものが興味深いのか」を教えてないからという側面もありそう
個別に興味深い度合いを出すより、一覧ができてからそれをAIが読んで講評した方がいいか?
「他にない視点」というプロンプトが良さそう、面白い
gpt.icon他にない視点を導入しているクラスタとその独創的な点
C16:AIトレーニングデータの違法コンテンツリスク
AI学習における倫理的懸念において、違法コンテンツの存在、特に児童ポルノが含まれる可能性に特化した視点が独自です。他のクラスタが著作権や無断使用に焦点を当てているのに対し、こちらはAI技術の倫理的境界に一歩踏み込み、法的リスクにまで視野を広げています。
C12:AI技術の悪用に対する懸念
商業目的や詐欺行為への悪用、さらには他者の生活を脅かす経済的影響といったリスクに言及しており、AIの利用がクリエイターの権利侵害を超え、社会全体の安全に関わる視点を導入している点が特徴的です。
C4:透明性とアカウンタビリティの重要性
AIシステムの開発とトレーニングプロセスに関する透明性を強調しており、技術と倫理の交点での具体的な対策を求めている点が他のクラスタと異なります。
これらのクラスタは、倫理、法的リスク、透明性においてAI技術の応用に関する独創的な視点を提供しています。
---
requirements.txt
code::
scatter/pipeline/steps/embedding.py:3: LangChainDeprecationWarning: Importing OpenAIEmbeddings from langchain.embeddings is deprecated. Please replace deprecated imports:
> from langchain.embeddings import OpenAIEmbeddings
with new imports of:
> from langchain_community.embeddings import OpenAIEmbeddings
from langchain.embeddings import OpenAIEmbeddings
/Users/nishio/shugiinsenyo2024-tttc/venv/lib/python3.10/site-packages/langchain/chat_models/__init__.py:33: LangChainDeprecationWarning: Importing chat models from langchain is deprecated. Importing from langchain will no longer be supported as of langchain==0.2.0. Please import from langchain-community instead:
from langchain_community.chat_models import ChatOpenAI.
To install langchain-community run pip install -U langchain-community.
warnings.warn(
venv/lib/python3.10/site-packages/langchain/chat_models/__init__.py:33: LangChainDeprecationWarning: Importing chat models from langchain is deprecated. Importing from langchain will no longer be supported as of langchain==0.2.0. Please import from langchain-community instead:
from langchain_community.chat_models import ChatOpenAI.
To install langchain-community run pip install -U langchain-community.
warnings.warn(
いったん気にしないことにする
適当にいじってたらややこしいことになったので
「ややこしいこと」を一応メモしておこう
code::
from huggingface_hub import HfApi, HfFolder, Repository, hf_hub_url, cached_download
ImportError: cannot import name 'cached_download' from 'huggingface_hub' (/Users/nishio/shugiinsenyo2024-tttc/venv/lib/python3.10/site-packages/huggingface_hub/__init__.py)
gpt.iconこのエラーは、Hugging Face Hubライブラリのバージョンが新しいために発生している可能性があります。cached_download関数は最近のバージョンで削除または非推奨になり、代替手法が推奨されています。
この後AIはpip install huggingface_hub==0.12.0をお薦めしてくるけど、最終的にちゃんと動いたのはhuggingface-hub==0.25.1なのでバージョンを戻しすぎなんだよな
まあ、情報が最新でなかったり、ハルシネーションしたりしそうなところではある
code::
ImportError: cannot import name 'HF_HUB_DISABLE_TELEMETRY' from 'huggingface_hub.constants' (/Users/nishio/shugiinsenyo2024-tttc/venv/lib/python3.10/site-packages/huggingface_hub/constants.py)