前言
本人的工程實踐項目是基於深度學習的文本情感分析系統,其主要功能是對輸入的文本進行相應的情感分析,並給出不同情感的預測得分,並返回最有可能的情感極性(積極、中立和消極甚至更細致的划分)。該系統在在用戶挖掘、垃圾郵件過滅及輿情分析等多個領域具有重要的應用價值。
本文將基於該項目來進行分析,通過總結項目設計方案中所蘊含的軟件架構模型,並采用分解視圖、依賴視圖、執行視圖、實現視圖、工作分配視圖來描述項目的軟件系統概念原型。
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)管理員可對該反饋進行處理,並返回給用戶一個結果,同時管理員可通過根據相應內容對數據及模型進行相應調整;