一、項目介紹
我的工程實踐項目是偏研究類型的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 | 模型版本 |
五、核心工作機制