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.