¿Cómo selecciona Google el fragmento que responde a una pregunta?

 

Respuestas de Google a las preguntas de los usuarios

Publicado por Lino Uruñuela (2024-11-08)

 

El otro día, mientras navegaba por Twitter, me encontré con un hilo interesante donde  DEJAN mostraba  lo que parecía ser el código de cómo Google obtiene los pasajes de los resultados de búsqueda. Me llamó la atención porque siempre he tenido curiosidad sobre cómo Google es capaz de responder a preguntas de los usuarios basándose en los textos de los propios documentos que aparecen en los resultados. 

 
Sin embargo, me da que se equivocó al pensar que ese era el algoritmo. Creo que lo que DEJAN encontró podría ser alguna de las implementaciones que Google está haciendo, como la de añadir Gemini Nano a Google Chrome, tal como comenté el otro día. Lo que Google hace para extraer y seleccionar el fragmento de una manera confiable será algo muy parecido a lo que describe  esta patente del propio Google.

 

Explicación rápida de la patente

Cuando el usuario realiza una búsqueda en Google, el sistema no solo recupera las páginas más relevantes, sino que también escoge fragmentos específicos dentro de esas páginas para mostrar respuestas concisas. Esto se hace con un proceso que combina métodos tradicionales de recuperación de información y técnicas avanzadas de embeddings.

Embeddings y similitud del fragmento con la consulta del usuario

Una vez que Google recupera un conjunto inicial de documentos relevantes, por ejemplo, los "Top 10,000", el siguiente paso es buscar el fragmento exacto de texto que mejor responde a tu consulta. Para ello, Google parece realizar los siguientes pasos:

  1. Generación de Embeddings de la Consulta: Primero, Google convierte tu consulta en un vector de embeddings.
  2. Comparación de Similitud: Luego, compara este vector con los embeddings de fragmentos de cada uno de los documentos recuperados para encontrar el que más se asemeje.
  3. Consideración de la Jerarquía de Encabezados: Google también tiene en cuenta la similitud/cercanía de cada fragmento candidato con sus encabezados (H1, H2, H3, etc.) superiores jerárquicamente. Posiblemente "sume" la similitud que hay entre el fragmento candidato y la concatenación de los Hx que están jerárquicamente en su nivel superior inmediato hasta llegar al título.

¿Qué es y cómo se realiza la Tokenización?

Y ya que estamos en faena voy a intentar explicar lo que son los tokenizadores. Creo que mucha gente no sabe de su importancia, ya que los tokens son a los grandes modelos de lenguaje (LLMs) lo que los aminoácidos al ADN, piezas pequeños, que uno por si solo no es relevante pero todos juntos lo son todo ...

El proceso descompone el texto en unidades más pequeñas y manejables llamadas tokens. Estos tokens, que pueden ser desde caracteres individuales hasta palabras completas, permiten que los modelos neuronales comprendan y procesen mejor el lenguaje humano.

La tokenización puede ser un proceso complejo; manejar diferentes tipos de datos de texto, como puntuación, números y caracteres especiales, y determinar cómo dividirlos en unidades significativas no es sencillo. La tokenización también puede ser diferente según el caso de uso que vayamos a darle. Por ejemplo, puede ser necesario dividir palabras en subpalabras más pequeñas para manejar palabras que no están presentes en un vocabulario entrenado previamente.

En general, la tokenización comprende los siguientes pasos / procesos:

  • Segmentación

    El primer paso de la tokenización consiste en dividir el texto en unidades. Estas unidades pueden ser tan grandes como oraciones, tan pequeñas como caracteres o, más comúnmente, palabras y subpalabras.
  • Construcción de vocabulario

    Elegido el método para la segmentación del texto, se crea un vocabulario o una lista de tokens únicos para todo el corpus.
  • Asignación

    A cada token único en el vocabulario se le asigna un ID, que es un número entero único.
  • Codificación

    Se crea una secuencia de los identificadores. Por ejemplo, si "Me gustas tú" tiene un ID asignado a cada una de las palabras, tendríamos {'Me': 1, 'gustas': 2, 'tú': 3}, y esta frase tras procesarla se convertiría en [1, 2, 3].

Tipos de tokenización

Existen varias estrategias de tokenización, cada una con sus propias ventajas y desventajas:

  • WordPiece

    Está basado en subpalabras y es utilizado por BERT, DistilBERT y Electra. Divide las palabras en subpalabras más pequeñas, lo que ayuda a reducir el tamaño del vocabulario y a manejar palabras desconocidas, manteniendo el contexto y el significado.
  • Pares de Bytes (BPE)

    También es un método basado en subpalabras que fusiona iterativamente los pares de bytes o caracteres más frecuentes en los datos de entrenamiento para crear un vocabulario de unidades de subpalabras.

    CREO que esta técnica también se usa como complemento a otros modelos como BERT o GPT... no lo tengo muy claro.

  • Unigram

    A diferencia de BPE o WordPiece, comienza con un vocabulario base que tiene un gran número de símbolos que luego va recortando progresivamente para conseguir un vocabulario más pequeño; por ejemplo, podrían ser palabras pre-tokenizadas y las subcadenas más comunes. Unigram no se utiliza directamente para ninguno de los modelos transformers, pero se usa en conjunto con SentencePiece.
  • SentencePiece

    Una de las características de SentencePiece es que comienza cogiendo las palabras que va descubriendo en el corpus dado. Va leyendo las palabras y, cuando encuentra una que no conoce, intenta comprobar si está formada por dos subpalabras que sí conoce. Si no las encuentra, añade esa nueva palabra al vocabulario. Este método destaca porque es capaz de manejar palabras que no había visto antes, algo que otros tokenizadores no consiguen hacer.

 

Generación de embeddings para calcular la similitud entre diferentes oraciones

Cuando escribí el artículo sobre cómo crear un buscador semántico para buscar contenidos dentro de los vídeos de YouTube, aprendí que una de las tareas más complicadas al crear un sistema de búsqueda semántica y/o un sistema de preguntas y respuestas (Question & Answering) fue decidir cómo fragmentar los textos.

Para generar los embeddings primero tienes que decidir qué tipo de modelo de lenguaje o algoritmo vas a usar. Dependiendo del caso de uso deberías escoger uno u otro. Por ejemplo, para hacer preguntas y respuestas hay unos tipos de modelos, y para hacer búsquedas semánticas hay otros. Antes de empezar, es importante saber qué quieres hacer e informarte sobre qué modelos podrías usar para conseguir ese fin.

Una vez que hayamos estudiado y decidido qué modelo es más apropiado para nuestro caso de uso, toca dividir el texto de cada vídeo / documento en "cachos" más pequeños. Dependiendo del tipo de modelo y cómo haya sido entrenado, admitirá más o menos texto. Y es aquí donde surge la pregunta: ¿cómo podemos dividir todo nuestro texto para generar estos embeddings?.

Podríamos segmentar el texto en base a frases, identificando un punto '.' seguido de un espacio y una letra mayúscula. O podríamos hacerlo por párrafos, identificando donde haya saltos de línea; también podríamos darle el texto del documento / vídeo entero (pocos modelos tienen la capacidad de admitir tanta cantidad de texto). Y fue ahí donde me di cuenta de cómo Google podría estar realizando las respuestas a consultas de los usuarios, generando embeddings por cada fragmento de texto en cada página, pero sabiendo que de alguna manera tenía que realizar una suma o cálculo entre los fragmentos y otros elementos de una misma URL.

Cuando probé mi sistema, me di cuenta de que muchos fragmentos podrían ser candidatos a muchas respuestas, por lo que probé diferentes metodologías. Por ejemplo, calcular la similitud entre el embedding de la consulta del usuario y el embedding de la concatenación del título y el texto del fragmento candidato. Y es este tipo de procesos los que te hacen ver la luz, o al menos tener una idea realista de cómo lo podría estar realizando Google.

 




Lea otros artículos de Inteligencia Artificial para SEOs

Últimos posts

Últimos comentarios


Resham Singh Mahal

Post: Experimento para comprobar la teoría del primer enlace

Joakim Hov Johnsen

Post: Experimento para comprobar la teoría del primer enlace

Dana

Post: Experimento para comprobar la teoría del primer enlace

JaviLazaro
Ya me has dado la necesidad de crear un comaando en bash para hacer estas cosas. Gracias Lino por estos tips
Post: Obtener KWs de varias fuentes usando la línea de comandos

Señor Muñoz
Lino, el 11% más de clicks y el 47% más de impresiones diarias ¿es algo constante o depende de cada sitio web?
Post: Diferencias entre la exportación de datos de Search Console usando BigQuery o usando la API

Carlos
Hola En mi blog tengo artículos atemporales (es decir, no caducan nunca, de manera que sirve para quien lo lea hoy o lo lea dentro de 5
Post: Tratamiento de urls que tienen un tiempo de vida muy corto

Profe Ray
Veo que hay comentarios de hace 5 años y de hace 3 años. ¿Habrá algun post actualizado sobre este tema o sigue funcionando? Lo cierto es
Post: Cómo cargar css y js y no bloquear la carga de contenido

Pepe
Muchas gracias por el articulo!! Muy buena información.
Post: Qué es ofuscar enlaces y cómo mejora el enlazado interno

María
Sí, he buscado el archivo robots.txt y todo está correcto. La última versión vista con error fue el 08/11/2021 y la última vez que el
Post: Errores críticos originados por el robots.txt

Lino
@María un placer verte por aquí :) Lo primero, a veces, con el robots.txt no se puede "forzar" a que lo rastree, si tu site no es muy p
Post: Errores críticos originados por el robots.txt