Cómo clasificar un millón de imágenes con una ordenación colaborativa

83

Me gustaría clasificar una colección de imágenes de paisajes creando un juego en el que los visitantes del sitio puedan calificarlas para descubrir qué imágenes encuentran más atractivas las personas.

¿Cuál sería un buen método para hacer eso?

  • ¿ Estilo caliente o no ? Es decir, mostrar una sola imagen, pida al usuario que la clasifique del 1 al 10. A mi modo de ver, esto me permite promediar los puntajes, y solo necesitaría asegurarme de obtener una distribución uniforme de los votos en todas las imágenes. Bastante simple de implementar.
  • ¿Elige A o B ? Es decir, mostrar dos imágenes, pedirle al usuario que elija la mejor. Esto es atractivo ya que no hay una clasificación numérica, es solo una comparación. Pero, ¿cómo lo implementaría? Mi primer pensamiento fue hacerlo como una clasificación rápida, con las operaciones de comparación proporcionadas por humanos, y una vez completadas, simplemente repetir la clasificación hasta el infinito.

¿Cómo se haría?

Si necesita números, estoy hablando de un millón de imágenes, en un sitio con 20.000 visitas diarias. Me imagino que una pequeña proporción podría jugar el juego, por el bien de la discusión, ¡digamos que puedo generar 2,000 operaciones de tipo humano al día! Es un sitio web sin fines de lucro, y los curiosos terminales lo encontrarán a través de mi perfil :)

Paul Dixon
fuente
1
Escribí una aplicación de juguete que usa GAE que hace algo como esto: rank.appspot.com . Utiliza el concepto de impulso para cada elemento que sospecho que degenera en una variante de ELO, aunque lo desarrollé de forma independiente. Estaría encantado de compartir el archivo python src.
espacio libre
@freespace Me interesaría ver la fuente de Python para su algoritmo.
akaihola
Tal vez, con este proyecto, debería intentar configurar una red neuronal (solo por diversión, por supuesto) y usar la entrada Pick A-or-B para entrenar la red. Tal vez tú, la red neuronal, puedas elegir la más hermosa, después de mucho entrenamiento.
Martijn Courteaux

Respuestas:

96

Como han dicho otros, la clasificación del 1 al 10 no funciona tan bien porque las personas tienen diferentes niveles.

El problema con el método Pick A-or-B es que no se garantiza que el sistema sea transitivo (A puede vencer a B, pero B vence a C y C vence a A). Tener operadores de comparación no transitivos rompe los algoritmos de clasificación . Con quicksort, en este ejemplo, las letras no elegidas como pivote se clasificarán incorrectamente entre sí.

En cualquier momento, desea una clasificación absoluta de todas las imágenes (incluso si algunas o todas están empatadas). También desea que su clasificación no cambie a menos que alguien vote .

Me gustaría utilizar el Pick a-o-B (o lazo) método, pero determinar la clasificación similar al sistema de clasificación Elo que se utiliza para las graduaciones en 2 juegos jugador de ajedrez (originalmente):

El sistema de clasificación de jugadores de Elo compara los registros de partidos de los jugadores con los registros de partidos de sus oponentes y determina la probabilidad de que el jugador gane el enfrentamiento. Este factor de probabilidad determina cuántos puntos sube o baja la calificación de un jugador en función de los resultados de cada partido. Cuando un jugador derrota a un oponente con una calificación más alta, la calificación del jugador aumenta más que si derrotara a un jugador con una calificación más baja (ya que los jugadores deben derrotar a los oponentes que tienen calificaciones más bajas).

El sistema Elo:

  1. Todos los jugadores nuevos comienzan con una calificación base de 1600
  2. WinProbability = 1 / (10 ^ ((Puntuación actual del oponente - Puntuación actual del jugador) / 400) + 1)
  3. ScoringPt = 1 punto si ganan el partido, 0 si pierden y 0.5 si empatan.
  4. Calificación nueva del jugador = Calificación anterior del jugador + (Valor K * (Puntaje de puntuación - Probabilidad de victoria del jugador))

Reemplace "jugadores" con imágenes y tendrá una forma sencilla de ajustar la calificación de ambas imágenes en función de una fórmula. A continuación, puede realizar una clasificación utilizando esos puntajes numéricos. (El valor K aquí es el "Nivel" del torneo. Es 8-16 para torneos locales pequeños y 24-32 para invitaciones / regionales más grandes. Puedes usar una constante como 20).

Con este método, solo necesita mantener un número para cada imagen, lo que requiere mucha menos memoria que mantener los rangos individuales de cada imagen entre sí.

EDITAR: Se agregó un poco más de carne según los comentarios.

Laplie Anderson
fuente
3
La transitividad no importa en absoluto. Solo desea agregar la opinión de las personas y esperaría que no estén de acuerdo en la clasificación. Las personas son una fuente de datos ruidosa y no coherente.
Owen
4
mi punto es que si tiene A> B> C> A, entonces simplemente usar el ">" como comparación es un problema ya que su clasificación nunca terminará (correctamente) y su lista estará en un estado constante de flujo incluso si no hay más personas votando. Mi respuesta proporciona una solución a este problema.
Laplie Anderson
1
Estoy marcando esto como la respuesta aceptada, ya que saca los huesos de mi sugerencia de usar ordenación rápida e incluye una buena ilustración de Elo.
Paul Dixon
6
El sistema elo es definitivamente el camino a seguir para clasificar el método A / B. Sin embargo, también puede utilizar un método mejor que el método incremental anterior. Eche un vistazo a Bayeselo: remi.coulom.free.fr/Bayesian-Elo
Fantius
después de buscar en Google durante una hora, entendí claramente el sistema de calificación Elo :)
daksh21ubuntu
40

La mayoría de los enfoques ingenuos del problema tienen serios problemas. Lo peor es cómo bash.org y qdb.us muestran las citas: los usuarios pueden votar una cita hacia arriba (+1) o hacia abajo (-1), y la lista de las mejores citas está ordenada por la puntuación neta total. Esto sufre un horrible sesgo de tiempo: las citas más antiguas han acumulado una gran cantidad de votos positivos a través de una simple longevidad, incluso si son solo marginalmente humorísticas. Este algoritmo podría tener sentido si los chistes se volvieran más divertidos a medida que envejecían, pero créeme, no es así.

Hay varios intentos de solucionar este problema: observar el número de votos positivos por período de tiempo, ponderar los votos más recientes, implementar un sistema de decadencia para los votos más antiguos, calcular la proporción de votos positivos y negativos, etc. La mayoría adolece de otros defectos.

La mejor solución, creo, es la que utilizan los sitios web The Funniest The Cutest , The Fairest y Best Thing : un sistema de votación Condorcet modificado :

El sistema le da a cada uno un número basado en, de las cosas a las que se ha enfrentado, qué porcentaje de ellas supera habitualmente. Entonces, cada uno obtiene la puntuación porcentual NumberOfThingsIBeat / (NumberOfThingsIBeat + NumberOfThingsThatBeatMe). Además, las cosas se excluyen de la lista superior hasta que se hayan comparado con un porcentaje razonable del conjunto.

Si hay un ganador de Condorcet en el set, este método lo encontrará. Dado que eso es poco probable, dada la naturaleza estadística, encuentra el que está "más cerca" de ser un ganador de Condorcet.

Para obtener más información sobre la implementación de dichos sistemas, la página de Wikipedia sobre Pares clasificados debería ser útil.

El algoritmo requiere que las personas comparen dos objetos (su opción Pick-A-or-B), pero francamente, eso es algo bueno. Creo que está muy bien aceptado en la teoría de la decisión que los seres humanos son mucho mejores comparando dos objetos que en la clasificación abstracta. Millones de años de evolución nos hacen buenos para elegir la mejor manzana del árbol, pero terribles para decidir qué tan cerca se acerca la manzana que elegimos a la verdadera forma platónica de manzana. (Por cierto, esta es la razón por la que el Proceso de Jerarquía Analítica es tan ingenioso ... pero eso se está saliendo un poco del tema).

