Comment ça, "Google"?"L'algorithme fonctionne?

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 "Did you mean: xxxx".

j'ai besoin d'être capable de prendre intelligemment une requête de l'utilisateur et de répondre non seulement avec des résultats de recherche bruts, mais aussi avec un "vous voulez dire?"réponse en cas de réponse alternative très probable, etc.

[je me développe en ASP.NET (VB - don't hold it against me! )]

mise à jour: OK, Comment puis-je imiter ceci sans les millions d '"utilisateurs non payé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?
400
demandé sur dmcer 2008-11-21 02:34:51
la source

18 ответов

Voici l'explication directement de la source (presque )

recherche 101!

à min 22: 03

la Peine de regarder!

fondamentalement et selon Douglas Merrill ancien CTO de Google il 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 alors vous réécrivez le mot dans la boîte de recherche.

4) vous trouvez ce que vous voulez ( vous cliquez sur les premiers liens)

Ce modèle a multiplié des millions de fois, montre quelles sont les fautes de frappe les plus fréquentes et quelles sont les corrections les plus" courantes".

de cette façon Google peut presque instantanément, offrir la correction orthographique dans toutes les langues.

aussi cela signifie que si du jour au lendemain tout le monde commence à épeler la nuit comme" nigth", google suggérerait ce mot à la place.

MODIFIER

@ThomasRutter: Douglas le décrit comme un"apprentissage par machine statistique".

ils savent qui corrigent la requête, car ils savent quelle requête provient de quel utilisateur (en utilisant des cookies )

Si les utilisateurs effectuent une requête, et seulement 10% de les utilisateurs cliquent sur un résultat et 90% vont en arrière et tapent une autre requête ( avec le mot corrigé ) et cette fois que 90% clique sur un résultat, alors ils savent qu'ils ont trouvé une correction.

ils peuvent aussi savoir s'il s'agit de requêtes" connexes " de deux différentes, parce qu'ils ont des informations sur tous les liens qu'ils affichent.

de plus, ils incluent maintenant le contexte dans la vérification orthographique, de sorte qu'ils peuvent même suggérer un mot différent selon le cadre.

voir ce démo de google wave (@44m 06s ) qui montre comment le contexte est pris en compte pour corriger automatiquement l'orthographe.

ici on explique comment fonctionne le traitement du langage naturel.

et enfin voici une démo impressionnante de ce qui peut être fait en ajoutant automatique traduction automatique (@1h 12m 47s ) au mélange.

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 défiler à la main au repère.

336
répondu OscarRyz 2010-08-06 04:35:30
la source

j'ai trouvé cet article il y a quelques 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 il est clair et simple à comprendre, et je pense que l'algorithme peut être facilement traduction en 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-mise en place de la base de données word

le mieux est si vous pouvez utiliser les mots de recherche réels et leur occurrence. Si vous n'avez pas qu'un grand ensemble de texte peut être utilisé à la place. Compter les occurrences (popularité) de chaque mot.

Étape 2. Vérification des mots-trouver des mots qui sont similaires à celle cochée

Semblable signifie que la distance d'édition est faible (typiquement 0-1 ou 0-2). La distance d'édition est le nombre minimum d'inserts/suppressions/changements/swaps nécessaires pour transformer un mot en un autre.

Choisir le mot le plus populaire de l'étape précédente et il suggère une correction (si autre que le mot lui-même).

93
répondu Davide Gualano 2018-05-10 23:23:13
la source

De la théorie de la "vouliez-vous dire" de l'algorithme, vous pouvez vous référer au Chapitre 3 de l'Introduction de la recherche d'Information. Il est disponible en ligne gratuitement. 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).

51
répondu Szere Dyeri 2015-02-03 10:25:55
la source

Hmm... J'ai pensé que google a utilisé leur vaste corpus de données (l'internet) pour faire un certain NLP sérieux (traitement du langage naturel).

par exemple, ils ont tellement de données provenant de l'ensemble de l'internet qu'ils peuvent compter le nombre de fois qu'une séquence de trois mots se produit (connu comme un trigramme ). Donc s'ils voient une phrase comme "Pink frugr concert", ils pourraient voir qu'il a peu de succès, puis trouver le plus probable "pink * concert" dans leur corpus.

