GPT-3.5を活用して半構造化テキストから分析要素を抽出する

 
重要:個人情報や機密情報の使用に関する注意喚起(必ずお読みください)
 当検証で紹介している技術やサービスの使用は、読者の皆様自身の判断と責任で行ってください。特に、個人情報や機密情報を含むデータの取り扱いについては、最大限の注意を払い、適切なセキュリティ対策を講じることが不可欠です。
 検証や実際の利用を行う際には、常にプライバシー保護の法律、規制、およびベストプラクティスを遵守するよう心掛けてください。また、第三者のデータを使用する場合は、必要な同意を得ること、及びそのデータの使用が法律に準じていることを確認することが重要です。
 本ブログや筆者、所属する団体は、紹介する技術を用いて行われるいかなる活動から生じる直接的または間接的な損害に対して、責任を負いかねます。技術を使用することによって生じ得るリスクを理解し、自己の責任で慎重にご活用ください。
 ご不明点や懸念がある場合は、クラウドベンダーや専門家に相談することをお勧めします。
 当検証の情報を活用することで、読者の皆様が新たな知識やスキルを安全に身に付け、ビジネスでの活用をすすめていただければ幸いです。
 

検証概要

 
 データ分析基盤では、様々な形態のデータがソースとして活用されます。これには、構造化データ、半構造化されたテキスト、マークアップ言語、データフォーマット、さらには非構造化データとしての画像、音声、映像などが含まれます。本稿では、データ分析基盤におけるデータの入口であるデータレイクに取り込まれた半構造化テキストデータから、分析用データを抽出する方法について検証します。テキストデータを解析するエンジンは、GPT-3.5を使用します。
図1.本検証の対象領域
図1.本検証の対象領域
 
 本検証は2024年1月時点の情報に基づいています。
 検証時点でChat GPTの最新モデルはGPT-4であり、精度の向上が確認されています。しかし、GPT-4には3時間あたり40件のメッセージレートの制限が存在し、多くのリクエストを処理することができません。このため、GPT-3.5の使用を選択しています。
 
 サンプルとなる文章には、SNSの投稿内容をスクレイピングしたデータを使用します。(内容はオリジナルを編集しています。)
 GPT-3.5のAPIを利用し、SNSの投稿文から次の分析要素を抽出する検証を行います。
  1. センチメントスコア(1~10)
  1. 要約された文章
  1. 出現キーワード(配列)
  1. 「~について述べられているか」の判定
 
  上記a~dは、データ分析で例えば次の用途に活用することが可能です。
  • 感情分析(a)
    • 感情分析の例
      感情分析の例
  • 内容の把握(b)
  • ワードクラウド、出現キーワードランキング(c)
    • ワードクラウドの例
      ワードクラウドの例
  • 分析前処理時のデータの要否判定(b,c,d)
  • その他
 

検証環境

 
 検証は下記の環境で行っています。
OSWIndows 11 Pro
プログラム言語Python 3.12.1
AIOpenAI Chat GPT
API(Model)gpt-3.5-turbo
構成と概要フロー
 
 

 

検証内容

 

入力データ

 
 SNSからスクレイピングを通じて収集した投稿データ(JSON形式)を使用します。このデータは、テレビブランド名(アクオス、ブラビア、ビエラ等)をキーワードとして投稿から抽出したものです。
 
スクレイピングによって抽出したサンプルデータ
 

処理内容

 
 投稿内容に基づき、GPT-4に以下の4つの質問をリクエストし、その回答を収集しています。
  1. 文章のセンチメントスコアを1~10の整数で評価して、その整数値だけを返してください。
  1. 30文字以内に要約し、要約文だけを返してください。
  1. 文章からキーワードを抜き出し、JSON配列で返してください。
  1. 次の文章がテレビの評価をしているかYESかNOかで答えて下さい。
 
GPT-3.5を使って分析要素を取得するプログラム
 動作の前提として、環境変数「OPENAI_API_KEY」の設定、Pythonライブラリ「openai」のインストールが必要です。
 
 

出力データ

 
処理内容で取得した4つの回答を付与したデータを出力します。
 
分析要素が追加されたサンプルデータ(キー:Gpt_****)
 
 

検証結果

 

回答の精度について

 
 提示した3件のサンプル投稿への質問に対してGPTから得られた回答は、以下の結果を示しています。全体としては自然な回答に感じられます。ポイントを各データの欄外に記載します。
【1件目】
原文結構長い間、使っていた4K48インチテレビが壊れたので、有機EL4K55インチのテレビBに買い替え!風景と夜景がきれいで最高。音質は低温が弱い印象。。。
センチメントスコア8
要約長く使っていた48インチテレビが故障し、55インチの有機ELテレビBを購入しました。風景と夜景が美しく、最高ですが、音質はやや弱いです。
キーワード "[\"4K48インチテレビ\", \"壊れた\", \"有機EL4K55インチのテレビB\", \"買い替え\", \"風景\", \"夜景\", \"きれい\", \"最高\", \"音質\", \"低温\", \"弱い\"]"
テレビに関する投稿かYES
  • センチメントスコアが8と算出されています。全体としてはポジティブな投稿のため、妥当であると感じられます。
  • 要約を30文字以内で指定しましたが、それ以上の文字数で回答されています。指定の仕方が悪いのかもしれません。
 
【2件目】
原文昨日納品されたテレビB、液晶にスジ???が入っていて気になる、、、初期不具合の扱いで交換の手配中
センチメントスコア4
要約昨日納品されたテレビBに液晶に不具合があり、交換手配中です
キーワード[\"テレビB\", \"液晶\", \"スジ\", \"初期不具合\", \"交換\", \"手配中\"]
テレビに関する投稿かYES
  • ネガティブな発言のため、ニュートラル(5~6)よりも低い値が算出されています。
 
【3件目】
原文スマホをアクオスに機種変しました!
センチメントスコア6
要約私はアクオスに携帯電話を変更しました!
キーワード[\"スマホ\", \"アクオス\", \"機種変\"]
テレビに関する投稿かNO
  • テレビについての発言でないことが、正しく判定されています。

処理性能について

 
性能測定の入力データ仕様
件数3
1件当たりのリクエスト数4
GPT3.5に対する総リクエスト数12
測定結果
1回目3’06’’
2回目3’47’’
3回目3’24’’
 本検証では無償バージョンを使用しており、1分あたりのリクエスト件数が3件に限定されています。この制約が現在の性能に影響を与えています。有償バージョンへの移行により、性能の向上が期待できます。

検証結果を踏まえた見解

 
 検証結果を踏まえると、問い合わせに対する回答の精度に大きな問題は見られず、実際の利用シナリオにおいても、サンプル数を増やすなどして検証の深度を増すことが可能であると考えられます。次のステップとしては、より高度な性能評価を目指し、有償バージョンの利用を検討することが必要です。この過程で、性能測定の精度を高めることはもとより、コストの妥当性を評価すること、そしてデータの安全性を確保することが、重要な検証ポイントになります。
 加えて、この技術は進化を続けており、将来的な発展の可能性を見極めることも、継続的な評価として必要です。技術の最新動向に注意を払い、その進化に応じて適切な対応策を講じていくことが、成功への鍵となるでしょう。