APP下载

移动端古诗词学习系统①

2022-06-27罗璐莹李婧妍丁思文李兆发王梦琴晏嘉俊吴文娟王淑琴

计算机系统应用 2022年5期
关键词:古诗神经网络古诗词

罗璐莹, 李婧妍, 丁思文, 李兆发, 王梦琴, 晏嘉俊, 吴文娟, 王淑琴

1(天津师范大学 软件学院, 天津 300387)

2(天津师范大学 文学院, 天津 300387)

3(天津师范大学 计算机与信息工程学院, 天津 300387)

诗词对提高文化素养、培养审美情趣有深远影响.2014 年9 月, 在实地访问北京师范大学时, 面对古代经典诗词的现状, 习主席如此感叹: “我很不希望把古代经典的诗词和散文从课本中去掉, 应该把这些经典嵌在学生的脑子里, 成为中华民族的文化基因.”

从习主席写诗词到他在众多场合谈诗词, 都可以体现出习主席对于诗词文化的重视, 也引发我们在新时代中对于文化传承教育的反思. 现如今, 国人对于诗词的理解令人担忧, 深究其中缘由, 一是诗词显现的内容与思想感情和当代人的生活存在客观距离; 二是当代人内心浮躁, 难以静下心学习含蓄隐晦的诗词. 三是诗词学习方式的枯燥乏味, 单一的背诵已无法满足当代人的诗词学习需求. 综上所述, 提升人们诗词学习兴趣已迫在眉睫.

近几年, 互联网通信产业规模增长迅速, 手机等移动设备日益推广, 移动教育领域成为新热点[1]. 移动端的发展, 给人们的生活带来了诸多便捷, 也满足了当前人们生活学习的需求. 目前, 国内的主流教育类APP主要有内容型、工具型、社区型、平台型和管理型5 个大类[2], 其中, 排名top15 的主要是内容型、工具型以及社区型3 类且劣势颇多: 题目搜索不够精准, 准确率较低; 广告植入以及收费项目过多; 对人工智能的应用只停留在拍照搜题、语音输入等阶段, 缺少针对学习者的个性化定制及人工智能更高层次的应用. 同时,目前大部分教育类APP 都是和数理化等科目相关的,致力于语文学习的内容很少, 诗词类APP 更是少之又少. 而仅有的几款诗词类APP 都只涉及到了诗词的注解、译文, 并不能由提供的字词产生新的古诗, 以帮助用户更好地应用诗词、理解诗词. 与图像识别技术的结合可以使生活与诗词融为一体, 更能促进诗词的传承与发扬. 而目前已有的诗词类APP 也未结合图像识别技术, 使人“所见即所得”, 即所见物品可以由图像识别技术识别, 得到与之相关的诗词.

综合以上所有信息, 开发一个结合图像识别与深度学习的、面向对诗词抱有浓厚兴趣及对诗词学习存在需求的人的移动端古诗词学习系统具有深远意义.

1 系统需求分析

为提升当代人的诗词兴趣, 将诗词与现代人生活进行联系, 系统需依据科技现状与当代人生活需求进行设计. 适用对象包括对诗词抱有浓厚兴趣者及对诗词学习存在需求者.

1.1 模块功能需求

系统模块主要包括诗词、论坛以及商城, 见图1.

图1 系统功能结构图

(1) 诗词模块

1) AR 智能识图: 通过手机摄像头扫描身边景物,系统对当前物品进行识别, 进而推荐出与其相关古诗词.

2) 诗词查询: 点击推荐诗词, 或通过搜索框查找并选择相应诗句, 能出现详细注释、翻译, 有助于诗词学习者对古诗词的快速记忆.

3) 古诗文推送: 通过tag 分类、统计日常搜索关键词、不同种诗词浏览时间及点击量等推荐古诗词,有助于培养古诗词学习兴趣. 古诗文推送也会在搜索框界面下统计并推荐当日搜索量前10 的热点诗词.

4) 古词生成: 根据关键词自动生成藏头诗, 或直接生成古诗.

(2) 论坛模块

社区论坛让用户畅所欲言, 交流分享学习感悟.

