Literówkowe kontinuum

2011-02-10

W Fablo zbudowaliśmy wyszukiwarkę dla sklepów internetowych, która potrafi radzić sobie z literówkami, błędami ortograficznymi i odmianą wyrazów, a wszystko to robi błyskawicznie (tzw. instant search). Do tego jest łatwa w integracji i daje sklepom zupełnie nową jakość jeśli chodzi o wyszukiwanie i przeglądanie produktów.

Jak się jednak okazało, literówki to nie taka prosta sprawa.

Z błędami ortograficznymi i brakiem polskich znaków jest jeszcze nieźle, bo przynajmniej daje się odgadnąć co wpisujący miał na myśli i jakie jest poprawne wyszukiwanie (choć też nie zawsze — np. „sol” może według oprogramowania być zarówno słowem „sól” bez litery „ó”, lub dopełniaczem liczby mnogiej słowa „sola (ryba)”!). Znacznie gorzej jest jednak z kodami i oznaczeniami produktów.

Nasze algorytmy nie są fonetyczne, więc już na wstępie dla kodów produktów spisują się znacznie lepiej niż niektóre rozwiązania konkurencji. Pracując z klientami spotkało nas jednak sporo niespodzianek. Okazało się, że dla oznaczeń kodowych niemal każdy klient spodziewa się po wyszukiwarce czego innego. Co gorsza, często musimy tłumaczyć, że owszem, dla tego konkretnego przykładu wyszukiwanie nie jest optymalne, ale gdyby cokolwiek zmienić, to zepsułoby się znacznie więcej.

Przykładowo, w sklepie z oponami samochodowymi często wyszukuje się wpisując parametry opon — np. „195 65 16”. Gdyby wyszukiwarka tolerowała jedną literówkę na słowo, praktycznie każde zapytanie wyszukiwałoby całą ofertę sklepu!

Inny przykład: dla Fablo literówka to również dodanie litery. I tu problem: jeden klient chciałby, żeby zapytanie „2612a” znajdywało toner „q2612a” — a więc, żeby dodanie dowolnej litery na początku słowa było możliwe, a drugi klient sprzedaje twarde dyski i zdecydowanie by nie chciał, żeby po wpisaniu „dysk ATA” znajdywały się „dyski SATA”.

Obsługiwanie błędów i literówek można sobie wyobrazić jako pewne kontinuum — mamy w ręku suwak, który możemy ustawiać dowolnie pomiędzy „toleruj wszystko”, a „nie toleruj żadnych błędów”. Problem w tym, że właściwe ustawienie jest gdzieś pośrodku i nigdy nie zadowoli wszystkich.


Komentarze

A nie można robić rozwiązań specyficznych dla słów (ATA/SATA) lub kategorii (motoryzacja)?

Jakub Anderwald2011-02-10

Jako użytkownik szukałbym w takich przypadkach możliwość wyłączenia lub kontrolowania inteligencji wyszukiwarki - wyszukaj całe słowa (bez uzupełnień i poprawki literówek), wyszukuj słowa z uzupełnienie na początku/na końcu...

Martin2011-02-10

a nie mozna rzucic search'a jak w przypadku sata, zobaczec co zwroci i ew. jezeli nie o ten wynik nam chodzilo (np. nie znalazlo zadnego produktu sata) powtorzyc search z ata?
co do opon - idealna wyszykiwarka nie bedzie - ja bym po prostu jako sprzedwaca opon zrobil wstepna selekcje wyrazeniem regularnym i decydowal jak inteligentnie ma szukac wyszukiwarna na podstawie kategorii pod ktora podpada zapytanie (np. to podane jest dosc dokladne, wiec nawet bez jakiegokolwiek poprawiania mogloby wyszukiwac) - czasami nie ma nic gorszego niz kawalek kodu, ktory uwaza ze jest madrzejszy od ciebie.

swoja droga - czy macie obsluge query dla zaawansowanych uzytkownikow? z symbolami ja * ? - "" itp.?
ostatnio szukalem maila z haslem na gmail'u, ktorego pamietalem tylko poczatek - doszedlem do wniosku, ze google schodzi na psy w dziedzinie wyszukiwania - mimo iz dobrze wpisalem poczatek, uzylem gwiazdki itp. sposobow google nie znalazlo maila - dobrze, ze oznaczylem mail, wiec w koncu znalazlem recznie, ale chyba nie tak powinno to wygladac u firmy ktora jest synonimem wyszukiwania?

