Clasificación de texto con JavaScript y TensorFlow.js: Crea una aplicación web de análisis de sentimiento
Clasificación de texto con JavaScript y TensorFlow.js: Crea una aplicación web de análisis de sentimiento
La clasificación de texto es una tarea común en inteligencia artificial y aprendizaje automático. Con JavaScript y TensorFlow.js, podemos realizar este tipo de tareas directamente en una aplicación web, sin depender de servidores externos. En esta guía, aprenderás cómo crear una aplicación interactiva que analiza el sentimiento de un texto usando TensorFlow.js y el modelo pre-entrenado Universal Sentence Encoder.
Paso 1: Configuración del entorno
- Crea un nuevo proyecto de Node.js ejecutando el siguiente comando:
npm init -y
Esto generará el archivo package.json.
2. Instala las dependencias necesarias para este proyecto:
npm install @tensorflow/tfjs @tensorflow-models/universal-sentence-encoder --force
Usaremos la librería @tensorflow/tfjs para trabajar con TensorFlow en JavaScript y @tensorflow-models/universal-sentence-encoder como modelo pre-entrenado para procesar texto y generar embeddings.
Paso 2: Cargar el modelo Universal Sentence Encoder
El modelo Universal Sentence Encoder genera representaciones numéricas (embeddings) para oraciones. Vamos a cargar este modelo en nuestro proyecto.
Crea un archivo index.js y agrega el siguiente código:
import * as use from '@tensorflow-models/universal-sentence-encoder'; (async () => { const sentences = [ 'Me encanta el clima hoy.', 'No me gusta nada este lugar.', 'El café está delicioso.', 'La película fue aburrida.', ]; // Cargar el modelo pre-entrenado const model = await use.load(); console.log('Modelo Universal Sentence Encoder cargado.'); // Generar embeddings para las oraciones const embeddings = await model.embed(sentences); console.log('Embeddings generados:', embeddings.arraySync()); })();
- Este código carga el modelo y genera embeddings (vectores numéricos) para una lista de oraciones.
- Estos embeddings serán la base para analizar el sentimiento o clasificar el texto.
Paso 3: Clasificación de texto (simulada)
Como el modelo Universal Sentence Encoder no clasifica directamente el texto, crearemos una regla sencilla para simular el análisis de sentimiento utilizando los embeddings.
Actualiza tu index.js con el siguiente código:
async function classifyText(model, text) { const embeddings = await model.embed(); const score = embeddings.arraySync()[0].reduce((sum, value) => sum + value, 0); // Simulación: Sentimiento positivo si el puntaje es mayor que 0 return score > 0 ? 'positivo' : 'negativo'; } (async () => { const sentences = [ 'Me encanta el clima hoy.', 'No me gusta nada este lugar.', 'El café está delicioso.', 'La película fue aburrida.', ]; const model = await use.load(); console.log('Modelo cargado exitosamente.'); for (const sentence of sentences) { const sentiment = await classifyText(model, sentence); console.log(`"${sentence}" es ${sentiment}.`); } })();
"Me encanta el clima hoy." es positivo. "No me gusta nada este lugar." es negativo. "El café está delicioso." es positivo. "La película fue aburrida." es negativo.
Paso 4: Integración en una aplicación web
Ahora integraremos el modelo en una aplicación web para que los usuarios puedan ingresar su propio texto y obtener una clasificación.
Creamos un archivo index.html con la siguiente estructura:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Clasificación de Sentimiento con TensorFlow.js</title> </head> <body> <h1>Análisis de Sentimiento</h1> <div> <textarea id="input-text" rows="4" cols="50" placeholder="Escribe aquí..."></textarea> <br /> <button id="classify-button">Clasificar</button> <p>Resultado: <span id="result"></span></p> </div> <!-- Importar TensorFlow.js y Universal Sentence Encoder --> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@3.7.0/dist/tf.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/universal-sentence-encoder@4.0.0/dist/universal-sentence-encoder.min.js"></script> <script src="index.js"></script> </body> </html>
Archivo JS: index.js
Este script conecta el HTML con el modelo de TensorFlow.js:
let model; async function loadModel() { model = await use.load(); console.log('Modelo cargado exitosamente.'); } async function classifyText(text) { const embeddings = await model.embed(); const score = embeddings.arraySync()[0].reduce((sum, value) => sum + value, 0); return score > 0 ? 'positivo' : 'negativo'; } async function handleClassifyClick() { const inputText = document.getElementById('input-text').value; const resultElement = document.getElementById('result'); if (!inputText) { resultElement.textContent = 'Por favor, ingresa un texto.'; return; } const sentiment = await classifyText(inputText); resultElement.textContent = `Sentimiento: ${sentiment}`; } // Inicializar loadModel(); document.getElementById('classify-button').addEventListener('click', handleClassifyClick);
Conclusión
En este artículo, aprendimos cómo usar TensorFlow.js y el modelo Universal Sentence Encoder para analizar y clasificar texto en una aplicación web.
Hemos visto:
- Cómo configurar el entorno y cargar el modelo.
- Cómo generar embeddings para el texto.
- Cómo integrar la funcionalidad en una aplicación interactiva que puede analizar el sentimiento de cualquier texto ingresado por el usuario.
Con esta base, puedes expandir el proyecto utilizando modelos más complejos o entrenando tus propios clasificadores. ¡El límite es tu imaginación!