推荐系统(六)

这里讨论一下 rule-based recommendation system。由于不是这块领域的,只能看看而已。从某个观点上来看,基于这种“知识库”的做法可以当做 business rule 的一种策略应用到很多推荐问题上去,其优点是消除掉一些可能导致用户对推荐系统产生反感的情况。另外对有些问题(candidate 数目相对较少)通过这种方式过滤后获得的集合对用户来说就是一个比较 clean 能够处理的集合了。像某些推荐,如买房、租房,用户可能有一些明确的约束条件(领域相关的,如地理位置,楼层,户型),这种情况下使用该类型的推荐系统比较合适。

问题描述包括下面五个要素:

  • user 属性 V_C,这一般是 user 侧的一些属性,比如 income 可能会决定用户接受的风险,消费的上限等;
  • item 属性 V_\text{prod},这一般是某些 item 自己的属性,比如某些 item 需要更多的钱,有的可能风险较高等等;
  • C_R 是 user 提出的 constraints,这一般是 user 侧某些属性的带来的约束,比如根据收入选择的价格范围;
  • C_F 是根据用户属性获得的一些规则性的约束,这些往往是一些显著的 business rule,比如未满 18 周岁某些内容就不能够提供给用户,信用程度不够的用户就不应该展示一些需要高信用购买的商品,等等;
  • C_\text{prod} 是 item 侧的约束,也是 item 属性侧的一组约束;

我们列举出来 user/item 侧的属性集合之后,可以要求用户在某些情况下给出自己的约束或者对商品的约束,而根据我们的 business rule 制定合理的 C_F。剩下的就是将这些 rules 翻译成为一个合理的 SQL query 穿递给数据库 retrieve 符合要求的 item。这个过程需要的几个技术是:

  • 推理机,能够从一些已知属性和 rule 推理出一些 constraints;
  • 从 rules 组合产生 query 的机制,这往往是用 boolean algebra 里面的各种范式搞定的。

使用这套方法的一个好处是很容易与用户进行交互,提示用户有些什么可能的 contraints 能够帮助他们 refine 他们的想法,像矩阵分解这种策略就比较难以向用户解释推荐的过程。实现的这种系统面临的主要问题是如何限制获得的 item 个数,如果太多,就可能需要 ranking,或者要求 refine;如果太少甚至没有,一般的想法就是对某些可能的约束进行松弛。

其实使用逻辑这种策略是一个可以“概率化”的东西,比较有名的工作就是 Markov logic nets(一些高校提供了一些实现,如 UW 的 alchemy 和 UWisc 的 tuffy,另有一个相关的 libDAI),使用这种 probabilistic graphical model,我们可以解决一些 rule-based 系统的问题:

  • 一方面通过 probabilistic model 进行 ranking 而不是 binary filtering 就会让我们给出 item 的个数有比较大的灵活度;
  • 通过 structure learning 我们可能能获得 domain knowledge 里面的 rules,而不是完全依赖于人对 domain 的理解;

这方面的东西感觉理解的很粗浅,不妨以下面几个 project 来入门:

——————
And he took butter, and milk, and the calf which he had dressed, and set it before them; and he stood by them under the tree, and they did eat.

Advertisements
推荐系统(六)

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s