Un último punto a destacar es que SO usa un algoritmo para encontrar las mejores respuestas que es muy similar al algoritmo de bash.org para encontrar la mejor cita. Funciona bien aquí, pero falla terriblemente allí, en gran parte porque es probable que se edite una respuesta antigua, altamente calificada, pero ahora desactualizada. bash.org no permite la edición, y no está claro cómo editaría chistes de hace una década sobre memes de Internet con fecha actual, incluso si pudiera ... En cualquier caso, mi punto es que el algoritmo correcto generalmente depende de los detalles de su problema. :-)

Cody Hatch
fuente
Gracias por la referencia a los sistemas de votación de Condorcet, esa línea de investigación me permitió acceder a esta útil página de wikipedia en.wikipedia.org/wiki/Ranked_Pairs
Paul Dixon
Estos sitios dijeron que estaban "rotos" y desde entonces han sido abandonados. No sé si el algoritmo tenía errores o solo la implementación.
endolito
11

Sé que esta pregunta es bastante antigua, pero pensé en contribuir

Miraría el sistema TrueSkill desarrollado en Microsoft Research. Es como ELO, pero tiene un tiempo de convergencia mucho más rápido (parece exponencial en comparación con lineal), por lo que obtiene más de cada voto. Sin embargo, es matemáticamente más complejo.

http://en.wikipedia.org/wiki/TrueSkill


fuente
Los conceptos de TrueSkill ofrecen muchas posibilidades para clasificar las cosas en función de las "coincidencias". Bing utiliza conceptos similares para publicar anuncios relevantes. Escribí mucho sobre los detalles de TrueSkill en moserware.com/2010/03/computing-your-skill.html
Jeff Moser
8

No me gusta el estilo Hot-or-Not . Diferentes personas elegirían números diferentes incluso si a todos les gustaba la imagen exactamente igual. También odio calificar cosas sobre 10, nunca sé qué número elegir.

Elegir A o B es mucho más simple y divertido. Puedes ver dos imágenes y se hacen comparaciones entre las imágenes del sitio.

Jeremy Ruten
fuente
5

Estas ecuaciones de Wikipedia hacen que sea más simple / más efectivo calcular las calificaciones Elo, el algoritmo para las imágenes A y B sería simple:

  • Obtenga Ne, mA, mB y clasificaciones RA, RB de su base de datos.
  • Calcule KA, KB, QA, QB utilizando el número de comparaciones realizadas (Ne) y el número de veces que se comparó esa imagen (m) y las calificaciones actuales:

K

QA

QB

  • Calcule EA y EB.

EA

EB

  • Califique la S del ganador: el ganador como 1, el perdedor como 0, y si tiene un empate como 0.5,
  • Calcule las nuevas calificaciones para ambos usando: Nueva calificación

  • Actualice las nuevas clasificaciones RA, RB y recuentos mA, mB en la base de datos.

Osama Al-Maadeed
fuente
4

Es posible que desee ir con una combinación.

Primera fase: estilo Hot-or-not (aunque yo optaría por un voto de 3 opciones: Sucks, Meh / OK. Cool!)

Una vez que haya ordenado el conjunto en los 3 grupos, entonces seleccionaría dos imágenes del mismo grupo e iría con "Cuál es mejor"

Luego, podría usar un sistema de promoción y degradación de English Soccer para mover los primeros "Sucks" a la región Meh / OK, con el fin de refinar los casos extremos.

Chris Cudmore
fuente
4

La clasificación 1-10 no funcionará, todos tienen diferentes niveles. Alguien que siempre da entre 3 y 7 calificaciones, vería eclipsado su clasificación por personas que siempre dan 1 o 10.

a-o-b es más viable.

Bill K
fuente
Lo aprecio, pero pensé que si me aseguro de que cada imagen obtenga el mismo número de votos, debería promediar. El problema es que creo que necesitaría unos 10 votos por cada imagen, lo que, según los números anteriores, me llevaría 13 años. Para entonces tendría otros 5 millones de imágenes :)
Paul Dixon
1
Dado que la gente tiende a ir con el promedio o alto / bajo, si decide hacerlo, le sugiero que reduzca a 1-5 en lugar de 1-10.
Bill K
3

