热门标签 | 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编程零基础小白快速入门必听课



推荐阅读
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • 高清图解:神经网络、机器学习、数据科学一网打尽
    |导|读BY:AI-Beetle完全图解人工智能、NLP、机器学习、深度学习、大数据!这份备忘单涵盖了上述领域几乎全部的知识点,并使用信息图、脑图等多种可视化方式呈现,设计精美,实 ... [详细]
  • AI 学习路线:从Python开始机器学习
    AI 学习路线:从Python开始机器学习 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 如何在jieba分词中加自定义词典_常见中文分词包比较
    1jiebajieba.cut方法接受三个输入参数:需要分词的字符串;cut_all参数用来控制是否采用全模式;HMM参数用来控制是否使用HMM模型ji ... [详细]
  •   作为一种编程语言,Python比C#,Java,C和C++更具吸引力。它被称为“胶水语言”,它也被喜欢它的程序员誉为“美丽”的编程语言。从云计算,客户端到物联网终端,Pytho ... [详细]
  • Elasticsearch简单使用系列安装
    2019独角兽企业重金招聘Python工程师标准1.elasticsearch支持的操作系统和JVM版本https:www.elastic.cosupportmatrix2. ... [详细]
  • 微服务应用性能如何?APM监控工具来告诉你
    当微服务系统越来越庞大,各个服务间的调用关系也变得越来越复杂,需要一个工具来帮忙理清请求调用的服务链路。之前使用的是Sleuth+Zipkin的解决方案,最近发现应 ... [详细]
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社区 版权所有