Empecemos por lo básico ¿Qué son los embeddings o vectores semánticos?
En el mundo del procesamiento del lenguaje natural (PNL), los embeddings son representaciones matemáticas de palabras, frases o documentos. Es decir, es la transformación de textos poco analizables en números que representan esas ideas y que al ser números si se pueden operar con matemáticas.
Un embedding es la forma matemática de capturar el significado semántico de las cosas. Así, transformar las cosas en números se permite a las máquinas «entender» el lenguaje humano de una forma más profunda, yendo más allá de la simple interpretación de las palabras individuales.
Imagina que quieres que una máquina comprenda la diferencia entre «banco» (donde guardas tu dinero) y «banco» (un asiento del parque). Mientras que un análisis tradicional matemático que tu mismo podrías hacer con python o Javascript (o incluso con Excel) se basaría en la coincidencia de palabras clave y no podrías diferenciarlos, los embeddings permiten representar estas dos palabras con «vectores» diferentes, capturando sus distintos significados y matices incluso cuando se escriben igual.
Los embeddings se generan mediante algoritmos de aprendizaje automático. Estos algoritmos analizan grandes cantidades de texto, como libros, artículos o las páginas web de todo Internet para entender las relaciones y matices del lenguaje. Durante este proceso, el algoritmo aprende a predecir el contexto de las palabras y a representarlas en un espacio vectorial multidimensional (que suena a ciencia ficción pero que ahora explicamos). En este espacio, las palabras con significados similares se ubican cerca unas de otras, mientras que las palabras con significados diferentes se ubican más lejos, reflejando así las relaciones semánticas entre ellas.
Es importante darse cuenta de que los embeddings no solo tratan con palabras. Lo que hacen es capturar la esencia del significado de las palabras y frases, teniendo en cuenta las sutilezas del lenguaje natural.
La capacidad que un modelo de lenguaje tiene de hacer esta transformación bien es una de las cosas que más diferencia a las distintas inteligencias artificiales generativas que existen como ChatGPT, Gemini o Claude.
Explicación de los vectores semánticos o representaciones vectoriales
Los vectores semánticos, también conocidos como representaciones vectoriales o embeddings, son la base del análisis semántico con máquinas. Un vector es una serie de números que representan un punto en un espacio multidimensional. Cada número del vector se llama «dimensión» y representa una característica o propiedad del significado de la palabra o frase.
Para entenderlo mejor, imagina un mapa. Cada punto en el mapa se puede representar con dos dimensiones: latitud y longitud. De la misma manera, cada palabra o frase se puede representar con un vector en un espacio semántico multidimensional. Cuanto más similares sean los significados de dos palabras, más cerca estarán sus vectores en este espacio.
Entendiendo las dimensiones de un vector/embedding: Como coordenadas de un mapa
Las dimensiones de un vector son como las coordenadas de un mapa, pero en lugar de ubicar un punto en un espacio físico, ubican una palabra o frase en un espacio semántico. Cada dimensión representa una característica o propiedad del significado, como el género, la edad, el sentimiento o cualquier otro atributo relevante.
La combinación de todas las dimensiones crea un «mapa» del significado en el espacio semántico. Cuanto más similares sean los significados de dos palabras o frases, más cerca estarán sus vectores en este espacio.
Por ejemplo, si una dimensión representa el sentimiento (positivo/negativo), las palabras «feliz» y «alegre» tendrían valores altos en esa dimensión, mientras que las palabras «triste» y «deprimido» tendrían valores bajos.
Cómo los vectores explican el significado de los textos
Los vectores semánticos capturan el significado de los textos al representar las relaciones entre las palabras. Palabras que aparecen juntas con frecuencia en contextos similares tendrán vectores similares. Por ejemplo, las palabras «rey» y «reina» tendrán vectores cercanos, ya que suelen aparecer en contextos similares (monarquía, poder, etc.).
Además al ser números podrán operarse. Imagina que tenemos estas mismas palabras: Rey y Reina y uno de los valores de nuestro vector mide el género de las palabras (nunca es tan simple, pero nos sirve de ejemplo), sinficaría que con partir de «Rey», quitarle el significado de «hombre» y pasar al sinificado de «mujer», prácticamente nos encontraríamos en el significado de Reina.
De esta manera, los vectores no solo representan el significado de las palabras individuales, sino también las relaciones semánticas entre ellas, lo que permite una comprensión más profunda del texto en su conjunto.
Embeddings: Vectores semánticos de textos con gran cantidad de dimensiones automáticas
Los embeddings modernos, como los generados los modelos de OpenAI y Google, suelen tener una gran cantidad de dimensiones (cientos o incluso miles). Estas dimensiones se generan automáticamente durante el entrenamiento del modelo, y cada una captura un aspecto diferente del significado del texto.
La gran cantidad de dimensiones permite representar el significado de forma más precisa y detallada. Es como tener un mapa con muchas coordenadas, lo que permite ubicar los puntos con mayor precisión. Además, esta alta dimensionalidad permite capturar relaciones semánticas más complejas, como analogías o matices del lenguaje.
Por ejemplo, el siguiente vector podría representar el embedding de la frase «El SEO no muere, se transforma»:
[ 0.23, -0.87, 0.54, 0.12, ..., 0.95, -0.34 ]
Cada número en el vector representa una dimensión, y la combinación de todas las dimensiones crea una representación única del significado de la frase. La crea con números, así que nosotros no la podemos descifrar, pero sabemos que representa justo esa idea con lo que al crear el embedding «El SEO no muere, se transforma» dispondremos de esos números para jugar con ellos. Así que cuando creemos también «El contenido es el Rey del SEO» como embedding, descubriremos que ambos están muy cerca el uno del otro con números semejantes en muchos de sus elementos.
El entrenamiento de los modelos (usando normalmente 768 dimensiones)
Los modelos de embedding se entrenan con enormes cantidades de texto, como libros, artículos, código y páginas web. En los últimos tiempos estamos viendo una lucha por entrenar a las máquinas con cada vez más teras y más teras de información. Durante eeste entrenamiento, el modelo aprende a predecir el contexto de las palabras y a representarlas como vectores en el espacio semántico. Es decir, el entrenamiento es lo que hace que una maquina sepa generar los embeddings.
El número de dimensiones de los embeddings suele ser un parámetro que se define durante el entrenamiento. 768 dimensiones (768 numeritos distintos para representar cada significado) es un valor muy común por el que han optado muchos, pero puede variar según el modelo y la tarea. El entrenamiento de estos modelos requiere una gran cantidad de recursos computacionales y puede llevar días o incluso semanas.
El sistema de atención que le da sentido a los textos
Los modelos de embedding modernos, como los de Google u OpenAI, utilizan un mecanismo llamado «atención» para comprender el contexto de las palabras. La atención permite al modelo «enfocarse» en las palabras más relevantes para una tarea específica, como la traducción o la respuesta a preguntas.
Por ejemplo, al traducir la frase «El gato se sentó en la alfombra», darle el mismo peso de siginificado a «gato» y a «El» sería un error enorme. La atención lo que hará es enfocarse en las palabras «gato» y «alfombra» para generar una traducción precisa a estos vectores de números. Cuando luego le preguntemos «¿Quién se sentó en la alfombra?», la atención verá que la alfombra ya ha sido representada en la pregunta así que se se centraría en «gato».
La atención es una de las claves para que los embeddings capturen el significado de los textos de forma precisa y contextualizada, ya que permite al modelo considerar las relaciones entre las palabras y el contexto en el que aparecen.
¿Por qué los embeddings son tan útiles para analizar significados incluso si no somos una gran empresa que desarrolla IA generativa?
Los embeddings son una herramienta poderosa para el análisis semántico por varias razones:
- Análisis matemático: Permiten aplicar técnicas matemáticas para analizar el significado de los textos. Esto abre un abanico de posibilidades para la búsqueda, clasificación, comparación y análisis de información, que de otra manera serían muy difíciles de realizar.
- Simplificación: Representan el significado de forma numérica, lo que simplifica el procesamiento y análisis de grandes volúmenes de texto. Esto es crucial en el mundo actual, donde la cantidad de información disponible es abrumadora.
- Escalabilidad: Se pueden aplicar a grandes conjuntos de datos de forma eficiente, lo que los hace ideales para analizar grandes corpus de texto o bases de datos de documentos.
- Automatización: Facilitan la automatización de tareas de PNL, como la clasificación de textos o la generación de resúmenes, lo que ahorra tiempo y recursos.
Pero ¿Seguro que necesito Embeddings?¿Qué podemos analizar sin vectores semánticos o embeddings?
Sin embeddings, el análisis semántico se limita a técnicas más básicas que se centran en la estructura superficial del texto. Sin embargo que sean técnicas más sencillas no significa que debamos despreciarlas.
Como en cada revolución del marketing digital que hemos tenido siempre va a haber personas que quieran lanzarse a usar una tecnología o técnica solo porque esté de moda sin haber quemado primero las tecnologáis más sencillas. Nos ha pasado y mucho con el Machine Learning, donde hemos visto como muchas empresas se lanzaban a crear modelos predictivos cuando ni siquiera tenían un seguimiento mensual de sus resultados clave. Con los embeddings empieza a pasar lo mismo, vemos como muchos empiezan a usarlos sin comprenderlos y sin nunca haber realizado un análisis básico de sus contenidos.
Por ello creo que es importante repasar nuestras capacidades de análisis de textos sin embeddings (y sin algoritmos PNL, que también es cierto que no todo son embeddings en el mundo semántico).
- Unidades con las que trabajaremos: Caracteres, palabras, lexemas, entidades. Podemos contar cuántas veces aparece una palabra, identificar las entidades nombradas (personas, lugares, organizaciones) o analizar la estructura gramatical de las oraciones.
- Métricas que podemos usar: Longitud del texto, número de palabras, palabras únicas, entidades únicas. Podemos medir la longitud de un texto, contar el número de palabras o identificar las palabras que aparecen con más frecuencia.
- Frecuencia: TF-IDF (Term Frequency-Inverse Document Frequency) para identificar palabras clave. Esta técnica permite identificar las palabras más relevantes de un documento en relación con una colección de documentos.
- Análisis globales: Co-ocurrencia de palabras, correlación entre términos. Podemos analizar qué palabras tienden a aparecer juntas o qué términos están correlacionados.
Ya solo con eso podemos sacar conclusiones muy interesantes de nuestros textos. Nubes de tags, clusterización por palabras repetidas, coincidencia con keywords, etc. Sin embargo, estas técnicas tienen limitaciones y un techo muy marcado:
- Palabras ≠ Significado: Dos textos pueden expresar ideas similares con palabras diferentes. Las palabras por sí solas no siempre capturan el significado completo. Por ejemplo, las frases «El SEO es el canal más rentable» y «Mi ROI del posicionamiento orgánico tiende a ser mejor» tienen el mismo significado, pero no comparten ni una sola palabra en común.
- Complejidad: Analizar el significado de grandes volúmenes de texto sin embeddings es complejo y requiere mucho tiempo. Imaginemos que queremos analizar el sentimiento de miles de reseñas de productos. Sin embeddings, tendríamos que leer cada reseña y determinar manualmente su sentimiento, lo que sería una tarea titánica. De hecho, en el pasado se perdía muchísimo tiempo tabulando y clasificando opiniones y comentarios de muchos productos.
Los vectores nos aportan análisis matemático del significado
Los vectores semánticos nos permiten superar estas limitaciones al:
- Simplificar el análisis: Representan el significado de forma numérica, lo que facilita el análisis matemático. Podemos aplicar operaciones matemáticas a los vectores para comparar su similitud, agruparlos en clústeres o identificar patrones.
- Aumentar la velocidad y escalabilidad: Permiten analizar grandes volúmenes de texto de forma rápida y eficiente. Gracias a la representación numérica, podemos procesar cientos de miles de documentos en segundos.
- Automatizar tareas: Facilitan la automatización de tareas como la clasificación de textos o la búsqueda semántica. Podemos entrenar modelos de Machine Learning para que realicen estas tareas de forma automática, lo que ahorra tiempo y recursos.
Ejemplos de análisis que podremos hacer con embeddings:
- Análisis de similitud: Identificar textos con significados similares. Podemos calcular la distancia entre los vectores de dos textos para determinar su similitud semántica. Esto es útil para encontrar documentos relacionados, recomendar productos similares, ver contenidos duplicados o agrupar textos por tema.
- Optimización de contenido: Mejorar la relevancia semántica del contenido para las palabras clave objetivo. Podemos comparar el embedding de un texto con el embedding de una palabra clave para determinar si el texto es relevante para esa palabra clave.
- Clusterización: Agrupar textos con significados similares en clústeres.
- Manual: Podemos analizar los clústeres generados por un algoritmo para comprender la estructura de la información y descubrir patrones ocultos.
- Automática: Podemos utilizar algoritmos como k-means para automatizar la creación de clústeres.
- Detección de outliers: Identificar textos que se desvían del tema principal. Podemos calcular la distancia de cada texto al centroide de su clúster. Los textos que se alejan mucho del centroide pueden considerarse outliers y por lo tanto contenidos que no estan enfocados en lo que deberían.
- Búsqueda avanzada: Realizar búsquedas basadas en el significado, no solo en las palabras clave. Podemos usar embeddings para buscar documentos que expresen ideas similares, aunque no contengan las mismas palabras clave.
Entonces esta claro: Queremos trabajar con embeddings. ¿Pero con qué modelo debo crearlos?
El problema de los embeddings es que si bien la definición de lo que son y se espera de ellos está bastante estandarizada, el proceso para generarlo y sobretodo el resultado de los modelos que los generan no lo está.
Dicho de otra forma, los embeddings no son similares entre modelos. De hecho no tienen nada que ver. Si yo comparo un vector que se ha generado con un modelo de OpenAI con otro vector que se ha generado con un modelo de Google me dirá que palabras que nada tienen que ver se parecen, pues en cada uno de ellos las dimensiones significan cosas distintas. Incluso esto no es algo que tenga que ver con la compañia, tienen que ver con el entrenamiento en sí por lo que distintos modelos de embeddings de una misma empresa tampoco coincidirán.
Por ello una de las cosas que debes saber es qué modelos de embeddings existen y cuales son sus características. Resumirlos todos es imposible, sobretodo porque al ritmo de evolución que llevamos con la IA cada día surgen modelos nuevos. pero si que he querido hacer un resumen de los más importantes y estables para que la puedas tener a mano.
Así que he creado esta tabla, para que pueda servirte de referencia y empieces a decidir con cual te vas a casar (porque si, una vez tengas los contenidos en un modelo de embeddings te vas a tener que quedar con él para todo).
Nombre del modelo | Responsable/Creador | Mes/Año lanzamiento | Dimensiones | Arquitectura | API disponible | Disponible para descargar | Apto para español |
---|---|---|---|---|---|---|---|
Word2Vec | 2013 | Variable (100-300) | Red neuronal superficial | Sí (a través de plataformas de ML) | Sí | Sí | |
GloVe | Stanford University | 2014 | Variable (50-300) | Modelo de factorización de matrices | Sí (a través de plataformas de ML) | Sí | Sí |
FastText | 2016 | Variable (100-300) | Red neuronal superficial con subpalabras | Sí (a través de plataformas de ML) | Sí | Sí | |
TensorFlow Hub | – | Variable | Variable | Sí (API para modelos pre-entrenados) | Algunos | Depende del modelo | |
BERT | 2018 | 768 o 1024 | Transformer | Sí (a través de plataformas de ML) | Sí | Sí | |
Sentence Transformers | UKP Lab | – | Variable (384, 768) | Transformer | Sí (a través de plataformas de ML) | Sí | Sí |
Universal Sentence Encoder (USE) | 2018 | 512 | Transformer | Sí (a través de plataformas de ML) | Sí | Sí | |
OpenAI Embeddings | OpenAI | – | 12288 | No especificado (probablemente Transformer) | Sí (API específica para embeddings) | No | Sí |
Voyage AI Embeddings | Voyage AI (a través de Anthropic) | 2023 | 1024 o 1536 | No especificado (probablemente Transformer) | Sí (API específica para embeddings) | No | Sí |
text-embedding-gecko@001 | Google (Gemini) | 2023 | 768 | Transformer | Sí (API específica para embeddings) | No | Sí |
text-embedding-005 | Google (Vertex AI) | 2024 | – | Transformer | Sí (API específica para embeddings) | No | Sí |
Especialmente me gustaría que te fijases en si son modelos descargables o no. Los modelos descargables son los que vas a poder usar en tu ordenador. No digo en un ordenador cutre de la oficina sino en uno de esos potentes adaptados a la IA. Los que no son descargables son los más potentes pero solo podrás usarlos pagando por a la API de su propietario por cada carácter de texto que quieras transformar en embeddings.
Un aviso antes de que empieces a trabajar: Problemas del trabajo con embeddings o por qué los embeddings son peligrosos si no los entiendes
A pesar de su utilidad, los embeddings presentan algunos retos que debemos tener en cuenta:
- Interpretación: No es fácil interpretar el significado de cada dimensión de un embedding. Son como «cajas negras» que capturan información semántica de forma compleja. Cada dimensión representa una combinación de diferentes aspectos del significado, y no siempre es posible determinar qué significa cada dimensión individualmente. No te frustres si no los entiendes. Nadie lo hace.
- Complejidad matemática: El análisis de embeddings requiere conocimientos de álgebra lineal y otras técnicas matemáticas. Para calcular distancias entre vectores, realizar clustering o aplicar otras técnicas de análisis, es necesario comprender los conceptos básicos de álgebra lineal. Pero bueno, no se trata de que tu sepas operarlo, solo tienes que coger nociones de lo que estás haciendo.
- Significado global: Los embeddings suelen representar el significado global de un texto, no los detalles específicos. Si necesitamos analizar los detalles de un texto, los embeddings pueden no ser la herramienta más adecuada.
- No son intercambiables: Como ya he repetido varias veces, los embeddings generados por diferentes modelos no son directamente comparables, ya que cada modelo tiene su propia forma de representar el significado. Si queremos comparar embeddings generados por diferentes modelos, necesitamos aplicar técnicas de «alineamiento» para hacerlos compatibles.
- Confianza en el modelo: Es crucial elegir un modelo adecuado para la tarea y el idioma. No todos los modelos son igual de precisos en español. Es importante testear diferentes modelos y evaluar su rendimiento en nuestro contexto específico. A día de hoy, los modelos de los LLM (Large Language Models) son los más avanzados, pero es fundamental validarlos para asegurar su efectividad en español.
- Calidad del contenido: La calidad de los embeddings depende de la calidad del texto de entrada. Textos con errores, HTML o código pueden generar embeddings poco fiables. Es fundamental preprocesar los textos antes de generar los embeddings para eliminar el ruido y la información irrelevante. Esto es algo de lo que demasiados se olvidan y luego lo sufren.
- Coste: Generar embeddings con modelos de lenguaje grandes puede ser costoso, especialmente si se utilizan APIs de pago por uso. Los embeddings de los LLM se pagan por caracteres, mientras que los modelos descargables como Word2Vec o BERT consumen bastante proceso, aunque son mucho más económicos. Es importante tener en cuenta el coste al elegir un modelo y una plataforma para generar embeddings.
¿Ya elegiste modelo? Pues ahora te toca trabajar: Los análisis de vectores semánticos más comunes que vas a poder hacer son…
1. Nivel Básico: Distancias semánticas
Las distancias semánticas son una herramienta fundamental para analizar la similitud entre textos. Permiten medir la «cercanía» entre dos embeddings en el espacio semántico, lo que refleja la similitud en su significado.
Existen diferentes tipos de distancias, cada una con sus propias características y aplicaciones:
- Distancia del coseno: Mide el ángulo entre dos vectores. Es una de las métricas más utilizadas en el análisis de embeddings (incluso diríamos que es en muchos escenarios la única), ya que no le afecta la magnitud de los vectores. Dos vectores con la misma dirección (es decir, que apuntan en el mismo sentido y por lo tanto hacia el mismo significado) tendrán una distancia del coseno de 0, independientemente de su longitud. Esto permite que por ejemplo podamos comparar keywords (pequeñas frases con una magnitud pequeña) con textos completos (donde las repeticiones de sinificados cambiarán la magnitud del vector. Así que para hablar de significados puros es lo que más se usa.
- Distancia euclidiana: Mide la distancia en línea recta entre dos puntos en el espacio multidimensional. Es sensible a la magnitud de los vectores, por lo que dos vectores con la misma dirección pero diferente magnitud tendrán una distancia euclidiana mayor que dos vectores con la misma magnitud pero diferente dirección. Eso hace que sean útiles cuando buscas parecidos entre textos y no solo sus significados.
- Distancia de Manhattan: También conocida como distancia «city block», mide la distancia entre dos puntos como la suma de las diferencias absolutas de sus coordenadas. Se utiliza menos en el análisis de embeddings (vamos, que no se usa), pero dado que muchos repiten que puede ser útil en algunos casos, pues había que incluirla.
La elección de la métrica de distancia depende del tipo de análisis que se quiera realizar. Para la mayoría de las aplicaciones de embeddings, la distancia del coseno es la opción correcta, ya que se centra en la similitud en la dirección de los vectores, que es lo que refleja el significado semántico.
Las distancias semánticas permiten realizar una gran variedad de análisis, como:
- Búsqueda: Encontrar los textos más similares a una consulta o keyword dada. Podemos calcular la distancia entre el embedding de la consulta y los embeddings de una colección de textos. Los textos con menor distancia serán los más similares a la consulta.
- Clasificación: Agrupar textos en categorías según su similitud semántica. Podemos utilizar algoritmos de clustering para agrupar textos con embeddings similares. O simplemente pasarle la definición de la categoría para ver cuales se ajustan a ella.
- Optimización: Mejorar la relevancia semántica del contenido para las palabras clave objetivo. Podemos comparar el embedding de un texto con el embedding de una palabra clave para determinar si el texto es relevante para esa palabra clave.
- Detección de outliers: Identificar textos que se desvían del patrón general. Podemos calcular la distancia de cada texto al centroide de su clúster. Los textos que se alejan mucho del centroide pueden considerarse outliers.
Como ves, algo tan simple como saber aplicar la «Distancia de Coseno» (que suena muy complejo pero al final es una fórmula que nos hace una maquina y ya está) ya supone un cambio radical en nuestras posibilidades al trabajar con análisis semántico.
2. K-means y la autoclusterización
K-means es un algoritmo de clustering que permite agrupar puntos de datos en clústeres basándose en su similitud. En el contexto de embeddings, k-means permite agrupar textos con significados similares, lo que facilita el análisis y la comprensión de grandes colecciones de documentos.
Imagina que tienes miles de artículos de noticias y quieres agruparlos por tema. K-means puede ayudarte a identificar automáticamente los clústeres de artículos que tratan sobre temas similares, como deportes, política, economía, etc.
El algoritmo k-means funciona de la siguiente manera:
- Se define el número de clústeres (k) que se desean crear. Este es un parámetro que debes especificar. No hay una regla fija para elegir el valor de k, pero existen métodos como el «método del codo» o la «silueta» que pueden ayudarte a encontrar un valor óptimo.
- Se asignan los puntos de datos (embeddings) a los clústeres de forma iterativa. El algoritmo comienza asignando cada punto a un clúster aleatorio. Luego, calcula el centroide de cada clúster (el punto central). A continuación, reasigna cada punto al clúster cuyo centroide está más cerca. Este proceso se repite hasta que los clústeres se estabilizan.
- Los centroides son los puntos centrales de cada clúster. Representan el «promedio» de los embeddings de los textos que pertenecen a ese clúster.
K-means permite realizar análisis como:
- Análisis macro: Comprender la estructura general de una colección de textos. Al agrupar los textos en clústeres, podemos obtener una visión general de los temas principales que se tratan en la colección.
- Comparación de clústeres: Analizar las diferencias y similitudes entre los grupos de textos. Podemos comparar los centroides de los clústeres para identificar las características que los distinguen.
- Identificación de temas: Descubrir los temas principales que se tratan en una colección de textos. Podemos analizar los textos que pertenecen a cada clúster para identificar los temas o conceptos que los agrupan.
Vistas las bases. Vamos a ver como podemos trabajr en nuestro negocio para sacar partido a los embeddings
Como hemos visto, los embeddings son una herramienta poderosa que puede utilizarse par un sin fín de cosa. Pero si nos centramos en aplicaciones empresariales y más concretamente en el mundo del marketing digital, análisis web y app, SEO o SEM podemos ver algunos análisis comunes que nos ayudarán a sacar nuevos insights y estrategias. A continuación, te muestro los pasos a seguir y algunos ejemplos de cómo puedes utilizar los embeddings para mejorar tu negocio.
1. La base para empezar a trabajar: Cómo crear los embeddings tú mismo
Para empezar a trabajar con embeddings, necesitas crear una base de datos de embeddings de tus textos, palabras clave o cualquier otro elemento que quieras analizar. Existen diferentes maneras de generar embeddings:
- Librerías de código: Puedes usar librerías como Gensim (para Word2Vec), spaCy o Transformers (para modelos como BERT, «text-embedding-ada-002» de OpenAI, o «text-embedding-gecko@001» de Google) para generar embeddings en tu propio código.
- APIs: Puedes usar las APIs de Google Cloud (Vertex AI) o OpenAI para generar embeddings sin necesidad de entrenar tus propios modelos. Esto es especialmente útil si no tienes experiencia en Machine Learning o si necesitas generar embeddings de forma rápida y sencilla.
- BigQuery: Si utilizas BigQuery, puedes generar embeddings directamente en tus consultas SQL utilizando las funciones
ML.EMBEDDING
oML.GENERATE_EMBEDDING
. Esto es especialmente útil si tienes grandes volúmenes de datos y quieres realizar análisis a gran escala.
Ejemplo con la API de OpenAI:
Python:
import openai
openai.api_key = "YOUR_API_KEY"
response = openai.Embedding.create(
input="El SEO no muere, se transforma.",
model="text-embedding-ada-002"
)
embeddings = response['data'][0]['embedding']
print(embeddings)
Ejemplo con BigQuery ML:
SQL:
SELECT *
FROM ML.GENERATE_EMBEDDING(
MODEL `{{tu-proyecto}}.{{tu-dataset}}.{{modelo-embedings}}`,
(SELECT 'El SEO no muere, se transforma.' AS content),
STRUCT(TRUE AS flatten_json_output)
);
2. Ya se crear embeddings pero ¿Qué debo crear como embedding?
La elección de qué crear como embedding depende de tus objetivos. Básicamente, todo lo que quieras analizar semánticamente debe tener su propia representación vectorial. Si es un embedding podrás compararlo con otros elementos de los que tengas embeddings para ver similitudes y significados.
Algunas ideas de contenidos que podrías querer transformar en embeddings:
- Contenidos de tu web: Artículos, productos, fichas de servicio, etc. Esto te permite analizar la similitud entre tus contenidos, identificar temas, detectar duplicados o recomendar contenido relacionado.
- Titles y descriptions: Para analizar su relevancia semántica y optimizarlos para SEO. Puedes comparar los embeddings de tus titles y descriptions con los embeddings de las páginas a las que se refieren para determinar si son relevantes y si están optimizados para las palabras clave objetivo.
- Keywords: Para analizar su relación con tu contenido y con las búsquedas de los usuarios. Puedes usar embeddings para identificar las keywords más relevantes para tu contenido o para agrupar keywords por temática.
- Categorías y taxonomías: Para clasificar el contenido y mejorar la navegación en tu sitio web. Puedes generar embeddings de tus categorías y utilizarlos para clasificar automáticamente el contenido nuevo.
- Temáticas: Para analizar las diferentes temáticas que se tratan en tu contenido. Puedes generar embeddings de diferentes temáticas y utilizarlos para identificar los temas principales que se tratan en tu sitio web.
3. Vamos al lío: Ejemplos de uso práctico de los embeddings en tu empresa
3.1 Para mejorar tu arquitectura de información
Autoclasificación en nuevas categorías
Puedes usar embeddings para clasificar automáticamente tu contenido en nuevas categorías. Para ello, genera embeddings de tus contenidos y de las categorías candidatas. Luego, asigna cada contenido a la categoría con el embedding más cercano. Esto te permite crear nuevas categorías de forma rápida y eficiente, sin necesidad de clasificar manualmente cada contenido.
Ejemplo con BigQuery ML:
SQL:
-- Tabla con los embeddings de los contenidos
CREATE OR REPLACE TABLE `{{tu-proyecto}}.{{tu-dataset}}.contenidos_embeddings` AS
SELECT
contenido_id,
embedding
FROM
ML.GENERATE_EMBEDDING(
MODEL `{{tu-proyecto}}.{{tu-dataset}}.{{modelo-embedings}}`,
(SELECT contenido_id, contenido FROM `{{tu-proyecto}}.{{tu-dataset}}.contenidos`),
STRUCT(TRUE AS flatten_json_output)
);
-- Tabla con los embeddings de las categorías
CREATE OR REPLACE TABLE `{{tu-proyecto}}.{{tu-dataset}}.categorias_embeddings` AS
SELECT
categoria_id,
embedding
FROM
ML.GENERATE_EMBEDDING(
MODEL `{{tu-proyecto}}.{{tu-dataset}}.{{modelo-embedings}}`,
(SELECT categoria_id, nombre_categoria FROM `{{tu-proyecto}}.{{tu-dataset}}.categorias`),
STRUCT(TRUE AS flatten_json_output)
);
-- Consulta para asignar los contenidos a las categorías
SELECT
c.contenido_id,
(
SELECT cat.categoria_id
FROM `{{tu-proyecto}}.{{tu-dataset}}.categorias_embeddings` AS cat
ORDER BY ML.DISTANCE(c.embedding, cat.embedding, distance_type => 'COSINE')
LIMIT 1
) AS categoria_asignada
FROM
`{{tu-proyecto}}.{{tu-dataset}}.contenidos_embeddings` AS c;
Autocategorización del contenido en nuestras categorías
De forma similar, puedes usar embeddings para categorizar automáticamente el contenido nuevo en tus categorías existentes. Esto te permite mantener tu sitio web organizado y actualizado sin necesidad de clasificar manualmente cada nuevo contenido.
Ejemplo con BigQuery ML:
SQL:
-- Tabla con los embeddings de las categorías (incluyendo el promedio de los embeddings de los contenidos ya categorizados)
CREATE OR REPLACE TABLE `{{tu-proyecto}}.{{tu-dataset}}.categorias_embeddings` AS
SELECT
categoria_id,
ARRAY_AGG(embedding) AS embeddings_contenidos,
ARRAY(
SELECT AVG(CAST(val AS FLOAT64))
FROM UNNEST(embeddings_contenidos) AS embedding, UNNEST(embedding) AS val WITH OFFSET
GROUP BY OFFSET
) AS embedding_promedio
FROM
ML.GENERATE_EMBEDDING(
MODEL `{{tu-proyecto}}.{{tu-dataset}}.{{modelo-embedings}}`,
(SELECT categoria_id, contenido FROM `{{tu-proyecto}}.{{tu-dataset}}.contenidos` WHERE categoria_id IS NOT NULL),
STRUCT(TRUE AS flatten_json_output)
)
GROUP BY categoria_id;
-- Consulta para asignar el contenido nuevo a las categorías
SELECT
c.contenido_id,
(
SELECT cat.categoria_id
FROM `{{tu-proyecto}}.{{tu-dataset}}.categorias_embeddings` AS cat
ORDER BY ML.DISTANCE(
embedding,
cat.embedding_promedio,
distance_type => 'COSINE'
)
LIMIT 1
) AS categoria_asignada
FROM
ML.GENERATE_EMBEDDING(
MODEL `{{tu-proyecto}}.{{tu-dataset}}.{{modelo-embedings}}`,
(SELECT contenido_id, contenido FROM `{{tu-proyecto}}.{{tu-dataset}}.contenidos` WHERE categoria_id IS NULL),
STRUCT(TRUE AS flatten_json_output)
) AS c;
3.2 Trabajar la calidad del contenido SEO
Detectar duplicados y similaridades
Puedes usar embeddings para identificar contenidos duplicados o con un alto grado de similitud. Esto es útil para evitar la penalización de Google por contenido duplicado y para mejorar la calidad de tu sitio web. Al identificar contenidos similares, puedes combinarlos, eliminarlos o mejorarlos para ofrecer una mejor experiencia al usuario.
Ejemplo con BigQuery ML:
SQL:
SELECT
c1.contenido_id,
c2.contenido_id,
ML.DISTANCE(c1.embedding, c2.embedding, distance_type => 'COSINE') AS distancia
FROM
`{{tu-proyecto}}.{{tu-dataset}}.contenidos_embeddings` AS c1,
`{{tu-proyecto}}.{{tu-dataset}}.contenidos_embeddings` AS c2
WHERE c1.contenido_id != c2.contenido_id
AND ML.DISTANCE(c1.embedding, c2.embedding, distance_type => 'COSINE') < 0.1;
Valorar la optimización semántica de tus titles
Compara el embedding del title con el embedding del contenido para determinar si el title es relevante para el tema del contenido. Esto te ayuda a optimizar tus titles para SEO y a mejorar la experiencia del usuario. Un title relevante y atractivo puede aumentar la tasa de clics en los resultados de búsqueda y mejorar el posicionamiento de tu sitio web.
Ejemplo con la API de OpenAI:
Python:
import openai
openai.api_key = "YOUR_API_KEY"
response_title = openai.Embedding.create(
input="El contenido es el rey del SEO.",
model="text-embedding-ada-002"
)
response_contenido = openai.Embedding.create(
input="Como siempre dicen los SEOs: '¡El contenido es el rey!' así que voy a generar un post de 5.000 palabras para ti. Ahí va... ",
model="text-embedding-ada-002"
)
distancia = cosine_similarity(
response_title['data'][0]['embedding'],
response_contenido['data'][0]['embedding']
)
if distancia > 0.8:
print("El title es relevante para el contenido.")
else:
print("El title no es relevante para el contenido.")
Autodetectar el mejor contenido para una keyword
Puedes usar embeddings para encontrar el contenido más relevante para una keyword dada. Esto te ayuda a mejorar la estructura de tu sitio web y a dirigir a los usuarios al contenido más adecuado para sus búsquedas.
Para ello crearemos el embedding de la keyword y buscaremos la distancia de coseno más cercana con los embeddings de todos nuestros textos (que deberemos haber capturado y tranformado en embedding previamente)
Detectar vecindarios semánticos
Puedes usar embeddings para identificar contenidos relacionados que deberían enlazarse entre sí. Esto ayuda a los motores de búsqueda a comprender la relación entre tus contenidos y a los usuarios a navegar por tu sitio web de forma más intuitiva. Al crear una estructura de enlaces sólida, puedes mejorar el SEO de tu sitio web y la experiencia del usuario.
Para ello puedes optar por acciones manuales (Partir de un contenido y ver sus contenidos cercanos con distancia de coseno entre ellos) o acciones más complejas y automáticas como k-means que puedes crearte varios clusters automáticos y decirte lo cercano que es cada contenido a cada uno de ellos para relacionarlos en esos nucleos o generar categorías para ellos.
Análisis de pseudo intenciones de búsqueda
Puedes usar embeddings para analizar la intención de búsqueda de una keyword, es decir, qué es lo que realmente busca el usuario cuando realiza una búsqueda. Esto te ayuda a comprender mejor las necesidades de tus usuarios y a crear contenido que satisfaga esas necesidades.
Por ejemplo, si un usuario busca «comprar zapatillas running», su intención es claramente transaccional, mientras que si busca «mejores zapatillas running 2024», su intención es informativa. Al comprender la intención de búsqueda, puedes crear contenido más relevante y mejorar el posicionamiento de tu sitio web en los resultados de búsqueda.
Para analizar la pseudo intención de búsqueda, puedes comparar el embedding de la keyword con embeddings de palabras clave que representen diferentes intenciones, como «comprar», «precio», «opiniones», «comparativa», etc. Si el embedding de la keyword está cerca del embedding de «comprar», por ejemplo, podemos inferir que la intención de búsqueda es transaccional.
Eso sí, cunidado con esta aproximación. He llamado «pseudo» intención de búsqueda a esta técnica porque en muchos sitios puedes verla como algo fijo e indiscutible cuando está claro que Google no hace operaciones tan sencillas para ver la intención de búsqueda sino que tiene en cuenta más cosas (entre ellas lo que hacen los usuraios).
Conclusión
El trabajo con embeddings requiere un esfuerzo previo importante y familiarizarse con esta extraña tecnología que al principio suena tan rara. Además, no es gratuito, vas a pagarlo ya sea en coste de las APIs que crean los embeddings o en computación de tu ordenador (que no será poca). Sin embargo, aporta una serie de ventajas muy importantes que en el mundo actual no puedes despreciar.
Los embeddings nos permiten analizar el significado de los textos de forma eficiente y escalable, lo que abre un abanico de posibilidades para mejorar la calidad del contenido, la arquitectura de la información y el SEO y el SEM de tu sitio web.
Si quieres aprender más sobre embeddings y cómo aplicarlos en tu negocio, te invitamos a leer nuestros artículos y a contactarnos. En IKAUE, somos expertos en data, IA, SEO y análisis semántico. Podemos ayudarte a aprovechar al máximo el potencial de los embeddings.