我们懂得了原理,知道了实际推荐系统需要考虑哪些元素之后。正当你摩拳擦掌之际,如果发现要先从挖地基开始,你整个人可能是崩溃的。
轮子不要重复造
但是事实上你没必要这样做也不应该这样做。大厂研发力量雄厚,业务场景复杂,数据量大,自己从挖地基开始研发自己的推荐系统则是非常常见的,然而中小厂职工们则要避免重复造轮子。这是因为下面的原因。
中小企业,或者刚刚起步的推荐系统,要达成的效果往往是基准线,通用的和开源的已经能够满足;
开源的轮子有社区贡献,经过若干年的检验后,大概率上已经好于你自己从零开始写一个同样功能的轮子;
对于没有那么多研发力量的厂来说,时间还是第一位的,先做出来,这是第一要义。
既然要避免重复造轮子,就要知道有哪些轮子。
有别于介绍一个笼统而大全的“推荐系统”轮子,我更倾向于把粒度和焦点再缩小一下,介于最底层的编程语言 API 和大而全的”推荐系统”之间,本文按照本专栏的目录给你梳理一遍各个模块可以用到的开源工具。
这里顺带提一下,选择开源项目时要优先选择自己熟悉的编程语言、还要选有大公司背书的,毕竟基础技术过硬且容易形成社区、除此之外要考虑在实际项目中成功实施过的公司、最后还要有活跃的社区氛围。
内容分析
基于内容的推荐,主要工作集中在处理文本,或者把数据视为文本去处理。文本分析相关的工作就是将非结构化的文本转换为结构化。主要的工作就是三类。
可以做这三类工作的开源工具有下面的几种。
由于通常我们遇到的数据量还没有那么大,并且分布式维护本身需要专业的人和精力,所以请慎重选择分布式的,将单机发挥到极致后,遇到瓶颈再考虑分布式。
这其中 FastText 的词嵌入和 Word2vec 的词嵌入是一样的,但 FastText 还提供分类功能,这个分类非常有优势,效果几乎等同于 CNN,但效率却和线性模型一样,在实际项目中久经考验。LightLDA 和 DMWE 都是微软开源的机器学习工具包。