J'ai développé un site Web interne pour un outil de gestion de portefeuille. Il y a beaucoup de données textuelles, de noms d'entreprises, etc. J'ai été vraiment impressionné par la capacité de certains moteurs de recherche à répondre très rapidement aux questions avec "Vouliez-vous dire: xxxx".
Je dois être en mesure de répondre intelligemment à une requête utilisateur et d'y répondre non seulement avec des résultats de recherche bruts, mais aussi avec un "Vouliez-vous dire?" réponse lorsqu'il existe une réponse alternative très probable, etc.
[Je développe en ASP.NET (VB - ne m'en voulez pas!)]
MISE À JOUR: OK, comment puis-je imiter cela sans les millions «d'utilisateurs non rémunérés»?
- Générer des fautes de frappe pour chaque terme «connu» ou «correct» et effectuer des recherches?
- Une autre méthode plus élégante?
algorithm
machine-learning
nlp
spell-checking
text-search
Andrew Harry
la source
la source
Réponses:
Voici l'explication directement de la source (presque)
Recherche 101!
au min 22:03
La peine de regarder!
Fondamentalement et selon Douglas Merrill, ancien CTO de Google, c'est comme ceci:
1) Vous écrivez un mot (mal orthographié) dans google
2) Vous ne trouvez pas ce que vous vouliez (ne cliquez sur aucun résultat)
3) Vous réalisez que vous avez mal orthographié le mot et vous le réécrivez dans la zone de recherche.
4) Vous trouvez ce que vous voulez (vous cliquez dans les premiers liens)
Ce modèle s'est multiplié des millions de fois, montre quelles sont les fautes d'orthographe les plus courantes et quelles sont les corrections les plus "courantes".
De cette façon, Google peut presque instantanément proposer une correction orthographique dans toutes les langues.
Cela signifie également que si du jour au lendemain, tout le monde commence à épeler la nuit car "nigth" google suggérera ce mot à la place.
ÉDITER
@ThomasRutter: Douglas le décrit comme un "apprentissage automatique statistique".
Ils savent qui corrige la requête, car ils savent quelle requête provient de quel utilisateur (à l'aide de cookies)
Si les utilisateurs effectuent une requête, et seulement 10% des utilisateurs cliquent sur un résultat et 90% reviennent et tapent une autre requête (avec le mot corrigé) et cette fois que 90% cliquent sur un résultat, alors ils savent qu'ils ont trouvé une correction.
Ils peuvent également savoir s'il s'agit de requêtes "liées" de deux différents, car ils ont des informations sur tous les liens qu'ils affichent.
De plus, ils incluent désormais le contexte dans la vérification orthographique, de sorte qu'ils peuvent même suggérer un mot différent selon le contexte.
Voir cette démo de google wave (@ 44m 06s) qui montre comment le contexte est pris en compte pour corriger automatiquement l'orthographe.
Ici, il est expliqué comment fonctionne ce traitement du langage naturel.
Et enfin, voici une démonstration impressionnante de ce qui peut être fait en ajoutant une traduction automatique (@ 1h 12m 47s) au mix.
J'ai ajouté des ancres de minutes et de secondes aux vidéos pour passer directement au contenu, si elles ne fonctionnent pas, essayez de recharger la page ou de faire défiler à la main jusqu'à la marque.
la source
J'ai trouvé cet article il y a quelque temps: Comment écrire un correcteur orthographique , écrit par Peter Norvig (directeur de la recherche chez Google Inc.).
C'est une lecture intéressante sur le sujet "correction orthographique". Les exemples sont en Python mais c'est clair et simple à comprendre, et je pense que l'algorithme peut être facilement traduit dans d'autres langues.
Ci-dessous suit une brève description de l'algorithme. L'algorithme comprend deux étapes, la préparation et la vérification des mots.
Étape 1: Préparation - configuration de la base de données de mots
Le mieux est si vous pouvez utiliser des mots de recherche réels et leur occurrence. Si vous n'en avez pas, un grand ensemble de texte peut être utilisé à la place. Comptez l'occurrence (popularité) de chaque mot.
Étape 2. Vérification des mots - recherche de mots similaires à celui vérifié
Similaire signifie que la distance d'édition est faible (généralement 0-1 ou 0-2). La distance d'édition est le nombre minimum d'insertions / suppressions / modifications / échanges nécessaires pour transformer un mot en un autre.
Choisissez le mot le plus populaire de l'étape précédente et proposez-le comme correction (s'il est différent du mot lui-même).
la source
Pour la théorie de l'algorithme "vouliez-vous dire", vous pouvez vous référer au chapitre 3 de l'introduction à la recherche d'informations. Il est disponible en ligne gratuitement. La section 3.3 (page 52) répond exactement à votre question. Et pour répondre spécifiquement à votre mise à jour, vous n'avez besoin que d'un dictionnaire de mots et rien d'autre (y compris des millions d'utilisateurs).
la source
Hmm ... Je pensais que Google utilisait son vaste corpus de données (Internet) pour faire du NLP (Natural Language Processing) sérieux.
Par exemple, ils ont tellement de données de l'ensemble d'Internet qu'ils peuvent compter le nombre de fois qu'une séquence de trois mots se produit (connue sous le nom de trigramme ). Donc, s'ils voient une phrase comme: "concert rose frugr", ils pourraient voir qu'elle a peu de succès, puis trouver le "concert rose *" le plus probable dans leur corpus.
Apparemment, ils font juste une variation de ce que Davide Gualano disait, alors lisez certainement ce lien. Bien sûr, Google utilise toutes les pages Web qu'il connaît comme un corpus, ce qui rend son algorithme particulièrement efficace.
la source
Je suppose qu'ils utilisent une combinaison d'un algorithme de distance Levenshtein et des masses de données qu'ils collectent concernant les recherches qui sont exécutées. Ils peuvent extraire un ensemble de recherches qui ont la distance Levenshtein la plus courte de la chaîne de recherche entrée, puis choisir celle avec le plus de résultats.
la source
Normalement, un correcteur d'orthographe de production utilise plusieurs méthodologies pour fournir une suggestion d'orthographe. Certains sont:
Décidez d'un moyen de déterminer si une correction orthographique est nécessaire. Ceux-ci peuvent inclure des résultats insuffisants, des résultats qui ne sont pas suffisamment précis ou précis (selon certaines mesures), etc. Ensuite:
Utilisez un grand corps de texte ou un dictionnaire, où tout ou la plupart sont connus pour être correctement orthographiés. Ceux-ci sont faciles à trouver en ligne, dans des endroits tels que LingPipe . Ensuite, pour déterminer la meilleure suggestion, vous recherchez un mot qui correspond le mieux à plusieurs mesures. Le plus intuitif est celui de personnages similaires. Ce qui a été démontré par la recherche et l'expérimentation, c'est que les correspondances de séquences de deux ou trois caractères fonctionnent mieux. (bigrammes et trigrammes). Pour améliorer encore les résultats, pesez un score plus élevé lors d'une correspondance au début ou à la fin du mot. Pour des raisons de performances, indexez tous ces mots sous forme de trigrammes ou de bigrammes, de sorte que lorsque vous effectuez une recherche, vous convertissez en n-gramme et recherchez via une table de hachage ou un trie.
Utilisez des heuristiques liées aux erreurs de clavier potentielles basées sur l'emplacement du personnage. Alors que "hwllo" devrait être "bonjour" car 'w' est proche de 'e'.
Utilisez une clé phonétique (Soundex, Metaphone) pour indexer les mots et rechercher d'éventuelles corrections. En pratique, cela donne normalement des résultats pires que l'utilisation de l'indexation en n grammes, comme décrit ci-dessus.
Dans chaque cas, vous devez sélectionner la meilleure correction dans une liste. Cela peut être une métrique de distance telle que levenshtein, la métrique du clavier, etc.
Pour une phrase de plusieurs mots, un seul mot peut être mal orthographié, auquel cas vous pouvez utiliser les mots restants comme contexte pour déterminer la meilleure correspondance.
la source
Utilisez la distance de Levenshtein , puis créez un arbre métrique (ou arbre mince) pour indexer les mots. Exécutez ensuite une requête de voisin le plus proche et vous obtenez le résultat.
la source
Google suggère apparemment des requêtes avec les meilleurs résultats, pas avec celles qui sont correctement orthographiées. Mais dans ce cas, un correcteur orthographique serait probablement plus réalisable.Bien sûr, vous pouvez stocker une valeur pour chaque requête, en fonction d'une mesure de la qualité des résultats.
Donc,
Vous avez besoin d'un dictionnaire (anglais ou basé sur vos données)
Générez un treillis de mots et calculez les probabilités des transitions à l'aide de votre dictionnaire.
Ajoutez un décodeur pour calculer la distance d'erreur minimale à l'aide de votre treillis. Bien sûr, vous devez prendre soin des insertions et des suppressions lors du calcul des distances. Ce qui est amusant, c'est que le clavier QWERTY maximise la distance si vous appuyez sur des touches proches les unes des autres (cae tournerait la voiture, cay tournerait le chat)
Renvoie le mot qui a la distance minimale.
Ensuite, vous pouvez comparer cela à votre base de données de requêtes et vérifier s'il existe de meilleurs résultats pour d'autres correspondances proches.
la source
Voici la meilleure réponse que j'ai trouvée , correcteur orthographique mis en œuvre et décrit par le directeur de la recherche de Google, Peter Norvig.
Si vous voulez en savoir plus sur la théorie derrière cela, vous pouvez lire son chapitre de livre .
L'idée de cet algorithme est basée sur l'apprentissage automatique statistique.
la source
J'ai vu quelque chose à ce sujet il y a quelques années, donc cela a peut-être changé depuis, mais apparemment, ils l'ont commencé en analysant leurs journaux pour les mêmes utilisateurs soumettant des requêtes très similaires dans un court laps de temps, et ont utilisé l'apprentissage automatique en fonction de la façon dont les utilisateurs avaient corrigé se.
la source
Comme une supposition ... cela pourrait
Cela pourrait être quelque chose de l'IA comme le réseau Hopfield ou le réseau de propagation arrière, ou quelque chose d'autre "identifier les empreintes digitales", restaurer des données cassées ou corriger des corrections d'orthographe comme Davide l'a déjà mentionné ...
la source
Facile. Ils ont des tonnes de données. Ils ont des statistiques pour chaque terme possible, basées sur la fréquence à laquelle il est interrogé et sur les variations de celui-ci qui génèrent généralement des résultats sur lesquels les utilisateurs cliquent ... la réponse la plus habituelle.
En fait, si l'orthographe est en fait le terme recherché le plus fréquemment, l'algorithme le prendra pour le bon.
la source
concernant votre question comment imiter le comportement sans avoir des tonnes de données - pourquoi ne pas utiliser des tonnes de données collectées par google? Téléchargez les résultats de Google Sarch pour le mot mal orthographié et recherchez «Vouliez-vous dire:» dans le code HTML.
Je suppose que ça s'appelle mashup de nos jours :-)
la source
Outre les réponses ci-dessus, au cas où vous souhaiteriez mettre en œuvre rapidement quelque chose par vous-même, voici une suggestion -
Algorithme
Vous pouvez trouver l'implémentation et la documentation détaillée de cet algorithme sur GitHub .
la source
Vous voulez dire le correcteur orthographique? S'il s'agit d'un correcteur orthographique plutôt que d'une phrase entière, j'ai un lien sur la vérification orthographique où l'algorithme est développé en python. Vérifiez ce lien
Pendant ce temps, je travaille également sur un projet qui comprend la recherche de bases de données à l'aide de texte. Je suppose que cela résoudrait votre problème
la source
C'est une vieille question, et je suis surpris que personne n'ait suggéré l'OP en utilisant Apache Solr.
Apache Solr est un moteur de recherche en texte intégral qui, en plus de nombreuses autres fonctionnalités, fournit également des suggestions de vérification orthographique ou de requête. De la documentation :
la source
Il existe une structure de données spécifique - arbre de recherche ternaire - qui prend naturellement en charge les correspondances partielles et les correspondances de quasi-voisins.
la source
Le moyen le plus simple de le comprendre est la programmation dynamique de Google.
C'est un algorithme qui a été emprunté à la recherche d'informations et qui est largement utilisé en bioinformatique moderne pour voir à quel point deux séquences de gènes sont similaires.
La solution optimale utilise la programmation dynamique et la récursivité.
Il s'agit d'un problème très résolu avec de nombreuses solutions. Faites simplement un tour de Google jusqu'à ce que vous trouviez du code open source.
la source