推荐系统技术内幕(二):算法篇之物品画像

做好推荐的第一步,是认识待推荐的物品。例如,如果不知道一篇文章是介绍机械键盘的,也就不可能把它推荐机械键盘的爱好者们。对物品认识的角度,准确性,覆盖面,等等,都影响着后续推荐的质量。

文本是物品信息的最常见的存在形式,文本以很多种格式存储和传输,并且常常是以自然语言形式组织的,但是在推荐系统无法理解自然语言信息,必须是结构化处理。文本挖掘算法承担着转化的任务。

本文将介绍文本类挖掘算法。

信息提取

互联网中文本信息最常见的存在形式是网页,基本都是HTML格式。这里就涉及信息提取类算法。最常见的就是网页信息提取算法,这类算法的目标是将网页中物品的关键信息提取出来。搜索系统和推荐系统,为了提高搜索和推荐的效果,一般会基于这些提取后的关键信息去检索和推荐,而不会基于整个网页的信息。

对于网页信息提取算法,困难点在于:

  • 网页中不仅仅包含目标物品的信息,还包含很多其他信息,比如导航、外链,甚至是广告,我们不能用整个网页的信息去做推荐。
  • 由于HTML语法的灵活性,网页的没有固定的格式,比如对于新浪新闻和腾讯新闻,同样都是新闻资讯类网页,HTML的格式差别很大。
  • 聚合的目标网站数量一般很大,比如有数据显示,GooglNews聚合了5万多家网站的新闻资讯。

早期的信息提取算法都是基于规则的,基本思路是对每个网站维护一套提取规则,可以是XPath规则,也可以是CSS选择器规则。这类算法的缺点是当网站数量边多的时候,规则的维护成本比较大,因为网站格式可能会改版,这些规则对html格式的微小改变是很敏感的,原来的规则就会时效。

后来出现了一些基于机器学习的自动抽取算法。基本思路是人工标记出网页中的目标信息,作为训练数据,利用机器学习算法自动的学习目标信息的特征,然后用训练的模型自动提取目标信息。

我们知道,机器学习类算法有两方面重要的工作,一个是模型方面的的工作, 另一个是特征工程方面的工作。先说模型,常用的信息提取模型有基于分类是,主要用SVM,GBDT;也有基于序列标注的,主要用到隐马尔科夫(HMM)和条件随机场(CRF).

我们知道特征工程和模型的是互补的,所有的问题都可以在特征和模型两侧找到对称的解决方案。网页信息提取算法早期用到的特征,主要是html标签和文本统计类特征,比如标签名字,标签属性值,标签内文本数量,父标签是什么,子标签数量等等。由于html语法的灵活性,不难想象这些特征的泛化效果不会很好。例如,没有理由说新闻的正文一定用<p>标签,也可以用<div>标签,其他任何能达到显示效果的标签,都可以。

对特征的优化,后来引入了视觉特征,灵感来自于这样一个现象:不论你打开哪家新闻网站的网页,你都会一眼就看出哪是正文,哪是标题,哪是时间,我们在做信息定位的时候,其实用的就是视觉信息,而不会管背后的html格式如何。因为对于一类网页,都会遵照一类是视觉设计样式,所以在打开一个外文网站,我们可以在不认识具体内容的情况下,定位关键信息的位置。

所谓视觉特征,就是网页经过渲染之后,用户直接可以观察到的特征,例如标签的坐标位置,大小,文本颜色,字体大小,背景等等。可以想象出这类特征的效果会非常好。

关于网页信息提取算法更详细的介绍,可以参考我之前的一篇博文:信息提取(Information Extraction),这里就不展开介绍了。

分词、词性标注、命名实体识别

分词是自然语言处理最基础的任务。自然语言的基本元素是字符,分词就是将连续的字符序列按照一定的规范重新组合成词序列的过程。分词是其他文本挖掘任务的前置任务。

词性标注就是为分词结果中的每个单词标注一个正确的词性,比如名词,动词,形容词,等等。与分词一样,也是自然语言处理基础任务之一。

分词结果中有一类词表示的是专用词,包括人物,事件,地点,书名,影视剧名,等等,这类词表示具有特殊意义的实体,称为命名实体。命名实体识别就是找出分词结果中的命名实体。

命名实体识别算法与分词算法,词性标注算法同属NLP领域的序列标注问题。常用的传统算法是隐马尔可夫模型(HMM)和条件随机场(CRF),目前也有些深度学习类的算法,例如基于循环神经网络的算法。有需要可以参考相关的资料,本文就不再展开介绍了。

关键词提取

关键词是文本的重要特征,也是很多其他挖掘算法的基础数据。

TF-IDF

TF-IDF是常见的关键词提取算法之一,是一种基于统计的算法,广泛的用在搜索和推荐系统中,其文本关键词提取的思想是:一个词在一篇文本中出现的次数越多,越能代表文本的内容,也就越重要;另一方面,一个次在所有文本中出现的次数越多,越不能代表文本的内容,也就是月不重要。

综合考虑两个指标,得到每个词   t   \space t\space 对于一篇文本   i   \space i\space 的权重:

w ( t , i ) = T F ( t , i ) l o g N D F ( x ) + 1 w(t,i)=TF(t,i) \cdot log\frac{N}{DF(x) + 1}

得到权重之后,再按照一定的方法取权重最高的若干个词作为文本的关键词。

TextRank

TextRank算法基于PageRank算法的思想,通过对组成文本的词建立图模型,利用投票机制,迭代计算每个词的得分,直到分数收敛为止。

每一次迭代得分计算方式为:

w ( i ) = ( 1 d ) + d j I N ( i ) 1 O U T ( i ) w ( j ) w(i)=(1-d)+d\cdot\sum_{j\in IN(i)}\frac{1}{|OUT(i)|}\cdot w(j)

其中 d d 称为阻尼系数,一般取0.85。IN(i)表示指向改词的单词集合,OUT(i)表示i指向的单词集合。

分类

人类算法首先需要一个分类体系,其次是人工标记好类别的训练数据。

好的分类体系需要较强的领域知识,所以分类体系的梳理一般由领域专家来完成。分类体系一般是分层的,有大类,大类中有小类别。

有了分类体系之后,分类算法将文本划分为类别系统中的类别之一。分类算法一般属于监督类机器学习算法。常用的分类算法有SVM。

类别是文本的重要特征,是人类认识信息的一个重要纬度,分类信息是各类产品的重要功能之一,例如电商产品都会提供一个商品分类展示和检索功能,资讯类产品各类资讯都有对应的频道。

并且,在个性化推荐的冷启动时期,我们对新用户兴趣了解甚少,类别信息常常被推荐系统用来探索用户的兴趣。

聚类

聚类不需要领域专家梳理的分类体系。聚类与分类是差别是,属于无监督类机器学习算法,根据文本间的相似度聚类成若干个类簇。类簇号也是重要的一类文本特征。也有之前的文章专门介绍过聚类算法,这里就不展开了。

主题模型

主题模型算法自动学习出文本的主题分布,以LDA算法为代表。LDA也不需要我们指定主题,通常值只需要指定主题的数量。

嵌入(Embedding)

嵌入(Embedding)是一个稠密向量,文本嵌入是文本嵌入到潜因子空间的坐标。潜因子空间的纬度一般人为指定,以效果为导向。

前面的几类算法的输出,除了聚类,基本上是人类可以理解含义是特征,例如关键词,主题,类别,等等。而嵌入各纬度的含义,确实人类不可理解的,目标也不是为了人类理解,所以称为潜因子,嵌入的空间称为潜因子空间。

得到信息在潜因子空间的嵌入表达后,可以通过向量计算来计算信息之间的相似度,也可以作为其他算法的输入特征。

嵌入的思想来自于word2vec算法。word2vec算法用神经网络学习到每个词在潜因子空间的嵌入表达。其思想被发扬之后,出现了很多text2vec,item2vec,user2vec,doct2vec等等算法。

发布了52 篇原创文章 · 获赞 105 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/gaofeipaopaotang/article/details/89737088
今日推荐