PNL con la API de lenguaje natural de Google Cloud

Publicado: 2022-03-11

El procesamiento del lenguaje natural (NLP), que es la combinación del aprendizaje automático y la lingüística, se ha convertido en uno de los temas más investigados en el campo de la inteligencia artificial. En los últimos años, se han alcanzado muchos hitos nuevos, el más nuevo es el modelo GPT-2 de OpenAI, que es capaz de producir artículos realistas y coherentes sobre cualquier tema a partir de una entrada breve.

Este interés está impulsado por las muchas aplicaciones comerciales que se han lanzado al mercado en los últimos años. Hablamos con nuestros asistentes domésticos que utilizan NLP para transcribir los datos de audio y comprender nuestras preguntas y comandos. Cada vez más empresas trasladan una gran parte del esfuerzo de comunicación con el cliente a chatbots automatizados. Los mercados en línea lo usan para identificar reseñas falsas, las empresas de medios confían en la PNL para escribir artículos de noticias, las empresas de reclutamiento comparan los CV con los puestos, los gigantes de las redes sociales filtran automáticamente el contenido odioso y las firmas legales usan la PNL para analizar contratos.

Capacitar e implementar modelos de aprendizaje automático para tareas como estas ha sido un proceso complejo en el pasado, que requería un equipo de expertos y una infraestructura costosa. Pero la gran demanda de tales aplicaciones ha llevado a los grandes proveedores a desarrollar servicios relacionados con la PNL, que reducen considerablemente la carga de trabajo y los costos de infraestructura. El costo promedio de los servicios en la nube ha disminuido durante años y se espera que esta tendencia continúe.

Los productos que presentaré en este artículo son parte de Google Cloud Services y se denominan "Google Natural Language API" y "Google AutoML Natural Language".

API de lenguaje natural de Google

La API de Google Natural Language es una interfaz fácil de usar para un conjunto de potentes modelos NLP que Google ha entrenado previamente para realizar diversas tareas. Como estos modelos se han entrenado en corpus de documentos enormemente grandes, su rendimiento suele ser bastante bueno siempre que se utilicen en conjuntos de datos que no utilicen un lenguaje muy idiosincrásico.

La mayor ventaja de usar estos modelos preentrenados a través de la API es que no se necesita ningún conjunto de datos de entrenamiento. La API permite al usuario comenzar a hacer predicciones de inmediato, lo que puede ser muy valioso en situaciones en las que hay pocos datos etiquetados disponibles.

La API de Natural Language comprende cinco servicios diferentes:

  • Análisis de sintaxis
  • Análisis de los sentimientos
  • Análisis de entidades
  • Análisis de sentimiento de la entidad
  • Clasificación de texto

Análisis de sintaxis

Para un texto determinado, el análisis de sintaxis de Google arrojará un desglose de todas las palabras con un amplio conjunto de información lingüística para cada token. La información se puede dividir en dos partes:

Parte del discurso: esta parte contiene información sobre la morfología de cada token. Para cada palabra, se devuelve un análisis detallado que contiene su tipo (sustantivo, verbo, etc.), género, caso gramatical, tiempo, modo gramatical, voz gramatical y mucho más.

Por ejemplo, para la oración de entrada "Una vez una computadora me ganó al ajedrez, pero no fue rival para mí en kickboxing". (Emo Philips) el análisis de parte del discurso es:

A etiqueta: DET
'computadora' etiqueta: SUSTANTIVO número: SINGULAR
'una vez' etiqueta: ADV
'derrotar' etiqueta: VERBO modo: INDICATIVO tiempo: PASADO
'me' etiqueta: PRON caso: ACUSATIVO numero: SINGULAR persona: PRIMERA
en etiqueta: ADP
'ajedrez' etiqueta: SUSTANTIVO número: SINGULAR
',' etiqueta: PUNTO
'pero' etiqueta: CONJ
'eso' etiqueta: PRON caso: NOMINATIVO género: NEUTRO número: SINGULAR persona: TERCERA
'era' etiqueta: VERBO modo: INDICATIVO número: SINGULAR persona: TERCER tiempo: PASADO
'no' etiqueta: DET
'partido' etiqueta: SUSTANTIVO número: SINGULAR
'por' etiqueta: ADP
'patear' etiqueta: SUSTANTIVO número: SINGULAR
'boxeo' etiqueta: SUSTANTIVO número: SINGULAR
'.' etiqueta: PUNTO

Árboles de dependencia: la segunda parte del retorno se llama árbol de dependencia, que describe la estructura sintáctica de cada oración. El siguiente diagrama de una famosa cita de Kennedy muestra dicho árbol de dependencia. Para cada palabra, las flechas indican qué palabras son modificadas por ella.

