出家如初,成佛有余

基于标签tag实现电子商务推荐系统之思路篇

Posted in Uncategorized by chuanliang on 2009/05/18

    正如在电子商务推荐系统入门基础中所说:电子商务推荐系统可以向客户提供商品信息和建议,模拟销售人员帮助客户完成购买过程,从而使客户避免信息“超载”所带来的麻烦。

    理想情况下,协同过滤的推荐方式是电子商务推荐系统最佳的选择方案,但在项目初期,由于用户消费信息、点击数据、偏好数据等积累尚不完善的情况下,会出现所谓的“稀疏性问题、冷开始问题”现象。因此在项目初期,考虑先采用基于内容过滤(Content-Based filtering ) 的方案以满足对用户购物推荐的目的,等用户数据积累到一定程度后,再采用基于协同过滤( Collaborative filtering )的方案。

    对于基于内容的过滤,最核心的问题其实是内容特征值的提取及内容特征值之间的相关性分析。

1、内容特征值的提取:

    对于一个商品要达到向用户推荐的目的,首要要能够提取出能够表征商品特征的数据,这样才能够根据用户的喜好(实际上用户喜好也需要转化为特征值来进行度量)进行相对应的推荐,可以说提取商品的特征数据是进行Content-Based filtering 的首要条件。

   一般情况下采用分类法、关键字、标签(tag)等方式是对产品特征进行描述。

  • 分类法:

    采用人工手工维护方式,允许将一种产品归属于一个或多个产品分类。这种方案在CMS系统及目前大部分的电子商务系统中采用得较多。

    优点是:实现相对简单且由于分类法层次化结构适合大部分用户逐级浏览的习惯;

    缺点是:分类相对固定,很难适应分类的变化;相对静态的分类只适合产品分类相对粗粒度的划分场景,对于太细粒度的分类,由于分类标准的不一致性导致用户所理解的分类法与商家的分类法标准并不一定相同,因此很容易引起用户的迷惑。

  • 社会化标签:

    标准的Web2.0应用的最典型的应用。社会化标签允许用户对产品资源赋以个性化的tag来表征产品特征,同时用户可以通过共享自己的tags以通过tags的聚合和相关度来实现信息的组织及分类。标签的优点在于其灵活性,避免了因分类法标准不一致所导致的混乱,同时其“社会化”的特性使其适合于Web 2.0应用;缺点也在于其灵活性,因为标签的标准太过随意,同样的产品,用户可以赋予其不同的标签。

  • 关键字:

   从用法来看,关键字其实与标签类似,最大的差异在于社会化属性上。去除标签的社会化属性后,我们可以把标签和关键字等同使用。此处我们考虑的是Content-Based filtering ,因此可以先将关键字与标签混淆使用。

  思考:正如blog可以通过标签来表征一篇blog的特征属性。对于一个产品,我们也可以通过标签tag来描述一个产品的特征属性,这样Content-Based filtering的产品推荐我们就归结为标签间的相关性分析的问题 。

2、内容特征值之间的相关性分析

   要使用标签来实现产品间的相关性分析从而达到相关性推荐的目标,又存在几个方面的核心问题:

  • 怎样处理不同标签权重、标签出现的频率、stop words等问题?
  • 怎样以向量方式来描述标签?
  • 标签的相关性分析采用什么算法?余弦相似性、皮尔逊相关度系数、欧几里得距离、广义Jaccard系数?

    由于Lucene这样的搜索引擎对索引中的不同的关键词的相关度都已经有较好的处理(参考Lucene 的 org.apache.lucene.search.Similarity),因此最简单的方案莫过于直接使用lucene这样的搜索引擎将标签纳入其索引范围,然后让搜索引擎本身的相关度分析帮助实现标签间的相关性分析及聚类分析,只不过搞清楚方案的可行性及原理才是我们的目的所在,这样才能够应用于更多的场合。

    只不过考察org.apache.lucene.search.Similarity代码,会发现其注释已经很完美地回答了我们上述需要解决的几个问题。摘录如下:

Similarity (Lucene 2008-12-20_02-04-42 API)

 

  • 怎样处理不同标签权重、标签出现的频率、stop words等问题?

      答案:采用tf-idf(term frequency/inverse document frequency)

  • 怎样以向量方式来描述标签?

      答案:采用Vector Space Model (VSM) of Information Retrieval

  • 标签的相关性分析采用什么算法?余弦相似性、皮尔逊相关度系数、欧几里得距离、广义Jaccard系数?

      答案:采用 cosine similarity  +Vector Space Model (VSM) of Information Retrieval

     

    实际上对于vector space model ,有三个基本操作步骤:

    • Document Indexing
    • Term Weighting
    • Similarity Coefficients

    这刚好就是我们需要解决的问题所在。

         关于tf-idf(term frequency/inverse document frequency),可以参考Wikipedia数学之美 系列九 — 如何确定网页和查询的相关性 的介绍,这个相对好理解。

        关于Vector Space Model (VSM) of Information Retrieval这一篇文章介绍得挺清楚的:

        在向量空间模型中,文本泛指各种机器可读的记录。用D(Document)表示,特征项(Term,用t表示)是指出现在文档D中且能够代表该文档内容的基本语言单位,主要是由词或者短语构成,文本可以用特征项集表示为D(T1,T2,…,Tn),其中Tk是特征项,1<=k<=N。例如一篇文档中有a、b、c、d四个特征项,那么这篇文档就可以表示为D(a,b,c,d)。对含有n个特征项的文本而言,通常会给每个特征项赋予一定的权重表示其重要程度。即D=D(T1,W1;T2,W2;…,Tn,Wn),简记为D=D(W1,W2,…,Wn),我们把它叫做文本D的向量表示。其中Wk是 Tk的权重,1<=k<=N。在上面那个例子中,假设a、b、c、d的权重分别为30,20,20,10,那么该文本的向量表示为 D(30,20,20,10)。在向量空间模型中,两个文本D1和D2之间的内容相关度Sim(D1,D2)常用向量之间夹角的余弦值表示,公式为:

    其中,W1k、W2k分别表示文本D1和D2第K个特征项的权值,1<=k<=N。

     

       暂且整理实现思路到此,等把例子弄完成后,再对照代码解释具体的实现细节。

     

  • 发表评论

    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

    %d 博主赞过: