自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 收藏
  • 关注

原创 强化学习基础理论

知识结构定义强化学习(Reinforcement learning),与监督学习,无监督学习是类似的,是一种统称的学习方式。它主要利用智能体与环境进行交互,从而学习到能获得良好结果的策略。与有监督学习不同,强化学习的动作并没有明确的标注信息,只有来自环境的反馈的奖励信息,它通常具有一定的滞后性,用于反映动作的“好与坏”。参考资料:https://zh.wikipedia.org/wiki/%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0基础理论基本概念4

2021-10-16 15:44:15 2629

原创 Tensorflow2.0基础

1.数据类型TensorFlow 中的基本数据类型,包含数值类型、字符串类型和布尔类型。1.1数值类型标量(Scalar) ,单个的实数,如 1.2, 3.4 等,维度(Dimension)数为 0,shape 为[]。;# python 语言方式创建标量a = 1.2 # TF 方式创建标量aa = tf.constant(1.2)type(a), type(aa), tf.is_tensor(aa)(float, tensorflow.python.framework.ops.E

2021-10-16 15:39:17 347

原创 Pytorch强化学习算法实现

Policy Gradient算法实现Policy Gradient算法的思想在另一篇博客中有介绍了,下面是算法的具体实现。Policy网络两个线性层,中间使用Relu激活函数连接,最后连接softmax输出每个动作的概率。class PolicyNet(nn.Module): def __init__(self,n_states_num,n_actions_num,hidden_size): super(PolicyNet, self).__init__()

2021-10-16 15:37:55 1874 1

原创 创新实训——工作总结

博客内容工作内容博客连接项目分工讨论及环境搭建初步讨论,进行小组分工 &&开发环境搭建和相关开发工具的介绍负责模块的初步设计数据库设计&&推荐系统设计&&数据清洗流程设计博客文章的数据清洗TextRank抽取式摘要生成&&尝试基于seq2seq的生产式摘要(效果很差)&&提取文章的纯文本内容&&文章标签与分类的提取推荐系统实现之基于流行度和新鲜度的推荐(热门榜单)

2020-07-01 19:46:08 527

原创 创新实训(49)——后端sql优化,提升sql运行速度

前言在使用网页时,发现有的板块刷新比较慢,体验很不好,之前也优化过多次代码的逻辑以及使用spring cache提高响应速度,今天从sql的角度优化一下代码的执行速度。select * from 的问题项目中有很多操作是获取文章列表,而之前获取文章列表时常常使用select * from article 后面接着代码逻辑,但是文章列表显示的内容有限,根本不可能显示所以内容,所以优化了相关方面的sql,将select * from article改成了查询具体的字段,这样不仅提升了sql的效率,还提升了

2020-06-29 00:08:24 318

原创 创新实训(48)——后端项目bug修复

前言使用做好的网页,修复一下出现的bug使用spring cache +redis时出现的问题他成功从缓存中读取到了数据,但是好像时缺少含有全部参数的构造函数的问题,缺少参数的构造函数在这个上面没有用处,所以就在每一个类上加上了lombok全参数的构造函数的注解@AllArgsConstructor并且害怕序列化出错,加上了implements Serializable。计算热榜评分时出错发现redis报错ERR value is not a valid float。说明存入的类型不是fl

2020-06-28 23:52:36 325

原创 创新实训(47)——在后端项目中使用java API调用ElasticSearch的Suggester实现搜索提示

前言现在已经建好了相应的索引,现在要使用相应的api实现搜索提示功能。引入依赖<dependency> <groupId>org.codelibs.fess</groupId> <artifactId>fess-suggest</artifactId> <version>5.6.0</version> </dependency>使用CompletionSuggest

2020-06-27 23:30:00 772 2

原创 创新实训(46)——基于ElasticSearch的Completion Suggest实现搜索提示

前言现在来重新建立索引,然后实现搜索提示。建立索引并重新抽取数据PUT /articles2{ "mappings" : { "doc" : { "properties" : { "content" : { "type" : "text", "fields" : { "suggest" : { "type" : "completion",

2020-06-27 21:47:03 447

原创 创新实训(45)——使用ElasticSearch的Suggest实现搜索提示的学习

前言昨天实现了句子的搜索,并且简单的更换了分词器,优化一下查询的结果,今天准备学习一下搜索提示的实现,并且设计一下如何使用java api实现搜索提示。Suggest的学习在查看官方文档之后,发现ElasticSearch的Suggest总共有四种类型文档链接:http://doc.codingdict.com/elasticsearch/123/Term SuggesterPhrase SuggesterCompletion SuggesterContext Suggester然后

2020-06-27 20:59:51 1168

原创 创新实训(44)——相关接口的补充

前言完善了一个与管理员有关的接口以及用户画像的接口。管理员接口:用户统计信息的获取现在只有获取用户性别的数据,之后还可以添加别的,用label区分Controller层: /** * 获取所有用户统计信息 * @param label * @return */ @RequestMapping(value = "/statistics/{label}", method = RequestMethod.GET, produces = "appl

2020-06-26 23:41:07 147

原创 创新实训(43)——ElasticSearch中默认分词器的设置

前言之前实现了句子的查询,并且将句子进行查询之前,已经分词并且去除了停用词,剩下的很多停用词都是可能与句子的意思之间相关的所以并没有被去掉,这样的句子放入ElasticSearch进行查询时,会被切分,然后查询结果中会有很多不必要出现的停用词,作为关键词出现,初步分数是分词器的问题。在使用 elasticsearch 进行搜索的时候,经常会发现一篇和搜索关键字完全不匹配的文章排在最前面。它可能就被 ik_max_word 分词后,刚好就有类似 “的” 这样的无意义词,导致造成一篇含有很多无意义词的文章得

2020-06-26 23:11:01 1134

原创 创新实训(42)——ElasticSearch检索的优化

前言上个星期,使用ElasticSearch的Java API实现了ElasticSearch的连接已经简单的检索,但是那个检索有着很大的问题,就是比如准确匹配到单词或句子(单词或句子必须在搜索结果中连续的出现才行),如果搜索的内容很长或者用标点符号分割的话,就无法给出搜索结果了。QueryBuilder的选择参考文章:https://www.jianshu.com/p/3afae4105797https://www.cnblogs.com/wenbronk/p/6432990.html下面

2020-06-26 22:13:02 303

原创 创新实训(41)——在Springboot项目中使用Spark的ALS算法实现协同过滤推荐

前言昨晚本来想把这部分的博客内容,完成的,结果只写到了设计,时间就不早了,今天把具体的实现,还有实现过程中所遇到的所有的问题写在这里。引入依赖这次我用了Spark2.x的java api,并且了解到spark底层是scala实现了,然后上层的api有scala版本和java版本,这里我使用了它提供的java的api,并且java底层调用的函数都是scala实现的,非常的方便,可以与java进行无缝的操作。spark MLlib依赖: <dependency>

2020-06-26 11:14:39 2754 1

原创 创新实训(40)——基于Spark MLlib包的ALS推荐算法的设计

前言之前学习了有关Spark MLlib包的api,现在基于ALS的推荐算法,结合系统中的实际进行一下设计。

2020-06-25 23:49:19 312

原创 创新实训(39)——学习基于Spark MLlib包的ALS推荐算法

前言项目的后端工作已经差不多基本完成,这几天主要的工作都是在修复之前遗留下来的bug,并且优化代码的设计,在项目开始的时候,就想着基于Spark来进行推荐系统的设计,后来在项目开展的过程中,发现了Mohout这个推荐引擎,这个引擎的调用非常简单,可以自动的构建模型,计算相似度,然后进行推荐,也可以方面的扩展到Hadoop集群上,所以开始就是用Mohout实现了基于用户的协同过滤推荐,和基于物品的协同过滤推荐,今天想着来用Spark的MLlib库的ALS推荐算法训练模型,然后实现推荐。Spark简介大数

2020-06-25 23:23:30 1585

原创 创新实训(38)——修改基于流行度和新鲜度的推荐(热榜)的算法

前言昨天同学用定时任务重新抽取了博客的文章,大概有3500条,然后今天发现热榜的评分好像不太好,所以对热榜进行了很多次的调整。原本热榜文章评分的算法是:将博客发布的时间转化为10位的时间戳 +4000博客的点赞量 +2000博客的阅读量这两个权重参数的设置也是很不好把握的。之后将热榜的评分修改成 :10位的时间戳截取掉第一位变成9位 +8000博客的点赞量 +3000博客的阅读量发现效果还是不理想。然后同学给我推荐了一个算法——Hacker News的热门排名算法,我在项目中实现了这种计算方法,

2020-06-24 22:55:36 1062

原创 创新实训(37)——使用多线程进行相似文章的预计算

前言在同学的定时抓取博客的任务做好之后,进行的抓取的尝试,在抓取文章之后,本来计划的用lucene建立倒排索引,然后为每一篇抓取到的文章在所有的文章中,利用倒排索引计算TF-IDF,然后计算最相似的文章。当时收录了3500篇文章,对于每一篇文章都需要和其他的三千多篇文章计算相似度,非常的慢,所以想到使用多线程分别对文章进行相似文章的计算,然后提高运行的速度。使用java的Thread类,手动创建线程每一个线程,都会读取数据库文章列表中的一部分文章,通过传入的limit和offset来判断,然后这个线程

2020-06-24 22:00:53 180

原创 创新实训(36)——有关用户画像部分基础信息统计的后端接口

前言准备实现一下统计意义上的用户画像,所以需要一些后端进行数据的统计(1)用户基本活动的数据统计包括过去一段时间的点赞量、浏览量、阅读量的数据统计(2)用户最喜欢的标签,以及标签的得分用户阅读的文章,或者点过赞的文章,都属于一定的标签,该用户给那个标签下的文章点赞多,或者阅读那个标签下文章比较多(3) 用户最喜欢的博主排名就是用户阅读的文章属于的博客,然后统计每个博客被阅读过的数量,就是喜欢的博主的排名(4) 用户最喜欢的文章排名就是用户最喜欢的文章,通过浏览次数和点赞次数害获得一个综合的

2020-06-24 13:48:18 436

原创 创新实训(35)——SpringBoot中使用 Spring Cache 集成 Redis进行缓存,提高响应速度

前言由于之前写的所有后端都没有进行过缓存操作,在结合前端已经app调试时,发现本地请求的响应都会很慢,所以现在结合redis对后端的请求进行一次缓存,提高执行的效率关于SpringCache的学习(1)SpringCache简介Spring Cache是Spring框架提供的对缓存使用的抽象类,支持多种缓存,比如Redis、EHCache等,集成很方便。同时提供了多种注解来简化缓存的使用,可对方法进行缓存。(2)关于SpringCache 注解的简单介绍@Cacheable:标记在一个方法上

2020-06-23 15:02:06 468 2

原创 创新实训(34)——有关前后端交互的优化以及后端错误的处理(续)

根据订阅信息获取文章的接口出错和昨天的问题一样,传入sql的数组不能为空,所以要加个判断后端莫名其妙断开管道的问题这个问题不管什么方法,偶尔请求会有这个问题,昨天也遇到了,就是没有解决,今天解决一下。查阅了半天资料,说的是tcp超时的异常,导致的连接被断开参考博客:https://blog.csdn.net/zqz_zqz/article/details/52235479所以接下来准备使用cache缓存来优化程序的读取速度空指针异常发现是如果用户没有提交博客,所以根据us

2020-06-23 10:47:27 270

原创 创新实训(33)——有关前后端交互的优化以及后端错误的处理

前言今天下午克隆了一个前端项目,然后在本地运行了一下,与本地的后端接口进行了一系列的测试,发现了一些体验不好的问题,有的地方还有一些报错,所以集中来处理一下,提高一下用户的体验。使用协同过滤算法,进行文章推荐的问题(1)在为用户进行基于协同过滤的推荐时,由于要获取用户的数据,才能进行个性化推荐,而对于没有登陆的游客来说,或者一个没有进行浏览的用户来说,这个部分的显示却是空的。如下图,猜你喜欢部分,显示为空:对应后端报错:显示获取不到用户的登陆信息,有关token的获取出错,由于用户没有登陆,所

2020-06-22 23:26:48 307

原创 创新实训(32)——有关用户自主提交自己博客信息的接口设计

前言由于我们的系统是根据rss订阅定时抽取,而用户也有可能有自己的自建博客,所以每个用户可以向系统提交自己的自建博客的rss链接,然后等待定时的抽取。接口列表如下:用户提交自己的自建博客信息Controller层: /** * 用户可以自己将自己的博客添加到博客平台上 * @param param * @param username * @return */ @PermitAll @RequestMapping(valu

2020-06-22 19:18:52 200

原创 创新实训(30)——有关管理员端博客和文章信息统计的接口(续)

前言今天将昨天没有完成的有关管理员端博客和文章信息的统计接口补齐获取文章最近七天的点赞数量 降序排序 /** * 获取最近七天 给文章点赞最多的用户 及点赞数量 降序排列 * @param page * @param size * @return */ @RequestMapping(value = "/getUserLikingCountRecently", method = RequestMethod.GET, produces =

2020-06-21 22:35:13 179

原创 创新实训(31)——有关用户订阅博客及标签的接口

前言本来没有打算做订阅功能,这个功能是到现在,随着项目的逐渐进行,感觉需要订阅的功能,所以才加上的。首先建了订阅表,然后实现了一些功能。这里将标签的订阅和博客的订阅,存在了一张表中,用type区分,儿subscribed_id为博客或者标签的id添加订阅信息 /** * 添加订阅信息 * @param username * @param subscriptionId * @param type * @return */ @

2020-06-21 22:27:26 205

原创 创新实训(29)——有关管理员端博客和文章信息统计的接口

前言系统的管理员端需要对系统中一些情况,进行数据的分析,所以需要设计一些接口,为前端绘制统计图做准备。这部分的内容,主要没有什么逻辑上的难度,只是需要设计sql语句,使用sql本身的聚合功能,实现对于数据的统计,然后将数据返回前台即可被浏览文章最多的博主 以及文章浏览的数量 降序排序 /** *被浏览文章最多的博主 以及文章浏览的数量 降序排序 * @param page * @param size * @return */ @RequestM

2020-06-20 23:31:39 202

原创 创新实训(28)——设计有关用户记录的接口and设计有关文章标签和分类的接口

前言文章板块,除了有关推荐的接口设计,还有其他的一些边缘的功能的接口需要设计,共同配合才能完成文章板块有关文章的点赞和浏览本来没有文章的点赞表,后来为了做热榜,在流行度和新鲜度的推荐上,加上了点赞对于评分的影响,点一个赞对于评分的影响是浏览一次文章的两倍。在每次点赞和浏览之后,都会触发相应的接口,在数据库中插入一条浏览记录或点赞记录,然后为文章更新评分。(1)用户的点赞controller层: /** * 用户给文章点赞 * @param username * @

2020-06-20 23:15:17 215

原创 创新实训(27)——有关推荐文章列表的后端接口实现

前言这部分其实很简单,调用之前写好的方法,返回参数就好了,最主要的还是和前端的同学进行参数的协调,已经保重接口的不出错获取热榜列表,这个列表是根据博客系统所有文章的流行度和新鲜度给出的,相关数据被物化在了redis中 /** * * 获取默认的文章列表,这个列表是根据博客系统所有文章的流行度和新鲜度给出的 * @param page * @param size * @return */ @PermitAll @Reque

2020-06-19 23:51:04 271

原创 创新实训(26)——Elasticsearch在Centos服务器上的搭建

前言之前在本地搭建了Elasticsearch的环境,然后实现了简单的检索功能,之后应该把服务架设在服务器上,全网都能访问,否则每次访问的时候都只能使用ssh的端口转发,所以今天想着在服务器上搭建一个Elasticsearch的环境。前期准备需要有java的环境,我的服务器正好有java8的环境所以不需要重新安装,需要注意的就是最新的Elasticsearch7.x需要java11 的环境,所以我选择了Elasticsearch6.8.8的版本,与我电脑上的一致,可能可以避免很多的问题。安装Elas

2020-06-19 23:26:57 181

原创 创新实训(25)——Elasticsearch学习以及与springboot的集成

Elasticsearch基本概念1.Cluster 集群,Node节点Elasticsearch可以实现分布式的搭建,可以有多个节点,我们先试用单机版的Elasticsearch进行检索。集群中的每一台服务器为一个节点,可以存储数据,并参与群集的索引和搜索功能。2.Index索引索引是具有相似特性的文档集合。例如,可以为客户数据提供索引,为产品目录建立另一个索引,以及为订单数据建立另一个索引。索引由名称(必须全部为小写)标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。在单

2020-06-18 23:59:44 662

原创 创新实训(24)——Elasticsearch—用logstash增量导入Mysql数据

前言昨天在本地装好了ELK的环境,今天准备将mysql的数据用logstash导入Elasticsearch,然后在springboot项目中实现博客的检索功能。安装logstash-input-jdbc要想导入Mysql的数据到Elasticsearch,需要安装插件——logstash-input-jdbc。Elasticsearch、logstash下载地址:https://www.elastic.co/downloads插件github地址:logstash-plugins/logsta

2020-06-18 23:23:54 256

原创 创新实训(23)——在MacOS下搭建有关elasticsearch的环境

前言由于我们要使用elasticsearch实现文章的检索,所以提前安装一些有关elasticsearch的环境使用mac下的包管理工具HomeBrew搭建相关环境Install ElasticSearchbrew install elasticsearch // 安装brew info elasticsearch // 查看信息brew services start elasticsearch // 启动安装完成后访问localhost:9200, 可以看到如下结果:Inst

2020-06-17 23:34:57 137

原创 创新实训(22)——所有推荐算法的整合

前言到目前为止,我实现了基于流行度和新鲜度的推荐算法/基于文本相似度的推荐/用户协同过滤推荐/分类(标签)协同过滤推荐。我们需要将其整合到一个Util中,方便调用。推荐算法的整合/** * 文章推荐的接口 * 可以有很多推荐算法分别实现这个接口,以便于我们后面切换推荐算法或者同时使用多个推荐算法 * 接口里面的基本方法在设计中,还没有定型,可以根据需要或者实际情况修改 * 用户id也许可以用用户名,但是看实际情况,id不会重复 * 返回的文章id会简单一点,不过文章内容也行 * 也可以有推

2020-06-17 23:06:41 365

原创 创新实训(21)——推荐算法的评估

前言昨天使用Mohout推荐引擎实现了用户的协同过滤算法,今天使用昨天实现的算法计算一下推荐的准确率以及查全率,查准率。算法评判标准:召回率(recall)与查准率(precision)A:检索到的,相关的 (搜到的也想要的)B:未检索到的,但是相关的 (没搜到,然而实际上想要的)C:检索到的,但是不相关的 (搜到的但没用的)D:未检索到的,也不相关的 (没搜到也没用的)被检索到的越多越好,这是追求“查全率”,即A/(A+B),越大越好。被检索到的,越相关的越多越好,不相关的越少越好,这

2020-06-17 22:54:25 392

原创 创新实训(20)——基于Mohout推荐引擎的推荐算法的实现

前言之前学习了有关java的Mohout推荐引擎,我们就可以根据它提供的类快速的进行我们的推荐算法的构建了。导入Mahout依赖 <dependency> <groupId>org.apache.mahout</groupId> <artifactId>mahout</artifactId> <version>0.11.1</version>

2020-06-16 23:28:51 497 1

原创 创新实训(19)——学习Mohout推荐引擎

前言(1)Mahout框架中cf.taste包实现了推荐算法引擎,它提供了一套完整的推荐算法工具集,同时规范了数据结构,并标准化了程序开发过程。并且,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到Hadoop 集群 。(2)Mahout是用来干嘛的?推荐引擎服务商或网站会根据你过去的行为为你推荐书籍、电影或文章。聚类Google news使用聚类技术通过标题把新闻文章进行分组,从而按照逻辑线索来显示新闻,而并非给出所有新闻的原始列表。分类雅虎邮箱基于用户以前对正

2020-06-16 23:01:52 371

原创 创新实训(18)——springboot定时任务学习及实现用户浏览记录的定时抽取

定时任务的创建在 Spring 中 可以通过 @EnableScheduling 和 @Scheduled 这两个注解来实现定时任务,接下来看下这两个注解:(1)@EnableScheduling可以通过在启动类上添加@EnableScheduling开启定时任务功能(2)@Scheduled在定时任务方法上使用@Schedule注解标记定时任务并配置定时任务执行时机。固定延迟时间:// 初次调用延迟3秒,任务结束后5秒钟再次调用,两次调用不会同步运行@Scheduled(initial

2020-06-15 19:49:53 410

原创 创新实训(17)——用户浏览记录的定时抽取

前言在完成基于流行度和基于新鲜度的推荐与基于文章相似度的推荐之后,准备使用协同过滤算法进行推荐。不管是基于物品的协同过滤还是基于用户的协同过滤,都需要使用用户对博客文章的浏览记录来进行。而问题在于,我们如果将具体的文章作为物品,过分析这个用户读过的博客文章(训练集),去给这个用户推荐他可能感兴趣的文章,但是我们的浏览记录很少的话,根据读取的文章寻找用户的相似度,用户之间的相似度会很低,不好进行推荐。所以我通过博客文章所属的分类和标签,对文章进行推荐。但是,在推荐的时候需要遍历所有的用户浏览数据,找到用户

2020-06-15 19:31:13 256

原创 创新实训(16)——推荐系统实现之基于Lucene3.6的余弦相似度计算与相似文章推荐

设计思路(1)使用Lucene3.6.0版本,由于之前尝试使用IK分词器,加载到Lucene中,让Lucene自动分词,然后建立索引,但是IK分词器一直报错,所以我选择自己使用HanLP分词之后,在使用Lucene建立倒排索引。(2)使用建立好的倒排索引,快速获取所有文档的TF-IDF值词频(term frequency)TF单个文章的词频,词在文档中出现的词频 词在文档中出现的频度是多少? 频度越高,权重 越高 。 5 次提到同一词的字段比只提到 1 次的更相关。逆向文档频率(inverse d

2020-06-14 23:07:07 343

原创 创新实训(15)——爬坑Lucene搜索引擎工具包(续)

昨天尝试Lucene的各种分词器,未果,之后找了一个有人实现好的分词器,想把它集成到我们的项目中,来试试效果。他用的Lucene版本6.6.5版本学习的项目地址为:https://github.com/suxiongwei/luceneLucene相关度打分Lucene是在用户进行检索时实时根据搜索的关键字计算出来的,分两步:1)计算出词(Term)的权重2)根据词的权重值,采用空间向量模型算法计算文档相关度得分这个文档的相关度采用的是TF——IDF,由于lucene已经对所有文本进行分词

2020-06-14 22:09:51 198

原创 创新实训(14)——爬坑Lucene搜索引擎工具包

前言今天白天自己实现了文本的余弦相似度的实现方法,但是下午集成到后端项目中,进行测试后发现,在系统运行过程中,发现计算延迟太高了,会严重影响用户的体验,并且服务器受不了。每个用户点到每一篇博客文章的详细文章中,都会遍历所有的文章列表,计算相似度,真的太慢了。所以考虑使用lucene进行自动分词,然后计算倒排索引,然后计算文本的相似度。Lucene可以实现全文的检索,找到每篇博客文章相似的博客文章,全文检索首先将要查询的目标文档中的词提取出来,组成索引,通过查询索引达到搜索目标文档的目的。学习Lucen

2020-06-13 23:18:45 145

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除