Ejemplo de un árbol de dependencia

Las bibliotecas de Python comúnmente utilizadas nltk y spaCy contienen funcionalidades similares. La calidad del análisis es consistentemente alta en las tres opciones, pero la API de Google Natural Language es más fácil de usar. El análisis anterior se puede obtener con muy pocas líneas de código (ver ejemplo más abajo). Sin embargo, si bien spaCy y nltk son de código abierto y, por lo tanto, gratuitos, el uso de la API de Google Natural Language cuesta dinero después de una cierta cantidad de solicitudes gratuitas (consulte la sección de costos).

Además del inglés, el análisis sintáctico admite diez idiomas adicionales: chino (simplificado), chino (tradicional), francés, alemán, italiano, japonés, coreano, portugués, ruso y español .

Análisis de los sentimientos

El servicio de análisis de sintaxis se usa principalmente al principio de la canalización para crear funciones que luego se incorporan a los modelos de aprendizaje automático. Por el contrario, el servicio de análisis de sentimientos se puede usar de inmediato.

El análisis de sentimientos de Google proporcionará la opinión emocional predominante dentro de un texto proporcionado. La API devuelve dos valores: la "puntuación" describe la inclinación emocional del texto de -1 (negativo) a +1 (positivo), siendo 0 neutral.

La “magnitud” mide la fuerza de la emoción.

Veamos algunos ejemplos:

Sentencia de entrada Resultados de opinión Interpretación
El tren a Londres sale a las cuatro Puntuación: 0.0 Magnitud: 0.0 Una declaración completamente neutral, que no contiene ninguna emoción en absoluto.
Esta publicación de blog es buena. Puntuación: 0,7 Magnitud: 0,7 Un sentimiento positivo, pero no expresado con mucha fuerza.
Esta publicación de blog es buena. Fue muy útil. El autor es asombroso. Puntuación: 0,7 Magnitud: 2,3 El mismo sentimiento, pero expresado mucho más fuerte.
Esta entrada de blog es muy buena. Este autor suele ser un escritor horrible, pero aquí tuvo suerte. Puntuación: 0,0 Magnitud: 1,6 La magnitud nos muestra que hay emociones expresadas en este texto, pero el sentimiento muestra que son mixtas y no claramente positivas o negativas.

El modelo de análisis de sentimientos de Google está entrenado en un conjunto de datos muy grande. Desafortunadamente, no hay información disponible sobre su estructura detallada. Tenía curiosidad acerca de su rendimiento en el mundo real, así que lo probé en una parte del conjunto de datos de revisión de películas grandes, que fue creado por científicos de la Universidad de Stanford en 2011.

Seleccioné al azar 500 reseñas de películas positivas y 500 negativas del conjunto de prueba y comparé el sentimiento previsto con la etiqueta de reseña real. La matriz de confusión se veía así:

Sentimiento positivo Sentimiento Negativo
Buena reseña 470 30
Mala revisión 29 471

Como muestra la tabla, el modelo acierta aproximadamente el 94 % de las veces en las reseñas de películas buenas y malas. Este no es un mal desempeño para una solución lista para usar sin ningún ajuste al problema dado.

Nota: El análisis de opinión está disponible para los mismos idiomas que el análisis de sintaxis excepto para el ruso.

Análisis de entidades

El análisis de entidades es el proceso de detección de entidades conocidas como figuras públicas o puntos de referencia de un texto determinado. La detección de entidades es muy útil para todo tipo de tareas de clasificación y modelado de temas.

La API de Google Natural Language proporciona información básica sobre cada entidad detectada e incluso proporciona un enlace al artículo de Wikipedia respectivo, si existe. Además, se calcula una puntuación de prominencia. Esta puntuación para una entidad proporciona información sobre la importancia o centralidad de esa entidad para todo el texto del documento. Las puntuaciones cercanas a 0 son menos destacadas, mientras que las puntuaciones cercanas a 1,0 son muy destacadas.

Cuando enviamos una solicitud a la API con esta oración de ejemplo: "Robert DeNiro habló con Martin Scorsese en Hollywood en Nochebuena en diciembre de 2011". Recibimos el siguiente resultado:

Entidad detectada información adicional
Robert de Niro tipo: PERSONA prominencia: 0.5869118 wikipedia_url: https://en.wikipedia.org/wiki/Robert_De_Niro
Hollywood tipo: UBICACIÓN prominencia: 0.17918482 wikipedia_url: https://en.wikipedia.org/wiki/Hollywood
Martin Scorsese tipo: UBICACIÓN prominencia: 0.17712952 wikipedia_url: https://en.wikipedia.org/wiki/Martin_Scorsese
Nochebuena tipo: PERSONA prominencia: 0.056773853 wikipedia_url: https://en.wikipedia.org/wiki/Navidad
diciembre 2011 tipo: FECHA Año: 2011 Mes: 12 prominencia: 0.0 wikipedia_url: -
2011 tipo: NÚMERO prominencia: 0.0 wikipedia_url: -

Como puede ver, todas las entidades están identificadas y clasificadas correctamente, excepto que 2011 aparece dos veces. Además del campo en el resultado del ejemplo, la API de análisis de entidades también detectará organizaciones, obras de arte, bienes de consumo, números de teléfono, direcciones y precios.

Análisis de sentimiento de la entidad

Si existen modelos para la detección de entidades y el análisis de sentimientos, es natural ir un paso más allá y combinarlos para detectar las emociones predominantes hacia las diferentes entidades en un texto.

Mientras que la API de análisis de sentimiento encuentra todas las muestras de emoción en el documento y las agrega, el análisis de sentimiento de entidad intenta encontrar las dependencias entre las diferentes partes del documento y las entidades identificadas y luego atribuye las emociones en estos segmentos de texto a las entidades respectivas.

Por ejemplo, el texto opinado: “El autor es un escritor horrible. El lector es muy inteligente por otro lado.” conduce a los resultados:

Entidad Sentimiento
autor Prominencia: 0,8773350715637207 Sentimiento: magnitud: 1,899999976158142 puntuación: -0,8999999761581421
lector Prominencia: 0,08653714507818222 Sentimiento: magnitud: 0,8999999761581421 puntuación: 0,8999999761581421

El análisis de opinión de la entidad hasta ahora solo funciona en inglés, japonés y español.

Clasificación de texto

Por último, la API de lenguaje natural de Google viene con un modelo de clasificación de texto plug-and-play.

El modelo está entrenado para clasificar los documentos de entrada en un gran conjunto de categorías. Las categorías están estructuradas de forma jerárquica, por ejemplo, la categoría "Pasatiempos y ocio" tiene varias subcategorías, una de las cuales sería "Pasatiempos y ocio/Al aire libre" , que a su vez tiene subcategorías como "Pasatiempos y ocio/Al aire libre/Pesca".

Este es un texto de ejemplo de un anuncio de una cámara Nikon:

“El gran sensor de formato DX de 24,2 MP de la D3500 captura fotos ricamente detalladas y vídeos Full HD, incluso cuando se dispara con poca luz. En combinación con la potencia de reproducción de su lente NIKKOR, puede comenzar a crear retratos artísticos con un desenfoque suave del fondo. Con facilidad."

La API de Google devuelve el resultado:

Categoría Confianza
Arte y entretenimiento/Arte visual y diseño/Artes fotográficas y digitales 0,95
Aficiones y ocio 0,94
Informática y electrónica/Electrónica de consumo/Cámaras y equipos fotográficos 0.85

Las tres categorías tienen sentido, aunque intuitivamente clasificaríamos la tercera entrada por encima de la segunda. Sin embargo, se debe considerar que este segmento de entrada es solo una pequeña parte del documento de anuncio de cámara completo y el rendimiento del modelo de clasificación mejora con la longitud del texto.

Después de probarlo con muchos documentos, encontré que los resultados del modelo de clasificación eran significativos en la mayoría de los casos. Aún así, como todos los demás modelos de la API de Google Natural Language, el clasificador viene como una solución de caja negra que el usuario de la API no puede modificar ni ajustar. Especialmente en el caso de la clasificación de texto, la gran mayoría de las empresas tendrán sus propias categorías de texto que difieren de las categorías del modelo de Google y, por lo tanto, el servicio de clasificación de texto de la API de Natural Language podría no ser aplicable para la mayoría de los usuarios.

Otra limitación del modelo de clasificación es que solo funciona para textos en inglés.

Cómo utilizar la API de lenguaje natural

La principal ventaja de la API de Google Natural Language es su facilidad de uso. No se requieren habilidades de aprendizaje automático y casi ninguna habilidad de codificación. En el sitio web de Google Cloud, puede encontrar fragmentos de código para llamar a la API en muchos idiomas.

Por ejemplo, el código de Python para llamar a la API de análisis de sentimientos es tan breve como:

 from google.cloud import language_v1 from google.cloud.language_v1 import enums import six def sample_analyze_sentiment(content): client = language_v1.LanguageServiceClient() if isinstance(content, six.binary_type): content = content.decode('utf-8') type_ = enums.Document.Type.PLAIN_TEXT document = {'type': type_, 'content': content} response = client.analyze_sentiment(document) sentiment = response.document_sentiment print('Score: {}'.format(sentiment.score)) print('Magnitude: {}'.format(sentiment.magnitude))

Las otras funcionalidades de la API se llaman de manera similar, simplemente cambiando client.analyze_sentiment a la función adecuada.

Costo total de la API de lenguaje natural de Google

Google cobra a sus usuarios por solicitud por todos los servicios de la API de Natural Language. Esto tiene la ventaja de que no hay costos fijos para ningún servidor de implementación. La desventaja es que puede volverse costoso para conjuntos de datos muy grandes.

En esta tabla se muestran los precios (por 1.000 solicitudes) en función del número de solicitudes mensuales:

Tabla que muestra el costo de la API de lenguaje natural de Google

Si un documento tiene más de 1000 caracteres, cuenta como varias solicitudes. Por ejemplo, si desea analizar la opinión de 10 000 documentos, que tienen 1500 caracteres cada uno, se le cobrarán 20 000 solicitudes. Como los primeros 5.000 son gratuitos, el costo total ascendería a $15. Analizar un millón de documentos del mismo tamaño costaría $1,995.

Conveniente, pero inflexible

La API de Google Natural Language es una opción muy conveniente para soluciones rápidas y listas para usar. Se requiere muy poco conocimiento técnico y ninguna comprensión de los modelos de aprendizaje automático subyacentes.

La principal desventaja es su rigidez y la falta de acceso a los modelos. Los modelos no se pueden ajustar a una tarea o conjunto de datos específicos.

En un entorno del mundo real, la mayoría de las tareas probablemente requerirán una solución más personalizada que la que pueden proporcionar las funciones estandarizadas de la API de Natural Language.

Para este escenario, Google AutoML Natural Language es más adecuado.

Lenguaje natural de Google AutoML

Si la API de Natural Language no es lo suficientemente flexible para los propósitos de su negocio, AutoML Natural Language podría ser el servicio adecuado. AutoML es un nuevo servicio en la nube de Google (todavía en versión beta) que permite al usuario crear modelos de aprendizaje automático personalizados. A diferencia de la API de Natural Language, los modelos de AutoML se entrenarán con los datos del usuario y, por lo tanto, se adaptarán a una tarea específica.

Los modelos de aprendizaje automático personalizados para clasificar contenido son útiles cuando las categorías predefinidas que están disponibles en la API de Natural Language son demasiado genéricas o no se aplican a su caso de uso específico o dominio de conocimiento.

El servicio AutoML requiere un poco más de esfuerzo para el usuario, principalmente porque debe proporcionar un conjunto de datos para entrenar el modelo. Sin embargo, el entrenamiento y la evaluación de los modelos están completamente automatizados y no se requieren conocimientos de aprendizaje automático. Todo el proceso se puede realizar sin escribir ningún código utilizando la consola de Google Cloud. Por supuesto, si desea automatizar estos pasos, hay soporte para todos los lenguajes de programación comunes.

¿Qué se puede hacer con Google AutoML Natural Language?

El servicio AutoML cubre tres casos de uso. Todos estos casos de uso solo admiten el idioma inglés por ahora.

1. Clasificación de texto de AutoML

Mientras que el clasificador de texto de la API de Natural Language está preentrenado y, por lo tanto, tiene un conjunto fijo de categorías de texto, la clasificación de texto de AutoML crea modelos de aprendizaje automático personalizados, con las categorías que proporcionas en tu conjunto de datos de entrenamiento.

2. Análisis de opinión de AutoML

Como hemos visto, el análisis de sentimientos de la API de Natural Language funciona muy bien en casos de uso general, como reseñas de películas. Debido a que el modelo de sentimiento se entrena en un corpus muy general, el rendimiento puede deteriorarse para los documentos que usan mucho lenguaje específico del dominio. En estas situaciones, AutoML Sentiment Analysis le permite entrenar un modelo de opinión personalizado para su dominio.

3. Extracción de entidades de AutoML

En muchos contextos comerciales, hay entidades específicas de dominio (contratos legales, documentos médicos) que la API de Natural Language no podrá identificar. Si tiene un conjunto de datos donde las entidades están marcadas, puede entrenar un extractor de entidades modelo personalizado con AutoML. Si el conjunto de datos es lo suficientemente grande, el modelo de extracción de entidades entrenado también podrá detectar entidades nunca antes vistas.

Cómo utilizar el lenguaje natural de AutoML

El uso de los tres AutoML es un proceso de cuatro pasos y es muy similar para las tres metodologías:

  1. Preparación del conjunto de datos
    El conjunto de datos debe estar en un formato específico (CSV o JSON) y debe almacenarse en un depósito de almacenamiento. Para los modelos de clasificación y sentimiento, los conjuntos de datos contienen solo dos columnas, el texto y la etiqueta. Para el modelo de extracción de entidades, el conjunto de datos necesita el texto y las ubicaciones de todas las entidades en el texto.

  2. Entrenamiento modelo
    El entrenamiento del modelo es completamente automático. Si no se dan instrucciones de lo contrario, AutoML dividirá el conjunto de entrenamiento automáticamente en conjuntos de entrenamiento, prueba y validación. Esta división también puede ser decidida por el usuario, pero esa es la única forma de influir en el entrenamiento del modelo. El resto del entrenamiento está completamente automatizado en forma de caja negra.

  3. Evaluación
    Cuando finalice el entrenamiento, AutoML mostrará puntuaciones de precisión y recuperación, así como una matriz de confusión. Desafortunadamente, no hay absolutamente ninguna información sobre el modelo en sí, lo que dificulta identificar las razones del mal rendimiento de los modelos.

  4. Predicción
    Una vez que esté satisfecho con el rendimiento del modelo, el modelo se puede implementar convenientemente con un par de clics. El proceso de implementación toma solo unos minutos.

Rendimiento del modelo de AutoML

El proceso de entrenamiento es bastante lento, probablemente porque los modelos subyacentes son muy grandes. Entrené una pequeña tarea de clasificación de prueba con 15,000 muestras y 10 categorías y el entrenamiento tomó varias horas. Un ejemplo del mundo real con un conjunto de datos mucho más grande me llevó varios días.

Si bien Google no publicó ningún detalle sobre los modelos utilizados, supongo que el modelo BERT de Google se usa con pequeñas adaptaciones para cada tarea. El ajuste fino de modelos grandes como BERT es un proceso computacionalmente costoso, especialmente cuando se realiza una gran cantidad de validación cruzada.

Probé el modelo de clasificación de AutoML en un ejemplo del mundo real con un modelo que desarrollé yo mismo, que estaba basado en BERT. Sorprendentemente, el modelo de AutoML se desempeñó significativamente peor que mi propio modelo, cuando se entrenó con los mismos datos. AutoML logró una precisión del 84 %, mientras que mi modelo On logró el 89 %.

Eso significa que, si bien el uso de AutoML puede ser muy conveniente, para tareas críticas de rendimiento, tiene sentido invertir tiempo y desarrollar el modelo usted mismo.

Precios de AutoML

El precio de AutoML para predicciones con $5 por cada 1000 registros de texto es significativamente más caro que la API de Natural Language. Además, para el entrenamiento del modelo, AutoML cobra $3 por hora. Si bien esto es insignificante al principio, para los casos de uso que requieren un reentrenamiento frecuente, esto puede sumar una cantidad sustancial, especialmente porque el entrenamiento parece ser bastante lento.

Gráfico de precios de AutoML.

Usemos el mismo ejemplo que para la API de Natural Language:

Quiere analizar la opinión de 10 000 documentos, que tienen 1500 caracteres cada uno, por lo que se le cobrarán 20 000 solicitudes. Digamos que entrenar al modelo toma 20 horas, lo que cuesta $48. La predicción no te costaría nada, ya que las primeras 30.000 solicitudes son gratuitas. Para conjuntos de datos pequeños como este, AutoML es muy económico.

Sin embargo, si su conjunto de datos es más grande y necesita predecir el sentimiento de un millón del mismo tamaño, le costaría $ 9850, que es bastante caro. Para grandes conjuntos de datos como este, tiene sentido desarrollar su propio modelo e implementarlo usted mismo sin usar AutoML.

API de lenguaje natural de Google frente a lenguaje natural de AutoML

Google AutoML Natural Language es mucho más potente que la API de Natural Language porque permite al usuario entrenar modelos personalizados para su conjunto de datos y dominio específicos.

Es igual de fácil de usar y no requiere conocimientos de aprendizaje automático. Las dos desventajas son los costos más altos y la necesidad de proporcionar un conjunto de datos de alta calidad que necesita entrenar modelos que funcionen bien.

La versión beta de AutoML solo admite tres tareas de NLP por ahora (clasificación, análisis de opiniones, extracción de entidades) y solo admite documentos en inglés. Cuando este servicio se lance por completo, espero que se agreguen otros idiomas y tareas de NLP con el tiempo.

Comparación de procesadores de lenguaje natural

Cuadro comparativo de procesadores de lenguaje natural.

Relacionado: Aprovechar al máximo los modelos preentrenados