注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
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的范畴,只是没用上高大上的算法而已。
比如我们对商品名称做中文分词,分词后拆分成几个词,在上面的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 keywordList = HanLP.extractKeyword(content, 5);
System.out.println(keywordList);
关键词提取和文本自动摘要算法一样,HanLP也提供了相应的实现,代码如下所示:
String document = “算法可大致分为基本算法、数据结构的算法、数论算法、计算几何的算法、图的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法、厄米变形模型、随机森林算法。
“算法可以宽泛的分为三类,
“一,有限的确定性算法,这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。
“二,有限的非确定算法,这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。
“三,无限的算法,是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。”;
List 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.阅读全网搜索
输入关键词搜索海量文章阅读,应有尽有,总有你感兴趣的技能学习文章。
【机器人老师】 - 个人提升趣味学习
基于搜索引擎和智能深度学习训练,为您打造更懂你的机器人老师,用自然语言和机器人老师聊天学习,寓教于乐,高效学习,快乐人生。