Co masz na myśli w Google?"Algorytm działa?

Opracowuję wewnętrzną stronę internetową dla narzędzia do zarządzania portfelem. Istnieje wiele danych tekstowych, nazw firm itp. Byłem naprawdę pod wrażeniem zdolności niektórych wyszukiwarek do bardzo szybkiego reagowania na zapytania z "Czy miałeś na myśli: xxxx".

Muszę być w stanie inteligentnie przyjąć zapytanie użytkownika i odpowiedzieć nie tylko surowymi wynikami wyszukiwania, ale także z "Czy miałeś na myśli?"odpowiedź, gdy istnieje bardzo prawdopodobna alternatywna odpowiedź itp

[rozwijam się w ASP.NET (VB - nie miej mi tego za złe! )]

UPDATE: OK, Jak mogę to naśladować bez milionów "niezapłaconych użytkowników"?

  • wygenerować literówki dla każdego 'znanego ' lub' poprawnego ' terminu i przeprowadzić wyszukiwanie?
  • jakaś inna bardziej elegancka metoda?
Author: dmcer, 2008-11-21

18 answers

Oto Wyjaśnienie bezpośrednio ze źródła (prawie)

Szukaj 101!

At min 22: 03

Warto obejrzeć!

W Zasadzie i według Douglasa Merrilla byłego CTO z Google jest tak:

1) piszesz (błędnie ) słowo w google

2) nie znajdziesz tego, co chciałeś (nie klikaj na żadne wyniki)

3) zdajesz sobie sprawę, że źle napisałeś słowo, więc przepisujesz słowo w polu wyszukiwania.

4) ty znajdź to , co chcesz (klikasz w pierwsze linki)

Ten wzór mnoży się miliony razy, pokazuje, jakie są najczęstsze błędy ortograficzne i jakie są najbardziej "powszechne" korekty.

W ten sposób Google może niemal natychmiast zaoferować korektę pisowni w każdym języku.

Oznacza to również, że jeśli w nocy wszyscy zaczną pisać noc jako "nigth", google zasugeruje to słowo.

EDIT

@ThomasRutter: Douglas opisz to jako "statystyczne uczenie maszynowe".

Wiedzą, kto poprawi zapytanie, ponieważ wiedzą, które zapytanie pochodzi od jakiego użytkownika (za pomocą Plików cookie)

Jeśli użytkownicy wykonają zapytanie, a tylko 10% użytkowników kliknie wynik, a 90% wróci i wpisze kolejne zapytanie (z poprawionym słowem ) i tym razem, że 90% kliknie wynik, wtedy wiedzą, że znaleźli korektę.

Mogą również wiedzieć, czy są to" powiązane " zapytania dwóch różnych, ponieważ mają informacje o wszystkich linkach, które pokazują.

Ponadto, teraz włączają kontekst do sprawdzania pisowni, więc mogą nawet sugerować różne słowa w zależności od kontekstu.

Zobacz to demo google wave (@44m 06S), które pokazuje, jak kontekst jest brany pod uwagę, aby automatycznie poprawić pisownię.

Tutaj jest wyjaśnione, jak działa przetwarzanie języka naturalnego.

I w końcu oto niesamowite demo tego, co można zrobić dodawanie automatycznego tłumaczenia maszynowego ( @ 1h 12m 47s) do miksu.

Dodałem kotwice minut i sekund do filmów, aby przejść bezpośrednio do treści, jeśli nie działają, spróbuj przeładować stronę lub przewijać ręcznie do znacznika.

 336
Author: OscarRyz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-06 00:35:30

Znalazłem ten artykuł jakiś czas temu: Jak napisać korektor ortograficzny, autor: Peter Norvig (Dyrektor ds. badań w Google Inc.).

Ciekawa lektura na temat "korekty ortograficznej". Przykłady są w Pythonie, ale jest jasne i proste do zrozumienia, i myślę, że algorytm może być łatwo przetłumaczone na inne języki.

Poniżej znajduje się Krótki opis algorytmu. Algorytm składa się z dwóch kroków, przygotowanie i sprawdzanie słów.

Krok 1: Przygotowanie-utworzenie bazy słów

Najlepiej jest, jeśli możesz użyć rzeczywistych słów wyszukiwania i ich występowania. Jeśli nie masz, że duży zestaw tekstu może być używany zamiast. Policz występowanie (popularność) każdego słowa.

Punkt 2. Sprawdzanie słów-znajdowanie słów podobnych do sprawdzanych

Podobne oznacza, że odległość edycji jest niska (zazwyczaj 0-1 lub 0-2). Odległość edycji jest minimalna liczba wstawek/usunięć/zmian / swapów potrzebnych do przekształcenia jednego słowa na drugie.

Wybierz najbardziej popularne słowo z poprzedniego kroku i zaproponuj je jako poprawkę (jeśli inne niż samo słowo).

 93
Author: Davide Gualano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-10 20:23:13