Vaya, llego tarde en el juego.

Me gusta mucho el sistema ELO, pero como dice Owen, me parece que sería lento para obtener resultados significativos.

Creo que los humanos tienen una capacidad mucho mayor que simplemente comparar dos imágenes, pero debes mantener las interacciones al mínimo.

Entonces, ¿qué tal si muestra n imágenes (siendo n cualquier número que pueda mostrar visiblemente en una pantalla, esto puede ser 10, 20, 30, según la preferencia del usuario, tal vez) y hacer que elijan cuál creen que es mejor en ese lote? Ahora volvamos a ELO. Necesita modificar su sistema de clasificación, pero mantenga el mismo espíritu. De hecho, ha comparado una imagen con otras n-1. Por lo tanto, realiza su calificación ELO n-1 veces, pero debe dividir el cambio de calificación entre n-1 para que coincida (de modo que los resultados con diferentes valores de n sean coherentes entre sí).

Ya terminaste. Ahora tienes lo mejor de todos los mundos. Un sistema de clasificación simple que funciona con muchas imágenes con un solo clic.

asoundmove
fuente
3

Si prefiere utilizar la estrategia Pick A o B, recomendaría este documento: http://research.microsoft.com/en-us/um/people/horvitz/crowd_pairwise.pdf

Chen, X., Bennett, PN, Collins-Thompson, K. y Horvitz, E. (2013, febrero). Agregación de clasificación por pares en un entorno de colaboración colectiva. En Actas de la sexta conferencia internacional ACM sobre búsqueda web y minería de datos (págs. 193-202). ACM.

El artículo habla sobre el modelo Crowd-BT que extiende el famoso modelo de comparación por pares de Bradley-Terry al entorno de crowdsource. También proporciona un algoritmo de aprendizaje adaptativo para mejorar la eficiencia temporal y espacial del modelo. Puede encontrar una implementación de Matlab del algoritmo en Github (pero no estoy seguro de si funciona).

idailylife
fuente
1

Elija A-o-B, es el más simple y menos propenso a sesgos, sin embargo, en cada interacción humana, le brinda sustancialmente menos información. Creo que debido a la reducción del sesgo, Pick es superior y en el límite te proporciona la misma información.

Un esquema de puntuación muy simple consiste en contar cada imagen. Cuando alguien da una comparación positiva, aumenta el recuento, cuando alguien da una comparación negativa, disminuye el recuento.

Ordenar una lista de 1 millón de enteros es muy rápido y tomará menos de un segundo en una computadora moderna.

Dicho esto, el problema está bastante mal planteado: le llevará 50 días mostrar cada imagen solo una vez.

Apuesto a que estás más interesado en las imágenes mejor clasificadas. Por lo tanto, probablemente desee sesgar la recuperación de imágenes según el rango predicho, por lo que es más probable que muestre imágenes que ya han logrado algunas comparaciones positivas. De esta manera, comenzará a mostrar imágenes "interesantes" más rápidamente.

Owen
fuente
Puedo ver la clasificación inicial con las visitas a la página, lo que también podría ayudar.
Paul Dixon
que debería decir "semilla", no "ver"!
Paul Dixon
podría ser "elegir el mejor de 4" y luego cuenta como 3 clasificaciones por pares para cada voto
endolito
1

Me gusta la opción de clasificación rápida, pero haría algunos ajustes:

  • Mantenga los resultados de la "comparación" en una base de datos y luego promedielos.
  • Obtenga más de una comparación por vista dándole al usuario de 4 a 6 imágenes y pidiéndole que las ordene.
  • Seleccione qué imágenes mostrar ejecutando qsort y grabando y recortando cualquier cosa sobre la que no tenga suficientes datos. Luego, cuando tenga suficientes elementos registrados, escupe una página.

La otra opción divertida sería utilizar a la multitud para enseñar una red neuronal.

BCS
fuente