Actualmente estoy construyendo un pequeño motor de búsqueda interno basado en Apache Lucene. Su propósito es simple: basado en algunas palabras clave, sugerirá algunos artículos escritos internamente dentro de nuestra empresa. Estoy usando una puntuación TF-IDF bastante estándar como métrica base y construí mi propio mecanismo de puntuación encima. Todo esto parece estar funcionando excelente, excepto en algunos casos en los que la clasificación parece desordenada.
Entonces, lo que planeo hacer es agregar un pequeño enlace Relevante / No Relevante a la página de resultados de búsqueda para que los usuarios puedan hacer clic en uno de ellos dependiendo de su percepción de si ese resultado debería haberse incluido en primer lugar.
Mi idea
- Trate estos Relevantes / No Relevantes como etiquetas y cree datos de capacitación.
- Use estos datos para entrenar a un clasificador (como SVM)
- Incorpore este modelo en el motor de búsqueda, es decir, cada nuevo resultado pasará por el clasificador y se le asignará una etiqueta sobre si es relevante o no.
Este enfoque me parece intuitivo, pero no estoy seguro de si funcionará en la práctica. Tengo dos preguntas específicas:
- ¿Qué características debo extraer?
- ¿Hay una mejor manera de integrar el componente de aprendizaje automático en el motor de búsqueda? Mi objetivo final es "aprender" la función de clasificación basada tanto en la lógica empresarial como en los comentarios de los usuarios.
Respuestas:
Primero, date cuenta de que no estás clasificando documentos. Está clasificando pares (documento, consulta), por lo que debe extraer características que expresen qué tan bien coinciden.
El enfoque estándar para aprender a clasificar es ejecutar la consulta en varias configuraciones de motor de búsqueda (por ejemplo, tf-idf, BM-25, etc.) y luego entrenar un modelo en los puntajes de similitud, pero para un SE pequeño, específico de dominio, podrías tener características como
Esta es una pregunta muy amplia, y la respuesta depende de cuánto esfuerzo quieras poner. La primera mejora que se te viene a la mente es que no debes usar los juicios de relevancia binarios del clasificador, sino su función de decisión con valor real, para que puedas hacer una clasificación en lugar de solo filtrar. Para un SVM, la función de decisión es la distancia firmada al hiperplano. Los buenos paquetes de aprendizaje automático tienen una interfaz para obtener el valor de eso.
Más allá de eso, mire en pares y en listas para aprender a clasificar; lo que estás sugiriendo es el llamado enfoque puntiagudo. IIRC, pairwise funciona mucho mejor en la práctica. La razón es que con la clasificación por pares, necesita muchos menos clics: en lugar de que los usuarios etiqueten los documentos como relevantes / irrelevantes, solo les da el botón "relevante". Luego, aprende un clasificador binario en triples (documento1, documento2, consulta) que indica si el documento1 es más relevante para la consulta que el documento2, o viceversa. Cuando un usuario etiqueta, digamos, el documento 4 en la clasificación como relevante, eso le da seis muestras para aprender:
así que obtienes los negativos gratis.
(Todas estas son solo sugerencias, no he probado nada de esto. Simplemente he trabajado en un grupo de investigación donde la gente investigó aprender a clasificar. Hice una presentación del trabajo de otra persona para un grupo de lectura una vez, tal vez el las diapositivas pueden ser de ayuda).
fuente