Do teorii algorytmu" czy miałeś na myśli " można odnieść się do rozdziału 3 wprowadzenia do wyszukiwania informacji. Jest on dostępny online za darmo. Sekcja 3.3 (strona 52) dokładnie odpowiada na twoje pytanie. A aby konkretnie odpowiedzieć na aktualizację, potrzebujesz tylko słownika słów i nic więcej (w tym milionów użytkowników).

 51
Author: Szere Dyeri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-03 07:25:55

Hmm... Myślałem, że google wykorzystało swój ogromny korpus danych (internet) do zrobienia poważnego przetwarzania języka NLP (Natural Language Processing).

Na przykład, mają tak wiele danych z całego Internetu, że mogą policzyć liczbę wystąpień ciągu trzech słów (znany jako trygram ). Więc jeśli zobaczą zdanie takie jak: "pink frugr concert", mogą zobaczyć, że ma kilka hitów, a następnie znaleźć najbardziej prawdopodobny "pink * koncert" w ich korpusie.

Oni najwyraźniej po prostu robią wariacja na temat tego, co mówił Davide Gualano, więc koniecznie przeczytaj ten link. Google używa oczywiście wszystkich stron internetowych, które zna jako korpus, dzięki czemu jego algorytm jest szczególnie skuteczny.

 9
Author: Claudiu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-20 23:45:57

Domyślam się, że używają kombinacji algorytmu odległości Levenshteina I Mas danych, które zbierają odnośnie prowadzonych poszukiwań. Mogą wyciągnąć zestaw wyszukiwań, które mają najkrótszą odległość Levenshtein od wprowadzonego ciągu wyszukiwania, a następnie wybrać ten z największą liczbą wyników.

 7
Author: Jim Burger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-20 23:57:13

Zwykle korektor pisowni produkcji wykorzystuje kilka metod, aby dostarczyć sugestie ortograficzne. Niektóre są:

  • Zdecyduj, w jaki sposób ustalić, czy korekta pisowni jest wymagana. Mogą one obejmować niewystarczające wyniki, wyniki, które nie są wystarczająco szczegółowe lub dokładne (zgodnie z pewnym środkiem), itp. Następnie:

  • Użyj dużej części tekstu lub słownika, w którym wszystkie lub większość z nich są poprawnie napisane. Można je łatwo znaleźć w Internecie, w miejsca takie jak LingPipe . Następnie, aby określić najlepszą sugestię, szukasz słowa, które jest najbliższe dopasowanie na podstawie kilku środków. Najbardziej intuicyjne są podobne znaki. Badania i eksperymenty wykazały, że dwie lub trzy sekwencje znaków działają lepiej. (bigramy i trygramy). Aby jeszcze bardziej poprawić wyniki, ważyć wyższy wynik w meczu na początku lub na końcu słowa. Ze względów wydajnościowych, indeksować wszystkie te słowa jako trygramy lub bigrams, tak, że podczas wykonywania wyszukiwania, można konwertować na n-gram, i wyszukiwanie poprzez hashtable lub trie.

  • Użyj heurystyki związanej z potencjalnymi błędami klawiatury w oparciu o lokalizację znaków. Więc "hwllo" powinno być "cześć", ponieważ 'w' jest blisko 'e'.

  • Użyj klucza fonetycznego (Soundex, Metaphone), aby indeksować słowa i wyszukiwać możliwe korekty. W praktyce zwykle zwraca to gorsze wyniki niż przy użyciu indeksowania n-gramowego, jak opisano powyżej.

  • W każdym przypadku należy wybrać najlepszą korektę z listy. Może to być metryka odległości, taka jak levenshtein, metryka klawiatury itp.

  • W przypadku wyrażenia wielowyrazowego tylko jedno słowo może być błędnie napisane, w takim przypadku można użyć pozostałych słów jako kontekstu w określeniu najlepszego dopasowania.

 6
Author: eulerfx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-16 18:07:37

Użyj odległości Levenshteina, a następnie utwórz drzewo metryczne (lub drzewo Slim) do indeksowania słów. Następnie uruchom 1-Najbliższe zapytanie sąsiada, a otrzymasz wynik.

 6
Author: Nicolas Dorier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-04 18:07:10

Google najwyraźniej sugeruje zapytania z najlepszymi wynikami, a nie z tymi, które są napisane poprawnie. Ale w tym przypadku prawdopodobnie korektor pisowni byłby bardziej wykonalny, oczywiście możesz zapisać pewną wartość dla każdego zapytania, w oparciu o pewną metrykę tego, jak dobre wyniki zwraca.

Więc,

  1. Potrzebujesz słownika (angielskiego lub opartego na Twoich danych)

  2. Wygeneruj kratkę słowa i Oblicz prawdopodobieństwo przejścia za pomocą swojego słownik.

  3. Dodaj dekoder, aby obliczyć minimalną odległość błędu za pomocą kratki. Oczywiście przy obliczaniu odległości należy zadbać o wstawianie i skreślanie. Zabawne jest to, że klawiatura QWERTY maksymalizuje odległość, jeśli naciśniesz klawisze blisko siebie.(cae zmieniłby samochód, cay zmieniłby kota)

  4. Zwróć słowo, które ma minimalną odległość.

  5. Następnie możesz porównać to do bazy zapytań i sprawdzić, czy jest lepszy wyniki dla pozostałych spotkań.

 4
