人工智能推荐算法系统实战之contentbase文本挖掘算法策略

前言

<font color=#999AAA >
ContentBase指的是以内容、文本为基础的挖掘算法,有简单的基于内容属性的匹配,也有复杂自然语言处理算法,下面分别讲述一下。

一、简单的内容属性匹配

比如我们按上面协同过滤的思路计算的看了又看推荐列表,根据一个商品来推荐相关或相似的商品,我们也可以用简单的内容属性匹配的方式。这里提出一种简单的实现思路:

把商品信息表都存到Mysql表product里,字段有这么几个:

商品编号:62216878

商品名称:秋季女装连衣裙2019新款

分类:连衣裙

商品编号:895665218

商品毛重:500.00g

商品产地:中国大陆

货号:LZ1869986

腰型:高腰

廓形:A型

风格:优雅,性感,韩版,百搭,通勤

图案:碎花,其它

领型:圆领

流行元素:立体剪裁,印花

组合形式:两件套

面料:其它

材质:聚酯纤维

衣门襟:套头

适用年龄:25-29周岁

袖型:常规袖

裙长:中长裙

裙型:A字裙

袖长:短袖

上市时间:2019年夏季

我们找商品的相似商品的时候,写个简单的SQL语句就可以了。代码如下所示:

select 商品编号 from product where 腰型='高腰' and 领型='圆领' and 材质='聚酯纤维' and 分类='连衣裙' limit 36;

这就是最简单的根据内容属性的硬性匹配,也属于ContentBase的范畴,只是没用上高大上的算法而已。

二、复杂一点的ContentBase算法:基于全文搜索引擎

比如我们对商品名称做中文分词,分词后拆分成几个词,在上面的SQL语句上加上模糊条件,代码如下所示:

SELECT 商品编号 FROM product WHERE 腰型='高腰' AND 领型='圆领' AND 材质='聚酯纤维' AND 分类='连衣裙' AND (商品名称 LIKE '%秋季%' OR 商品名称 LIKE '%女装%' OR 商品名称 LIKE '%连衣裙%' OR商品名称 LIKE '%新款%') LIMIT 36;

加上这些条件会比之前会更精准一些,但是商品名称模糊查询命中的那些商品的顺序是没有规则的,是随机的。应该是商品名称里包含秋季、女装、连衣裙、新款这几个词最多的那些商品排在前面,优先推荐才对。这时候用Mysql无法实现,这种情况就可以使用搜索引擎来解决了。

我们商品信息表的数据都存到Solr或ES的搜索索引里,然后拿上面例子中的商品名称作为一个Query大关键词直接从索引里面做模糊搜索就可以了。搜索引擎会算一个打分,分词后命中多的文档会排在前面去。

这是基于简单的搜索场景,比用Mysql强大了很多。那么现在有一个问题,商品名称比较短,作为一个关键词去搜索是可以的,但是如果是一篇阅读类的文章,去找内容相似的文章话,就不可能把整个文章的内容作为关键词去搜索,太长了。文章内容边几千字很正常。这个时候就需要对文章的内容做核心的有代表性的关键词提取,提取几个最重要关键词以空格拼接起来,再去当一个Query大关键词去搜索就可以了。下面来讲一下提取关键词的算法。

三、关键词提取算法

提取关键词也有很多种实现方式,TextRank、LDA聚类、KMeans聚类等都可以。我们根据实际情况选择一种方式就可以。

1)基于TextRank算法提取文章关键词

基于TextRank算法提取文章关键词走Solr搜索引擎计算文章-to-文章相似推荐列表D,TextRank算法基于PageRank。

将原文本拆分为句子,在每个句子中过滤掉停用词(可选),并只保留指定词性的单词(可选)。由此可以得到句子的集合和单词的集合。

每个单词作为pagerank中的一个节点。设定窗口大小为k,假设一个句子依次由下面的单词组成:

w1, w2, w3, w4, w5, ..., wn

w1, w2, ..., wk、w2, w3, ...,wk+1、w3, w4, ...,wk+2等都是一个窗口。在一个窗口中的任两个单词对应的节点之间存在一个无向无权的边。

基于上面构成图,可以计算出每个单词节点的重要性。最重要的若干单词可以作为关键词。

