LLMを使ったトピックモデリングの新手法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70223/f401a9c0-c7f8-64ed-6811-803c0ec22a55.png)
## 導入
トピックモデリングとは、一連のテキスト文書に隠れたテーマまたは「トピック」を発見するための機械学習手法です。通常のトピックモデリングは教師なし学習ですので、テキスト内のパターンや構造を識別するために、事前にラベル付けされたデータは不要です。現在一般的なトピックモデリングの手法では、文書内の単語の共起を分析して潜在的なトピックを発見し、各文書にトピックを割り当てます。

トピックモデリングの主な目的は、大規模なテキストデータを整理、理解、要約する方法の提供です。トピックモデリングにより、個々の文書を代表するようなトピックを特定することで、ユーザーは個々の文書を読まなくても、データに存在するテーマやアイデアを迅速に把握できます。

トピックモデリングの適用範囲としては、以下が一般的です。

- コンテンツ分析: トピックモデリングを使うと、ニュース記事、ソーシャルメディア投稿、顧客レビューのコンテンツを分析し、トレンドのトピック、感情、意見を特定できます。
- 文書のクラスタリング: 文書の特徴の分布に基づいて文書をグループ化することで、管理用に文書をクラスタリングし、整理し、大規模なテキストデータを簡単に検索したり抽出できます。
- 情報検索: トピックモデリングにより、ユーザー向けにトピックベースの検索や推薦ができます。ユーザーが関連文書をより簡単に見つけられれば、情報検索システムを改善できます。
- トレンド分析: 長期にわたるトピックモデリングをテキストデータに適用することで、分析担当者は新たなトレンドを特定し、トピックの進化を追跡し、特定のテーマがどのように発展し、変化するかについての洞察が得られます。
- 異常検出: トピックモデリングを使うと、検出されたトピックのいずれにも適合しない文書を識別でき、事故やその前兆現象をテキストデータ内の珍しい語句として、あるいは異常値として検出できます。

このように、従来のトピックモデリングの手法には幅広い用途があります。しかし、多くの場合は専門的な知識とツールを必要とするため、実態としては、大企業や専門家以外の人々にとっては利用しにくいものでした。この記事では、大規模言語モデル (LLM) を活用してMicrosoft Excel内でトピックモデリングを処理し、より使いやすくする新手法を提案します。

## LLM 用の Excel アドイン
[生成AIツール for Excel](https://medium.com/@kappei/a-novel-approach-to-topic-modeling-using-large-language-models-llms-648c131393d2#:~:text=in%20for%20LLMs-,Generative%20AI%20Tool%20for%20Excel,-is%20an%20add)は、日本企業であるビジー・ビーによって開発されたExcelアドインで、ユーザーはExcel内で生成AIの機能を利用できます。このアドインは[OpenAI](https://medium.com/@kappei/a-novel-approach-to-topic-modeling-using-large-language-models-llms-648c131393d2#:~:text=with%20APIs%20from-,OpenAI,-%2C%20Google%20and)、[Google](https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/gemini)、[Anthropic](https://www.anthropic.com/api)のAPIと統合されており、ユーザーはスプレッドシート内で直接AI機能を使用してテキストの生成や分類など、さまざまなタスクを実行できます。

生成AIツール for Excelを使用するには、ユーザーは OpenAI、Google、Anthropic のアクティブなアカウントを持ち、アドイン設定内でAPIキーを指定する必要があります。

生成AIの機能をExcelに導入することで、ユーザーは広範なプログラミング知識や外部ツールを必要とせずに、タスクを自動化し、データを分析し、より効率的にコンテンツを生成できるようになります。

## 方法論
最近、日本のメーカーの1年分のカスタマーサポート履歴(約2万5000件)を分析する機会がありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70223/323a9683-3b08-4689-b639-246bf5b6ff67.png)
2万5000行のサポート履歴には、ケース番号、製品カテゴリ、購入日、サポート日、修理リクエストの詳細の5つの列のデータがあります。

記録には製品カテゴリのみが含まれており、修理リクエストの分類は含まれていなかったため、この企業からデータを分類できないか相談があったのです。今回はこのデータを使って、トピックモデリングの新手法の手順を説明します。

### ステップ 1: トピックの抽出
この方法の最初のステップを私は「トピック抽出」と呼んでいます。トピック抽出により、トピックをカスタマーサポート履歴に「大まかに」割り当てられます。具体的には次の数式を使います。

```
=BB.ASK(CONCAT("以下のテキストを簡潔に表す分類（初期不良、故障、修理依頼など)を一言で回答せよ: ", CHAR(10),”### テキスト”,[@[修理リクエストの詳細]]),,,”gpt-3.5-turbo”)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70223/7be22ce8-85c2-a22d-0eec-363b77fee637.png)
この数式をExcelの各行に適用すると、各行の修理リクエストの詳細からトピックを抽出できます。

全体像を把握することから始める従来のトピックモデリングとは異なり、この手法では個々のテキストにトピックを「大まかに」割り当てることから始めます。テーブルの最初の行に数式入力し、動作確認の後、すべての行に適用することで、数十秒以内（ティアに基づくレート制限の影響を受けるので、数十分かかる人もいる）に2万5000行すべての分類を取得できました。ただし、このステップで分類は900以上もあります。これでは使い物になりません。

### ステップ 2: トピックの蒸留
次のステップは、900以上もあるトピックを整理する「トピックの蒸留」です。不要な成分を取り除き、必要な成分だけを抽出するので「蒸留」と呼ぶことにしました。

このステップでは、KJ法的に大まかなカテゴリーを取捨選択し、徐々に整理・統合していきます。一番大変な作業です。最終的に900を超えるトピックを37に減らせました。

### ステップ 3: トピックの割り当て
2万5000件のカスタマーサポート履歴が37カテゴリーに分類できるとわかったので、生成AIツール for ExcelのBB.CATEGORIZE関数を利用します。BB.CATEGORIZE関数は、AIにカスタム関数の呼び出しを依頼できる機能であるFunction Callingを利用しています。生成AIツール for Excelのでは、テキストとカテゴリーのリストを引数として受け取り、分類を返します。このステップの数式は次のとおりです。

```
=BB.CATEGORIZE([@[修理リクエストの詳細]],トピックス[トピック])
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70223/2fbb0f79-1959-5808-8897-36a8d45b51f2.png)

## 課題と結論
この方法は有望ですが、課題がないわけではありません。まず、修理リクエストの詳細は人間向けのメモとして書かれることが多い（ファイルが開かないこもケースが開かなくなったことも「開けない」とだけ書かれることがある）ため、AIに意味が通らなくなるのです。この問題は、テキストに文脈が含まれるよう、AIに読ませるテキストに製品カテゴリーを追加することで軽減できます。

次に、トピックの抽出ステップ中に、一部の問い合わせが分類できませんでした。BB.CATEGORIZE関数を実行すると、59件のN/Aエラーが発生したのですが、原因はビデオ再生の問題を示すトピックが存在しないのが原因でした。この問題は、各製品カテゴリーのトピックを個別に抽出することで解決できます。

最も重要な課題は、トピックの割り当ての正確性を検証することにあります。2万5000件のテキスト分類は人間には不可能だからAIを使ったわけで、人間には全量を確認できません。この問題は、[前の記事](https://qiita.com/kappei/items/960433c4afc3fb481a97)で説明したように、複数のAIを使用して分類を決定するBB.MAJORITY関数を使って解決できます。複数のAIを使用するため、追加コストが発生するものの、生成AIは手頃な価格ですから、大きな懸念事項にはならないはずです。

さて、この記事では、Excel内でLLMを使用して大量のテキストにトピックを割り当てる新しい方法を紹介しました。トピックの数は、トピックをより大きなカテゴリに結合するか、最初のトピック抽出段階から項目数の多いトピックを再分類することで調整できます。

手頃な価格のLLMの出現により、より幅広いユーザーがトピックモデリングを利用できます。評価手法が確立されていないなどの課題は残っていますが、LLMならではの手法は、トピックモデリングの将来に有望です。

アドインの将来のバージョンでは、テキストの埋め込み（Embedding）に対応する予定です。トピックモデリングの結果を視覚化し、解釈できれば、ユーザーはExcel内で散布図やクラスタリングマップを直接生成できます。トピックと文書間の関係を調査して理解するための強力な方法になるはずです。

この新しい方法に関するご意見やフィードバックをお待ちしております。