Folksr: algorytm szukania podobnych wpisów

29 May 2009

Program prywatnej bety Folksr-a postępuje znakomicie i odzew społeczności jest ogromnie nagradzający. Szczególne podziękowania należą się roziemu i breffie (czy to się odmienia?) za cenne uwagi i raporty. Myślę, że będę Was musiał jakoś wynagrodzić, chłopaki ;-) Ale do rzeczy; oto algorytm używany przez Folksr-a do wyszukiwania podobnych wpisów.

Co się stanie jak dodam 1000 tagów?

No właśnie. Obliczanie podobieństwa wpisów na podstawie tylko i wyłącznie liczby tagów nie jest lepszym pomysłem. Technologia WWW już to przerabiała w postaci nagłówków meta z atrybutem keywords. Pole to szybko stało się na tyle bezużyteczne, że obecnie żadna wyszukiwarka nie bierze go pod uwagę. Folksr ogranicza liczbę indeksowanych tagów do dziesięciu. Jest to przyzwoita liczba, którą można wyrazić esencję treści i zachęca do rzetelnego tagowania swoich wpisów. Jest poza tym zgodna z ogólnymi wzorcami interfejsów użytkownika, gdzie 3-7 to zakres optymalny (jak myślicie, skąd 37signals wzięło swoją nazwę?).

Punkty za ilość

Każdy zbieżny tag jest punktowany i stanowi równą część wyniku. Załóżmy więc, że popełniłem wpis otagowany jako ubuntu 9.04 jaunty launch party dublin. Przyjmijmy też, że dwie inne osoby postanowiły podzielić się z blogsferą podobnymi wpisami. Pierwszy z nich zawiera tagi ubuntu 9.04 release party katowice, drugi jest oznaczony ubuntu 9.04 jaunty jackalope linux unix gnome recenzja. W obu przypadkach znalezione blogi mają po trzy tagi wspólne z wpisem na blogu gospodarza, ale ten drugi jest dużo szerszy. Jak ocenić który z nich jest trafniejszy?

Punkty za jakość

Do głosu dochodzi zatem zasada, że nie liczy się ilość lecz jakość. Ponieważ szerzej otagowane wpisy mogą być mniej trafne Folksr pomniejsza wagę wpisów o dużej liczbie tagów. Zapobiec ma to dodawaniu etykiet, które są słabo bądź wcale nie powiązane z tagami na blogu gospodarza. W drugim przypadku przytoczonym powyżej można się zgodzić, że tagi linux unix gnome są nieco nadmiarowe, a nawet błędne (unix???)

Jakość × ilość

Folksr bierze pod uwagę zarówno jakość jak i ilość. Każdy tag ma przyznaną pewną liczbę punktów, ale im więcej tagów tym punktów mniej. Ponieważ liczba tagów ograniczona jest do 10, to dwie skrajne możliwości są następujące:

Wielkości pośrednie łatwo sobie wyobrazić: 2 tagi po 9 punktów każdy, 3 tagi po 8 punktów każdy, itd. Gdy wartość pojedyńczego tagu jest wyznaczona Folksr przystępuje do zliczania pasujących tagów. Wartość każdej etykiety zostanie pomnożona przez liczbę tagów zgodnych z tagami na blogu gospodarza, wg wzoru:

wynik = (11 - liczba tagów) × liczba podobnych tagów

Wracając do wcześniejszych przykładów, wyliczmy punktację dla każdego z nich:

Zgodnie z przeczuciem, wpis nr 2 został oceniony niżej, natomiast nagrodzona została celność tagów we wpisie nr 1.

Punktacja na max

Skoro wiemy już, że Folksr nagradza za ilość przekładającą się na jakość, to ile punktów można osiągnąć maksymalnie? Szybki rachunek w arkuszu kalkulacyjnym pokazuje, że najwyższa liczba punktów możliwych do osiągnięcia to 30:

Liczba trafień 12345678910
Wartość taga 10987654321
Wynik 10182428303028241810
Wykres

Wartość 30-tu punktów można osiągnąć publikując 5 lub 6 tagów pod warunkiem, że wszystkie z nich są zbieżne z tagami na blogu gospodarza. Całkiem przyzwoite wyniki uzyskuje się również dla 4 lub 7-miu tagów, co może być dość dobrą strategią biorąc pod uwagę trudność utrafienia wszystkich pięciu lub sześciu tagów (twórcy totolotka też potrafią liczyć ;-)

Kalkulator punktacji

Poniżej zamieszczam szybki kalkulator punktacji napisany w JavaScripcie. Oczywiście nie ma sensu brać go na poważnie – w końcu nie o to chodzi w blogowaniu; niech posłuży tylko jako ilustracja zastosowanego w Folkserze algorytmu i miernik jego jakości.

Liczba tagów: × Liczba trafionych: = 21

Digg del.icio.us StumbleUpon Wykop Reddit Folksr

permalink | trackback | rss

 
 
Breffa

Sam to tak wymysliles? Wielki szacun dla Ciebie :)
PS. Tak, dobrze odmieniasz :) Jako jeden z nielicznych ;)

stronger

Breffa, miałem kilka podejść do algorytmu. Większość z nich była skomplikowana i dawała się oszukać. Niektóre budowane z uwzględnieniem punktacji wcześniejszych wpisów były na tyle niestabilne, że ze zdziwieniem zauważyłem, że inflacja może występować nie tylko w finansach. Tylko algorytmy liniowe bez zapisu historycznego działały w miarę wiarygodnie, więc ostatecznie wybrałem ten najprostszy.

Airborn

Najprostsze rozwiązania kolejny raz okazują się najskuteczniejsze...

rozie

Dzięki za wyjaśnienie algorytmu. Nie jest zły, choć pewne wnioski są oczywiste. :-) Biorąc pod uwagę analizę optymalnej ilości tagów trzeba uwzględniać (średnią? minimalną?) ilość tagów w wpisach, z którymi chcemy mieć zbieżność.

Chociaż i tak wydaje mi się, że jeśli nie ma gwarancji symetrii wpisów (teraz jeśli wpis A ma 3 tagi, wpis B 8 tagów i zbieżne są 2, to wartość W(A->B)=(11-3)*2=16, a W(B->A)=(11-8)*2=6) to istnieje możliwość abuse. Tak naprawdę w tej chwili im więcej mamy tagów, tym większa szansa, że do kogoś podlinkujemy, a ten ktoś do nas nie, prawda?

stronger

rozie, prawda i nieprawda. Musisz znaleźć złoty środek, bo zwiększając liczbę tagów zwiększasz swoje szanse na zakwalifikowanie się do cudzego widgetu, ale jednocześnie obniżasz szanse na wysoką pozycję. W efekcie możesz w ogóle wypaść z widgetu ze względu na niewystarczającą punktację.

Your turn:

nick:
and?:
www (if any):
Wpisz kod:code
 
 
Folksr: algorytm szukania podobnych wpisów folksr algorytm podobne wpisy