---
title: MapForceとGPT-4を用いた、AIによるサポートリクエストの感情分析
date: 2023-07-17
categories:
  - data-integration
  - database
  - etl
tags:
  - ai
  - ai-data-integration
  - data-mapping
  - mapforce
  - xmlspy
description: ETLデータマッピングプロジェクトにおいて、自然言語テキストの効率的な感情分析を行うために、AIの力を活用する方法を学びましょう。
---
Status: #blog

Tags:  #ai #ai-data-integration #data-mapping #mapforce #xmlspy

Categories: [data-integration](/blog/ja/category/data-integration.md) | [database + sql](/blog/ja/category/database-sql.md) | [etl](/blog/ja/category/etl.md)
# MapForceとGPT-4を用いた、AIによるサポートリクエストの感情分析

テキストの感情分析、例えばユーザーレビューなど、自動化は従来から課題でした。自然言語には非常に多くの複雑な要素が含まれるため、システムは文脈やニュアンスを分析する上で困難に直面していました。そのため、多くの手作業が必要でした。

現代のAIシステム、特にOpenAIのGPT-4のような大規模言語モデル（LLM）を基盤とするシステムの多くの有用な機能の一つは、それらが～であるということです _非常に_ 自然言語のテキストデータに対して、感情分析を行うのが得意です。 その機能を活用することで、MapForce上で非常に効率的なデータベースソリューションを構築できます。例えば、サポートデータベースに新たに入力されたすべてのレコードを処理し、特定のサポートリクエストやその他の顧客からのフィードバックが、自動的に判断できるようになります _肯定的な_, _否定的な_, ～を構成する _バグ報告_, または、～とみなされるべきである _機能要望_.

![機械学習を用いた感情分析をテーマにした、装飾的なイメージ写真 ](/blog/images/hero-sentiment-analysis.png)

<!--more-->

## OpenAIのプレイグラウンドで、GPT-4を用いた初期テストを実施しました

もし、この記事の内容を追ってみたり、最終的にこの手法を独自のデータベースシステムに実装したい場合は、OpenAIのアカウントを作成し、実装に使用できるAPIキーを取得する必要があります。また、OpenAIのポータルにある「Playground」にアクセスできるようになり、初期テストを実行したり、MapForceで適切なJSONリクエストを構築するために必要なサンプルJSONの入力を得ることができます。

常に、LLM（大規模言語モデル）AIシステムを扱う上で最も重要なステップの一つは、適切なプロンプトを開発することです。望ましい結果を得るために、できる限り正確なプロンプトを作成する必要があります。今回の目的のために、以下のプロンプトを使用します

`“Classify the sentiment in the following statement using these possible results: Negative, Positive, Feature Request, Bug Report.”`

そして、次に分析したい顧客からのフィードバックを行います。OpenAI Playgroundでこれをテストするために、以下の設定を選択します。モードを「チャット」、モデルを「gpt-4」、温度を1、最大長を512、Top Pを1に設定し、FrequencyとPresenceのペナルティは両方とも0のままにします。その後、プロンプトを入力し、最初の顧客からのフィードバックコメントを入力し、「送信」ボタンをクリックします

[![OpenAI Playgroundでテキストの感情分析をテストする](/blog/images/01-openaiplayground.png)](01-openaiplayground.png)

GPT-4 AIは、すぐに「_肯定_」という正しい答えを返します。ここでさらにいくつかの例を試して、プロンプトが他の場合でも適切に機能し、期待される感情分析の結果が得られることを確認できます。

次に、コード表示ボタンをクリックし、言語選択ポップアップでPython（デフォルト）からJSONに変更します。その後、表示されたコードをコピーし、XMLSpyに貼り付けて、詳細を確認します [JSON形式のデータを行と列で表示するビュー](https://www.altova.com/ja/xmlspy-xml-editor/json-editor-download#Grid_View):

![GPT-4 AI API との連携に使用する JSON 形式のリクエスト](/blog/images/02-json-request.png)

JSONの構造は比較的シンプルに見えます。また、このコードからJSONスキーマを自動的に生成することも可能です。後で、このスキーマをXMLSpyやMapForceで使用して、ウェブサービスの要求設定を行うことができます

![XMLSpyによって自動生成されたJSONリクエストスキーマ ](/blog/images/03-json-request-schema.png)

## XMLSpyからOpenAI APIをテストする

次に、OpenAIのチャットAPIを正しく理解し、その結果として得られるJSON形式のデータを確認したいと思います。そこで、便利なツールを使って、手動でテストを実行してみます [HTTP テストウィンドウ](https://www.altova.com/ja/xmlspy-xml-editor/advanced#http-window) XMLSpyは、メインの作業ウィンドウの下に、メッセージウィンドウの隣にある別のタブとして表示されます。

HTTPタブで、HTTPリクエストメソッドをPOSTに切り替え、OpenAI Chat APIのエンドポイントとなるURLである[https://api.openai.com/v1/chat/completions](https://api.openai.com/v1/chat/completions)を入力し、Content Typeをapplication/jsonに設定します。その後、上記Playgroundから取得したサンプルJSONリクエストを、Bodyセクションに貼り付けます

![XMLSpyのHTTPウィンドウを使用して、OpenAI APIにJSON形式のリクエストを送信するテストを行う方法](/blog/images/04-http-request.png)

次に、リクエストを認証するために、ヘッダーに秘密のAPIキーを記述する必要があります。そのため、「ヘッダー」タブをクリックし、新しい行を追加します。その行のヘッダーには「Authorization」と入力し、値には「Bearer 」の後にスペースを空けて、続けて秘密のAPIキーを入力します。OpenAIに複数のアカウントをお持ちで、正確な課金を保証したい場合は、オプションで別の行を追加することもできます。その行のヘッダーには「OpenAI-Organization」と入力し、値にはOpenAIから割り当てられた組織IDを入力してください

![XMLSpyのHTTPウィンドウにおけるヘッダー設定 ](/blog/images/05-http-headers.png)

もちろん、上記のスクリーンショットでは、秘密鍵や組織IDといった機密情報の正確な値をぼかしています。

それでは、上記のHTTPリクエストをOpenAIのAPIエンドポイントに送信するために、「送信」ボタンをクリックし、どのような応答が返ってくるかを確認する準備ができました

![OpenAI APIのテストに対する応答が受信されました ](/blog/images/HTTPresponseXMLSpy.png)

まず、良い知らせは、780ミリ秒以内に「200 OK」という応答を受け取ることができました。その応答には、JSON形式で記述されたデータ（ペイロード）が含まれており、その内容は「application/json」という形式です。このデータには、AI「アシスタント」が提供した回答が「Positive」という形でメッセージとして含まれています。つまり、XMLSpyから実際にHTTPリクエストをAPIに送信し、正しい応答を受け取ることができたため、以前のOpenAI Playgroundでのテストを問題なく再現できました。

次に、HTTPテスターのウィンドウにある「ファイルに保存」ボタンを使って、この応答をファイルに保存します。その後、そのファイルを開き、XMLSpyを使って、サンプルとなるJSON応答メッセージから自動的にJSONスキーマを作成します。今回作成するスキーマは、ウェブサービスから期待されるJSON形式の出力構造を記述しており、このスキーマを使ってMapForceでそのデータを処理することになります。

[![XMLSpyによって生成されたJSONレスポンスのスキーマ ](/blog/images/JSONresponseSchema.png)](JSONresponseSchema.png)

## サポートデータベースのサンプル

ほとんどの技術サポート管理システムは、SQLやその他のデータベースを基盤としているため、この手法はすべてに容易に適用できます。しかし、今回のブログ記事の例では、SQLiteを使用した簡略化された顧客フィードバックデータベースを使用します

![SQLiteデータベースを使用した、顧客からのフィードバックサンプル集 ](/blog/images/CustomerFeedback-Database-Schema.png)

そして、このデータにはサンプルデータが含まれており、これを利用してMapForce上で統合テストを実行し、顧客からのフィードバック全体に対する感情を分析することができます

![[FeedbackDatabaseData.png]]

## MapForceでのデータベースマッピングの作成

これで、データベースからすべてのレコードを読み込み、OpenAI APIを呼び出して感情分析を行い、その結果をデータベースに書き込む、MapForceによる変換プロジェクトまたはETLプロジェクトに必要なすべての要素が揃いました。

ETLマッピングを設計する最初のステップは、顧客フィードバックデータベースオブジェクトをマッピングに2回挿入することです。1回は入力として、もう1回は _抽出する、抽出物、抜粋する_ (ETLの一部として) そして、最終的な出力としても機能し、メインテーブルのオブジェクトとIDを接続します。MapForceは他のすべての列も接続できますが、実際にはそれらの接続は必要ないので、以下の構成になるまで、それらを削除することができます

![データベースのETLプロジェクトの構築 ](/blog/images/database-etl-setup-1.png)

入力と出力の間に多くのスペースを設けています。これは、後ほどウェブサービスを呼び出すコードを挿入する場所だからです。しかし、その前に、データベースからの出力と、データベースに対する操作について、具体的に定義していきましょう _負荷_ (ETLの一部として) データベースオブジェクトを右クリックして、ダブルクリックすることで操作できます

![データベースの更新設定](/blog/images/DatabaseUpdateSettings.png)

まず、最初のラジオボタンが「なし」に設定されていることを確認してください。なぜなら、最初のレコードの前に特別な処理は行いたくないからです。次に、2番目の列の列ヘッダーを「更新する場合」に変更し、ID列にあるコンボボックスを「等しい」に設定します。これにより、MapForceは、マッピングによって提供されたIDが、データベースに既に存在するIDと等しいレコードに対して、データベース内のデータを更新するように指示されます。これで必要な設定は完了です。再度「OK」をクリックしてください。

さて、OpenAI APIを呼び出すためのウェブサービスコンポーネントを挿入するタイミングです。ツールバーにある「ウェブサービス関数を挿入」ボタンをクリックしてください。その後、XMLSpyでAPIをテストする際に設定した内容に基づいて、必要なAPI呼び出し設定を構成してください。

以前と同様に、HTTPリクエストのメソッドをPOSTに設定し、ヘッダーには秘密のAPIキーに加え、必要に応じて組織IDを含める必要があります。また、MapForceに対して、リクエストとレスポンスのペイロードの構造を、事前に作成した2つのJSONスキーマを使用して定義する必要があります

![OpenAI APIを利用する際のウェブサービス連携設定 ](/blog/images/WebServiceCallSettings.png)

定義が完了すると、ウェブサービスオブジェクトがMapForceのデザイン画面に表示され、機能を連携させるために、それに合わせて接続線を引くことができます。まず、顧客フィードバックテーブルの各レコードに対して、ウェブサービスを一度呼び出す必要があるため、それを「入力」に接続します

![[InsertWebServiceIntoMapping.png]]

そして、AIから返されるメッセージに含まれる「content」属性の中に、その結果が出力されます。そこで、その内容を、出力データベースオブジェクト内の「感情」という列に紐づけます。

残された作業は、ウェブサービスのリクエストに必要なその他の入力情報をすべてAPIに接続することです。上記のサンプルJSONファイルを参照すれば、必要な入力情報が正確にわかります。その多くは定数であり、例えばモデルの種類として「gpt-4」や、その他のパラメータの値などが該当します。

最も重要な入力は、指示文とデータベースからのフィードバックです。そのため、これらの情報を結合し、ウェブサービス上のコンテンツ入力欄に送信しています

![[FinalMapping.png]]

通常、ここまでにデザイン作業は完了するところです [ETLマッピング](https://www.altova.com/ja/mapforce/etl-tool) そして、私たちは今、その変革を実行できるようになりました。しかし、GPT-4は最も高度なモデルであり、多くの人が利用しているため、OpenAIは、1分間に送信できるウェブサービスのリクエスト数に制限を設けています。もし今すぐこの変革を実行すると、私たちは容易にその制限を超えてしまうでしょう。

したがって、OpenAIのWebサービスインターフェースへの呼び出し間に、わずかな遅延を挿入する必要があります。具体的には、約1秒間隔で呼び出しを区切るために、`sleep()`関数を呼び出す必要があります。MapForce v2024に新たに搭載された`sleep()`関数を使用すれば、簡単に実現できます

![[MF-Sentiment-Analysis-With-Sleep.png]]

MapForceの「出力プレビュー」タブでは、ここで変換結果を確認できます。このタブをクリックすると、MapForceはETLマッピングプロジェクトを実行し、AIによる感情分析の結果に基づいてデータベースを更新するために必要なSQL文を生成します

![ETLプロセスで使用されるSQL文を自動生成します ](/blog/images/SQLoutput.png)

そして、今ではこのSQLコードをMapForceから直接実行し、データベース内のデータを実際に更新することができます。

もちろん、実際の運用においては、このプロセスをさらに自動化し、新たに寄せられるサポートリクエストを自動的に分析できるようにしたいものです。これを行うには、このETLマッピングプロジェクトを、社内ITインフラストラクチャ、またはプライベートクラウドまたはパブリッククラウド上の[MapForce Server](https://www.altova.com/ja/mapforce-server)に展開するのが簡単です。その後、[FlowForce Server](https://www.altova.com/ja/flowforceserver)を使用して、この分析を実行するタイミング（特定のトリガーやイベントに基づいて）など、ワークフローの要件を自動化できます。

ちなみに、このブログ記事に掲載されているXMLSpyやMapForceのスクリーンショットは、すべて新しいダークテーマを使用している状態で撮影されたものです。これはあくまで私の個人的な好みによるもので、もちろん、お客様は新しいライトテーマや、従来のクラシックテーマなど、ご自身の好みに合わせて当社の製品をご利用いただけます。

MapForceでAIを活用したデータ変換を試したり、XMLSpyでAI関連のウェブサービスAPIを試したりするには、以下のものをダウンロードできます **30日間の無料トライアル** 両製品に加え、その他にも開発者にとって役立つ様々なツールを提供しています [最新版のAltova MissionKitをダウンロードします](https://www.altova.com/ja/download) 弊社のウェブサイトからダウンロードできます。AI関連の作業には、Enterprise Editionの64ビット版をご利用いただくことを推奨いたします。

* * *
