Detete a intenção com a análise de sensação geral

A análise de sentimentos inspeciona a entrada do utilizador e identifica a opinião subjetiva predominante, especialmente para determinar a atitude de um utilizador como positiva, negativa ou neutra. Quando faz um pedido de deteção de intenção, pode especificar que a análise de sensação geral seja realizada, e a resposta vai conter valores de análise de sensação geral.

O Dialogflow usa a API Natural Language para realizar esta análise. Para mais informações sobre essa API e documentação sobre a interpretação dos resultados da análise de sentimentos do Dialogflow:

Idiomas suportados

Para ver uma lista dos idiomas suportados, consulte a coluna sentimento na página idiomas. Se pedir a análise de sentimentos para um idioma não suportado, o seu pedido de deteção de intenção não falha, mas o campo QueryResult.diagnostic_info contém informações de erro.

Antes de começar

Esta funcionalidade só se aplica quando usa a API para interações do utilizador final. Se estiver a usar uma integração, pode ignorar este guia.

Antes de ler este guia, deve fazer o seguinte:

  1. Leia as noções básicas do Dialogflow.
  2. Realize os passos de configuração.

Crie um agente

Se ainda não tiver criado um agente, crie um agora:

  1. Aceda à consola do Dialogflow ES.
  2. Se lhe for pedido, inicie sessão na consola do Dialogflow. Consulte a vista geral da consola do Dialogflow para mais informações.
  3. Clique em Criar agente no menu da barra lateral esquerda. (Se já tiver outros agentes, clique no nome do agente, desloque a página para baixo e clique em Criar novo agente.)
  4. Introduza o nome do agente, o idioma predefinido e o fuso horário predefinido.
  5. Se já tiver criado um projeto, introduza esse projeto. Se quiser permitir que a consola do Dialogflow crie o projeto, selecione Criar um novo projeto Google.
  6. Clique no botão Criar.

Importe o ficheiro de exemplo para o seu agente

Os passos neste guia baseiam-se em pressupostos sobre o seu agente. Por isso, tem de importar um agente preparado para este guia. Quando importa, estes passos usam a opção restaurar, que substitui todas as definições, intenções e entidades do agente.

Para importar o ficheiro, siga estes passos:

  1. Transfira o ficheiro room-booking-agent.zip.
  2. Aceda à consola do Dialogflow ES.
  3. Selecione o seu agente.
  4. Clique no botão Definições junto ao nome do agente.
  5. Selecione o separador Exportar e importar.
  6. Selecione Restaurar do ZIP e siga as instruções para restaurar o ficheiro ZIP que transferiu.

Definições do agente para a análise de sentimentos

Pode acionar a análise de sentimentos por pedido de intenção de deteção, ou pode configurar o seu agente para devolver sempre resultados da análise de sentimentos.

Para ativar a análise de sentimentos para todas as consultas:

  1. Aceda à consola do Dialogflow ES.
  2. Selecione um agente.
  3. Clique no botão de definições junto ao nome do agente.
  4. Selecione o separador Avançadas.
  5. Ative a opção Ativar análise de sentimentos para a consulta atual.

Use o simulador do Dialogflow

Pode interagir com o agente e receber resultados da análise de sentimentos através do simulador do Dialogflow:

  1. Escreva "Obrigado por me ajudar."

  2. Consulte a secção SENTIMENTO na parte inferior do simulador. Deve apresentar uma pontuação de sentimento positiva.

  3. Em seguida, escreva "Não funcionou de todo" no simulador.

  4. Consulte a secção SENTIMENTO na parte inferior do simulador. Deve apresentar uma pontuação de sentimento negativa.

Detetar intenção

Para detetar a intenção, chame o método detectIntent no tipo Sessions.

REST

Chame o método detectIntent e forneça o campo sentimentAnalysisRequestConfig.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o ID do seu projeto do Google Cloud
  • SESSION_ID: um ID da sessão

Método HTTP e URL:

POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/agent/sessions/SESSION_ID:detectIntent

Corpo JSON do pedido:

{
  "queryParams": {
    "sentimentAnalysisRequestConfig": {
      "analyzeQueryTextSentiment": true
    }
  },
  "queryInput": {
    "text": {
      "text": "please reserve an amazing meeting room for six people",
      "languageCode": "en-US"
    }
  }
}

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

{
  "responseId": "747ee176-acc5-46be-8d9a-b7ef9c2b9199",
  "queryResult": {
    "queryText": "please reserve an amazing meeting room for six people",
    "action": "room.reservation",
    "parameters": {
      "date": "",
      "duration": "",
      "guests": 6,
      "location": "",
      "time": ""
    },
    "fulfillmentText": "I can help with that. Where would you like to reserve a room?",
    ...
    "sentimentAnalysisResult": {
      "queryTextSentiment": {
        "score": 0.8,
        "magnitude": 0.8
      }
    }
  }
}

Tenha em atenção que o campo sentimentAnalysisResult contém os valores score e magnitude.

Java

Para se autenticar no Dialogflow, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.


import com.google.api.gax.rpc.ApiException;
import com.google.cloud.dialogflow.v2.DetectIntentRequest;
import com.google.cloud.dialogflow.v2.DetectIntentResponse;
import com.google.cloud.dialogflow.v2.QueryInput;
import com.google.cloud.dialogflow.v2.QueryParameters;
import com.google.cloud.dialogflow.v2.QueryResult;
import com.google.cloud.dialogflow.v2.SentimentAnalysisRequestConfig;
import com.google.cloud.dialogflow.v2.SessionName;
import com.google.cloud.dialogflow.v2.SessionsClient;
import com.google.cloud.dialogflow.v2.TextInput;
import com.google.common.collect.Maps;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public class DetectIntentWithSentimentAnalysis {

  public static Map<String, QueryResult> detectIntentSentimentAnalysis(
      String projectId, List<String> texts, String sessionId, String languageCode)
      throws IOException, ApiException {
    Map<String, QueryResult> queryResults = Maps.newHashMap();
    // Instantiates a client
    try (SessionsClient sessionsClient = SessionsClient.create()) {
      // Set the session name using the sessionId (UUID) and projectID (my-project-id)
      SessionName session = SessionName.of(projectId, sessionId);
      System.out.println("Session Path: " + session.toString());

      // Detect intents for each text input
      for (String text : texts) {
        // Set the text (hello) and language code (en-US) for the query
        TextInput.Builder textInput =
            TextInput.newBuilder().setText(text).setLanguageCode(languageCode);

        // Build the query with the TextInput
        QueryInput queryInput = QueryInput.newBuilder().setText(textInput).build();

        //
        SentimentAnalysisRequestConfig sentimentAnalysisRequestConfig =
            SentimentAnalysisRequestConfig.newBuilder().setAnalyzeQueryTextSentiment(true).build();

        QueryParameters queryParameters =
            QueryParameters.newBuilder()
                .setSentimentAnalysisRequestConfig(sentimentAnalysisRequestConfig)
                .build();
        DetectIntentRequest detectIntentRequest =
            DetectIntentRequest.newBuilder()
                .setSession(session.toString())
                .setQueryInput(queryInput)
                .setQueryParams(queryParameters)
                .build();

        // Performs the detect intent request
        DetectIntentResponse response = sessionsClient.detectIntent(detectIntentRequest);

        // Display the query result
        QueryResult queryResult = response.getQueryResult();

        System.out.println("====================");
        System.out.format("Query Text: '%s'\n", queryResult.getQueryText());
        System.out.format(
            "Detected Intent: %s (confidence: %f)\n",
            queryResult.getIntent().getDisplayName(), queryResult.getIntentDetectionConfidence());
        System.out.format(
            "Fulfillment Text: '%s'\n",
            queryResult.getFulfillmentMessagesCount() > 0
                ? queryResult.getFulfillmentMessages(0).getText()
                : "Triggered Default Fallback Intent");
        System.out.format(
            "Sentiment Score: '%s'\n",
            queryResult.getSentimentAnalysisResult().getQueryTextSentiment().getScore());

        queryResults.put(text, queryResult);
      }
    }
    return queryResults;
  }
}

