これは「関連記事表示 by Vector Search 2.0」のデモサイトです。記事コンテンツはソリューションブログから引用しています。
AIがテキストの意味的要素を数値化!KARTE Craft AI Modulesを使ったテキスト分析

AIがテキストの意味的要素を数値化!KARTE Craft AI Modulesを使ったテキスト分析

こんにちは、Customer Engineerのkazです!最近、『チ。-地球の運動について-』に夢中になっています。学生時代に感じた物理への憧れを思い出させてくれる作品で、ぜひ皆さんにもおすすめしたいです。私はピャスト伯が好きです。

さて、近年企業が顧客理解を深めるためにアンケートやレビューなどの1st Partyデータを活用することが一般的になっています。しかし、膨大な量のフリーテキスト回答データを人手で分析するのは大変な作業です。

KARTE Craft AI Modules では、アンケートなどで収集された自由記述データに対して、文意の成分ごとの大きさをベクトルサイズで表現する機能を提供します。これにより、肯定的な感情を含む回答を効率的に抽出したり、回答の傾向を数値化することができます。

具体的な活用事例としては、大規模アンケートの感情分析や、商品・サービスに対するユーザーの評価把握などが考えられます。KARTE Craftのこの機能を使えば、膨大なテキストデータの中から重要なインサイトを見出すことができるでしょう。

ぜひ、KARTE Craft AIモジュールを活用して、テキストデータの高度な分析に挑戦してみてください。

アウトプットイメージ

最終的なアウトプットイメージは次の通りです。 今回は、一例として食品についてのレビューに「商品に満足している」「商品に不満がある」という文意が、それぞれどの程度含まれているかを分析しました。

分析を実行すると、スプレッドシーに入力されているテキストごとに、Craft Functions変数で指定したキーワードの文意の含有量が計算され、 Google スプレッドシートに出力されます。

文意の大きさは 0~1 の数値で 1 に近いほど文意が強いことを表しています。 一例として2行目の商品レビューを例にデータを読み解いてみると、文意の大きさは

  • 「商品に満足している」: 0.392
  • 「商品に不満がある」:0.301

となっています。そのため、このレビューは「商品に満足している」という意味合いの強いレビューだと解釈することができます。このように、この分析によるアウトプットは膨大な量のフリーテキストから定量的に文意を抽出することで、回答の傾向を数値化するのに役立つでしょう。

注意点

前提として、次の点に注意をしてください。

  • KARTE Craft Functions, KARTE Craft AI Modules を利用していることを前提としています。
  • Google SpreadSheet API を使用することを推奨しています。
  • 本ソリューションは Google Spread Sheet API を通わずに使用することも可能ですが、配布しているテンプレートは SpreadSheet を使ってデータの入出力を行うように作られているため、Spread Sheet APIを使用しない場合は Functions を適宜カスタマイズしてご利用ください。

設定手順

設定の手順は次の通りです。

  1. API v2 アプリを作成する
  2. API v2 アプリの アクセストークンを Craft Secret Manager に登録する
  3. Googleサービスアカウントを作成する
  4. GoogleサービスアカウントのJSONキーファイルの中身を Craft Secret Manager に登録する
  5. Googleサービスアカウントに対象スプレッドシートへの権限を付与する
  6. Craft Functionsのファンクションを作成する

順番に見てみましょう。

1. API v2 アプリを作成する

KARTEのAPIを利用するために、API v2アプリを作成します。

  • [ストア > API v2設定] からアプリを新規作成
  • [アプリタイプ] を Craft に設定
  • 必要なscopeを追加
    • beta.craft.aimodules.openai.embeddings
  • アプリを保存し、一度だけ表示されるアクセストークンをメモしておく

2. API v2 アプリの アクセストークンを Craft Secret Manager に登録する

API v2 アプリのアクセストークンをCraft Functionsから安全に利用するために、Craft Secret Manager に登録します。

  • [Craft > シークレット] からシークレットを新規作成
  • [名前] に、わかりやすい名前を入力
  • メモしておいたAPI v2 アプリのアクセストークンを [シークレットの値] に入力し、作成
  • シークレット名をメモしておく

3. Googleサービスアカウントを作成する

GoogleのサービスでAPIを利用するために、Googleサービスアカウントを作成します。

  • Google Cloudのコンソール画面を開く

    • アカウントやプロジェクトが無い場合は作成してください
  • [IAMと管理 > サービスアカウント > サービスアカウントを作成] から適当な名称のサービスアカウントを作成

  • 作成したサービスアカウントを選択し、[キー > 鍵を追加 > 新しい鍵を作成] からJSON形式のキーファイルをダウンロード

ダウンロードしたキーファイルは、後の手順で利用します。

4. GoogleサービスアカウントのJSONキーファイルの中身を Craft Secret Manager に登録する

Googleサービスアカウントの認証情報をCraft Functionsから安全に利用するために、Craft Secret Manager に登録します。

  • [Craft > シークレット] からシークレットを新規作成
  • [名前] に、わかりやすい名前を入力
  • ダウンロードしたJSONキーファイルの中身を [シークレットの値] にそのまま入力し、作成
  • シークレット名をメモしておく

5. Googleサービスアカウントに対象スプレッドシートへの権限を付与する

Google Sheets APIを有効化したとしても、個別のスプレッドシートに対して自由にアクセスできるわけではありません。スプレッドシート毎に、対象のGoogleサービスアカウントに対して権限を付与する必要があります。

  • 対象スプレッドシートを開き、右上の [共有]ボタンをクリック

  • ダウンロードしたキーファイルに含まれるclient_emailの値を入力し、権限には [編集者] を選択して [送信]

6. Craft Functionsのファンクションを作成する

Craft Functionsのファンクションを作成します。作成手順は次の通りです。

  • [Craft > ファンクション > 新規作成 > テンプレートから作成] を選択
  • 自由回答テキストに含まれる文意を Text Embedding で成分ごとにスコア化する 」というテンプレートを検索し[取得]ボタンをクリック
  • [反映] ボタンをクリック
  • [設定 > ファンクションのタイプ] で「HTTPタイプ」を選択します
  • [変数] タブで次の変数の値を設定する
    • LOG_LEVEL
      • 出力するログのレベル
    • CRAFT_APP_TOKEN_SECRET_NAME
      • API v2 アプリのアクセストークンを登録したシークレットの名前です。
    • EMBEDDING_KEYWORDS
      • に用いるキーワード
      • 複数指定する場合はカンマ区切りで指定します。
        • 例:商品に満足している,商品に不満がある
    • SERVICE_ACCOUNT_KEY_SECRET
      • Googleサービスアカウントを登録したシークレットの名前
    • SPREADSHEET_ID
      • GoogleスプレッドシートID
      • スプレッドシートのURLの https://docs.google.com/spreadsheets/d/#{SPREADSHEET_ID}/ より取得できる英数字です。
    • SHEET_NAME
      • 連携対象のGoogleスプレッドシートのシート名
      • 例:Sheet1
    • TEXT_EMBEDDING_MODEL
  • 適当なファンクション名をつけて [デプロイ] します
  • [設定 > ファンクションのタイプ > エンドポイント] にあるURLをコピーして控えておきます

なお、テンプレートのソースコードはGitHubで公開しています。 craft-codes/craft-functions/survey-text-embedding-scoring at main · plaidev/craft-codes

実際に動かしてみる

実際に動作を確認してみましょう。まずスプレッドシートのA1に input というヘッダを作成し、続くA列のセルに分析したいテキストデータを入力します。

つづいて、[変数] タブの EMBEDDING_KEYWORDS に文意の大きさを測定したいキーワードを入力し、[保存]します。

最後に、ターミナルなどの適当な実行環境からエンドポイントへのリクエストを送信します。

curl https://xxxxx.cev2.karte.io/functions/xxxxxxxxxx

問題なく設定できていれば、次のような表示が実現できるはずです。

なおKARTE Datahubのフェデレーションテーブル機能を使うことで、スプレッドシート上のデータに対してDatahubからSQLクエリを発行し、スプレッドシート上のデータを直接抽出することができます。その結果をDatahubのダッシュボードで可視化したり、紐付けテーブルにエクスポートしてKARTE上のユーザーに紐付けてセグメント条件に利用したりといった活用もできます。

補遺1:スコアの算出の仕方

文意の大きさを算出する際、本ソリューションでは以下の流れで数値計算を行なっています。

  1. Craft Functions変数で指定したキーワードを Text Embeddings によりベクトル化
  2. スプレッドシートから入力されたテキストを Text Embeddings によりベクトル化
  3. 2つのベクトルのコサイン類似度を計算したものを文意の大きさとして採用

補遺2:ユークリッド距離を使って文意の大きさを算出する

ユークリッド距離を使って文意の大きさを算出することもできます。ユークリッド距離を用いた文意の大きさの算出を有効化するには Craft Functions の[コード]の中から以下の行を検索し、該当行のコメントアウト、及びコメントインを行った上で[保存]してください。

async function outputData(sheets, scores) {
  const scoresFlatten = scores.slice(1).map(score => {
    const wk = [
      score.input,
      // コサイン類似度によりスコアリング
      ...score.scores.map(_score => _score.scoreDotProduct),
      // ユークリッド距離によりスコアリング
      // (使用するには、コサイン類似度によるスコアリングをコメントアウトし、以下の行をコメントインする)
      // ...score.scores.map(_score => _score.scoreEuclideanDistance),
    ];
    return wk;
  });
  const header = ['input', ...EMBEDDING_KEYWORDS.split(',')];

  // A1行にデータを出力
  updateSsValues(sheets, `${SHEET_NAME}!A1:Z`, [header, ...scoresFlatten]);
}

ユークリッド距離を使った算出では、埋め込みベクトル同士の幾何学的な距離(L2ノルム)を文書同士の類似度とみなします。ユークリッド距離を尺度とする場合、数値が0に近いほど元の文書の文意に近いと解釈します。コサイン類似度とは類似度の大小関係が逆になる点に注意してください。また、算出される数値の値域は 0~2 の間となります。

おわりに

今回は、KARTE Craft AIモジュールを使ったアンケートデータの高度な分析について紹介しました。大量のテキストデータの中から、感情情報や傾向を効率的に抽出できる強力な機能だと言えるでしょう。

アンケートを活用して顧客理解を深めることは、企業にとって重要な取り組みです。KARTE Craft AIモジュールを活用すれば、そのプロセスを大幅に効率化できます。ぜひ、この機能を活用して、アンケートデータの高度な分析に挑戦してみてください。

より深い顧客洞察が得られることで、製品・サービスの改善にもつながるはずです。KARTE Craft AIモジュールを最大限活用し、顧客理解を深めていきましょう!