Rozmowa i opinie po prezentacji “Things I learned the Hard Way Building a Search Engine”



Dima Boyko (Software Engineer, inFakt.pl): Hello. Byłem na jedzeniu, na lunchu i niestety nie zdążyłem na ostatnią prezentację. Powiedz, co tam było ciekawego. O czym w ogóle była ta prezentacja?

Alicja Cyganiewicz (Ruby developer, inFakt.pl): Wiesz co? To była prezentacja o wyszukiwaniu i wyszukiwaniu jak chodzi o teksty. Tzn. w jaki sposób możemy zwrócić użytkownikowi tekst, który najlepiej będzie odpowiadał temu, czego szuka. I najśmieszniejsze jest to, że właściwie robimy to codziennie, bo każdy z nas czegoś wyszukuje w Google i nigdy chyba się nie zastanawia nad tym jakim cudem faktycznie dostajemy to czego chcemy. A z wyszukiwaniem tekstu jest naprawdę ciężka sprawa, bo masz semantykę, której nie da się zmierzyć liczbowo. Jeżeli np. w zwykłej aplikacji wyszukujesz, nie wiem, fakturę, to jesteś w stanie podać jakieś konkretne jej dane, natomiast przy przeszukiwaniu tekstu wchodzą słowa, wchodzą jakieś takie znaczeniowe rzeczy i ciężko jest to zmierzyć w taki sposób, żebyśmy byli w stanie podać jakąś taką liczbową wartość. I okazało się, o czym ja np. wcześniej nie wiedziałam, nie zdawałam sobie sprawy, że jesteśmy w stanie w jakiś sposób przedstawiać liczbowo podobieństwo pomiędzy tym czego ktoś wyszukuje a tym co mamy w tekście. Okazało się… wiesz, gdyby się tak nad tym samemu zastanowić, to myślę, że też byłbyś w stanie wskazać taki jeden przykładowy licznik, co może być ważne. I np. ja wpisuję 3 słowa do wyszukiwania, mam masę tekstów, to zastanów się, co mógłbyś liczyć.

Dima: Ilość wystąpień tych słów w tekstach.

Alicja: OK. Czyli chodzi ci o to, jak często występowały w tekstach, tak?

Dima: To jest najprostsze.

Alicja: Widzisz i to jest trochę złudne. Dlatego, bo okazuje się, że tak naprawdę, jeżeli masz tekst, to każde następne wystąpienie tego samego słowa w tekście jest coraz mniej znaczące. Tzn., jakby największą wartość ma pierwsze wystąpienie danego słowa, bo to oznacza, że jakby ten tekst, faktycznie mówi na ten temat, ale każde kolejne wystąpienie ma coraz mniejsze znaczenie, bo możemy się też spodziewać, że skoro tekst jest na jakiś dany temat, powiedzmy szukasz tekstu o programowaniu w Ruby, to słowo kluczowe: Ruby, będzie się powtarzało w tym tekście, no i każde jakby kolejne wystąpienie będzie mniej znaczące. Ale faktycznie masz rację, że jakby częstotliwość jest tam jakimś jednym z mierników. Ale to co jest w gruncie rzeczy najważniejsze, to czy w ogóle dane słowo występuje i na prezentacji był np. pokazany sposób przełożenia występowania słów w tekście na wektory. To się wydaje zupełnie abstrakcyjne, bo z jednej strony masz tekst, czyli coś zupełnie takiego jakby odciętego od nauk ścisłych, a z drugiej strony masz przedstawienie tego wektorowe. Dzięki temu możemy np. wyliczyć taką pierwszą podstawową tzw. relevance, czyli to czy tekst odpowiada temu czego ktoś wyszukuje. I to jest ten taki podstawowy miernik. Później tak jak mówisz wchodzi częstotliwość występowania…

Dima: Ale pewnie jest zależna też od długości tekstu.

Alicja: Dokładnie tak.

Dima: Bo im dłuższy mamy tekst tym statystycznie prawdopodobieństwo wystąpienia tego słowa jest większe.

Alicja: Dokładnie tak. I dlatego jest też algorytm, który jakby coraz bardziej uszczegóławia to podobieństwo wyszukiwanej frazy do tekstów i tam właśnie tak jak mówisz, teksty, które są dłuższe, będą w cudzysłowie karane, czyli ilość wystąpień tych słów, będzie coraz mniej brana pod uwagę, no bo wiadomo, tak jak powiedziałeś, dłuższy tekst, większe prawdopodobieństwo. Natomiast te krótkie teksty… jeżeli w krótkim tekście wystąpi ci to chociaż raz, to i tak jest to dosyć ważne wystąpienie. Prawda? Można w ten sposób powiedzieć. Tylko że, tak jak powiedziałam, z tekstami najgorsze jest to… to jest semantyka, to jest coś nad czym do końca nie panujemy, dlatego trzeba też walczyć z synonimami. Warto zastanowić się właśnie nad tym jakie podobne słowa mogły tam wystąpić, jakie słowa z rodziny mogły tam wystąpić i tutaj wchodzi dosyć dużo takiej powiedzmy manualnej pracy. W sensie nie wszystko jesteśmy w stanie mierzyć algorytmami, bo ktoś musi wprowadzić, nie wiem, tzw. derywaty, czyli powiedzmy końcówki słów, w jaki sposób tam dane słowo może się odmieniać, żebyśmy później byli w stanie znaleźć to w tekście. I to jest coś moim zdaniem najtrudniejszego. To nie było powiedziane może na prezentacji, ale tak mi się wydaje, że to jest chyba najtrudniejsza część, jak chodzi o wyszukiwanie i przeszukiwanie tekstów, że w dużej mierze opiera się na danych, które my musimy wprowadzić, szczególnie, że każdy język będzie rządzi się swoimi prawami. Prawda? Np. język angielski nie będzie miał takiej odmiany przez przypadki jak ma język polski, więc w tym momencie jakby ta baza się troszeczkę zawęża.

