Wyszukiwanie przepisów kuchennych metodą Saltona

Transkrypt

Wyszukiwanie przepisów kuchennych metodą Saltona
Wyszukiwanie przepisów kuchennych metodą SaltonaSaltona-Rocchia
Autorzy:
utorzy: Piotr Gębala,
Gębala, Artur Morawski,
Morawski, UJ 2012
Celem pracy było zaimplementowanie algorytmu Rocchia do grupowania obiektów i
algorytmu Saltona do wyszukiwania z wykorzystaniem najnowszych technologii. W trakcie
prac wykorzystaliśmy bazę SQL (mySQL), bazę noSQL (redis) oraz framework Ruby on
Rails. Jako składowane dane wybraliśmy przepisy kuchenne, które bardzo dobrze nadają
się do założeń metod Rocchia i Saltona. Baza sqlowa pełni rolę łącznika id obiektu, nazwy
oraz ścieżki do pliku JSON'owego w którym zapisane są dane o wartościach atrybutów.
Natomiast baza no-sqlowa pełni funkcję kontenera grup i deskryptorów obiektów. Podział
taki wybraliśmy ze względu na szybkość baz danych: Redis wykazuje średnio 4x większą
wydajność insertów w porównaniu z Mysql'em.
Stworzyliśmy skrypt do generowania losowych przykładowych obiektów. Na podstawie
czasu generuje on losową liczbę, która pełni rolę wartości atrybutów name i body. Resztę
losuje z zadanych zbiorów wartości.
Algorytm Rocchia w wersji podstawowej został zaimplementowany w 100%. Na podstawie
obiektów i zadanych parametrów łączy obiekty w grupy na zasadzie podobieństwa oraz
nadaje im centroid (reprezentanta grupy). Można oczywiście z takich centroidów stworzyć
strukturę drzewiastą powtarzając algorytm. Jednak takie działanie wymagałoby wielu
obiektów (ponad 2 tys) skorelowanych ze sobą (a nie losowych).
Algorytm Saltona porównuje zapytanie z grupami (a dokładnie z centroidami) oraz z
obiektami izolowanymi (niesparowanymi w grupy). Zwraca najlepszą grupę oraz
najbardziej podobne obiekty z obiektów izolowanych. Dla bazy danych zawierającej 4 tys.
losowych obiektów około 2,7 tys. zostało zgrupowanych w 600 grup, a pozostałe 1,3 tys.
są obiektami izolowanymi. Dowolne zapytanie trwa około 0.1+-0.02 s, gdzie zwracane są
najbardziej relewantne obiekty (o najwyższym stopniu korelacji).
Co można jeszcze zrobić? W celu przyśpieszenia wyszukiwania można stworzyć strukturę
drzewiastą z podanych grup lub dobrać bardziej odpowiednie parametry tak, by powstało
jak najmniej obiektów izolowanych. Przydatny byłby również parser ligwistyczny
prawdziwych przepisów kuchennych, który na podstawie tekstu lub zadanej bazy
tworzyłby odpowiednie, rzeczywiste obiekty w aplikacji. Teoretycznie prawdziwe dane
powinny być bardziej skorelowane ze sobą niż losowe.