Messengerプラットフォームの自然言語処理

自然言語処理(NLP)では、ビジネスが利用者から受け取ったメッセージから有意な情報(日付、時刻、その他)を理解し、抽出することができます。この情報を使用して、会話に必要とされるメッセージエクスペリエンスの実装対象になる意図を特定できます。

MetaのビルトインNLPを利用することで、メッセージのレート制限に計上されるAPI呼び出しの数を減らすことができます。

仕組み

MetaのビルトインNLPを利用すると、ビジネスにメッセージが配信される前に、まずMetaのWit.aiを使ってそのメッセージを解析し、パーサーの正しさの確率を表す信頼性レベルと共に、意味を検出したり情報を抽出したりします。その後、そのメッセージは、メッセージで検出されたすべての有意な情報、エンティティ特性と共に、通常どおりビジネスに届けられます。例えば、メッセージに「hello, tomorrow at 2pm」のようなフレーズが含まれている場合、あいさつを含む特性と、実際のタイムスタンプを含むエンティティを受け取ることになります。

ビルトインNLPでは言語識別機能が自動でオンになり、ユーザーのプロフィールのロケールに基づいて日付と時刻が自動的にローカライズされます。

Wit.ai

Wit.aiは、メッセージを解析し、ユーザーのメッセージからエンティティを作成するアプリです。サポートされる言語用のデフォルトのWit.aiを使用することも、サポートしたい言語ごとに独自のWit.aiアプリを作成することもできます。Messengerプラットフォームは、メッセージを受信すると、最も可能性が高い言語を特定し、その言語に関連付けられたWit.ai appを使ってエンティティを抽出します。最も可能性が高い言語にリンクされたWit.aiアプリがない場合は、デフォルトの言語モデルが使用されます。

MetaのWit.ai関連のドキュメントを利用して、Wit.aiアプリと、独自のカスタムWit.aiアプリを作成し、テストする方法についての詳細情報や、サポートされる言語のリストを参照してください。

ページにNLPを追加する

ビジネスページにNLPを追加する場合、Metaアプリダッシュボードを使う方法と、プログラムを使う方法の2とおりがあります。

アプリダッシュボード

アプリダッシュボードを使ってビルトインNLPを追加する場合は、[商品]の下で[Messenger] > [設定]と移動し、下方の[ビルトインNLP]セクションまでスクロールします。ドロップダウンメニューから[Facebookページ]を選択して、オンに切り替えます。次に、複数言語を追加する選択肢がある[言語モデル]を選択します。詳細設定を使って、NLPのバージョン、エンティティの詳細情報を取得するためのverboseフラグ、受け取りたい意図や特性ごとのn-best値を選択できます。この設定で、検出されたロケールをいくつ返すかも決定できます。

ページの受信箱の過去のスレッドから、サンプルがランダムにコンパイルされ、新しく作成されたWitアプリに表示されます。Wit.aiアプリでこのサンプルにすぐにタグ付けできるようになります。

プログラム

プログラムを使ってNLPを追加する場合は、以下が必要になります。

  • ページでMESSAGINGタスクを実行できるユーザーからリクエストされた、ページアクセストークン
  • ページID
  • pages_messagingアクセス許可とpages_manage_metadataアクセス許可

ページのNLPをオンにするためにnlp_enabledtrueに設定したPOSTリクエストを/PAGE-ID/nlp_configsエンドポイントに送信します。デフォルトの英語以外の言語を設定するために、modelパラメーターを含めることもできます。

詳しくは、ページNLPのリファレンスを参照してください。

リクエストの例

読みやすくするためにフォーマットしています。
curl -i -X POST "https://graph.facebook.com/v21.0/me/nlp_configs
      ?nlp_enabled=true
      &model=PORTUGUESE 
      &access_token=PAGE-ACCESS-TOKEN"

独自にカスタマイズしたWit.aiアプリを使用するためにcustom_tokenパラメーターを指定して、POSTリクエストでNLPパラメーターをアップデートすることができます。NLPをオフにするには、nlp_enabledパラメーターをfalseに設定してPOSTリクエストを送信します。

Webhook通知

ビルトインNLPが有効になっている場合、message Webhookには2つのNLPフィールド(nlpnlpv2)が含まれるようになりました。nlpフィールドは、エンティティ名と特性名に非推奨の命名規則を使用するレガシーフィールドです。nlpv2フィールドでは、以下に示すように、エンティティと特性に簡略化された名前が使用されます。

nlpフィールドは2024年6月18日に削除されます。

ビルトインNLPをオンにすると、各メッセージオブジェクトのmessage Webhooks通知に、関連するNLPエンティティと特性が組み込まれます。

エンティティと特性

Messengerプラットフォームは、デフォルトで次のエンティティを返します。

情報エンティティ

金額

amount_of_money

日時

datetime

距離

distance

期間

duration

メールアドレス

email

位置情報

location

電話番号

phone_number

数量

quantity

温度

temperature

URL

url

volume

ビルトイン特性

Messengerプラットフォームは、デフォルトで次の特性を返します。

情報特性

結びの言葉(英語のみ)

bye

あいさつ(英語のみ)

greetings

センチメント

sentiment

お礼(英語のみ)

thanks

Wit.iaに関するドキュメントを参照し、利用可能なエンティティ、特性などについて理解を深めてください。

通知の例

次のメッセージの例では、「see you tomorrow at 4pm」というフレーズが含まれており、解析後にdatetimeエンティティとsentimentエンティティが組み込まれています。

{...,
  "entities": {
    "datetime:datetime": [
      {
        "id": "340464963587159",
        "name": "datetime",
        "role": "datetime",
        "start": 8,
        "end": 23,
        "body": "tomorrow at 4pm",
        "confidence": 0.9704,
        "entities": [],
        "type": "value",
        "grain": "hour",
        "value": "2020-06-16T16:00:00.000-07:00",
        "values": [
          {
            "type": "value",
            "grain": "hour",
            "value": "2020-06-16T16:00:00.000-07:00"
          }
        ]
      }
    ]
  },
  "traits": {
    "sentiment": [
      {
        "id": "5ac2b50a-44e4-466e-9d49-bad6bd40092c",
        "value": "neutral",
        "confidence": 0.6162
      }
    ]
  }

NLPメッセージの解析

messages Webhooksで、デフォルトのNLPを利用してメッセージに応答できます。例えば、受信した各メッセージに応答するhandleMessage()関数がある場合、greetingsエンティティを使って適切な応答を送信できます。

function firstTrait(nlp, name) {
  return nlp && nlp.entities && nlp.traits[name] && nlp.traits[name][0];
}

function handleMessage(message) {
  // check greeting is here and is confident
  const greeting = firstTrait(message.nlp, 'greetings');
  if (greeting && greeting.confidence > 0.8) {
    sendResponse('Hi there!');
  } else { 
    // default logic
  }
}