ils font apparemment juste une variation de ce que Davide Gualano disait, cependant, si certainement lire ce lien. Google utilise bien sûr toutes les pages web qu'il connaît comme un corpus, ce qui rend son algorithme particulièrement efficace.

9
répondu Claudiu 2008-11-21 02:45:57
la source

Ma conjecture est qu'ils utilisent une combinaison d'un Levenshtein algorithme et les masses de données qu'ils recueillent concernant les recherches qui sont exécutées. Ils peuvent tirer un ensemble de recherches qui ont la plus courte distance Levenshtein de la chaîne de recherche entrée, puis choisir celui avec le plus de résultats.

7
répondu Jim Burger 2008-11-21 02:57:13
la source

normalement, un correcteur d'orthographe de production utilise plusieurs méthodes pour fournir une suggestion d'orthographe. Certains sont:

  • décider de la façon de déterminer si une correction orthographique est nécessaire. Il peut s'agir de résultats insuffisants, de résultats qui ne sont pas assez précis ou précis (selon certaines mesures), etc. Puis:

  • utilisez un grand corps de texte ou un dictionnaire, où tout, ou la plupart sont connus pour être correctement orthographié. Ceux-ci sont facilement trouvés en ligne, dans des endroits tels que LingPipe . Ensuite, pour déterminer la meilleure suggestion vous cherchez un mot qui est la correspondance la plus proche basée sur plusieurs mesures. Le plus intuitif est des caractères similaires. Ce qui a été démontré par la recherche et l'expérimentation est que deux ou trois correspondances de séquence de caractères fonctionnent mieux. (bigrams et trigrammes). Pour améliorer encore les résultats, pesez un score plus élevé sur un match début ou à la fin du mot. Pour des raisons de performance, indexez tous ces mots comme trigrammes ou bigrammes, de sorte que lorsque vous effectuez une recherche, vous convertissez en n-gram, et la recherche via hashtable ou trie.

  • utiliser des heuristiques liées à des erreurs de clavier potentielles basées sur la localisation des caractères. Donc" hwllo "devrait être" hello "parce que" w "est proche de "e".

  • utiliser une clé phonétique (Soundex, Métaphone) pour indexer les mots et rechercher les corrections possibles. Dans la pratique, cela produit normalement des résultats plus mauvais que l'utilisation de l'indexation n-gram, comme décrit ci-dessus.

  • dans chaque cas, vous devez sélectionner la meilleure correction dans une liste. Il peut s'agir d'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 dans la détermination d'une meilleure correspondance.

6
répondu eulerfx 2009-04-16 22:07:37
la source

utiliser distance Levenshtein , puis créer un arbre métrique (ou arbre mince) pour indexer les mots. Ensuite, lancez une recherche 1-plus proche voisin, et vous avez obtenu le résultat.

6
répondu Nicolas Dorier 2009-10-04 22:07:10
la source

Google suggère apparemment des requêtes avec les meilleurs résultats, pas avec ceux qui sont orthographiés correctement. Mais dans ce cas, probablement un correcteur de sort serait plus faisable, bien sûr vous pourriez stocker une certaine valeur pour chaque requête, basée sur une métrique de la façon dont de bons résultats il retourne.

,

  1. Vous avez besoin d'un dictionnaire (anglais ou basée sur vos données)

  2. générer un mot treillis et calculer les probabilités pour les transitions à l'aide de votre dictionnaire.

  3. 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 voiture, cay tournerait cat)

  4. retournez le mot qui a la distance minimale.

  5. alors vous pouvez comparer cela à votre base de données d'interrogation et vérifier s'il y a de meilleurs résultats pour d'autres correspondances étroites.

4
répondu Geee 2008-11-21 04:25:19
la source

voici le meilleure réponse que j'ai trouvé , correcteur D'orthographe 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.

4
répondu Aziz Alto 2014-03-12 10:35:20
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 la recherche de" Did you mean: "dans le HTML.

