前言
本人的工程实践项目是基于深度学习的文本情感分析系统,其主要功能是对输入的文本进行相应的情感分析,并给出不同情感的预测得分,并返回最有可能的情感极性(积极、中立和消极甚至更细致的划分)。该系统在在用户挖掘、垃圾邮件过滅及舆情分析等多个领域具有重要的应用价值。
本文将基于该项目来进行分析,通过总结项目设计方案中所蕴含的软件架构模型,并采用分解视图、依赖视图、执行视图、实现视图、工作分配视图来描述项目的软件系统概念原型。
1、软件设计方案
在软件设计中,软件架构模型的选择在设计过程中非常重要,其重要性表现在以下几个方面:
- 首先,软件架构模型有助于项目成员从整体上理解整个系统;
- 其次,给复用提供了一个高层视图,既可以辅助决定从其他系统中复用设计或组件,也给我们构建的软件架构模型未来的复用提供了更多可能性;
- 再次,软件架构模型为整个项目的构建过程提供了一个蓝图,贯穿于整个项目的生命周期;
- 最后,软件架构模型有助于理清系统演化的内在逻辑、有助于跟踪分析软件架构上的依赖关系、有助于项目管理决策和项目风险管理等。
1.1、软件架构
软件架构
(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。
常用的软件架构举例:
三层架构
:为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。MVC架构
:MVC中M、V、C的含义分别如下所述。Model(模型)代表一个存取数据的对象及其数据模型;View(视图)代表模型包含的数据的表达方式,一般表达为可视化的界面接口;Controller(控制器)作用于模型和视图上,控制数据流向模型对象,并在数据变化时更新视图。控制器可以使视图与模型分离开解耦合。MVVM架构
:在MVVM架构下,View 和 Model 之间其实并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。
对文本情感分析系统进行软件架构分析:
Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。故该系统的前后端主要是在Django框架的基础上搭建而成的,该框架在网站开发的领域也是较为成熟的框架,在使用上也比较简单。该框架通过内置的ORM框架可与MySQL配合使用便足以完成系统的数据管理和操作。
Django本身基于MVC模型,即Model(模型)+View(视图)+ Controller(控制器)设计模式。其中M 代表模型(Model):负责业务对象和数据库的关系映射(ORM);T 代表模板 (Template):负责如何把页面展示给用户(html);V 代表视图(View):负责业务逻辑,并在适当时候调用Model和Template。Django中的M、V、T分别与MVC架构中的M、C、V功能上相类似。
Django框架是一个开放源代码的web应用框架,采用Python语言编写而成。最初被用来管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。该框架主要目标就是使得网站的开发更为简单。一个Django项目可以分为多个不同的应用组成,用来完成各自的功能模块。Django框架的设计模式也借鉴了MVC框架的思想,它使用的是MVT框架。MVT分别为M(model模型),V(view视图),T(Template模板)。MVT框架的工作原理如下图所示。

1.2、软件架构风格
软件架构风格
是描述某一特定应用领域中系统组织方式的惯用模式,反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。
“软件架构”的组成:
- 一组构件类型
- 一组连接件类型/交互机制
- 这些构件的拓扑分布
- 一组对拓扑和行为的约束
- 一些对风格的成本和收益的描述
常用软件架构风格举例:
- 客户-服务:指客户代码通过请求和应答的方式访问或者调用服务代码。这里的请求和应答可以是函数调用和返回值,也可以是TCP Socket中的send和recv,还可以是HTTP协议中的GET请求和响应。
- 发布-订阅:在发布-订阅架构中,有两类构件:发布者和订阅者。如果订阅者订阅了某一事件,则该事件一旦发生,发布者就会发布通知给该订阅者。
- 层次化:除了数据被分离出去,软件系统的其他各部分进一步分离,形成更复杂的层次结构。
对文本情感分析系统进行软件架构风格分析:
在本系统中采用了客户-服务的设计风格,最明显的一处就是用户输入需要分析的文本,将其作为参数传递给analysis函数,函数将其作为已训练好模型的输入并返回相应的预测结果,同时通过函数store_data将预测数据及其结果存放到数据库的相应位置中。
1.3、接口API设计
API是一些预先定义的接口,用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。下面主要列出了关于用户的API设计:
接口名称 | 接口地址 | 请求参数 | 返回值 | 功能 |
---|---|---|---|---|
register | /register | username,password,tel,email | True/False | 用户注册 |
login | /login | username,password | userid/False | 用户登录 |
file_load | /file_load | userid,fileList | True/False | 文本文件上传 |
predict | /predict | content | [userid,content,resultlist] | 对文本进行分析 |
feedback | /feedback | userid,content,resultlist | True/False | 对问题进行反馈 |
get_result | /get_result | userid,content | [content/filelist,resultlist] | 下载分析结果 |
2、软件架构描述
软件架构模型是通过一组关键视图来描述的,同一个软件架构,由于选取的视角(Perspective)和抽象层次不同可以得到不同的视图,这样一组关键视图搭配起来可以完整地描述一个逻辑自洽的软件架构模型。一般来说,我们常用的几种视图有分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图和工作任务分配视图。
2.1、分解视图
分解是构建软件架构模型的关键步骤,分解视图
也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。
该系统的分解视图如下:

2.2、依赖视图
依赖视图
展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。在项目计划中,依赖视图可以帮助我们找到没有依赖关系的软件模块或子系统,以便独立开发和测试,同时进一步根据依赖关系确定开发和测试软件模块的先后次序。
该系统的依赖视图如下:

2.3、执行视图
执行视图
展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件,都是不同于其他组件的执行实体。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。
该系统的流程图如下:

2.4、实现视图
实现视图
是描述软件架构与源文件之间的映射关系。实现视图有助于码农在海量源代码文件中找到具体的某个软件单元的实现。实现视图与软件架构的静态结构之间映射关系越是对应的一致性高,越有利于软件的维护,因此实现视图是一种非常关键的架构视图。
该系统的源文件目录树主要结构如下:
|-- senti_analysis 主要对传入的文本进行分析处理
||-- Model.py 数据库模型以及相关操作,负责和数据库交互,进行数据处理
||-- urls.py URL配置表文件,主要是将URL映射到应用程序上
||-- view.py 保存响应各种请求的函数或者类
||-- routes 路由配置
|--train_model 主要复杂模型的训练
||--... 与第一个模块结构类似
|--user 用户相关的业务处理
||--... 与第一个模块结构类似
|--administrator 管理员相关的业务处理
||--... 与第一个模块结构类似
|--templates 存放html静态模板的
|--static 放css和js这些静态文件
|-- utils 常用工具
|--manage.py 自动创建,它是django的任务管理命令行工具
2.5、工作分配视图
工作分配视图
工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。

3、数据库设计
(1)Data表

(2)Model表

(3)Administrator表

(4)User表

(5)User_Manage表

4、软件系统运行环境和技术选型
本系统应用多种深度学习模型对输入的文本进行情感分析,为了使系统的运行逻辑更加清晰,因此采取了前后端分离的方式对其进行更高效的处理。后端的搭建采用Pycharm使用Django框架进行开发,该框架具有强大的后台管理模块和方便的ORM操作模块,前端部分采用HTML、CSS、JavaScript等技术实现用户界面的开发,对于后期在训练数据上可能会存在不足可能会通过scrapy框架来进行获取。
该系统的运行环境如及相关技术如下所示:
(1)开发主要使用语言及相关技术:Python,Django框架,相关的深度学习模型,HTML、CSS、JavaScript。
(2)系统后台数据库:MySQL数据库。
(3)数据库可视化管理工具:SQLyogEnt。
(4)开发软件:Pycharm。
(5)浏览器:Google Chrome(谷歌浏览器)/ Firefox(火狐浏览器)/ IE浏览器。
5、系统概念原型的核心工作机制
本系统主要包括用户和管理员两个用例,核心工作机制描述如下:
(1)用户首次使用该系统时需要注册账号,注册完成验证账号后可使用该账户正常登录;
(2)用户登录后可以选择对一句话或一段话进行分析,若存在批量文件可按照固定格式对文件进行上传分析;
(3)用户可在线查看分析结果,若有需要可对分析结果进行下载;
(4)如果用户对分析结果存在疑问,可将结果进行反馈,该文本及相应处理结果会存储到相应的位置;
(5)管理员可对该反馈进行处理,并返回给用户一个结果,同时管理员可通过根据相应内容对数据及模型进行相应调整;