Dado un conjunto de ítems \( \{ t_i \}, i \in \left[ 0, I \right] \) y un embedding de texto \( E: \textrm{text} \rightarrow \mathbb{R}^t \), usamos los datos de entrenamiento consistentes en \( l \) corridas de preferencias. Cada corrida es de la misma persona (que puede estar duplicada porque la misma persona puede enviar múltiples corridas). Una corrida contiene pares \( (i, p) \) con \( i \in \left[ 0, I \right] \) el ítem sobre el cual la persona ha manifestado su preferencia y \( p \in \left\{ -1, 0, 1 \right\} \) la susodicha preferencia (positiva o negativa, 0 significa que el texto no fue entendido y esas tuplas se ignoran, véanse las instrucciones de annotación para más detalles). Tell-and-Show entrena una Red Neuronal Siamesa de la siguiente forma:

Dadas dos tuplas \( (i, q), (j, r) \) en una corida para la misma persona tales que \( q \neq 0 \wedge r \neq 0 \), entonces la siguiente red neuronal es entrenada:

\[ t_i \rightarrow E \rightarrow \textrm{MLP}_p \rightarrow e_i \] \[ t_j \rightarrow E \rightarrow \textrm{MLP}_p \rightarrow e_j \] entonces \[ e_i \odot e_j \rightarrow \textrm{salida} \]

La salida se entrena contra \( q \, \mathrm{xor} \, r \). Sólo una \( \textrm{MLP}_p \) se entrena, \( E \) es dado.

La intuición es que cuando \( r \) y \( s \) son iguales, entonces \( e_i, e_j \) deben estar cerca y cuando son distintas, deben estar alejados. Lo que la \( \textrm{MLP}_p \) está haciendo es mapeando el espacio de embeddings de texto en un nuevo espacio de embeddings de preferencias.

Para aprender qué parte del espacio de embeddings de texto contiene información pertinente a las preferencias, usamos el algoritmo BIRCH para agrupar las 5.5 millones de descripciones textuales en los Commons de Wikimedia en inglés. A partir de ahí, nos quedamos con los 1.000 clusters que tienen 200 ítems o más (ocupan alrededor del 27% de todos los ítems). Para cada uno de esos clusters, identficamos el ítem más cercano al centroide del mismo, al que llamamos el centro del cluster. Otros 4 ítems al azar del cluster han sido seleccionados. Esto constituye unos 5.000 ítems sobre los cuales estamos pidiendo ayuda para anotar.

El objetivo del proceso de anotación es encontrar preferencias cruzadas para textos que son cercanos en el espacio de embedding de textos. De esta forma, cada vez que un cluster ha sido seleccionado para pedirle a alguien que lo anote, le mostramos a la persona el centro y los otros 4 elementos seleccionados. Por último, pueden haber áreas del espacio de preferencias sobre las que la persona que está anotando le gusten todos los ítems o no le guste ningún ítem, más allá del ítem en sí. Para evitar esta situación, el sistema busca de seleccionar para anotación clusters equidistantes de los ítems ya anotados con preferencias positivas y negativas. De esta forma busca elucidar la frontera de decisión de la persona que anota.

Más detalles: en este proceso de anotación, la versión actual utiliza código fuente heredado de un proyecto anterior que utiliza embeddings del proyecto LASER con una dimensionalidad de 1,024. El espacio objetivo de embedding de preferencias es 128. Para entranar la red siamesa, usamos Universal Sentence Encoders con un tamaño de embeddings de texto de 128 y el mismo tamaño para embeddings de preferencias.

Una vez que la métrica de preferencias (el mapeo de textos al espacio de embeddings de preferencias) ha sido entrenada, es posible obtener embeddings de preferencias para todos los ítems en Wikipedia Commons, hacer clustering sobre ellos y luego identificar los clusters más grandes con sus respectivos centros. El conjunto de los centros de clusters más grandes puede entonces ser descargado por la gente interesada en usar el sistema y anotar sus fronteras de decisión sobre dicho conjunto de manera privada. Dicha anotación es su perfil de preferencias: un conjunto \( \{ (e, p) \} \) donde \( e \) es un embedding de preferencias y \( p \in \{ -1, 1 \} \) (los textos que no se entiendan simplemente se ignoran).

En lugar de que un servidor devuelva un listado de ítems rankeados segun las preferencias de una persona, la API Bucket devuelve una lista al azar de 100 a 1000 ítems: \( \{ \left( \textrm{descriptción textual}, \textrm{embeddings de preferencias}, \textrm{URL} \right) \} \), el navegador web entonces usa el algoritmo de \( k \) vecinos más cercanos para rankear los ítems.