Node.js

Para se autenticar no Dialogflow, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

// Imports the Dialogflow client library
const dialogflow = require('@google-cloud/dialogflow').v2;

// Instantiate a DialogFlow client.
const sessionClient = new dialogflow.SessionsClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = 'ID of GCP project associated with your Dialogflow agent';
// const sessionId = `user specific ID of session, e.g. 12345`;
// const query = `phrase(s) to pass to detect, e.g. I'd like to reserve a room for six people`;
// const languageCode = 'BCP-47 language code, e.g. en-US';

// Define session path
const sessionPath = sessionClient.projectAgentSessionPath(
  projectId,
  sessionId
);

async function detectIntentandSentiment() {
  // The text query request.
  const request = {
    session: sessionPath,
    queryInput: {
      text: {
        text: query,
        languageCode: languageCode,
      },
    },
    queryParams: {
      sentimentAnalysisRequestConfig: {
        analyzeQueryTextSentiment: true,
      },
    },
  };

  // Send request and log result
  const responses = await sessionClient.detectIntent(request);
  console.log('Detected intent');
  const result = responses[0].queryResult;
  console.log(`  Query: ${result.queryText}`);
  console.log(`  Response: ${result.fulfillmentText}`);
  if (result.intent) {
    console.log(`  Intent: ${result.intent.displayName}`);
  } else {
    console.log('  No intent matched.');
  }
  if (result.sentimentAnalysisResult) {
    console.log('Detected sentiment');
    console.log(
      `  Score: ${result.sentimentAnalysisResult.queryTextSentiment.score}`
    );
    console.log(
      `  Magnitude: ${result.sentimentAnalysisResult.queryTextSentiment.magnitude}`
    );
  } else {
    console.log('No sentiment Analysis Found');
  }

Python

Para se autenticar no Dialogflow, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

def detect_intent_with_sentiment_analysis(project_id, session_id, texts, language_code):
    """Returns the result of detect intent with texts as inputs and analyzes the
    sentiment of the query text.

    Using the same `session_id` between requests allows continuation
    of the conversation."""
    from google.cloud import dialogflow

    session_client = dialogflow.SessionsClient()

    session_path = session_client.session_path(project_id, session_id)
    print("Session path: {}\n".format(session_path))

    for text in texts:
        text_input = dialogflow.TextInput(text=text, language_code=language_code)

        query_input = dialogflow.QueryInput(text=text_input)

        # Enable sentiment analysis
        sentiment_config = dialogflow.SentimentAnalysisRequestConfig(
            analyze_query_text_sentiment=True
        )

        # Set the query parameters with sentiment analysis
        query_params = dialogflow.QueryParameters(
            sentiment_analysis_request_config=sentiment_config
        )

        response = session_client.detect_intent(
            request={
                "session": session_path,
                "query_input": query_input,
                "query_params": query_params,
            }
        )

        print("=" * 20)
        print("Query text: {}".format(response.query_result.query_text))
        print(
            "Detected intent: {} (confidence: {})\n".format(
                response.query_result.intent.display_name,
                response.query_result.intent_detection_confidence,
            )
        )
        print("Fulfillment text: {}\n".format(response.query_result.fulfillment_text))
        # Score between -1.0 (negative sentiment) and 1.0 (positive sentiment).
        print(
            "Query Text Sentiment Score: {}\n".format(
                response.query_result.sentiment_analysis_result.query_text_sentiment.score
            )
        )
        print(
            "Query Text Sentiment Magnitude: {}\n".format(
                response.query_result.sentiment_analysis_result.query_text_sentiment.magnitude
            )
        )