pendowski2011-02-10

Rozwiązania specyficzne są fajne, ale potem przychodzi moment gdy wyszukiwarkę wpinamy np. do porównywarki cenowej, lub portalu sklepowego, gdzie występują wszystkie branże. I co?

Opcji "zaawansowane wyszukiwanie" unikamy jak ognia, bo potrzebna jest czytelnikom tego bloga i nikomu więcej :-)

Jarek: sklep z dyskami ma na ogół dyski ata i sata. I nie chce pokazywać dysków sata, gdy użytkownik wpisał "ata".

Jan Rychter2011-02-10

Bardziej w sferze żartu: jeśli klient w swojej historii wyszukiwania miał laptopa X, który ma dysk SATA, to tym razem prawdopodobnie chciałby też SATA. Jeśli dodałem przed chwilą do koszyka przyprawę do ryb, to może sola? ;)

Wyszukiwanie zaawansowane -- myślę, że masz 100% racji. Ale czy nie warto zrobić jednego wyjątku i pozwolić na wyszukanie dokładnie żądanej frazy przez znane " "?

Krzysiek2011-02-10

Krzysiek: to nie takie żarty wcale — silnik probabilistyczny, nad którym pracujemy, mniej więcej tak będzie „rozumował”.

Jan Rychter2011-02-10

możesz powiedzieć coś więcej o tym czemu nie możecie dopasować wyszukiwarki do konkretnych sklepów?

w jaki sposób to się spina z porównywarką cen o której wspomniałeś w komentarzu? a nawet jeśli Wasz search byłby zaimplementowany w porównywarce cen, to czy nie moglibyście zrobić jakiegoś standardu dla sklepów definiującego jakie odstępstwa są akceptowalne? (np. sklep wystawia search.txt w którym pisze, czy toleruje jedną literówkę na słowo, czy dwie)..

Merlin2011-02-11

Możemy próbować dopasowywać. Ale w końcu zawsze trafimy sklep wielobranżowy albo porównywarkę, gdzie musisz wyszukać coś globalnie, w wielu branżach. Wtedy musisz mieć jedne zasady wyszukiwania dla wszystkich.

Jan Rychter2011-02-11

No dobra - ale to jak ze sprawdzaniem pisowni..w sumie gdziekolwiek. Z jednej strony mamy wysyp (nudnych) bledow autocorrect'a z iphone'a, co niejako ukazuje ze nie da sie stworzyc nieomylnego systemu. Z drugiej strony - w teorii jezeli dane slowo istnieje - nie poprawiaj go - nie badz madrzejszy od uzytkownka, jezeli nie ma - popraw na najblizsze najczesciej uzywane (ew. Google'owskie "czy miales na mysli...")
Moze to malo idealistyczne, pzyszlosciowe myslenie, ale rowniez wydaje mi sie, ze nie do konca mozna myslec na zasadzie "a co jak podepniemy to do XXX i nie bedzie dobrze dzialac".
A konczac tematem od ktorego zaczelem - czasami jak madrzy ludzie zaczynaja za duzo kombinowac i probowac pomiedzy uzytownikiem a celem wkladac sztuczna inteligencje to wychodza kwiatki ja z autokorekty iphone'a. Software ma pomagac a nie myslec za uzytkownika.

Pendowski2011-02-12

A może pozwolić użytkownikom Fablo (sklepom) decydować jak dane kategorie powinny być traktowane. Niech w opisach kategorii/produktów znajda się specjalne oznaczenia decydujące czy np. zezwalać na literówki. Takie tagi mogły by być częścią danych produktu a nawet całej kategorii produktów.

Takie rozwiązanie wydaje mi się najbardziej rozsądne - bo to klient wprowadzający produkty, wie o nich najwięcej. Z czasem będzie też coraz więcej specyficznych produktów i oczekiwań co do wyszukiwania, a proces automatyczny będzie miał coraz więcej problemów.

Konrad2011-03-02