(3) 商城模块

按照点击量, 购买量及用户喜好进行商品推荐, 用户可进行商品浏览收藏及购买.

1.2 系统设计

系统软件采用Client/Server (客户/服务器)结构,使系统的稳定、灵活及安全得以充分保证. 客户端采用Flutter 框架提供的开发环境与模式, 后台数据库采用MySQL 关系型数据库管理系统, 利用其容错机制与事务处理功能, 以保证数据的完整与一致.

1.2.1 数据流程设计

根据系统的数据需求及流向, 见图2, 系统涉及到智能识图系统、古诗生成系统以及APP 系统3 个系统. 智能识图系统负责对拍出图片进行识别, 进而推荐相关诗词. 古诗生成系统负责生成藏头诗或随机生成一首古诗, APP 系统负责完成包括古诗词查询、理解、交流在内的古诗词学习体系以及用户身份认证、个人信息登记以及操作信息查询.

图2 数据流向图

1.2.2 系统界面功能设计

(1) 主页

1) AR 智能识图及古诗生成: 通过手机摄像头拍摄, 识别出当前实物, 并推荐出相关古诗词, 点击所需古诗词, 或通过搜索框查找并选择相应诗句, 能出现详细注释及翻译. 古词生成部分可根据关键词自动生成藏头诗或直接生成古诗.

2) 趣味游戏.

3) 诗词搜索: 可于搜索框中搜索感兴趣的文章.

(2) 商城页面

进行商品推荐, 提供诗词相关交易平台.

(3) 社区页面

浏览其他用户动态, 交流诗词感受.

(4) 个人界面

1) 注册与登录: 输入手机号或邮箱注册并登录.

2) 个人信息登记与更改: 用户点击头像或用户名,进入个人信息更改界面, 可更改用户头像、用户名、性别、个性签名、所在地、手机号与邮箱等个人信息.

3) 消息: 可浏览收到的消息, 用户个人发表的帖子及评论, 可一键已读.

4) 我的收藏: 可浏览已收藏的帖子、商品及诗词.

5) 历史记录: 可浏览曾读过的商品、诗词、帖子、识图及游戏.

6) 设置: 可进行个人隐私设置、消息设置, 浏览用户协议及隐私条款, 可联系工作人员、退出登录.

7) 管理员入口.

2 系统开发

本文针对项目需求, 提炼关键技术点进行系统开发, 从数据库、古诗词推荐、图像识别的实现、古诗词生成的实现以及安全性5 个方面进行开发.

2.1 数据库逻辑设计

由MySQL 的特性, 设计系统逻辑, 见图3.

图3 数据库关系表

(1) 用户表(user): 存储用户注册信息, 账户及店铺状态.

(2) 作者表(author): 存储诗人的编号和个人介绍, 根据编号与诗词表(poetry)相连接完成搜索和推荐等功能.

(3) 标签表(tag): 保存标签, 根据用户对不同标签的搜索及诗词的点击率完成推荐, 每个诗人及每首诗词都会对应不同标签, 用户也可根据收藏对应的标签更方便搜索. 商品表(mallf)、店铺表(malls)、订单表(mallt)用于确定店铺以及订单信息, 管理员表(manager)和超级管理员表(supermanager)用于存储管理员及超级管理员的信息及其操作记录, 可以对用户进行封号,将贴子升为精品贴等操作. 最终所有表由用户表(user)和标签表(tag)串联.

经验证, 该数据库满足巴斯-科德范式, 在使用中可正常进行修改, 插入和删除操作[3].

2.2 古诗词推荐

推荐算法依据用户所产生数据, 利用数学算法, 进而预测用户行为兴趣. 对于系统中相关商品推荐、古诗词个人推荐、论坛等使用场景, 推荐算法都具有很高的价值. 推荐算法有很多种, 在此之中, 基于协同过滤的推荐算法(collaborative filtering recommendation)在推荐系统中具有重要地位, 它对数据源无特定要求,图像、视频、物品等非结构化内容都能进行处理[4]. 皮尔森相关系数(Pearson product-moment correlation coefficient)用于度量X和Y两个变量的相关 (线性相关), 值介于-1 与1 之间. 相关系数越高, 就意味着两变量的共变部分越多, 便越能精确的通过一个变量预测另一个变量[5]. 在自然科学领域中, 此系数被广泛应用在衡量两变量相关程度上. 两变量间的协方差和标准差的商是皮尔森相关系数定义, 计算公式如下:

通过以下取值范围判断变量的相关强度, 见表1.

表1 相关度判断表

系统采用基于皮尔森相关系数的协同过滤推荐算法对用户可能喜欢的古诗词、商品等进行推荐, 并考虑以下因素:

(1) 用户自身属性, 如性别年龄.

(2) 产品自身属性, 如种类.

(3) 用户历史数据, 如浏览、收藏记录.

记录以上数据作为数据源, 计算变量之间的相关系数即可进行初步的推荐, 但相关系数有一个明显的缺点, 即它接近于1 的程度与数据组数n相关,n较小时, 相关系数的波动会较大.

推荐系统需要根据大量的用户数据训练数据模型,没有数据集就无法对用户行为兴趣进行预测并推荐,这就是冷启动问题.

冷启动问题主要包括3 种类型[6]:

(1) 用户冷启动: 如何为新用户进行个性化推荐.

(2) 物品冷启动: 如何将新物品推荐给适当用户.

(3) 系统冷启动: 如何为新创立网站在无历史数据时进行个性化推荐.

未继承数据的全新系统, 都会遇到以上3 类问题.为解决这一问题, 在采集到足够的数据前, 使用以下解决方案:

(1) 根据用户信息分类, 即根据性别、年龄等对用户进行粗略地分类, 提供粗粒度的个性化推荐.

将同一性别年龄段的用户视为同类用户, 分别计算不同类别的用户关注度, 便可以对同类用户按热度等进行粗略推荐[7].

(2) 按热度、时间等推荐, 即根据点击量、收藏、发布时间等数据提供非个性化推荐.

非个性化的推荐可以实现“0”数据量依赖, 仅按发布时间、热度等排序推荐更加客观且能在任何情况下使用, 可以作为个性化的辅助并行.

(3) 丰富冷启动过程中可获得的用户和物品特征,如引导用户填写的如兴趣领域、职业等调查.

(4) 使用“探索与利用”机制, 平衡新数据的探索及旧数据的利用间“新”与“旧”的关系, 一方面收集新数据, 一方面暂时使用相近的旧数据. 使系统既能够利用旧数据进行推荐, 又能使得冷启动物品获得曝光的倾向, 高效地探索冷启动的物品的属性, 快速收集冷启动数据.

如新用户注册时, 仅能获知年龄性别等数据, 推荐系统便使用方法(1)对新用户进行初步推荐. 对同一类别的用户行为如点击、浏览时长等统计并加权计算热度, 按热度排序推荐, 记为a. 同时收集“新数据”, 记录下该用户近期点击的关键词、收藏物品等, 检索具有同样关键词的用户, 计算皮尔森相关系数. 取相关度最高的k个用户, 将这k个用户喜爱的物品诗词作为要推荐的备选, 并加权计算, 记为b. 在“新数据”较少时,皮尔森相关系数的波动大, 推荐并不一定准确. 此时可以偏重于“旧数据”, 多推荐a, 随着“新数据”的加多, 结果逐渐准确, 便可使用b逐步取代a, 以获得更佳的推荐效果.

具体如下:

测试用户q1新注册时, 数据仅有女、23 岁. 在female 20 类别中统计热度前5 的商品为背包、手袋、饰品、笔记本、潮流穿搭, 并推荐以上商品.

收集一定数据后,q1与q2,q3,…,qk具有同类的兴趣关键词, 通过公式计算这k名用户间皮尔森相关系数, 由大到小排序, 前3 个结果分别为0.986, 0.863,0.802.

选择这3 个用户的相关商品分别计算, 如第1、3 个用户均喜爱某一商品, 则该商品的推荐度为0.986+0.802=1.788, 同理得出各商品的推荐度并推荐.

2.3 图像识别的实现