Author: Geee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-21 01:25:19

Oto Najlepsza odpowiedź jaką znalazłem, korektor pisowni zaimplementowany i opisany przez dyrektora badań Google Petera Norviga.

Jeśli chcesz przeczytać więcej o teorii stojącej za tym, możesz przeczytać jego rozdział książki .

Idea tego algorytmu opiera się na statystycznym uczeniu maszynowym.

 4
Author: Aziz Alto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-12 06:35:20

Jeśli chodzi o twoje pytanie, Jak naśladować zachowanie bez posiadania ton danych - dlaczego nie wykorzystać ton danych zebranych przez google? Pobierz wyniki google sarch dla błędnie napisane słowo i wyszukaj "czy chodziło Ci o:" w HTML.

To się chyba nazywa mashup w dzisiejszych czasach : -)

 3
Author: Tomas Petricek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-21 00:57:36

Jako zgadywanka... może

  1. Szukaj słów
  2. Jeśli nie zostanie znaleziony użyj jakiegoś algorytmu, aby spróbować "odgadnąć" słowo.

Może to być coś z AI, jak sieć Hopfield lub sieć propagacji wstecznej, lub coś innego "identyfikowanie odcisków palców", przywracanie uszkodzonych danych lub korekty pisowni, jak już wspomniał Davide ...

 3
Author: badbadboy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-17 14:14:57

Widziałem coś na ten temat kilka lat temu, więc może się zmieniło od tego czasu, ale najwyraźniej zaczęli to analizować swoje dzienniki dla tych samych użytkowników, którzy przesyłali bardzo podobne zapytania w krótkim czasie, i używali uczenia maszynowego w oparciu o to, jak użytkownicy poprawili się.

 2
Author: seanb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-20 23:46:48

Proste. Mają tony danych. Mają statystyki dla każdego możliwego terminu, na podstawie tego, jak często jest on pytany i jakie jego odmiany zwykle dają wyniki, które użytkownicy klikają... tak więc, gdy zobaczą, że wpisałeś częste błędy ortograficzne dla szukanego terminu, zaproponują bardziej typową odpowiedź.

Właściwie, jeśli błąd ortograficzny jest w rzeczywistości najczęściej wyszukiwanym terminem, algorytm przyjmie go za właściwy.

 2
Author: schonarth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-20 23:48:43

Chcesz powiedzieć sprawdzanie pisowni? Jeśli jest to sprawdzanie pisowni, a nie całe zdanie, to mam link o sprawdzaniu pisowni, gdzie algorytm jest rozwijany w Pythonie. Sprawdź ten link

W międzyczasie pracuję również nad projektem, który obejmuje przeszukiwanie baz danych za pomocą tekstu. Myślę, że to rozwiąże twój problem

 1
Author: Jimit Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-17 07:12:53

Poza powyższymi odpowiedziami, jeśli chcesz szybko wdrożyć coś samodzielnie, oto sugestia -

Algorytm

Implementację i szczegółową dokumentację tego algorytmu można znaleźć na GitHub .

  • Utwórz kolejkę priorytetów za pomocą komparatora.
  • Utwórz drzewo wyszukiwania Ternay i wstaw wszystkie angielskie słowa (z Norvig ' s post ) wraz z ich częstotliwościami.
  • Zacznij przemierzać TST i dla każdego słowa napotkany w TST, Oblicz jego odległość Levenshtein ( LD ) z input_word
  • If LD ≤ 3 then put it in a Priority Queue.
  • W końcu wyodrębnij 10 słów z kolejki priorytetów i wyświetl.
 1
Author: amarjeetAnand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-27 09:19:21

Najprostszym sposobem na to jest programowanie dynamiczne Google.

To algorytm, który został zapożyczony z wyszukiwania informacji i jest szeroko stosowany we współczesnej bioinformatyce, aby zobaczyć, jak podobne są dwie sekwencje genów.

Optymalne rozwiązanie wykorzystuje dynamiczne programowanie i rekurencję.

Jest to bardzo rozwiązany problem z wieloma rozwiązaniami. Po prostu poszukaj w Google, dopóki nie znajdziesz otwartego kodu źródłowego.

 0
Author: ewakened,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-21 01:05:37

Istnieje specyficzna struktura danych- ternary search tree - która w naturalny sposób obsługuje dopasowania częściowe i dopasowania bliskie sąsiadom.

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-07 11:24:45

To stare pytanie i dziwi mnie, że nikt nie zasugerował OP używając Apache Solr.

Apache Solr jest wyszukiwarką pełnotekstową, która oprócz wielu innych funkcji zapewnia również sprawdzanie pisowni lub sugestie zapytań. Z dokumentacji :

Domyślnie sprawdzacze pisowni Lucene sortują sugestie najpierw według wynik z obliczeń odległości strun, a drugi z częstotliwością (jeśli jest dostępna) sugestii w indeksie.

 0
Author: Josep Valls,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-03 23:38:38