Как мога да внедря двигател за препоръки?

Моля, бъдете търпеливи с писането ми, тъй като английският ми не е на ниво.

Като програмист искам да науча за алгоритъма или интелигентността за машинно обучение, които са внедрени под системи за препоръки или свързани системи. Например, най-очевидният пример би бил от Amazon. Имат наистина добра система за препоръки. Те разбират: ако харесвате това, може да харесате и онова или нещо друго като: Какъв процент от хората харесват това и < em>това заедно.

Разбира се, знам, че Amazon е голям уебсайт и те са инвестирали много мозък и пари в тези системи. Но в самото основно ядро, как можем да приложим нещо подобно в нашата база данни? Как можем да определим как един обект се отнася към друг? Как можем да изградим статистическа единица, която се справя с подобни неща?

Ще се радвам, ако някой може да посочи някои алгоритми. Или по принцип посочете някои добри директни препратки/книги, от които всички можем да се учим. Благодаря на всички ви!


person HTa    schedule 20.11.2010    source източник
comment
Патент на Amazon описва подхода им в дълбочина.   -  person arao6    schedule 02.05.2015


Отговори (4)


Има 2 различни типа двигатели за препоръки.

Най-простият е базиран на артикул, т.е. „клиентите, които са закупили продукт А, са закупили и продукт Б“. Това е лесно за изпълнение. Съхранявайте разредена симетрична матрица nxn (където n е броят на елементите). Всеки елемент (m[a][b]) е броят пъти, когато някой е купил артикул „a” заедно с артикул „b”.

Другият е базиран на потребителя. Тоест "хора като теб често харесват такива неща". Възможно решение на този проблем е клъстерирането на k-означава. т.е. конструирайте набор от клъстери, където потребители с подобен вкус са поставени в един и същи клъстер и правят предложения въз основа на потребителите в същия клъстер.

По-добро решение, но още по-сложно, е техника, наречена Ограничени машини на Болцман. Има въведение към тях тук

person dan_waterworth    schedule 20.11.2010
comment
@HTa: Разликата между приликата на клиента и приликата на продукта, която @dan_waterworth прави, е най-фундаменталната разделителна линия сред стратегиите за двигатели за препоръки. Въпреки това ограничените boltzmann машини и клъстерирането на k-средства трябва да се разглеждат като заместители за всяка техника за машинно обучение, която искате да използвате. Сходството на клиента или сходството на продукта може да се направи с матрица и може да се направи с ИИ. / статистика / M.L. Можете да прочетете за двете в Wikipedia. - person isomorphismes; 09.03.2011

Първият опит може да изглежда така:

//First Calculate how often any product pair was bought together
//The time/memory should be about Sum over all Customers of Customer.BoughtProducts^2
Dictionary<Pair<ProductID,ProductID>> boughtTogether=new Dictionary<Pair<ProductID,ProductID>>();
foreach(Customer in Customers)
{
    foreach(product1 in Customer.BoughtProducts)
        foreach(product2 in Customer.BoughtProducts)
            {
                int counter=boughtTogether[Pair(product1,product2)] or 0 if missing;
                counter++;
                boughtTogether[Pair(product1,product2)]=counter;
            }
}

boughtTogether.GroupBy(entry.Key.First).Select(group.OrderByDescending(entry=>entry.Value).Take(10).Select(new{key.Second as ProductID,Value as Count}));

Първо изчислявам колко често всеки чифт продукти е купуван заедно, след което ги групирам по продукта и избирам 20-те най-добри други продукта, купени с него. Резултатът трябва да бъде поставен в някакъв вид речник, кодиран от ID на продукта.

Това може да стане твърде бавно или да струва твърде много памет за големи бази данни.

person CodesInChaos    schedule 20.11.2010

Мисля, че говорите за системи с бази знания. Не помня езика за програмиране (може би LISP), но има реализации. Освен това погледнете OWL.

person griZZZly8    schedule 20.11.2010

Има и prediction.io, ако търсите решение с отворен код или SaaS решения като mag3llan.com.

person dolyth    schedule 03.09.2015