一、项目介绍
我的工程实践项目是偏研究类型的NLP领域任务,细分则是情感类对话生成任务,考虑在此次作业将工程实践的相应技术封装成一个聊天机器人的项目。
整个项目的工作流程可大致描述如下:
在聊天机器人系统中,用户给系统输入一句话(可以是问询式或仅仅是闲聊),系统根据用户输入的句子进行回复(这个回复的生成不仅考虑了输入句子的内容,也考虑了其情感性),用户得到回答后可以给这个回复进行打分评价,管理员收集这些信息以便后续的模型优化和训练集集扩张。
二、软件架构设计方案
本项目的基于MVC框架模式进行开发,即Model(模型)-View(视图)-Controller(控制器)。
-
M即model,模型是是应用程序中用于处理应用程序数据逻辑的部分。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,具有复用性,这样使得一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
-
V即View,视图是指用户看到并与之交互的界面。比如我们平时上网所见的由HTML/CSS编写而成的网页界面,或者软件app的用户交互界面。要注意的是,在视图层中其实没有真正的处理发生,这交由其他两层进行处理,它只是作为一种输出数据并允许用户操纵的方式。
-
C即controller,控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。正是由于它的存在,使得视图层与模型层能够解耦合。
将上述关系用一张直观的图来进行描述如下:
三、软件概念模型
1. 分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。
分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。
1)用户分解视图
2)管理员分解视图
3)系统分解视图
2. 依赖视图
依赖视图在项目计划中有比较典型的应用。比如它能帮助我们找到没有依赖关系的软件模块或子系统,以便独立开发和测试,同时进一步根据依赖关系确定开发和测试软件模块的先后次序。
依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。
依赖视图在项目的变更和维护中也很有价值,比如它能有效帮助我们理清一个软件模块的变更对其他软件模块带来影响范围。
-
用户与系统对话,系统输出回答,存储到对话数据;
-
用户可以对系统给出的回答进行打分评价;
-
一个账户的历史对话数据应与特定账号绑定;
-
得到评分后的对话数据可以用来优化NLP模型。
3. 执行视图
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。
用户执行视图
管理员执行视图
4. 实现视图
实现视图有助于码农在海量源代码文件中找到具体的某个软件单元的实现。实现视图与软件架构的静态结构之间映射关系越是对应的一致性高,越有利于软件的维护,因此实现视图是一种非常关键的架构视图。
5. 部署视图
部署视图是将执行实体和计算机资源建立映射关系。这里的执行实体的粒度要与所部署的计算机资源相匹配,比如以进程作为执行实体那么对应的计算机资源就是主机,这时应该描述进程对应主机所组成的网络拓扑结构,这样可以清晰地呈现进程间的网络通信和部署环境的网络结构特点。
6. 工作分配视图
姓名 | 学号 | 项目任务分工 |
---|---|---|
张三 | SA20225XXX | 构建并训练模型,后端开发 |
赵四 | SA20225XXX | 数据预处理,项目架构,后端开发 |
王五 | SA20225XXX | UI设计,前端开发 |
四、数据库设计
1. 用户表
字段名称 | 类型 | 注释 |
---|---|---|
username | string | 用户名 |
password | string | 密码 |
person_type | string | 用户类型 |
phone_number | string | 电话号码 |
string | 电子邮箱 | |
user_id | int | 用户ID |
2. 管理员表
字段名称 | 类型 | 注释 |
---|---|---|
username | string | 用户名 |
password | string | 密码 |
admin_id | int | 管理员ID |
authority | string | 管理员权限 |
3. 对话记录表
字段名称 | 类型 | 注释 |
---|---|---|
input_sentence | string | 用户输入的句子 |
output_sentence | string | 模型输出的句子 |
4. 模型表
字段名称 | 类型 | 注释 |
---|---|---|
model_params | matrix | 构成模型的参数 |
model_data | string | 模型用到的数据 |
model_version | string | 模型版本 |
五、核心工作机制