La API de Cloud Natural Language te permite extraer entidades de textos, realizar análisis de opiniones y sintácticos, y clasificar texto en categorías. En este lab, nos enfocaremos en la clasificación de texto. Esta función de la API facilita la clasificación de conjuntos de datos de texto de gran tamaño a través de una base de datos con más de 700 categorías.
Qué aprenderás
Cómo crear una solicitud a la API de Natural Language y cómo llamar a la API con curl
Cómo usar la función de clasificación de texto de la API de NL
Cómo usar la clasificación de texto para entender un conjunto de datos de artículos periodísticos
En cada lab, recibirá un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.
Accede a Qwiklabs desde una ventana de incógnito.
Ten en cuenta el tiempo de acceso del lab (por ejemplo, 1:15:00) y asegúrate de finalizarlo en el plazo asignado.
No existe una función de pausa. Si lo necesita, puede reiniciar el lab, pero deberá hacerlo desde el comienzo.
Cuando esté listo, haga clic en Comenzar lab.
Anote las credenciales del lab (el nombre de usuario y la contraseña). Las usarás para acceder a la consola de Google Cloud.
Haga clic en Abrir Google Console.
Haga clic en Usar otra cuenta, copie las credenciales para este lab y péguelas en el mensaje emergente que aparece.
Si usa otras credenciales, se generarán errores o incurrirá en cargos.
Acepta las condiciones y omite la página de recursos de recuperación.
Activa Google Cloud Shell
Google Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud.
Google Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
En la consola de Cloud, en la barra de herramientas superior derecha, haz clic en el botón Abrir Cloud Shell.
Haz clic en Continuar.
El aprovisionamiento y la conexión al entorno demorarán unos minutos. Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. Por ejemplo:
gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con el completado de línea de comando.
Puedes solicitar el nombre de la cuenta activa con este comando:
Tarea 1: Confirma que la API de Cloud Natural Language esté habilitada
Haz clic en el ícono del menú de navegación () en la parte superior izquierda de la pantalla.
Selecciona APIs y servicios > APIs y servicios habilitados.
Haz clic en + HABILITAR LAS APIS Y LOS SERVICIOS.
Luego, busca language en el cuadro de búsqueda. Haz clic en API de Cloud Natural Language.
Si la API no está habilitada, verás el botón HABILITAR. Haz clic en HABILITAR para habilitarla:
Cuando la API esté habilitada, verás el botón ADMINISTRAR en la tarjeta API de Cloud Natural Language.
Tarea 2: Crea una clave de API
Dado que estás usando curl para enviar una solicitud a la API de Natural Language, tendrás que generar una clave de API para pasar la URL de la solicitud.
En la consola, haz clic en el menú de navegación > APIs y servicios > Credenciales para crear una clave de API.
Luego, haz clic en + CREAR CREDENCIALES.
En el menú desplegable, selecciona Clave de API:
A continuación, copia la clave generada. Haz clic en CERRAR.
Ahora que tienes una clave de API, guárdala en una variable de entorno para no tener que ingresar el valor de la clave de API en cada solicitud.
En Cloud Shell, ejecuta lo siguiente. Asegúrate de reemplazar <your_api_key> por la clave que acabas de copiar:
export API_KEY=<YOUR_API_KEY>
Tarea 3: Clasifica un artículo de noticia
Puedes ordenar datos de texto en distintas categorías con una sola llamada a la API mediante el método classifyText de la API de Natural Language. Este método muestra una lista de categorías de contenido que corresponden a un documento de texto. La especificidad de la clasificación es variada, desde categorías generales, como /Computers & Electronics, hasta otras muy específicas, como /Computers & Electronics/Programming/Java (Programming Language). En la guía de categorías de contenido, se puede encontrar una lista completa de más de 700 posibles categorías.
Comenzaremos por clasificar un solo artículo y veremos cómo podemos usar este método en el análisis de un corpus periodístico más amplio. Tomemos el título y la descripción de un artículo del New York Times en la sección de gastronomía:
A Smoky Lobster Salad With a Tapa Twist. This spin on the Spanish pulpo a la gallega skips the octopus, but keeps the sea salt, olive oil, pimentón and boiled potatoes.
En tu entorno de Cloud Shell, crea un archivo request.json con el siguiente código. Puedes crear el archivo a través de tu editor de línea de comandos preferido (nano, vim, emacs) o usar el editor de código de Cloud Shell:
Crea un nuevo archivo llamado request.json y agrega lo siguiente:
{
"document":{
"type":"PLAIN_TEXT",
"content":"A Smoky Lobster Salad With a Tapa Twist. This spin on the Spanish pulpo a la gallega skips the octopus, but keeps the sea salt, olive oil, pimentón and boiled potatoes."
}
}
Ahora, puedes enviar este texto al método classifyText de la API de Natural Language con el siguiente comando curl:
El texto no menciona de manera explícita que se trate de una receta ni que incluye mariscos; sin embargo, la API es capaz de categorizarlo. Clasificar un solo artículo es genial; sin embargo, para realmente ver el poder de esta función, clasifiquemos muchos datos de texto.
Tarea 4: Clasifica un conjunto de datos de texto de gran tamaño
Para ver cómo el método classifyText puede ayudarnos a entender un conjunto de datos con mucho texto, usa este conjunto de datos público de artículos de noticias de la BBC. El conjunto de datos consta de 2,225 artículos de cinco áreas temáticas (negocios, entretenimiento, política, deportes y tecnología) publicados entre 2004 y 2005. Hay un subconjunto de estos artículos ubicado en un bucket público de Google Cloud Storage. Cada uno de estos artículos está en un archivo .txt.
Para examinar los datos y enviarlos a la API de Natural Language, deberás escribir una secuencia de comandos de Python para leer cada archivo de texto desde Cloud Storage, enviarlo al extremo de classifyText y almacenar los resultados en una tabla de BigQuery. BigQuery es la herramienta de almacén de macrodatos de Google Cloud, que te permite almacenar y analizar conjuntos de datos de gran tamaño fácilmente.
Si quieres ver el tipo de texto con el que trabajarás, ejecuta el siguiente comando para ver un artículo:
A continuación, crearás una tabla de BigQuery para tus datos.
Tarea 5: Crea una tabla de BigQuery para los datos de texto categorizados
Antes de enviar el texto a la API de Natural Language, necesitas un lugar para almacenar el texto y la categoría de cada artículo.
En la consola de Google Cloud, haz clic en el menú de navegación () > BigQuery.
Haz clic en Listo para el aviso de bienvenida cuando inicies BigQuery.
En el panel izquierdo, haz clic en el ícono Ver acciones () junto al nombre de tu proyecto y, luego, haz clic en Crear conjunto de datos.
Para ID de conjunto de datos, escribe news_classification_dataset
Haz clic en Crear conjunto de datos.
Haz clic en el ícono Ver acciones junto al nombre de tu conjunto de datos y, luego, en Crear tabla. Usa la siguiente configuración para la tabla nueva:
Crear tabla desde: Tabla vacía.
Asígnale el nombre article_data.
Haz clic en Agregar campo (+) debajo de Esquema y agrega los siguientes 3 campos:
article_text con el tipo STRING,
category con el tipo STRING y
confidence con el tipo FLOAT.
Haz clic en CREAR TABLA.
En este momento, la tabla está vacía. En el siguiente paso, leerás los artículos desde Cloud Storage, los enviarás a la API de Natural Language para clasificarlos y almacenarás el resultado en BigQuery.
Tarea 6: Clasifica datos de noticias y almacena el resultado en BigQuery
Antes de crear una secuencia de comandos para enviar los datos de noticias a la API de Natural Language, tendrás que crear una cuenta de servicio. Esta se usará para autenticar la API de Natural Language y BigQuery desde la secuencia de comandos de Python.
En Cloud Shell, exporta el nombre de tu proyecto de Cloud como una variable de entorno. Reemplaza <your_project_name> por el ID del proyecto de GCP que se encuentra en el panel Detalles del lab de este lab:
export PROJECT=<your_project_name>
A continuación, ejecuta los siguientes comandos desde Cloud Shell para crear una cuenta de servicio:
Ya tienes todo listo para enviar los datos de texto a la API de Natural Language.
Para hacerlo, escribe una secuencia de comandos de Python con el módulo de Python para Google Cloud. Puedes hacer lo mismo con cualquier lenguaje; hay muchas bibliotecas cliente de Cloud.
Crea un archivo llamado classify-text.py y copia allí lo siguiente. Reemplaza YOUR_PROJECT por tu ID del proyecto de GCP.
Nota: Deja las comillas simples del valor de ID del proyecto en su lugar.
from google.cloud import storage, language_v1, bigquery
# Set up our GCS, NL, and BigQuery clients
storage_client = storage.Client()
nl_client = language_v1.LanguageServiceClient()
# TODO: replace YOUR_PROJECT with your project id below
bq_client = bigquery.Client(project='YOUR_PROJECT')
dataset_ref = bq_client.dataset('news_classification_dataset')
dataset = bigquery.Dataset(dataset_ref)
table_ref = dataset.table('article_data') # Update this if you used a different table name
table = bq_client.get_table(table_ref)
# Send article text to the NL API's classifyText method
def classify_text(article):
response = nl_client.classify_text(
document=language_v1.types.Document(
content=article,
type_='PLAIN_TEXT'
)
)
return response
rows_for_bq = []
files = storage_client.bucket('cloud-training-demos-text').list_blobs()
print("Got article files from GCS, sending them to the NL API (this will take ~2 minutes)...")
# Send files to the NL API and save the result to send to BigQuery
for file in files:
if file.name.endswith('txt'):
article_text = file.download_as_bytes()
nl_response = classify_text(article_text)
if len(nl_response.categories) > 0:
rows_for_bq.append((str(article_text), str(nl_response.categories[0].name), nl_response.categories[0].confidence))
print("Writing NL API article data to BigQuery...")
# Write article text + category data to BQ
errors = bq_client.insert_rows(table, rows_for_bq)
assert errors == []
Ya tienes todo listo para comenzar la clasificación de artículos y su importación a BigQuery.
Ejecuta la siguiente secuencia de comandos:
python3 classify-text.py
La secuencia de comandos tarda aproximadamente dos minutos en completarse, así que analicemos lo que sucede mientras se ejecuta.
Nota: Si recibes un error mientas ejecutas python3 classify-text.py, es posible que Cloud Shell se desconecte. Para solucionarlo, ejecuta los siguientes comandos para exportar tus variables de entorno y, luego, vuelve a ejecutar el comando python3 classify-text.py.
export PROJECT= (ID DEL PROYECTO de GCP)
export GOOGLE_APPLICATION_CREDENTIALS=key.json
Usamos la biblioteca cliente de Python de Google Cloud para acceder a Cloud Storage, la API de Natural Language y BigQuery. Primero, se crea un cliente para cada servicio. Luego, se crean referencias a la tabla de BigQuery. files es una referencia a cada archivo del conjunto de datos de la BBC incluido en el bucket público. Iteramos estos archivos, descargamos los artículos como strings y enviamos cada uno a la API de Natural Language en nuestra función classify_text. Cuando la API de Natural Language muestra una categoría, el artículo y los datos de su categoría se guardan en la lista rows_for_bq. Una vez que se completa la clasificación de cada artículo, los datos se insertan en BigQuery con insert_rows().
Nota: La API de Natural Language puede mostrar más de una categoría para un documento; sin embargo, a los fines de este lab, solo almacenaremos la primera categoría para evitar complicaciones.
Cuando se haya terminado de ejecutar la secuencia de comandos, habrá que verificar si los datos del artículo se guardaron en BigQuery.
En BigQuery, navega a la tabla article_data en la pestaña Explorador y haz clic en CONSULTA > En una pestaña nueva:
Edita los resultados en el cuadro Sin título y agrega un asterisco entre SELECT y FROM:
SELECT * FROM `news_classification_dataset.article_data`
Ahora haz clic en EJECUTAR.
Verás tus datos cuando se complete la consulta. Desplázate hacia la derecha para ver la columna de categoría.
La columna de categoría tiene el nombre de la primera categoría que la API de Natural Language mostró para el artículo, mientras que la confianza es un valor entre 0 y 1 que indica el grado de seguridad con el que la API categorizó el artículo correctamente. Aprenderás cómo realizar consultas más complejas sobre los datos en el siguiente paso.
Tarea 7: Analiza los datos de noticias categorizados en BigQuery
Primero, ve qué categorías fueron las más comunes en el conjunto de datos.
En la consola de BigQuery, haz clic en + Redactar consulta nueva.
Ingresa la siguiente consulta:
SELECT
category,
COUNT(*) c
FROM
`news_classification_dataset.article_data`
GROUP BY
category
ORDER BY
c DESC
Ahora haz clic en Ejecutar.
En los resultados de la consulta, deberías ver algo como esto:
Si quisieras buscar el artículo que se devolvió para una categoría más específica, como /Arts & Entertainment/Music & Audio/Classical Music, podrías ejecutar la siguiente consulta:
SELECT * FROM `news_classification_dataset.article_data`
WHERE category = "/Arts & Entertainment/Music & Audio/Classical Music"
Para obtener únicamente los artículos en los que la API de Natural Language devolvió una puntuación de confianza superior al 90%, ejecuta la siguiente consulta:
SELECT
article_text,
category
FROM `news_classification_dataset.article_data`
WHERE cast(confidence as float64) > 0.9
Para realizar más consultas sobre tus datos, revisa la documentación de BigQuery. BigQuery también se integra en varias herramientas de visualización. Para crear visualizaciones de tus datos de noticias categorizados, consulta la guía de inicio rápido de Data Studio para BigQuery.
¡Felicitaciones!
Aprendiste cómo usar el método de clasificación de texto de la API de Natural Language para clasificar artículos de noticia. Comenzaste por clasificar un artículo y, luego, clasificaste y analizaste un conjunto de datos de noticias de gran tamaño a través de la API de NL con BigQuery.
Temas abordados
Cómo crear una solicitud de classifyText para la API de Natural Language y llamar a la API con curl
Cómo usar el módulo de Python de Google Cloud para analizar un conjunto de datos de noticias de gran tamaño
Cómo importar y analizar datos en BigQuery
Copyright 2020 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.
Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
.
Los labs tienen un límite de tiempo y no tienen la función de pausa. Si finalizas el lab, deberás reiniciarlo desde el principio.
En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar
Usa la navegación privada
Copia el nombre de usuario y la contraseña proporcionados para el lab
Haz clic en Abrir la consola en modo privado
Accede a la consola
Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
Acepta las condiciones y omite la página de recursos de recuperación
No hagas clic en Finalizar lab, a menos que lo hayas terminado o quieras reiniciarlo, ya que se borrará tu trabajo y se quitará el proyecto
Este contenido no está disponible en este momento
Te enviaremos una notificación por correo electrónico cuando esté disponible
¡Genial!
Nos comunicaremos contigo por correo electrónico si está disponible
Un lab a la vez
Confirma para finalizar todos los labs existentes y comenzar este
Usa la navegación privada para ejecutar el lab
Usa una ventana de navegación privada o de Incógnito para ejecutar el lab. Así
evitarás cualquier conflicto entre tu cuenta personal y la cuenta
de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
En este lab, aprenderás a clasificar texto en categorías con la API de Natural Language
Duración:
0 min de configuración
·
Acceso por 60 min
·
60 min para completar