je suppose que cela s'appelle mashup de nos jours: -)

3
répondu Tomas Petricek 2008-11-21 03:57:36
la source

comme hypothèse... il pourrait

  1. recherche de mots
  2. si elle n'est pas trouvée utilisez un algorithme pour essayer de" deviner " le mot.

pourrait être quelque chose d'AI comme Hopfield network ou back propagation network, ou quelque chose d'autre" identification des empreintes digitales", restauration des données brisées, ou des corrections orthographiques comme Davide a déjà mentionné ...

3
répondu badbadboy 2018-01-17 17:14:57
la source

j'ai vu quelque chose à ce sujet il y a quelques années, donc peut-être changé depuis, mais apparemment ils ont commencé par analyser leurs journaux pour les mêmes utilisateurs soumettant des requêtes très similaires dans un court laps de temps, et utilisé l'apprentissage machine basée sur la façon dont les utilisateurs s'étaient corrigés.

2
répondu seanb 2008-11-21 02:46:48
la source

Simple. Ils ont tonnes de données. Ils ont des statistiques pour chaque terme possible, basé sur la fréquence à laquelle il est interrogé, et quelles variations de celui-ci généralement donner des résultats les utilisateurs cliquent... donc, quand ils voient que vous tapez souvent une faute d'orthographe pour un terme de recherche, ils vont de l'avant et proposent la réponse plus habituelle.

en fait, si l'orthographe erronée est en fait le terme le plus fréquemment recherché, l'algorithme le prendra pour le bon.

2
répondu schonarth 2008-11-21 02:48:43
la source

Vous voulez dire que correcteur orthographique? Si c'est un correcteur orthographique plutôt qu'une phrase entière, alors j'ai un lien à propos de la vérification orthographique où l'algorithme est développé en python. Vérifier ce lien

pendant ce temps, je travaille également sur un projet qui inclut la recherche de bases de données en utilisant du texte. Je suppose que cela résoudrait votre problème

1
répondu Jimit Patel 2012-11-17 11:12:53
la source

en dehors des réponses ci-dessus, au cas où vous voulez mettre en œuvre quelque chose par vous-même rapidement, voici une suggestion -

algorithme

vous pouvez trouver la mise en œuvre et la documentation détaillée de cet algorithme sur GitHub .

  • créer une file D'attente prioritaire avec un comparateur.
  • créer un arbre de recherche Ternay et insérer tous les mots anglais (de Norvig post ) ainsi que leurs fréquences.
  • commencer à traverser le TCT et pour chaque mot rencontré dans le TCT, calculer sa distance Levenshtein ( LD ) à partir de input_word
  • si LD ≤ 3, Mettez-le dans une file D'attente prioritaire.
  • enfin extraire 10 mots de la file D'attente et de l'affichage de priorité.
1
répondu amarjeetAnand 2018-03-27 12:19:21
la source

la meilleure façon de le comprendre est de Google dynamic programming.

c'est un algorithme qui a été emprunté à la récupération de L'Information et qui est largement utilisé en bioinformatique moderne pour voir comment sont les séquences de deux gènes similaires.

la solution optimale utilise la programmation dynamique et la récursion.

C'est un problème résolu avec beaucoup de solutions. Cherche sur google jusqu'à ce que tu trouves du code source ouvert.

0
répondu ewakened 2008-11-21 04:05:37
la source

il y a une structure de données spécifique - arbre de recherche ternaire - qui supporte naturellement les correspondances partielles et les correspondances de voisinage.

0
répondu 2009-09-07 15:24:45
la source

C'est une vieille question, et je suis surpris que personne n'ait suggéré L'opération en utilisant Apache Solr.

Apache Solr est un moteur de recherche plein texte qui, en plus de nombreuses autres fonctionnalités, fournit également spellchecking ou des suggestions de requête. De la documentation :

par défaut, les vérificateurs D'orthographe de Lucène trient les suggestions d'abord par le le score du calcul de la distance de chaîne et le second par la fréquence (si disponible) de la suggestion dans l'index.

0
répondu Josep Valls 2014-04-04 03:38:38
la source