TextRank的代码实现给大家推荐一个开源分词工具,就是HanLP。HanLP是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点;提供词法分析(中文分词、词性标注、命名实体识别)、句法分析、文本分类和情感分析等功能。HanLP已经被广泛用于Lucene、Solr、ElasticSearch、Hadoop、Android、Resin等平台,有大量开源作者开发各种插件与拓展,并且被包装或移植到Python、C#、R、JavaScript等语言上去。

HanLP已经实现了基于TextRank的关键词提取算法,效果非常不错。我们直接调用它的API就行了。代码如下所示:

String content = "程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员和项目经理四大类。";

List<String> keywordList = HanLP.extractKeyword(content, 5);

System.out.println(keywordList);

关键词提取和文本自动摘要算法一样,HanLP也提供了相应的实现,代码如下所示:

String document = "算法可大致分为基本算法、数据结构的算法、数论算法、计算几何的算法、图的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法、厄米变形模型、随机森林算法。\n" +

"算法可以宽泛的分为三类,\n" +

"一,有限的确定性算法,这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。\n" +

"二,有限的非确定算法,这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。\n" +

"三,无限的算法,是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。";

List<String> sentenceList = HanLP.extractSummary(document, 3);

System.out.println(sentenceList);

2)基于LDA潜在狄利克雷分配模型算法提取文章关键词

基于LDA潜在狄利克雷分配模型算法提取文章关键词走Solr搜索引擎计算文章-to-文章相似推荐列表。

LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。

LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。

3)k-means聚类提取关键词

k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

提取关键词后,后面无非还是走的相关度搜索。但有些场景简单的相关度搜索不满足我们的需求,我们需要更复杂的搜索算法。这个时候我们就需要自定义排序函数了。Solr和ES都支持自定排序插件开发

4)自定义排序函数

不管是标题和内容的相似,更多的是文本的比较,常见的有余弦相似度、字符串编辑距离等,设计到语义的还有语义相似度,当然实际场景比如电商的商品还会考虑到商品销量、上架时间等等多种因素,这种情况是自定义的综合排序。

(1)余弦相似度计算文章相似推荐列表

余弦相似度,又称为余弦相似性。计算文本相似度,通过计算两个向量的夹角余弦值来评估它们的相似度。

将向量根据坐标值,绘制到向量空间中。如最常见的二维空间。

求得它们的夹角,并得出夹角对应的余弦值,此余弦值就可以用来表征,这两个向量的相似性。夹角越小,余弦值越接近于1,它们的方向更加吻合,则越相似。

(2)字符串编辑距离算法计算文章相似推荐列表

编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

(3)语义相似度

词语相似度计算在自然语言处理、智能检索、文本聚类、文本分类、自动应答、词义排歧和机器翻译等领域都有广泛的应用,它是自然语言的基础研究课题,正在被越来越多的研究人员所关注。

我们使用的词语相似度算法是基于同义词词林。根据同义词词林的编排及语义特点计算两个词语之间的相似度。

同义词词林按照树状的层次结构把所有收录的词条组织到一起,把词汇分成大、中、小3类,大类有12个,中类有97个,小类有1400个。每个小类里都有很多的词,这些词又根据词义的远近和相关性分成了若干个词群(段落)。每个段落中的词语又进一步分成了若干个行,同一行的词语要么词义相同(有的词义十分接近),要么词义有很强的相关性。例如, 大豆!、 毛豆!和 黄豆!在同一行; 西红柿!和 番茄!在同一行; 大家!、 大伙儿!、 大家伙儿!在同一行。另外, 将官!、 校官!、 尉官!在同一行, 雇农!、 贫农!、 下中农!、 中农!、 上中农!、 富农!在同一行, 外商!、 官商!、 坐商!、 私商!也在同一行,这些词不同义,但很相关。

同义词词林词典分类采用层级体系,具备5层结构,随着级别的递增,词义刻画越来越细,到了第5层,每个分类里词语数量已经不大,很多只有一个词语,已经不可再分,可以称为原子词群、原子类或原子节点。不同级别的分类结果可以为自然语言处理提供不同的服务,例如第4层的分类和第5层 的分类在信息检索、文本分类、自动问答等研究领域得到应用。研究证明,对词义进行有效扩展,或对关键词做同义词替换可以明显改善信息检索、文本分类和自动问答系统的性能。

