热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

1.简单的内容属性匹配

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

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

商品编号:62216878

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

分类:连衣裙

商品编号:895665218

商品毛重:500.00g

商品产地:中国大陆

货号:LZ1869986

腰型:高腰

廓形:A型

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

图案:碎花,其它

领型:圆领

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

组合形式:两件套

面料:其它

材质:聚酯纤维

衣门襟:套头

适用年龄:25-29周岁

袖型:常规袖

裙长:中长裙

裙型:A字裙

袖长:短袖

上市时间:2019年夏季

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

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

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

2.复杂一点的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大关键词去搜索就可以了。下面来讲一下提取关键词的算法。

3.关键词提取算法

提取关键词也有很多种实现方式,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 = "算法可大致分为基本算法、数据结构的算法、数论算法、计算几何的算法、图的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法、厄米变形模型、随机森林算法。\n" +

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

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

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

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

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)综合排序

其实在电商或者其他网站都会有一个综合排序、相关度排序、价格排序等等。综合排序是最复杂的,融合了很多种算法和因素进去,比如销量、新品、和用户画像个性化相关的因素等,算出一个总的打分。而用户画像本身可以单独成为一个子系统,下面我们就讲一下。

知乎视频​www.zhihu.comzhihu-card-default.svg

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

《分布式机器学习实战》本书对应清华大学出版社京东自营链接地址:

Python编程零基础小白快速入门必听课



推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了通过mysql命令查看mysql的安装路径的方法,提供了相应的sql语句,并希望对读者有参考价值。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 0x00端口渗透端口扫描端口的指纹信息(版本信息)端口所对应运行的服务常见的默认端口号.尝试弱口令端口爆破hydra端口弱口令NTScanHs ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有