はじめに
AI技術は私たちの生活に急速な変化をもたらしており、具体的にはChatGPTの利用によって、私たちは仕事の生産性を向上させるためのツールを手に入れることができました。
ただし、ChatGPTは公開データに基づいてトレーニングされたチャットツールであるため、企業に社内情報に対する質問には答えることができません。
ChatGPTを社内文書の内容を回答させる技術の1つは、Embedding(エンベディング)です。つまり、質問をChatGPTに送信する際に、回答に参照させたい情報と一緒に送信する技術です。但し、そのデータをどのように作成し、管理し、検索するかという問題が出てきます。
この記事では、そのEmbedding技術についての詳細を紹介させていただきます。
Embeddingとは
ChatGPTに社内文書の内容を回答させるために普通はChatGPTにその内容を学習させる必要があります。その技術は「Fine-tuning」と呼ばれます。
しかし、Fine-tuningができるために学習データを事前に準備する必要があり、データの更新がある時に再学習させるプロセスも必要となります。
なお、Fine-tuningには費用もかかっていてOpenAIは学習データの検閲もしています。
一方でEmbedding技術はChatGPTの再学習させる必要がなくなります。毎回質問をChatGPTに渡す同時に回答に必要な情報も渡せばChatGPTがその内容に沿って回答してもらえます。
Embeddingの実装手順
1. 社内文書の前処理
社内文書の形式はさまざまあります (Word、PDF、Excel、Powerpoint など)。このプロセスを実行する際、冗長な情報が除外され、メインのコンテンツがクラスタリングされます。
2. テキストのベクトル化
処理されたデータは純粋なテキストですが、クエリや検索には使用されていませんので、テキストの特徴を「ベクトル形式」に変えます。
- 各段落には表現言語に問わず意味を持っています。
- 単純なテキストを比較して検索するのではなく、問合せ文書の意味と文脈に従って検索する必要があります。
- コンピュータープログラムは人間の言語を理解できるため、テキストデータを機械が理解できる形式で表現する必要があります。
この問題を解決するには、Tokenizer(トークナイザー)とSentenceTransformation(文章変換)という2つのステップを適用することで「ベクトルデータ」に変換されます。
画像引用:Lena Voita - Word Embedding
ベクトルデータの変換処理は知識データベースを構築する上で最も重要なポイントです。優れた変換処理のAIモデルは、優れたカバレッジ、多言語対応などを備えたベクトルが提供できます。
画像引用:Antoine SIMOULIN - Train a Sentence Embedding Model with 1 Billion Training Pairs
3. データベースに保存してデータをクエリする
ベクトルデータをデータベースに保存して、データを保存、管理、検索します。
※当社では従来のデータベース(MySQL、SQLite、SQL Server 等)を使用しています。
4. 回答に必要な内容を検索する
このステップでは、入力質問をベクトル化して、構築されたナレッジデータベースに同じ検索データタイプを埋め込みます。
検索アルゴリズムは、検索結果と回答速度に影響します。
まとめ
これまでの文書で回答できるチャットボットの構築は下記のようになります。
- 社内文書のベクトル化とデータベース(ナレッジDB)に保存する(トレーニングフェーズ)
- 入力データをベクトル化し、ナレッジDBで検索して、回答に必要な情報を取得、OpenAIのAPIへ質問と併せて送信することで回答を得られます。