以同义词词林作为语义相似的一个基础,判断两段文本的语义相似度比较简单的方式可以对内容使用TextRank算法提取核心关键词,然后分别计算关键词和关键词的语义相似度,然后按加权平均值法得到总的相似度分值。

5)综合排序

其实在电商或者其他网站都会有一个综合排序、相关度排序、价格排序等等。综合排序是最复杂的,融合了很多种算法和因素进去,比如销量、新品、和用户画像个性化相关的因素等,算出一个总的打分。

总结

除了人工智能推荐算法系统实战之contentbase文本挖掘算法策略

其它深度学习框架也有不错的开源实现,比如MXNet,后面请大家关注充电了么app,课程,微信群,更多内容请看新书《分布式机器学习实战(人工智能科学与技术丛书)》

【新书介绍】
《分布式机器学习实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目

【新书介绍视频】
分布式机器学习实战(人工智能科学与技术丛书)新书【陈敬雷】

视频特色:重点对新书进行介绍,最新前沿技术热点剖析,技术职业规划建议!听完此课你对人工智能领域将有一个崭新的技术视野!职业发展也将有更加清晰的认识!

【精品课程】
《分布式机器学习实战》大数据人工智能AI专家级精品课程

【免费体验视频】:

人工智能百万年薪成长路线/从Python到最新热点技术

从Python编程零基础小白入门到人工智能高级实战系列课

视频特色: 本系列专家级精品课有对应的配套书籍《分布式机器学习实战》,精品课和书籍可以互补式学习,彼此相互补充,大大提高了学习效率。本系列课和书籍是以分布式机器学习为主线,并对其依赖的大数据技术做了详细介绍,之后对目前主流的分布式机器学习框架和算法进行重点讲解,本系列课和书籍侧重实战,最后讲几个工业级的系统实战项目给大家。 课程核心内容有互联网公司大数据和人工智能那些事、大数据算法系统架构、大数据基础、Python编程、Java编程、Scala编程、Docker容器、Mahout分布式机器学习平台、Spark分布式机器学习平台、分布式深度学习框架和神经网络算法、自然语言处理算法、工业级完整系统实战(推荐算法系统实战、人脸识别实战、对话机器人实战)、就业/面试技巧/职业生涯规划/职业晋升指导等内容。

【充电了么公司介绍】

充电了么App是专注上班族职业培训充电学习的在线教育平台。

专注工作职业技能提升和学习,提高工作效率,带来经济效益!今天你充电了么?

充电了么官网
http://www.chongdianleme.com/

充电了么App官网下载地址
https://a.app.qq.com/o/simple.jsp?pkgname=com.charged.app

功能特色如下:

【全行业职位】 - 专注职场上班族职业技能提升

覆盖所有行业和职位,不管你是上班族,高管,还是创业都有你要学习的视频和文章。其中大数据智能AI、区块链、深度学习是互联网一线工业级的实战经验。

除了专业技能学习,还有通用职场技能,比如企业管理、股权激励和设计、职业生涯规划、社交礼仪、沟通技巧、演讲技巧、开会技巧、发邮件技巧、工作压力如何放松、人脉关系等等,全方位提高你的专业水平和整体素质。

【牛人课堂】 - 学习牛人的工作经验

1.智能个性化引擎:

海量视频课程,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习课程。

2.听课全网搜索

输入关键词搜索海量视频课程,应有尽有,总有适合你的课程。

3.听课播放详情

视频播放详情,除了播放当前视频,更有相关视频课程和文章阅读,对某个技能知识点强化,让你轻松成为某个领域的资深专家。

【精品阅读】 - 技能文章兴趣阅读

1.个性化阅读引擎:

千万级文章阅读,覆盖所有行业、所有职位,通过不同行业职位的技能词偏好挖掘分析,智能匹配你目前职位最感兴趣的技能学习文章。

2.阅读全网搜索

输入关键词搜索海量文章阅读,应有尽有,总有你感兴趣的技能学习文章。

【机器人老师】 - 个人提升趣味学习

基于搜索引擎和智能深度学习训练,为您打造更懂你的机器人老师,用自然语言和机器人老师聊天学习,寓教于乐,高效学习,快乐人生。

【精短课程】 - 高效学习知识

海量精短牛人课程,满足你的时间碎片化学习,快速提高某个技能知识点。

猜你喜欢

转载自blog.51cto.com/15012355/2554868