DEV Community

Max Zeballos for AWS UG ML Latam

Posted on • Edited on

Amazon Comprehend: Guía rápida

Motivación

En la actualidad las aplicaciones necesitan una mayor velocidad de desarrollo. La inclusión de funcionalidades que implican el uso de machine learning se ha vuelto cada vez mayor.

Amazon Web Services a desarrollado un conjunto de servicios que te permiten rápidamente agregar características de machine learning a tus aplicaciones.

Amazon Comprehend es un servicio de procesamiento de lenguaje natural (NLP) que utiliza machine learning para extraer información de datos en formato de texto.

Introducción

Amazon Comprehend provee de un conjunto de APIs con las que podemos interactuar y obtener resultados sobre el análisis de textos. Estas APIs retornan como respuesta la inferencia que realiza sobre los datos que le enviamos a modelos entrenados por los expertos que trabajan en AWS.

Características

En esta sección vamos a revisar las capacidades del servicio y su uso a través de Python. Para los siguientes ejemplos utilizaremos el siguiente texto:

sample_text = '''
Hello Zhang Wei. Your AnyCompany Financial Services, LLC credit card account 1111-0000-1111-0000 has a minimum payment of $24.53 that is due by July 31st. Based on your autopay settings, we will withdraw your payment on the due date from your bank account XXXXXX1111 with the routing number XXXXX0000. 
Your latest statement was mailed to 100 Main Street, Anytown, WA 98121. 
After your payment is received, you will receive a confirmation text message at 206-555-0100. 
If you have questions about your bill, AnyCompany Customer Service is available by phone at 206-555-0199 or email at support@anycompany.com.
'''
Enter fullscreen mode Exit fullscreen mode

1 Detección del idioma dominante

Con esta API podemos examinar el texto y determinar el idioma dominante, debido a que un texto puede contener palabras o frases en diferentes idiomas. A continuación presentare el código en Python

comprehend = boto3.client('comprehend')

detected_language = comprehend.detect_dominant_language(
   Text=sample_text
)
Enter fullscreen mode Exit fullscreen mode

En la variable detected_language tendremos la respuesta a la API, si imprimíos el contenido de la variable veremos el siguiente resultado:

{
    "Languages": [
        {
            "LanguageCode": "en",
            "Score": 0.9913273453712463
        }
    ],
    "ResponseMetadata": {
        "HTTPHeaders": {
            "content-length": "64",
            "content-type": "application/x-amz-json-1.1",
            "date": "Wed, 06 Jul 2022 03:38:30 GMT",
            "x-amzn-requestid": "38e68cdc-c3a3-4b1c-897d-c86f9c5f0f63"
        },
        "HTTPStatusCode": 200,
        "RequestId": "38e68cdc-c3a3-4b1c-897d-c86f9c5f0f63",
        "RetryAttempts": 0
    }
}
Enter fullscreen mode Exit fullscreen mode

Observamos que el lenguaje detectado fue ingles(en) con un puntaje de 99.1%

2 Detección de entidades

Con la API de detección de entidades podemos extraer los siguientes tipos de entidades:

Tipo Descripción
COMMERCIAL_ITEM Un producto de marca
FECHA Una fecha completa (por ejemplo, 25/11/2017), día (martes), mes (mayo) u hora (8:30 a.m.).
EVENT Un evento, como un festival, un concierto, una elección, etc.
LOCATION Una ubicación específica, como un país, una ciudad, un lago, un edificio, etc.
ORGANIZACIÓN Organizaciones grandes, como un gobierno, una empresa, una religión, un equipo deportivo, etc.
OTHER Entidades que no encajan en ninguna de las otra categorías.
PERSON Individuos, grupos de personas, apodos, personajes ficticios.
QUANTITY Importe cuantificado, como moneda, porcentajes, números, bytes, etc.
TITLE Nombre oficial dado a cualquier creación o obra creativa, como películas, libros, canciones, etc.

Ahora vamos a revisar el código en python

comprehend = boto3.client('comprehend')

detected_entities = comprehend.detect_entities(
   Text=sample_text,
   LanguageCode='en'
)
Enter fullscreen mode Exit fullscreen mode

En la variable detected_entities tenemos la respuesta de la API si revisamos el contenido de la variable tendremos el siguiente contenido:

{
    "Entities": [
        {
            "BeginOffset": 7,
            "EndOffset": 16,
            "Score": 0.9993807077407837,
            "Text": "Zhang Wei",
            "Type": "PERSON"
        },
        {
            "BeginOffset": 23,
            "EndOffset": 57,
            "Score": 0.9996546506881714,
            "Text": "AnyCompany Financial Services, LLC",
            "Type": "ORGANIZATION"
        },
        {
            "BeginOffset": 78,
            "EndOffset": 97,
            "Score": 0.9905166029930115,
            "Text": "1111-0000-1111-0000",
            "Type": "OTHER"
        },
        ...
    ],
    "ResponseMetadata": {
        "HTTPHeaders": {
            "content-length": "1276",
            "content-type": "application/x-amz-json-1.1",
            "date": "Wed, 06 Jul 2022 03:14:41 GMT",
            "x-amzn-requestid": "0c7eefa0-c332-4f82-a93c-ab18cd47a15f"
        },
        "HTTPStatusCode": 200,
        "RequestId": "0c7eefa0-c332-4f82-a93c-ab18cd47a15f",
        "RetryAttempts": 0
    }
}
Enter fullscreen mode Exit fullscreen mode

Dentro de Entities tenemos cada una de las entidades detectadas. Cada entidad tiene los siguientes atributos:

  • BeginOffset: Posición donde inicia la palabra en el texto
  • EndOffset: Posición donde termina la palabra en el texto
  • Score: Puntaje de certeza de detección de entidad
  • Text: El nombre de la entidad
  • Type: El tipo de entidad

3 Deteccion de frases clave

Puedes utilizar esta API para buscar frases clave en el documento. Por lo general, consiste en un sustantivo y los modificadores que lo distinguen. Por ejemplo, "día" es un sustantivo; "un día hermoso" es una frase sustantiva que incluye un artículo ("un") y un adjetivo ("hermoso").

A continuación revisaremos el código en python

comprehend = boto3.client('comprehend')

detected_key_phrases = comprehend.detect_key_phrases(
   Text=sample_text, 
   LanguageCode='en'
)
Enter fullscreen mode Exit fullscreen mode

Revisando la variable detected_key_phrases tendremos la siguiente respuesta:

{
    "KeyPhrases": [
        {
            "BeginOffset": 1,
            "EndOffset": 16,
            "Score": 0.8426344990730286,
            "Text": "Hello Zhang Wei"
        },
        {
            "BeginOffset": 18,
            "EndOffset": 52,
            "Score": 0.9881375432014465,
            "Text": "Your AnyCompany Financial Services"
        },
        {
            "BeginOffset": 54,
            "EndOffset": 97,
            "Score": 0.8444651961326599,
            "Text": "LLC credit card account 1111-0000-1111-0000"
        },
        {
            "BeginOffset": 102,
            "EndOffset": 119,
            "Score": 0.9999476075172424,
            "Text": "a minimum payment"
        },
        ...
    ],
    "ResponseMetadata": {
        "HTTPHeaders": {
            "content-length": "2096",
            "content-type": "application/x-amz-json-1.1",
            "date": "Wed, 06 Jul 2022 04:19:43 GMT",
            "x-amzn-requestid": "d772098b-c82d-49b8-b4fe-029ac108b375"
        },
        "HTTPStatusCode": 200,
        "RequestId": "d772098b-c82d-49b8-b4fe-029ac108b375",
        "RetryAttempts": 0
    }
}
Enter fullscreen mode Exit fullscreen mode

Como se observa en la respuesta, la API nos retorna todas las frases clave.

4 Determinar el sentimiento

Con esta API podemos determinar si el sentimiento es positivo, negativo, neutral o mixto. Por ejemplo, se puede utilizar el análisis de sentimientos para analizar los comentarios en un blog y saber si a los lectores les gusto la publicación.

Ahora revisaremos el código en python

comprehend = boto3.client('comprehend')

detected_sentiment = comprehend.detect_sentiment(
   Text=sample_text, 
   LanguageCode='en'
)
Enter fullscreen mode Exit fullscreen mode

Si revelamos el contenido de la variable detected_sentiment tendremos:

{
    "ResponseMetadata": {
        "HTTPHeaders": {
            "content-length": "163",
            "content-type": "application/x-amz-json-1.1",
            "date": "Wed, 06 Jul 2022 04:27:42 GMT",
            "x-amzn-requestid": "ca289ed1-65f4-4e6f-87e4-468b5a88ae60"
        },
        "HTTPStatusCode": 200,
        "RequestId": "ca289ed1-65f4-4e6f-87e4-468b5a88ae60",
        "RetryAttempts": 0
    },
    "Sentiment": "NEUTRAL",
    "SentimentScore": {
        "Mixed": 9.69591928878799e-06,
        "Negative": 0.016147520393133163,
        "Neutral": 0.9832557439804077,
        "Positive": 0.0005869901506230235
    }
}
Enter fullscreen mode Exit fullscreen mode

En Sentiment tenemos el sentimiento detectado y en SentimentScore tendremos el puntaje de las otras opciones.

5 Analisis de la sintaxis

Con esta API podemos identificar los sustantivos, verbos, adjetivos, etc. en el documento. Amazon Comprehend puede identificar 17 tipos de Tokens.

