見出し画像

Talk-to-the-Cityを用いた社内アンケート分析 by OpenAI Deep Research

社内アンケートの業務改善提案に関するデータ(CSVまたはExcel形式)をtalk-to-the-cityを使って詳細化し、scatter分析を行う方法を説明します。少々お待ちください。


Talk-to-the-Cityを用いた社内アンケート業務改善提案データのscatter分析方法

社内アンケートで収集した「業務改善提案」の自由回答データを分析するには、オープンソースのAIクラスタリングツール**Talk-to-the-City (TttC)**を活用できます。Talk-to-the-Cityの「scatter」コンポーネントを使うと、大量の意見を類似性にもとづいて色分けクラスタに自動分類し、各クラスタに要約タイトルを付与して可視化できます (talk-to-the-cityを使ってみた #OSS - Qiita) (talk-to-the-cityを使ってみた #OSS - Qiita)。以下では、その具体的な手順として (1) インストール・セットアップ、(2) データ前処理、(3) scatter分析の実行、(4) 分析結果の解釈方法 について、Pythonユーザー向けに詳細なコード例を交えて説明します。

1. Talk-to-the-Cityの基本インストール・セットアップ

環境の準備:Talk-to-the-Cityを実行するには、OpenAIのAPIキー(有料のAPI)と、PythonおよびNode.js環境が必要です (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub)。公式リポジトリをクローンしてPythonの仮想環境を構築し、必要なライブラリをインストールします。また、フロントエンド表示用にNode.jsの依存関係もインストールします。手順は以下のとおりです。

  1. ソースコードの取得:GitHubの公式リポジトリtalk-to-the-city-reportsをクローンします(PyPIでの提供はないため、ソースからセットアップします)。

    1. git clone https://github.com/AIObjectives/talk-to-the-city-reports.git cd talk-to-the-city-reports

  2. Python仮想環境の作成と依存関係インストール:Python 3.10〜3.11を推奨(3.12では動作しない場合があります)。仮想環境を作成してアクティベートし、必要ライブラリをインストールします (talk-to-the-city を試してみた | SHARE info Press)(requirements.txtに記載のパッケージ群を一括インストール)。

    1. python3 -m venv venv # 仮想環境を作成 source venv/bin/activate # 仮想環境を有効化(Windowsでは venv\Scripts\activate) pip install -r requirements.txt # 依存Pythonパッケージをインストール

    2. メモ: インストール後、NLTKのストップワード辞書を使用するため、以下のコマンドでダウンロードしておきます(必要に応じて) (talk-to-the-city を試してみた | SHARE info Press)。

    3. python -c "import nltk; nltk.download('stopwords')"

    4. また、埋め込みモデルの不整合エラーを避けるため、sentence-transformersパッケージを最新バージョンにアップグレードするとよいでしょう (talk-to-the-city を試してみた | SHARE info Press):

    5. pip install --upgrade sentence-transformers

  3. Node.js依存関係のインストール:フロントエンド(結果表示用Webページ)の構築に必要なパッケージをインストールします。プロジェクト内のnext-appディレクトリに移動し、npmで依存ライブラリを取得します (talk-to-the-city を試してみた | SHARE info Press)。

    1. cd next-app npm install cd .. # プロジェクトルートに戻る

  4. OpenAI APIキーの設定:Talk-to-the-Cityの分析パイプラインではOpenAIの言語モデル(GPT-3.5/GPT-4)が使用されるため、OpenAIのAPIキーを環境変数として設定する必要があります (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub)。取得したAPIキー(sk-...から始まる文字列)を環境変数OPENAI_API_KEYに設定します。Linux/Macでは以下のように設定できます(Windowsの場合はPowerShellで$env:OPENAI_API_KEY="sk-...")。

    1. export OPENAI_API_KEY="sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

以上で、Talk-to-the-Cityを実行する準備が整いました。次に、分析したいアンケートデータを所定の形式に整えます。

2. データの前処理(CSV/Excelをtalk-to-the-city形式に変換)

入力データの形式:Talk-to-the-City scatterでは、コメントIDコメント本文の2列を持つCSVファイルが必要です (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub)。具体的には、comment-id列に各コメントのユニークなID、comment-body列にコメント本文(提案内容のテキスト)を含めます (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub)。まず、社内アンケートのExcelや既存のCSVから、この形式のCSVを用意します。

  • Excelからの変換例:Excelファイルimprovements.xlsxに「提案内容」という列がある場合、その内容をcomment-body列に、行番号などをIDとしてcomment-id列に設定したCSVを作ります。Pythonのpandasを使った例を示します。

    1. import pandas as pd # Excelファイルを読み込み(シート名やエンコーディングは適宜指定) df = pd.read_excel('improvements.xlsx') # 提案内容の列名を comment-body にリネーム(例では "ProposalText" という名前だった場合) df = df.rename(columns={'ProposalText': 'comment-body'}) # comment-id 列を追加(1から始まる連番IDを付与) df['comment-id'] = range(1, len(df) + 1) # 必要な2列だけをCSVに出力 df[['comment-id', 'comment-body']].to_csv('improvements_comments.csv', index=False)

    2. 上記のコードにより、improvements_comments.csv というCSVファイルが生成されます。このファイルにはcomment-idとcomment-bodyの2列のみが含まれ、各行が一つの提案コメントデータになっています。

  • 既存CSVの利用:既にCSVでデータを持っている場合は、ヘッダーをcomment-idとcomment-bodyに合わせるか、もしくは同様にpandasで読み込んで列名を変更し、上記と同様に保存しなおしてください。

CSVファイルの配置:用意したCSVファイルを、Talk-to-the-Cityプロジェクト内のscatter/pipeline/inputs/フォルダに配置します (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub)。ファイルを配置したら、内容を確認し、ヘッダー行が正しくcomment-id, comment-bodyになっていることを再度チェックしてください (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub)。

補足: comment-body列には各回答テキスト、comment-id列にはその一意のIDが入ります (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub)。必要に応じて追加の列(例えば部署名やカテゴリなど)を含めることも可能ですが、少なくとも上記2列は必須です。

3. scatter分析の実行手順

データの準備ができたら、Talk-to-the-Cityのscatterパイプラインを実行してクラスタリング分析を行います。大まかな流れは 「設定ファイルの作成」→「パイプラインの実行」→「結果レポートの表示」 です。

設定ファイルの作成

Talk-to-the-City scatterでは、解析の内容を指定する設定ファイル (JSON) が必要です。scatter/pipeline/configs/フォルダに配置します (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub)。まず、リポジトリに含まれるサンプル設定example-polis.jsonをコピーして、自分のプロジェクト用に編集するとよいでしょう (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub)。設定ファイルでは主に以下の項目を編集します。

設定ファイルcompany-proposals.jsonの一例を示します(シンプルな設定の場合):

{
  "input": "improvements_comments",
  "question": "社内アンケートで募った業務改善提案",
  "clustering": {
    "clusters": 8
  }
}

補足: さらに高度な設定として、抽出ステップのプロンプトやカテゴリ分け、要約生成(takeaways)、翻訳設定など多くの項目を細かく調整できます (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub) (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub)。しかし基本的なクラスタリング分析であれば、上記のようにinputquestion(および必要ならクラスタ数)程度の指定で十分実行可能です。

パイプラインの実行

設定が整ったら、scatterパイプラインを実行してデータを分析します。ターミナルでプロジェクトのscatter/pipelineディレクトリに移動し、先ほど作成した設定ファイルを指定してmain.pyを実行します (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub)。実行前に環境変数に設定したOpenAI APIキーが有効になっていることを確認してください(前述のexportコマンドを実行したシェル上で走らせます)。

cd scatter/pipeline
python main.py configs/company-proposals.json

上記コマンドを実行すると、以下のようにいくつかのステップを順次処理します。(ログ出力上はextraction(キーフレーズ抽出)、embedding(ベクトル埋め込み生成)、clustering(クラスタリング)、labelling(クラスタへのラベル付け)、takeaways(重要ポイント要約)といったステップが表示されます。)

処理が完了すると、結果は scatter/pipeline/outputs/company-proposals/ 配下に生成されます (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub)。この中のreport/ディレクトリに、分析結果の静的Webレポート一式が出力されます。

結果レポートの表示

生成されたレポートはブラウザで閲覧できるHTML形式のインタラクティブページです (talk-to-the-city を試してみた | SHARE info Press)。そのままではローカルファイル参照になるため、簡易Webサーバーを立ち上げて表示します。

  1. ローカルサーバーの起動:プロジェクトのscatterディレクトリ直下でHTTPサーバーを起動します。方法はいくつかありますが、Python標準のHTTPサーバーか、Node.jsのhttp-serverパッケージを使うと簡単です。

  2. ブラウザで結果にアクセス:上記でサーバーが立ち上がったら、ブラウザで次のURLにアクセスします。

    1. http://localhost:8080/pipeline/outputs/company-proposals/report/

    2. (※環境によってはlocalhostの代わりに127.0.0.1を指定してください (talk-to-the-cityを使ってみた #OSS - Qiita)。)

    3. 正常に表示されれば、Talk-to-the-City scatterによる分析結果のインタラクティブなレポート画面が確認できるはずです。

参考: デフォルトのプロンプト設定では「AIに関する議論か」「英語で書かれているか」を前提としているため、今回のようにテーマが異なる日本語データを扱う場合、クラスタリング結果がうまく出ないケースがあります (talk-to-the-cityを使ってみた #OSS - Qiita)。そのような場合は、プロジェクト内のscatter/pipeline/prompts/フォルダにあるプロンプトファイル(例えばextraction/default.txtなど)を編集し、日本語の入力を想定した指示に書き換えることで改善が期待できます (talk-to-the-cityを使ってみた #OSS - Qiita)。必要に応じて他のプロンプト(要約やラベリング用)も調整すると精度向上に繋がります。

4. 結果レポートの解釈方法

Talk-to-the-City scatterが生成するレポートには、アンケートの自由回答が**2次元空間上の点群(scatterプロット)**として可視化されています。各点が1つの回答(提案)に対応し、類似した内容の回答同士が近くにプロットされ、色とクラスタIDでグルーピングされています。分析結果の解釈にあたって押さえておきたいポイントは次のとおりです。

  • クラスタとタイトル: 同じ色で示された点の集まりが一つのクラスタ(意見群)です。Talk-to-the-Cityは回答同士の類似性にもとづいて自動的にクラスタリングを行い、各クラスタに代表的なタイトル(要約ラベル)を付与します (talk-to-the-cityを使ってみた #OSS - Qiita)。例えば「業務フロー改善」「ITツール導入」「職場環境の整備」といった具合に、そのクラスタ内の提案内容を要約した見出しが表示されます。タイトルを読むことで、そのグループがどのようなテーマの提案を含んでいるか一目で把握できます。

  • 散布図上の配置: プロットされている2次元空間において、距離が近い点同士は内容的に近い意見であることを意味します。軸に特定の意味はありませんが、埋め込みモデルによって高次元ベクトル化された提案文を可視化のために主成分やt-SNE等で2次元に圧縮しているため、距離感で意見の類似度を直感的に捉えることができます。散布図上で密集しているクラスタは回答者から多数の共通した提案が出ている分野であり、点がばらついているクラスタや離れた個別の点はよりユニークな提案と言えます。

  • 各クラスタ内の詳細: レポートではクラスタを選択したりホバーしたりすることで、そのクラスタに含まれる個々の提案コメントの内容を閲覧できます。タイトルだけでなく実際の提案文も読むことで、より具体的な課題やアイデアを把握できます。社内の業務改善提案の分析であれば、クラスタごとに「多くの社員が指摘している問題点や改善アイデアは何か」「共通するテーマは何か」を読み取ることができ、今後の改善施策の優先順位付けに役立ちます。

  • 要約 (Takeaways): scatterレポートでは、クラスタごとの分類だけでなく、データ全体に対する**総合的な要約(キーテイクアウェイ)**も自動生成されている場合があります。設定によりますが、画面上部などに「提案全体のまとめ」や「主要な論点」などの形で文章が表示されます。これはTalk-to-the-Cityが全回答をもとに抽出した重要ポイントの要約です。例えば「社内コミュニケーションの円滑化を求める声が多い」「ITインフラ改善の必要性が複数指摘されている」など、データ全体の傾向を示す内容になっています。日本語のデータを解析した場合でも、要約文が英語で出力されることがあります (talk-to-the-cityを使ってみた #OSS - Qiita)が、その場合は適宜翻訳して解釈してください。

  • 結果の活用: 以上のようなクラスタリング結果を解釈することで、社内から寄せられた業務改善提案を定性的に把握できます。特に繰り返し登場する提案テーマ多数の声が上がっている改善要求を把握できるため、経営層や担当部署への報告資料作成にも役立ちます。各クラスタのタイトルと代表的な意見を抜粋し、「○○に関する改善提案が◯件」(例:「社内ITツールに関する改善提案が10件」)というようにまとめれば、社内アンケートの結果を効果的に共有できるでしょう。

最後に、Talk-to-the-Cityを用いた分析にはOpenAI APIの利用が含まれるためコストが発生しますが、GPT-3.5-turboで50件程度の回答を処理した場合でも一回あたり0.05ドル程度(数円)と比較的低コストで実行できます (talk-to-the-cityを使ってみた #OSS - Qiita)。より大規模なデータや高度な要約を行う場合はGPT-4など高性能モデルへの変更も検討できますが、その場合コストは上昇します (talk-to-the-cityを使ってみた #OSS - Qiita)。分析ニーズに応じてモデルやプロンプトを調整しつつ、Talk-to-the-Cityを活用して社内の声を効率的に分析・可視化してみてください。

参考文献・情報源: 本手順は公式ドキュメントおよび有志による利用レポートに基づいています (anno-broadlistening/scatter/README_ja.md at main · takahiroanno2024/anno-broadlistening · GitHub) (talk-to-the-cityを使ってみた #OSS - Qiita)。詳細な設定項目や高度な活用方法については、公式リポジトリのREADMEや関連資料も参照してください。

いいなと思ったら応援しよう!