Comment l'apprentissage automatique est-il intégré dans la conception des moteurs de recherche?


15

Je construis actuellement un petit moteur de recherche interne basé sur Apache Lucene. Son objectif est simple - basé sur certains mots clés, il proposera des articles rédigés en interne au sein de notre entreprise. J'utilise un score TF-IDF assez standard comme métrique de base et j'ai construit mon propre mécanisme de score dessus. Tous ces éléments semblent fonctionner parfaitement, à l'exception de certains cas de coin où le classement semble foiré.

Donc, ce que je prévois de faire, c'est d'ajouter un petit lien pertinent / non pertinent à la page de résultats de recherche afin que les utilisateurs puissent cliquer sur l'un d'entre eux en fonction de leur perception de savoir si ce résultat aurait dû être inclus en premier lieu.

Mon idée

  1. Traitez ces éléments pertinents / non pertinents comme des étiquettes et créez des données de formation.
  2. Utilisez ces données pour former un classificateur (tel que SVM)
  3. Incorporer ce modèle dans le moteur de recherche, c'est-à-dire que chaque nouveau résultat passera par le classificateur et se verra attribuer une étiquette indiquant s'il est pertinent ou non.

Cette approche me semble intuitive mais je ne sais pas si elle fonctionnera dans la pratique. J'ai deux questions spécifiques:

  1. Quelles sont les fonctionnalités à extraire?
  2. Existe-t-il un meilleur moyen d'intégrer le composant d'apprentissage automatique dans le moteur de recherche? Mon objectif final est «d'apprendre» la fonction de classement en fonction à la fois de la logique métier et des commentaires des utilisateurs.

4
J'ai fait quelque chose comme ça une fois et les utilisateurs l'ont détesté alors je l'ai désactivé. Le problème était le comportement des utilisateurs. Les utilisateurs se sont adaptés aux faiblesses des résultats de recherche en changeant leurs termes, puis ils continuaient à réutiliser ces termes. Le système a répondu en ajustant le classement des articles et ces termes favoris ont commencé à produire des résultats différents. Cela a repoussé les utilisateurs. Apprendre ne signifie pas que c'est plus intelligent;)
Reactgular

Voici une implémentation utilisant elasticsearch et angularjs - contient également les explications dont vous avez besoin - machinelearningblogs.com/2016/12/12/…
Vivek Kalyanarangan

Réponses:


15

(1) Quelles sont les fonctionnalités à extraire?

Tout d'abord, sachez que vous ne classifiez pas de documents. Vous êtes en train de classer des paires (document, requête), vous devez donc extraire des fonctionnalités qui expriment leur adéquation.

L'approche standard pour apprendre à classer consiste à exécuter la requête sur diverses configurations de moteur de recherche (par exemple, tf-idf, BM-25, etc.), puis à former un modèle sur les scores de similitude, mais pour une petite SE spécifique au domaine, vous pourriez avoir des fonctionnalités telles que

  • Pour chaque terme, un booléen qui indique si le terme apparaît à la fois dans la requête et dans le document. Ou peut-être pas un booléen, mais les poids tf-idf de ces termes de requête qui se produisent réellement dans le document.
  • Diverses mesures de chevauchement telles que Jaccard ou Tanimoto.

(2) Existe-t-il un meilleur moyen d'intégrer le composant d'apprentissage automatique dans le moteur de recherche? Mon objectif final est «d'apprendre» la fonction de classement en fonction à la fois de la logique métier et des commentaires des utilisateurs.

Il s'agit d'une question très large, et la réponse dépend de l'effort que vous souhaitez consacrer. La première amélioration qui vient à l'esprit est que vous devez utiliser non pas les jugements de pertinence binaire du classificateur, mais sa fonction de décision à valeur réelle, afin que vous puissiez réellement faire un classement au lieu de simplement filtrer. Pour un SVM, la fonction de décision est la distance signée à l'hyperplan. Les bons packages d'apprentissage automatique ont une interface pour obtenir la valeur de cela.

Au-delà de cela, examinez l'apprentissage par paire et par liste pour classer; ce que vous proposez, c'est l'approche dite point par point. L'IIRC, en binôme, fonctionne beaucoup mieux en pratique. La raison en est qu'avec le classement par paire, vous avez besoin de beaucoup moins de clics: au lieu de demander aux utilisateurs d'étiqueter les documents comme pertinents / non pertinents, vous ne leur donnez que le bouton "pertinent". Ensuite, vous apprenez un classificateur binaire sur les triplets (document1, document2, requête) qui indique si document1 est plus pertinent pour la requête que document2, ou vice versa. Lorsqu'un utilisateur nomme, disons, le document 4 du classement comme pertinent, cela vous donne six exemples à tirer des enseignements suivants:

  • document4> document3
  • document4> document2
  • document4> document1
  • document1 <document4
  • document2 <document4
  • document3 <document4

vous obtenez donc les négatifs gratuitement.

(Ce ne sont que des suggestions, je n'ai rien essayé de tout cela. Il se trouve que j'ai travaillé dans un groupe de recherche où les gens ont étudié l'apprentissage du classement. J'ai fait une fois une présentation du document de quelqu'un d'autre pour un groupe de lecture, peut-être le les diapositives peuvent être utiles.)


+1 Merci. C'est la deuxième fois que tu m'aides! Permettez-moi de prendre quelques heures pour digérer cela. :)
Legend

4
C'est une excellente réponse, je voudrais juste suggérer un petit ajustement. Du point de vue de l'expérience utilisateur, vous êtes beaucoup plus susceptible d'amener les utilisateurs à marquer un résultat en utilisant un bouton "non pertinent" qu'un bouton "pertinent". Qui reste pour marquer un résultat quand il a trouvé ce qu'il cherche? Ils sont beaucoup plus susceptibles d'appuyer sur un bouton qui ressemble à une "occasion de se plaindre" lorsqu'ils n'ont pas trouvé ce qu'ils voulaient, car l'amélioration du système à ce stade est en fait alignée sur leur objectif actuel.
Racheet

4
tl; dr Si vous n'utilisez qu'une seule entrée, rendez-la "non pertinente", les gens sont plus susceptibles de cliquer dessus lorsqu'ils sont frustrés.
Racheet

Quelle serait l'approche "par liste"? Aussi, vouliez-vous dire 3 ou 6 exemples gratuits? (Les 3 derniers semblent être juste une répétition des 3 premiers?)
Max
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.