如今, 在机器视觉中, 卷积神经网络 (CNN)具有极其远大的前景. 目前为止, 已有很多高机能CNN 结构,如 VGG, LeNet, ResNet 等. 这些结构被利用在识别与检测的任务中, 精确度甚至能超过人类的感觉器官[8].

伴随大数据时代, 有更多隐含层的深度卷积神经网络有庞大的网络结构, 较于传统的机器学习, 有更强的特征学习、特征表达能力. 目前, 卷积神经网络在目标检测中已被广泛使用[9]. 其中, 基于区域的卷积神经网络发展非常迅速, 包括R-CNN、Fast R-CNN、Faster R-CNN、MS-CNN. R-CNN 采用 Selective Search 方法得到物体候选框, 然后送入卷积神经网络中进行特征提取, 最后利用SVM 分类器获得最终的结果, 该方法效率低, 计算复杂. Fast R-CNN 使用ROI 池化层, 从而得到候选框, 虽检测的效率得以提升, 但候选框的提取所需时间过长, 从而使整体的检测效率降低. Faster R-CNN 设计了一个RPN 以生成区域建议框, 为提高速度与性能, 其采用了共享卷积层这一特性. Faster R-CNN模型是目前为止RCNN 系列算法最杰出的产物, 也是two-stage 中最经典的物体检测算法, Faster R-CNN 模型被应用于本系统. Faster R-CNN 可以简单地看做“区域生成网络RPN+Fast R-CNN”的系统, 用区域生成网络代替Fast R-CNN 中的Selective Search 方法[10]. 推理分成两个阶段:

(1) 寻找图中未检测物体的anchor 矩形框;

(2) 将anchor 框内未检测物体分成不同类. 它的思路是, 首先产生待检测框, 然后将检测框分类. Faster RCNN 利用神经网络, 使待检测框端到端的训练得以实现且大幅提速[11].

本文采用ResNet 网络结构, ResNet 的网络结构深、参数量低, 这使它的分类效果极佳. 除此之外,ResNet 的结构能大大提升神经网络的训练速度, 同时也能显著提升模型的准确率. ResNet50 是一种更加容易被优化的模型, 是基于已有训练深度网络提出的一种减轻了网络训练负担的残差学习框架, 神经网络及精度都得到了增加. ResNet50 包含49 个卷积层及1 个全连接层, 共50 层, 其网络结构极其庞大[12], 见图4.

图4 ResNet50 网络结构示意图

(1) 网络结构

整个Faster R-CNN 可分为3 部分:

1) backbone: 提取图片特征, 为共享基础卷积层.

2) RPN: 候选检测框生成网络(region proposal networks).

3) ROI pooling 与分类网络: 将候选检测框分类,第2 次将候选框坐标微调. 输出检测结果.

(2) 模型迁移

固定特征提取层. 在对ResNet50 模型进行加载时,每一次对参数值的更改在默认情况下都将被存储以用于训练的反向传播图中, 这使内存需求大大增加. 迁移学习则使用ResNet50 模型, 大数据集ImageNet 已训练好大部分参数, 所以仅需在模型初始化时冻结更新操作.

优化全连接分类器. 为避免训练过程中的过拟合现象, 本文替换ResNet50 的最后一层, 然后把有256个输出单元的线性层与最后一个全连接层的输入进行连接, 下一步连接ReLU 层和Dropout 层、256×40 的线性层, 进而输出Softmax 层.

(3) 模型配置

第1 步, 定义损失函数. 本文的损失函数使用Metrics函数.

第2 步, 定义优化函数, 本文的优化函数为Adam 优化算法. Adam 可以基于训练数据迭代更新神经网络权重,是一种可以替代传统随机梯度下降过程的一阶优化算法[13].

(4) 模型训练

1) backbone 利用ImageNet 预训练模型的初始化权重, 训练RPN 网络要利用抽取样品之后的正负例anchor 框. backbone 权重也参与微调.

2) 利用在1)中训练好的RPN, 产生正例预测框,使用Faster R-CNN 分类网络训练. 这时backbone 权值也由ImageNet 预训练模型进行初始. 截止第2 步,Faster R-CNN 和RPN 利用两个backbone, 无共享.

3) 使用2)中已训练完毕的Faster R-CNN 网络中对应的backbone 权值, 初始化RPN 网络前的backbone,RPN 部分则利用第1 步的训练结果进行初始化. 3)只微调RPN 中的权值. 截止第3 步, Faster R-CNN 与RPN开始共享backbone.

4) backbone 及RPN 权值不变, 利用2) 训练的Faster R-CNN 部分结果对Faster R-CNN 进行初始化,再次进行稍微调整的训练.

(5) 数据集及实现

在TensorFlow 2.0 深度学习框架上实现本文模型并对模型完成训练. 通过爬虫技术得到相关数据集, 按照自然景物类别对其进行分类, 共2 000 张图片, 包含1 500 张训练集和500 张验证集, 图像格式均为JPG 格式, 如图5, 图6 所示.

图5 数据集1

图6 数据集2

2.4 古诗词生成的实现

循环神经网络(RNN) 是机器学习中处理与预测序列数据的神经网络模型. 循环结构的神经网络打破了传统机器学习方法中的诸多限制, 让它在深度学习领域中占据了重要地位. RNN 和它的变体网络在多个领域取得了中成功, 特别是当数据中有一定时间依赖性时[14]. RNN 可以有效地对序列数据 (例如语言文本) 进行学习, 提取序列数据中的非线性特征.RNN 之所以称为循环神经网络, 与一个序列当前的输出与前面的输出相关[15], 具体表现为网络会记忆前面的信息且在现在输出的计算中进行应用, 即隐藏层之间的节点不再无连接而是有连接的, 并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出[16].

所有 RNN 都具有一种重复神经网络模块的链式的形式[17]. 在标准 RNN 中, 这些重复模块仅包含一个简单结构, 例如一个 tanh 层. LSTM 亦为此结构, 但重复的模块拥有一个不同的结构. 不同于单一神经网络层, 这里是有4 个, 以一种非常特殊的方式进行交互[18].整体上除了隐藏状态h在随时间流动, 细胞状态c也在随时间流动, 细胞状态c就代表着长期记忆. Seq2Seq 模型是输出的长度不确定时采用的模型. Seq2Seq 解决问题的主要思路是通过深度神经网络模型(常用的是LSTM)将一个作为输入的序列映射为一个作为输出的序列, 这一过程由编码输入(encoder) 与解码输出(decoder)两个环节组成[19]. 相比之下, LSTM 结构更为复杂, RNN 简单易于实现. 因此本文选用RNN 来实现古诗生成.

(1) 功能介绍

1) 生成古诗: 利用模型随机生成一首古诗.

2) 生成藏头诗: 用户输入4 个关键字, 利用模型生成一首藏头诗.

(2) 实现过程

建立函数, 输出预测结果: 分别建立随机生成古诗函数和藏头诗生成函数, 即分别建立模型训练, 预测出来对应字典编号, 最后转化为相应字符输出.

RNN 模型的建立: 定义变量; 使用RNN 中的函数建立神经元. 此时建立的神经元cell 对象即为加载数据的张量对象, initial_state 对象为词向量的初始化即为初始为0; 定义embedding, 将诗词的文字对应索引分别转化为变量; 建立网络层, 使用Softmax 激活函数;使用均方差函数定义损失函数值, 使用梯度下降算法和优化器减少损失.

梯度爆炸(gradients exploding) 以及梯度弥散(gradients disappearing)是RNN 会遇到的问题. LSTM可解决梯度弥散的问题, 但是gradients 仍然可能会爆炸, 因此我们通过采用gradient clippling 的方式来防止梯度爆炸. 即通过设置一个阈值, 当gradients 超过这个阈值时, 就将它重置为阈值大小, 这就保证了梯度不会变得很大.

(3) 生成效果

由于前期并没有平仄处理, 生成的唐诗可能对仗不太工整. 下面是效果测试, 第1 首是随机生成, 第2 首则是以“深度学习”为关键字的藏头诗, 见图7.

图7 古诗生成效果图

2.5 安全性

前后端分离的开发方式以接口为标准分别开发各自的功能, 少不了调用接口来进行业务交互, 这就造成了被人恶意利用请求获取到数据的隐患. APP 内集成了用户个人信息、商城、社区等多种信息及功能, 一旦发生泄露将对用户的隐私、财产安全造成巨大影响.因此, 应当提高对数据安全性的重视.

(1) 通信使用https

http 协议是一种明文传输协议, 交互过程及数据传输过程都未加密, 通信双方也没有相互认证, 通信过程极其容易被获得、篡改. 而https 利用SSL/TLS 建立全信道, 对数据包加密, 提供身份认证, 更能保护交换数据的完整与隐私性.

(2) 身份确认机制

Token 为服务器端生成的特定字符串. 初次登录时, 用户可输入账户密码或使用验证码以确定合法身份. 验证后, 服务器便生成一个token 返回给客户端, 之后凡是需要验证的地方客户端只用携带该token 请求数据, 不用再携带用户名和密码. 服务器端验证token,成功时正常返回客户端所请求的结果, 失败则返回错误信息, 并让用户重新登录. Token 设定有效期, 每一次请求时服务器端都重新验证token 和有效期.

(3)使用加解密算法

为了防止提交到接口的明文泄密, 可以对提交到接口的数据加密, 本系统使用AES 进行接口加密. 高级加密标准(advanced encryption standard, AES)为最常见的对称加密算法[20].

3 系统测试与运行

3.1 系统平台部署

Flutter 打包环境为Android studio 3.2.

在terminal 执行命令并生成key, Android studio 内创建key.properties.

修改build.gradle 中的配置.

执行flutter build apk, 安装应用到真机.

服务器选择阿里云服务器, 将war 包用xftp 放到tomcat 的webapp 目录下, 打包项目部署到服务器, 运行测试, 测试效果见第3.2 节.

3.2 功能测试

对系统关键环节进行测试.如图8(a)左为个人界面, 主要有登录注册、身份信息更改以及消息处理等功能. 其中登录注册部分, 可进行账号的登录注册以及密码重置. 身份信息更改部分可更改用户名、头像、性别、个性签名、所在地、手机号以及邮箱等, 可进行实名认证. 同时可处理收到的消息, 浏览历史记录及收藏夹. 图8(b)、图8(c),图9(a)为古诗词生成界面. 古诗生成包括随机生成和藏头诗两种方式. 其中古诗随机生成, 可系统直接生成诗词. 藏头诗部分在输入框中填写4 个关键字, 点击生成键, 系统生成藏头诗. 图9(b)为图像识别界面, 点击主界面拍照按钮, 系统识别景物, 显示识别结果以及相关诗词. 图9(c), 图10(a)、图10(b)为商城界面, 点击商城, 可浏览人气推荐以及系统推荐好物. 点击搜索框,可搜索具体商品及看到其详细信息. 图10(c)为社区界面可浏览评论其他用户动态, 发布帖子, 交流诗词感受.经测试, 各项功能均满足要求.

图8 系统效果图1

图9 系统效果图2

图10 系统效果图3

4 结束语

本文介绍了移动端古诗词学习系统的研究与应用.面向对诗词有深厚兴趣的人群, 综合比较截止目前市面上的古诗词学习系统, 从而建立结合图像识别与深度学习的移动端古诗词学习系统. 本文设计的移动端古诗词学习系统, 可直接生成古诗或利用用户提供的字词进行藏头诗的生成, 以帮助用户更好地应用诗词、理解诗词. 同时结合图像识别技术, 使人“所见即所得”, 即看到的物品可通过图像识别技术进行识别,进而得到与之相关的诗词, 使我们的生活与诗词融为一体, 促进诗词的传承与发扬, 本课题所涉及的移动端古诗词学习系统具有推广的意义.

猜你喜欢

古诗神经网络古诗词
基于神经网络的船舶电力系统故障诊断方法
古诗词里的清明时节
踏青古诗词
MIV-PSO-BP神经网络用户热负荷预测
基于改进Hopfield神经网络的对地攻击型无人机自主能力评价
我爱古诗词
“拟古诗”之我见
基于神经网络的中小学生情感分析
品读古诗
品读古诗