Token Parte del discurso
ADJ Adjetivo
ADP Adposición
ADV Adverbio
AUX Auxiliary
CONJ Coordinación de la conjunción
DET Determinador
INTJ Interjección
SUSTANTIVO Nombre
NUM Numérico
O Otros
PART Partícula
PRON Pronombre
PROPÓN Nombre adecuado
PUNTAR Puntuación
SCONJ conjunción subordinante
SYM Símbolo
VERB Verbo

A continuación presento el código en python

comprehend = boto3.client('comprehend')

detected_syntax = comprehend.detect_syntax(
   Text=sample_text, 
   LanguageCode='en'
)
Enter fullscreen mode Exit fullscreen mode

Revelando el contenido de la variable detected_syntax tendremos:

{
    "ResponseMetadata": {
        "HTTPHeaders": {
            "content-length": "12896",
            "content-type": "application/x-amz-json-1.1",
            "date": "Wed, 06 Jul 2022 04:31:16 GMT",
            "x-amzn-requestid": "21f94838-5820-4223-a015-9685a31902cf"
        },
        "HTTPStatusCode": 200,
        "RequestId": "21f94838-5820-4223-a015-9685a31902cf",
        "RetryAttempts": 0
    },
    "SyntaxTokens": [
        {
            "BeginOffset": 1,
            "EndOffset": 6,
            "PartOfSpeech": {
                "Score": 0.9888805150985718,
                "Tag": "INTJ"
            },
            "Text": "Hello",
            "TokenId": 1
        },
        {
            "BeginOffset": 7,
            "EndOffset": 12,
            "PartOfSpeech": {
                "Score": 0.9991546273231506,
                "Tag": "PROPN"
            },
            "Text": "Zhang",
            "TokenId": 2
        },
        {
            "BeginOffset": 13,
            "EndOffset": 16,
            "PartOfSpeech": {
                "Score": 0.9982988238334656,
                "Tag": "PROPN"
            },
            "Text": "Wei",
            "TokenId": 3
        },
        ...
    ]
}
Enter fullscreen mode Exit fullscreen mode

En la respuesta observamos que para cada una de las palabras se ha identificado su respectiva Etiqueta.

6 Detección de información de identificación personal (PII)

Con esta API podemos detectar entidades en el texto que contienen información de identificación personal (PII). Una entidad PII es una referencia textual a datos personales que podrían utilizarse para identificar a una persona, como una dirección, un número de cuenta bancaria o un número de teléfono.

Amazon Comprehend reconoce los siguientes tipos de entidades:

  • ADDRESS
  • AGE
  • AWS_ACCESS_KEY
  • AWS_SECRET_KEY
  • BANK_ACCOUNT_NUMBER
  • BANK_ROUTING
  • CREDIT_DEBIT_CVV
  • CREDIT_DEBIT_EXPIRY
  • CREDIT_DEBIT_NUMBER
  • DATE_TIME
  • DRIVER_ID
  • EMAIL
  • IP_ADDRESS
  • MAC_ADDRESS
  • NAME
  • PASSPORT_NUMBER
  • PASSWORD
  • PHONE
  • PIN
  • SSN
  • URL
  • USERNAME

Para trabajar con la API usamos el siguiente código en python

comprehend = boto3.client('comprehend')

detected_pii_labels = comprehend.contains_pii_entities(
   Text=sample_text, 
   LanguageCode='en'
)

Enter fullscreen mode Exit fullscreen mode

Ahora revisamos el contenido de la variable detected_pii_labels

{
    "Labels": [
        {
            "Name": "EMAIL",
            "Score": 1.0
        },
        {
            "Name": "DATE_TIME",
            "Score": 1.0
        },
        {
            "Name": "BANK_ROUTING",
            "Score": 0.8962613940238953
        },
        {
            "Name": "NAME",
            "Score": 0.7186043858528137
        },
        {
            "Name": "PHONE",
            "Score": 1.0
        }
    ],
    "ResponseMetadata": {
        "HTTPHeaders": {
            "content-length": "197",
            "content-type": "application/x-amz-json-1.1",
            "date": "Wed, 06 Jul 2022 04:51:25 GMT",
            "x-amzn-requestid": "f13ed239-eb0c-428d-b7ea-4d26f2568309"
        },
        "HTTPStatusCode": 200,
        "RequestId": "f13ed239-eb0c-428d-b7ea-4d26f2568309",
        "RetryAttempts": 0
    }
}
Enter fullscreen mode Exit fullscreen mode

En la respuesta observamos cada una de las PII encontradas en el texto

Conclusión

Amazon Comprehend permite acelerar el desarrollo de aplicaciones donde es necesario el uso de análisis de textos. El uso de esta herramienta no requiere una curva de aprendizaje elevada, solamente requiere leer un poco de documentación y revisar algunos ejemplos. No hay necesidad de tener conocimientos en inteligencia artificial para su uso.

Este blog es parte de una serie: Ir al menu

Top comments (0)