Dima: A czy zdarzyło się w twojej praktyce implementować, albo używać jakiś gotowych rozwiązań do wyszukiwania tekstu? Czy znasz jakieś gotowe rozwiązania i czy mogłabyś coś polecić?

Alicja: Znaczy wydaje mi się, że takim najbardziej znanym rozwiązaniem jest Elasticsearch. On też był wspomniany na prezentacji. Natomiast przyznaję, że ja akurat z tego nigdy nie korzystałam, więc ciężko jest mi powiedzieć. Ale z tego co słyszałam to jest to, jak mówię, jedno z najlepszych narzędzi, jakie można używać w tym kontekście.

Dima: OK. Czyli generalnie message prezentacji jest taki, że nie musisz używać natural language processing dlatego żeby wyszukiwać tekst, tylko można przełożyć to na standardową matematykę.

Alicja: W pewnym zakresie tak, tylko, że dochodzi do tego masa kolejnych powiedzmy faktorów takich, które na to wpływają. One nawet nie były wszystkie wymienione, bo nie da się tak na prawdę wszystkich wymienić. Chociażby to, jak dostajesz frazę do wyszukiwania, to teraz możemy się zastanawiać, czy wystąpiła dokładnie w tej samej kolejności, czy wystąpiło dokładnie to złożenie tych słów koło siebie. Czasami to nawet jest gorsze, dlatego bo jeżeli wpisujesz tylko 3 słowa klucze, a nie wpisujesz zdania jakby takiego ludzkiego, no to jeżeli to wystąpi koło siebie, to ten tekst znaczy jakby ma niewielką wartość, więc jakby pojawiają się kolejne takie elementy, o których trzeba by było pamiętać pisząc takie wzory pozwalające na przeliczenie podobieństwa tekstu do wyszukiwanej frazy.

Dima: Czyli takie algorytmy muszą być bardzo trudne do zaimplementowania.

Alicja: Moim zdaniem tak i z prezentacji też to wynikało.

Dima: A jak uważasz, takie podejście wektoryzacji matematycznie pasuje tylko dla wyszukiwania tekstów, czy innych typów informacji też, pikseli np.

Alicja: Podejrzewam, że tym bardziej dla innych typów informacji. Że jeżeli coś jesteśmy… moim zdaniem tekst i w ogóle ludzka mowa, jako coś naturalnego jest tak trudne do ujęcia w ścisłe ramy, że jeżeli jesteśmy w stanie to przełożyć na matematykę, to tym bardziej jesteśmy w stanie wyszukiwać, tak jak mówisz, piksele.

Dima: A odnośnie jeszcze wyszukiwania tekstów. Kiedyś zauważyłem, że różne systemy, różne wyszukiwarki np. Google i DuckDuckGo, bardzo różnie interpretują zapytanie, które wprowadzam w pole tekstowe. Google np. rozumie to bardziej… bardziej sprawdza sens tego co ja piszę, natomiast DuckDuckGo wydaje wyniki, które po prostu bardziej psują językowo. Które z tych podejść wg ciebie jest bardziej…

Alicja: Wiesz co? Moim zdaniem lepsze jest wychwytywanie sensu szczerze mówiąc. Dlatego zwłaszcza że nie wszyscy użytkownicy potrafią dobrze formułować zapytania. Takie jest też moje zdanie, że jakby jedną myśl jesteś w stanie przedstawić na różne sposoby i w tym momencie jeżeli algorytm, który wyszukuje podobieństwo w tekście jest w stanie zrozumieć o co ci chodziło, to jest to dużo, moim zdaniem, bardziej wartościowe, niż tak jak mówisz względy językowe takie, strukturalne.

Dima: Czyli może zdarzyć się tak, że użytkownik wpisał jakieś zapytania i dostał w pierwszym rankingu odpowiedź, która nie zawiera w ogóle tego tekstu…

Alicja: Może się tak zdarzyć, jasne.

Dima: …bo algorytm stwierdził, że ma to większy sens.

Alicja: Podejrzewam, że tak, chociaż chyba nie zdarzyła mi się nigdy taka sytuacja, więc jest to taka trochę teoretyczna sytuacja.

Dima: OK. I na koniec jaki jeden najważniejszy punkt z tej prezentacji byś wspomniała.

Alicja: Przede wszystkim to, że jesteśmy w ogóle w stanie mierzyć to relevance czyli tą taką odpowiedniość wyszukiwanego tekstu do frazy. Moim zdaniem to jest taka główna myśl i że przede wszystkim, że to nie jest jakby konkretna wartość, ale, to co cały czas było podkreślane na prezentacji, że to jest… jakby to relevance zawsze będzie spektrum wartości.

Dima: OK. No to teraz mogę powiedzieć, że byłem na tej prezentacji.

Alicja: Cieszę się, że pomogłam.