編集部掲示板のレコメンドエンジンです。小説・掲示板のCSVデータのembedding、類似度計算とクラスタリングを行います。
graph TD
%% データソース
subgraph データソース[入力データ]
M[CSV入力データ]
end
%% Embedding生成プロセス
subgraph Embedding生成[Embedding生成プロセス]
E[csv_embedding.py] --> F[データ前処理]
F --> G[Embedding生成]
end
%% 類似度計算プロセス
subgraph 類似度計算[類似度計算プロセス]
I[csv_similarity.py] --> K[類似度計算]
K --> L[結果出力]
end
%% クラスタリングプロセス
subgraph クラスタリング[クラスタリングプロセス]
C[clustering_meanshift.py] --> D[Mean Shiftクラスタリング]
D --> H[クラスター結果出力]
end
%% データの流れ
M --> E
G --> O[chroma_db/]
O --> I
O --> C
L --> P[outputs/]
H --> P
%% スタイル調整
style データソース fill:#e1f3e1,stroke:#666
style Embedding生成 fill:#e1e1f9,stroke:#666
style 類似度計算 fill:#f9e1e1,stroke:#666
style クラスタリング fill:#f9f3e1,stroke:#666
- 必要なパッケージのインストール:
pip install -r requirements.txt
- 環境変数の設定:
.env
ファイルをプロジェクトのルートディレクトリに作成し、以下の内容を設定してください:
OPENAI_API_KEY=your_api_key_here
EMBEDDING_MODEL=text-embedding-3-small
- データファイルの準備:
document/
フォルダにCSVファイルを配置dashboard_interview&contents.csv
: インタビューデータnovels.csv
: 小説データ:
インタビューデータのCSVファイル
必要な列:
company
: 会社名content
: インタビュー内容のテキスト- その他のメタデータ列
小説データのCSVファイル
必要な列:
title
: 小説のタイトルcontent
: 小説の内容テキスト- その他のメタデータ列
- CSVファイルはUTF-8エンコーディングで保存してください
- テキストデータは適切に前処理されている必要があります
- 大きなファイルの場合は処理時間がかかる可能性があります
main/
: メインスクリプトcsv_embedding.py
: CSVデータのembedding生成csv_similarity.py
: 類似度計算clustering_meanshift.py
: MeanShiftクラスタリングutils.py
: ユーティリティ関数
document/
: CSVデータファイル(データは含まれません)chroma_db/
: ChromaDBのデータベースファイル(データは含まれません)outputs/
: 計算結果の出力ファイル(結果は含まれません)
- CSVデータのembedding生成:
python main/csv_embedding.py
- 類似度計算:
python main/csv_similarity.py
- クラスタリング実行:
python main/clustering_meanshift.py
- OpenAI APIを使用してテキストのembeddingを生成
- ChromaDBに保存して効率的な検索を実現
- 小説とCSVデータ間の類似度をコサイン類似度で計算
- 上位15件の結果を可視化
- MeanShiftアルゴリズムを使用
- t-SNEで3次元に削減して可視化
- インタラクティブなHTMLファイルとして出力
- OpenAI APIキーは
.env
ファイルで管理し、GitHubにはアップロードしないでください - CSVデータファイルは各自で準備してください
outputs/
ディレクトリには計算結果が出力されます- 日本語フォント(Hiragino Sans)を使用したグラフ生成
- Python 3.8+
- OpenAI API
- ChromaDB
- NumPy
- scikit-learn
- matplotlib
- plotly