🔍 ¿Qué es NLP?
El Procesamiento del Lenguaje Natural (NLP) es una rama de la inteligencia artificial que busca enseñar a los computadores a comprender y generar lenguaje humano. Desde los asistentes virtuales hasta la traducción automática, el NLP está revolucionando la manera en que interactuamos con la tecnología.
Pero, ¿cómo logran los computadores entender el lenguaje humano? La clave está en representar el texto de manera numérica. Aquí es donde entran en juego los vectores y los modelos de representación de palabras como Word2Vec.
De las palabras a los vectores: la importancia de la representación numérica
CPara que una máquina pueda procesar el lenguaje humano, primero debemos convertir las palabras en valores numéricos. Tradicionalmente, uno de los métodos más usados era la codificación one-hot, donde cada palabra se representa con un vector binario de tamaño igual al vocabulario total.
Por ejemplo, si nuestro vocabulario tiene 200.000 palabras, cada palabra se representaría con un vector de 200.000 posiciones, donde solo una tiene el valor 1 y el resto son 0:
Palabra | Representación One-Hot |
«Gato» | [1, 0, 0, …, 0] |
«Perro» | [0, 1, 0, …, 0] |
«Casa» | [0, 0, 1, …, 0] |
Este método, aunque funcional, presenta varios problemas:
Alta dimensionalidad: si el vocabulario crece, los vectores se vuelven enormes.
Ineficiencia computacional: requiere mucho espacio de almacenamiento y procesamiento.
Falta de relación semántica: no refleja similitudes entre palabras. «Gato» y «Felino» tienen representaciones completamente distintas, aunque están relacionadas en significado.
Para solucionar estos problemas, surgieron los Word Embeddings.
Word Embeddings: capturando el significado de las palabras
Los Word Embeddings son técnicas avanzadas de representación que convierten palabras en vectores de menor dimensión, manteniendo información semántica. Es decir, se busca capturar el significado de las palabras de forma que palabras con significados similares estarán más cerca en el espacio vectorial.
💡 Ejemplo:
Si usamos un modelo de embeddings, el resultado podría ser algo así:
- «Rey» (king) → [0.21, -1.23, 0.45, …]
- «Reina» (queen) → [0.22, -1.20, 0.47, …]
- «Perro» (dog) → [1.12, -0.89, 0.65, …]
Aquí, los vectores de «Rey» y «Reina» serán más similares entre sí que con «Perro».
Algunas de las técnicas más utilizadas en NLP son:
- Word Embeddings (Word2Vec, GloVe, FastText): representan palabras en un espacio de menor dimensión, donde palabras con significados similares están más cerca entre sí.
- Modelos transformers (BERT, GPT, etc.): no solo generan representaciones semánticas de palabras, sino que también consideran el contexto en el que se usan.
Word2Vec: aprendiendo representaciones con redes neuronales
El modelo Word2Vec, desarrollado por Google, es una red neuronal que aprende a representar palabras en un espacio vectorial. Su objetivo es que palabras que aparecen en contextos similares tengan vectores cercanos.
🔹 ¿Cómo funciona?
Word2Vec se entrena de dos maneras:
- CBOW (Continuous Bag of Words): predice una palabra a partir de su contexto. Se toma una ventana de palabras alrededor de una palabra objetivo. El modelo usa estas palabras de contexto para predecir la palabra central. Por ejemplo, si tenemos la siguiente oración: “El perro corre en el parque” y elegimos la palabra central “corre”, las palabras de contexto serían: “El, perro, en, el, parque”. Entonces, el modelo intentaría predecir la palabra “corre” basándose en las palabras del contexto.
- Skip-gram: predice el contexto a partir de una palabra central. Se toma una palabra central y el modelo aprende a predecir las palabras que la rodean. Por ejemplo, si tenemos la misma oración anterior y elegimos “corre como palabra central”, el modelo intentará predecir palabras como «perro», «en», «el», «parque».
Ambos enfoques son poderosos y la elección depende del problema específico que estés resolviendo. Normalmente:
- Si tienes un corpus grande (como noticias o libros) → CBOW es más eficiente.
- Si trabajas con textos pequeños o específicos (como terminología médica) → Skip-gram es mejor.
Característica | CBOW | Skip-gram |
Predice | La palabra central a partir del contexto | El contexto a partir de la palabra central |
Velocidad | Más rápido | Más lento |
Eficiencia en datos grandes | Alta | Media |
Captura palabras raras | Menos preciso | Mejor precisión |
En la práctica, muchos modelos preentrenados de Word2Vec usan Skip-gram, ya que ofrece una mejor representación semántica. Por ejemplo, el modelo que vamos a utilizar de ejemplo (word2vec-google-news-300) fue entrenado utilizando el enfoque Skip-gram.
💡 Ejemplo de relación semántica con Word2Vec:
Si entrenamos Word2Vec con un corpus grande, aprende relaciones como:
Rey – Hombre + Mujer ≈ Reina
Esto, en Python, se traduce de la siguiente manera:
model.most_similar(positive=[«king», «woman»], negative=[«man»], topn=1)
# Resultado esperado: (‘queen’, 0.78)
Aquí, Word2Vec entiende que «rey» y «reina» son equivalentes al cambiar de género.
Práctica: cómo usar Word2Vec en Python
Si queremos aplicar Word2Vec en un proyecto, podemos usar la librería gensim, que nos permite cargar modelos preentrenados como Google News Word2Vec (con 3 millones de palabras).
1. Instalación
pip install gensim
2. Cargar un modelo preentrenado
import gensim.downloader as api
model = api.load(«word2vec-google-news-300») # Carga el modelo de Google News (300 dimensiones)
3. Obtener el embedding de una palabra
El método get_vector permite obtener la representación numérica (embedding) de una palabra en el espacio vectorial del modelo preentrenado.
vector = model.get_vector(«king») # Obtiene el vector de «king»
print(vector.shape) # (300,)
En este caso, el vector correspondiente a la palabra “king” estará formado por 300 valores que representan la codificación de la palabra en este modelo.
4. Medir similitud entre palabras
Usando la representación vectorial de cada palabra podemos cuantificar el grado de similitud entre palabras realizando una comparación vectorial.
La forma más común de realizar esta comparación es a través de la similitud del coseno, que permite calcular el coseno del ángulo entre dos vectores.
El método similarity(palabra1, palabra2) se usa para calcular la similitud del coseno entre dos palabras específicas en el espacio vectorial. Es decir, nos dice qué tan similares son esas dos palabras según el modelo de word embeddings.
similarity = model.similarity(«king», «queen»)
print(f»Similitud entre ‘king’ y ‘queen’: {similarity:.4f}»)
5. Encontrar palabras similares
Asimismo, podemos utilizar la similitud del coseno para identificar las palabras del vocabulario que más se asemejan a una palabra en particular, ya sea por significado o por relación contextual.
Para ello, podemos emplear el método most_similar(palabra, topn=n), el cual calcula la similitud del coseno comparando la palabra de interés con todas las demás en el espacio vectorial. En un modelo que contiene 3 millones de palabras, esto implica realizar 3 millones de comparaciones para encontrar las n palabras más similares. Este proceso puede ser computacionalmente costoso, ya que el tiempo de cálculo depende directamente del tamaño del vocabulario (se realizan tantas comparaciones como palabras contenga el espacio vectorial).
similar_words = model.most_similar(«king», topn=5)
print(similar_words)
Visualización de embeddings con PCA
Los embeddings tienen 300 dimensiones, lo que hace difícil su visualización.
Podemos reducirlos a 2D usando PCA (Análisis de Componentes Principales) para analizar sus relaciones.
El PCA es una técnica de reducción de dimensionalidad que transforma los datos originales en un nuevo sistema de coordenadas donde las dimensiones principales explican la mayor parte de la variabilidad de los datos. En términos simples, PCA identifica las direcciones más importantes en las que varían los datos y las proyecta en un espacio de menor dimensión, conservando la mayor cantidad posible de información.
Código para reducir dimensiones y graficar
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
palabras = [«man», «woman», «dog», «cat», «car», «boat»]
X = np.array([model.get_vector(p) for p in palabras])
# Aplicamos PCA para reducir de 300D a 2D
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# Graficamos
plt.figure(figsize=(8,6))
plt.scatter(X_pca[:,0], X_pca[:,1], edgecolors=’k’)
for i, palabra in enumerate(palabras):
plt.annotate(palabra, (X_pca[i,0], X_pca[i,1]))
plt.xlabel(«Componente principal 1»)
plt.ylabel(«Componente principal 2»)
plt.title(«Visualización de embeddings con PCA»)
plt.show()
🔹 Resultado: Un gráfico 2D donde palabras relacionadas estarán cercanas.
Aplicaciones de Word2Vec
Recuperación Aumentada por Generación (RAG) 🧠🔍
➦ Objetivo: mejorar la capacidad de los modelos de lenguaje (LLMs) para acceder a información actualizada y relevante.
➦ Ejemplo: un chatbot usa Word2Vec para encontrar documentos con términos similares a la consulta del usuario antes de generar una respuesta con GPT.
No obstante, aunque Word2Vec puede usarse en RAG para la búsqueda de información semántica, no es la mejor opción actualmente. Modelos más avanzados basados en Transformers ofrecen una representación más rica y efectiva para la recuperación de documentos.
Búsqueda semántica 🔍
➦ Objetivo: recuperar documentos basándose en significado, no solo palabras clave.
➦ Ejemplo: un usuario busca «cómo mejorar la salud del corazón» y el sistema devuelve artículos sobre «ejercicio cardiovascular» y «dieta saludable», aunque no coincidan las palabras exactas.
Análisis de sentimiento 😊😡
➦ Objetivo: determinar si un texto es positivo, negativo o neutral.
➦ Ejemplo:
«Este producto es increíble» → Sentimiento positivo
«El servicio fue terrible» → Sentimiento negativo
Chatbots y asistentes virtuales 🤖
➦ Objetivo: hacer que los chatbots entiendan mejor el lenguaje humano.
➦ Ejemplo: un chatbot de servicio al cliente detecta que «No puedo iniciar sesión» y «Olvidé mi contraseña» son similares y ofrece ayuda automáticamente.
Sistemas de recomendación 🎯
➦ Objetivo: sugerir productos, contenido o amigos en redes sociales.
➦ Ejemplo: en e-commerce, si un usuario compra «tenis deportivos», se le recomienda «ropa de entrenamiento».
Expansión de consultas en motores de búsqueda 🔍
➦ Objetivo: mejorar la búsqueda agregando términos semánticamente similares.
➦ Ejemplo: un usuario busca «bicicletas eléctricas baratas» y el sistema expande la consulta con sinónimos como «ebike económica», «bici eléctrica asequible».
Traducción automática y procesamiento de idiomas 🌎
➦ Objetivo: mejorar la calidad de traducciones automáticas.
➦ Ejemplo: Word2Vec ayuda a detectar relaciones entre palabras en diferentes idiomas.
Detección de spam y clasificación de texto 📩
➦ Objetivo: identificar correos o mensajes fraudulentos.
➦ Ejemplo: «Gana dinero rápido» se clasifica como spam porque sus palabras están cerca de términos comúnmente usados en correos no deseados.
Generación de texto y escritura asistida ✍️
➦ Objetivo: completar frases y sugerir palabras en asistentes de escritura.
➦ Ejemplo: en Google Docs, al escribir «Nos vemos en…», el sistema sugiere «la reunión de la tarde».
Conclusión
🔹 Word2Vec es una herramienta poderosa para representar texto en forma numérica, permitiendo a los computadores interpretar el lenguaje de manera más eficiente. Además, es útil en muchas aplicaciones de NLP, desde RAG hasta análisis de sentimiento, chatbots y búsqueda semántica.
🔹 El NLP está evolucionando rápidamente con modelos más avanzados como BERT y GPT, que entienden mejor el contexto y significado.
🔹 El futuro del NLP promete avances en traducción automática, chatbots inteligentes y análisis semántico profundo.