羅璐瑩, 李婧妍, 丁思文, 李兆發(fā), 王夢琴, 晏嘉俊, 吳文娟, 王淑琴
1(天津師范大學(xué) 軟件學(xué)院, 天津 300387)
2(天津師范大學(xué) 文學(xué)院, 天津 300387)
3(天津師范大學(xué) 計算機(jī)與信息工程學(xué)院, 天津 300387)
詩詞對提高文化素養(yǎng)、培養(yǎng)審美情趣有深遠(yuǎn)影響.2014 年9 月, 在實地訪問北京師范大學(xué)時, 面對古代經(jīng)典詩詞的現(xiàn)狀, 習(xí)主席如此感嘆: “我很不希望把古代經(jīng)典的詩詞和散文從課本中去掉, 應(yīng)該把這些經(jīng)典嵌在學(xué)生的腦子里, 成為中華民族的文化基因.”
從習(xí)主席寫詩詞到他在眾多場合談詩詞, 都可以體現(xiàn)出習(xí)主席對于詩詞文化的重視, 也引發(fā)我們在新時代中對于文化傳承教育的反思. 現(xiàn)如今, 國人對于詩詞的理解令人擔(dān)憂, 深究其中緣由, 一是詩詞顯現(xiàn)的內(nèi)容與思想感情和當(dāng)代人的生活存在客觀距離; 二是當(dāng)代人內(nèi)心浮躁, 難以靜下心學(xué)習(xí)含蓄隱晦的詩詞. 三是詩詞學(xué)習(xí)方式的枯燥乏味, 單一的背誦已無法滿足當(dāng)代人的詩詞學(xué)習(xí)需求. 綜上所述, 提升人們詩詞學(xué)習(xí)興趣已迫在眉睫.
近幾年, 互聯(lián)網(wǎng)通信產(chǎn)業(yè)規(guī)模增長迅速, 手機(jī)等移動設(shè)備日益推廣, 移動教育領(lǐng)域成為新熱點(diǎn)[1]. 移動端的發(fā)展, 給人們的生活帶來了諸多便捷, 也滿足了當(dāng)前人們生活學(xué)習(xí)的需求. 目前, 國內(nèi)的主流教育類APP主要有內(nèi)容型、工具型、社區(qū)型、平臺型和管理型5 個大類[2], 其中, 排名top15 的主要是內(nèi)容型、工具型以及社區(qū)型3 類且劣勢頗多: 題目搜索不夠精準(zhǔn), 準(zhǔn)確率較低; 廣告植入以及收費(fèi)項目過多; 對人工智能的應(yīng)用只停留在拍照搜題、語音輸入等階段, 缺少針對學(xué)習(xí)者的個性化定制及人工智能更高層次的應(yīng)用. 同時,目前大部分教育類APP 都是和數(shù)理化等科目相關(guān)的,致力于語文學(xué)習(xí)的內(nèi)容很少, 詩詞類APP 更是少之又少. 而僅有的幾款詩詞類APP 都只涉及到了詩詞的注解、譯文, 并不能由提供的字詞產(chǎn)生新的古詩, 以幫助用戶更好地應(yīng)用詩詞、理解詩詞. 與圖像識別技術(shù)的結(jié)合可以使生活與詩詞融為一體, 更能促進(jìn)詩詞的傳承與發(fā)揚(yáng). 而目前已有的詩詞類APP 也未結(jié)合圖像識別技術(shù), 使人“所見即所得”, 即所見物品可以由圖像識別技術(shù)識別, 得到與之相關(guān)的詩詞.
綜合以上所有信息, 開發(fā)一個結(jié)合圖像識別與深度學(xué)習(xí)的、面向?qū)υ娫~抱有濃厚興趣及對詩詞學(xué)習(xí)存在需求的人的移動端古詩詞學(xué)習(xí)系統(tǒng)具有深遠(yuǎn)意義.
為提升當(dāng)代人的詩詞興趣, 將詩詞與現(xiàn)代人生活進(jìn)行聯(lián)系, 系統(tǒng)需依據(jù)科技現(xiàn)狀與當(dāng)代人生活需求進(jìn)行設(shè)計. 適用對象包括對詩詞抱有濃厚興趣者及對詩詞學(xué)習(xí)存在需求者.
系統(tǒng)模塊主要包括詩詞、論壇以及商城, 見圖1.
圖1 系統(tǒng)功能結(jié)構(gòu)圖
(1) 詩詞模塊
1) AR 智能識圖: 通過手機(jī)攝像頭掃描身邊景物,系統(tǒng)對當(dāng)前物品進(jìn)行識別, 進(jìn)而推薦出與其相關(guān)古詩詞.
2) 詩詞查詢: 點(diǎn)擊推薦詩詞, 或通過搜索框查找并選擇相應(yīng)詩句, 能出現(xiàn)詳細(xì)注釋、翻譯, 有助于詩詞學(xué)習(xí)者對古詩詞的快速記憶.
3) 古詩文推送: 通過tag 分類、統(tǒng)計日常搜索關(guān)鍵詞、不同種詩詞瀏覽時間及點(diǎn)擊量等推薦古詩詞,有助于培養(yǎng)古詩詞學(xué)習(xí)興趣. 古詩文推送也會在搜索框界面下統(tǒng)計并推薦當(dāng)日搜索量前10 的熱點(diǎn)詩詞.
4) 古詞生成: 根據(jù)關(guān)鍵詞自動生成藏頭詩, 或直接生成古詩.
(2) 論壇模塊
社區(qū)論壇讓用戶暢所欲言, 交流分享學(xué)習(xí)感悟.
(3) 商城模塊
按照點(diǎn)擊量, 購買量及用戶喜好進(jìn)行商品推薦, 用戶可進(jìn)行商品瀏覽收藏及購買.
系統(tǒng)軟件采用Client/Server (客戶/服務(wù)器)結(jié)構(gòu),使系統(tǒng)的穩(wěn)定、靈活及安全得以充分保證. 客戶端采用Flutter 框架提供的開發(fā)環(huán)境與模式, 后臺數(shù)據(jù)庫采用MySQL 關(guān)系型數(shù)據(jù)庫管理系統(tǒng), 利用其容錯機(jī)制與事務(wù)處理功能, 以保證數(shù)據(jù)的完整與一致.
1.2.1 數(shù)據(jù)流程設(shè)計
根據(jù)系統(tǒng)的數(shù)據(jù)需求及流向, 見圖2, 系統(tǒng)涉及到智能識圖系統(tǒng)、古詩生成系統(tǒng)以及APP 系統(tǒng)3 個系統(tǒng). 智能識圖系統(tǒng)負(fù)責(zé)對拍出圖片進(jìn)行識別, 進(jìn)而推薦相關(guān)詩詞. 古詩生成系統(tǒng)負(fù)責(zé)生成藏頭詩或隨機(jī)生成一首古詩, APP 系統(tǒng)負(fù)責(zé)完成包括古詩詞查詢、理解、交流在內(nèi)的古詩詞學(xué)習(xí)體系以及用戶身份認(rèn)證、個人信息登記以及操作信息查詢.
圖2 數(shù)據(jù)流向圖
1.2.2 系統(tǒng)界面功能設(shè)計
(1) 主頁
1) AR 智能識圖及古詩生成: 通過手機(jī)攝像頭拍攝, 識別出當(dāng)前實物, 并推薦出相關(guān)古詩詞, 點(diǎn)擊所需古詩詞, 或通過搜索框查找并選擇相應(yīng)詩句, 能出現(xiàn)詳細(xì)注釋及翻譯. 古詞生成部分可根據(jù)關(guān)鍵詞自動生成藏頭詩或直接生成古詩.
2) 趣味游戲.
3) 詩詞搜索: 可于搜索框中搜索感興趣的文章.
(2) 商城頁面
進(jìn)行商品推薦, 提供詩詞相關(guān)交易平臺.
(3) 社區(qū)頁面
瀏覽其他用戶動態(tài), 交流詩詞感受.
(4) 個人界面
1) 注冊與登錄: 輸入手機(jī)號或郵箱注冊并登錄.
2) 個人信息登記與更改: 用戶點(diǎn)擊頭像或用戶名,進(jìn)入個人信息更改界面, 可更改用戶頭像、用戶名、性別、個性簽名、所在地、手機(jī)號與郵箱等個人信息.
3) 消息: 可瀏覽收到的消息, 用戶個人發(fā)表的帖子及評論, 可一鍵已讀.
4) 我的收藏: 可瀏覽已收藏的帖子、商品及詩詞.
5) 歷史記錄: 可瀏覽曾讀過的商品、詩詞、帖子、識圖及游戲.
6) 設(shè)置: 可進(jìn)行個人隱私設(shè)置、消息設(shè)置, 瀏覽用戶協(xié)議及隱私條款, 可聯(lián)系工作人員、退出登錄.
7) 管理員入口.
本文針對項目需求, 提煉關(guān)鍵技術(shù)點(diǎn)進(jìn)行系統(tǒng)開發(fā), 從數(shù)據(jù)庫、古詩詞推薦、圖像識別的實現(xiàn)、古詩詞生成的實現(xiàn)以及安全性5 個方面進(jìn)行開發(fā).
由MySQL 的特性, 設(shè)計系統(tǒng)邏輯, 見圖3.
圖3 數(shù)據(jù)庫關(guān)系表
(1) 用戶表(user): 存儲用戶注冊信息, 賬戶及店鋪狀態(tài).
(2) 作者表(author): 存儲詩人的編號和個人介紹, 根據(jù)編號與詩詞表(poetry)相連接完成搜索和推薦等功能.
(3) 標(biāo)簽表(tag): 保存標(biāo)簽, 根據(jù)用戶對不同標(biāo)簽的搜索及詩詞的點(diǎn)擊率完成推薦, 每個詩人及每首詩詞都會對應(yīng)不同標(biāo)簽, 用戶也可根據(jù)收藏對應(yīng)的標(biāo)簽更方便搜索. 商品表(mallf)、店鋪表(malls)、訂單表(mallt)用于確定店鋪以及訂單信息, 管理員表(manager)和超級管理員表(supermanager)用于存儲管理員及超級管理員的信息及其操作記錄, 可以對用戶進(jìn)行封號,將貼子升為精品貼等操作. 最終所有表由用戶表(user)和標(biāo)簽表(tag)串聯(lián).
經(jīng)驗證, 該數(shù)據(jù)庫滿足巴斯-科德范式, 在使用中可正常進(jìn)行修改, 插入和刪除操作[3].
推薦算法依據(jù)用戶所產(chǎn)生數(shù)據(jù), 利用數(shù)學(xué)算法, 進(jìn)而預(yù)測用戶行為興趣. 對于系統(tǒng)中相關(guān)商品推薦、古詩詞個人推薦、論壇等使用場景, 推薦算法都具有很高的價值. 推薦算法有很多種, 在此之中, 基于協(xié)同過濾的推薦算法(collaborative filtering recommendation)在推薦系統(tǒng)中具有重要地位, 它對數(shù)據(jù)源無特定要求,圖像、視頻、物品等非結(jié)構(gòu)化內(nèi)容都能進(jìn)行處理[4]. 皮爾森相關(guān)系數(shù)(Pearson product-moment correlation coefficient)用于度量X和Y兩個變量的相關(guān) (線性相關(guān)), 值介于-1 與1 之間. 相關(guān)系數(shù)越高, 就意味著兩變量的共變部分越多, 便越能精確的通過一個變量預(yù)測另一個變量[5]. 在自然科學(xué)領(lǐng)域中, 此系數(shù)被廣泛應(yīng)用在衡量兩變量相關(guān)程度上. 兩變量間的協(xié)方差和標(biāo)準(zhǔn)差的商是皮爾森相關(guān)系數(shù)定義, 計算公式如下:
通過以下取值范圍判斷變量的相關(guān)強(qiáng)度, 見表1.
表1 相關(guān)度判斷表
系統(tǒng)采用基于皮爾森相關(guān)系數(shù)的協(xié)同過濾推薦算法對用戶可能喜歡的古詩詞、商品等進(jìn)行推薦, 并考慮以下因素:
(1) 用戶自身屬性, 如性別年齡.
(2) 產(chǎn)品自身屬性, 如種類.
(3) 用戶歷史數(shù)據(jù), 如瀏覽、收藏記錄.
記錄以上數(shù)據(jù)作為數(shù)據(jù)源, 計算變量之間的相關(guān)系數(shù)即可進(jìn)行初步的推薦, 但相關(guān)系數(shù)有一個明顯的缺點(diǎn), 即它接近于1 的程度與數(shù)據(jù)組數(shù)n相關(guān),n較小時, 相關(guān)系數(shù)的波動會較大.
推薦系統(tǒng)需要根據(jù)大量的用戶數(shù)據(jù)訓(xùn)練數(shù)據(jù)模型,沒有數(shù)據(jù)集就無法對用戶行為興趣進(jìn)行預(yù)測并推薦,這就是冷啟動問題.
冷啟動問題主要包括3 種類型[6]:
(1) 用戶冷啟動: 如何為新用戶進(jìn)行個性化推薦.
(2) 物品冷啟動: 如何將新物品推薦給適當(dāng)用戶.
(3) 系統(tǒng)冷啟動: 如何為新創(chuàng)立網(wǎng)站在無歷史數(shù)據(jù)時進(jìn)行個性化推薦.
未繼承數(shù)據(jù)的全新系統(tǒng), 都會遇到以上3 類問題.為解決這一問題, 在采集到足夠的數(shù)據(jù)前, 使用以下解決方案:
(1) 根據(jù)用戶信息分類, 即根據(jù)性別、年齡等對用戶進(jìn)行粗略地分類, 提供粗粒度的個性化推薦.
將同一性別年齡段的用戶視為同類用戶, 分別計算不同類別的用戶關(guān)注度, 便可以對同類用戶按熱度等進(jìn)行粗略推薦[7].
(2) 按熱度、時間等推薦, 即根據(jù)點(diǎn)擊量、收藏、發(fā)布時間等數(shù)據(jù)提供非個性化推薦.
非個性化的推薦可以實現(xiàn)“0”數(shù)據(jù)量依賴, 僅按發(fā)布時間、熱度等排序推薦更加客觀且能在任何情況下使用, 可以作為個性化的輔助并行.
(3) 豐富冷啟動過程中可獲得的用戶和物品特征,如引導(dǎo)用戶填寫的如興趣領(lǐng)域、職業(yè)等調(diào)查.
(4) 使用“探索與利用”機(jī)制, 平衡新數(shù)據(jù)的探索及舊數(shù)據(jù)的利用間“新”與“舊”的關(guān)系, 一方面收集新數(shù)據(jù), 一方面暫時使用相近的舊數(shù)據(jù). 使系統(tǒng)既能夠利用舊數(shù)據(jù)進(jìn)行推薦, 又能使得冷啟動物品獲得曝光的傾向, 高效地探索冷啟動的物品的屬性, 快速收集冷啟動數(shù)據(jù).
如新用戶注冊時, 僅能獲知年齡性別等數(shù)據(jù), 推薦系統(tǒng)便使用方法(1)對新用戶進(jìn)行初步推薦. 對同一類別的用戶行為如點(diǎn)擊、瀏覽時長等統(tǒng)計并加權(quán)計算熱度, 按熱度排序推薦, 記為a. 同時收集“新數(shù)據(jù)”, 記錄下該用戶近期點(diǎn)擊的關(guān)鍵詞、收藏物品等, 檢索具有同樣關(guān)鍵詞的用戶, 計算皮爾森相關(guān)系數(shù). 取相關(guān)度最高的k個用戶, 將這k個用戶喜愛的物品詩詞作為要推薦的備選, 并加權(quán)計算, 記為b. 在“新數(shù)據(jù)”較少時,皮爾森相關(guān)系數(shù)的波動大, 推薦并不一定準(zhǔn)確. 此時可以偏重于“舊數(shù)據(jù)”, 多推薦a, 隨著“新數(shù)據(jù)”的加多, 結(jié)果逐漸準(zhǔn)確, 便可使用b逐步取代a, 以獲得更佳的推薦效果.
具體如下:
測試用戶q1新注冊時, 數(shù)據(jù)僅有女、23 歲. 在female 20 類別中統(tǒng)計熱度前5 的商品為背包、手袋、飾品、筆記本、潮流穿搭, 并推薦以上商品.
收集一定數(shù)據(jù)后,q1與q2,q3,…,qk具有同類的興趣關(guān)鍵詞, 通過公式計算這k名用戶間皮爾森相關(guān)系數(shù), 由大到小排序, 前3 個結(jié)果分別為0.986, 0.863,0.802.
選擇這3 個用戶的相關(guān)商品分別計算, 如第1、3 個用戶均喜愛某一商品, 則該商品的推薦度為0.986+0.802=1.788, 同理得出各商品的推薦度并推薦.
如今, 在機(jī)器視覺中, 卷積神經(jīng)網(wǎng)絡(luò) (CNN)具有極其遠(yuǎn)大的前景. 目前為止, 已有很多高機(jī)能CNN 結(jié)構(gòu),如 VGG, LeNet, ResNet 等. 這些結(jié)構(gòu)被利用在識別與檢測的任務(wù)中, 精確度甚至能超過人類的感覺器官[8].
伴隨大數(shù)據(jù)時代, 有更多隱含層的深度卷積神經(jīng)網(wǎng)絡(luò)有龐大的網(wǎng)絡(luò)結(jié)構(gòu), 較于傳統(tǒng)的機(jī)器學(xué)習(xí), 有更強(qiáng)的特征學(xué)習(xí)、特征表達(dá)能力. 目前, 卷積神經(jīng)網(wǎng)絡(luò)在目標(biāo)檢測中已被廣泛使用[9]. 其中, 基于區(qū)域的卷積神經(jīng)網(wǎng)絡(luò)發(fā)展非常迅速, 包括R-CNN、Fast R-CNN、Faster R-CNN、MS-CNN. R-CNN 采用 Selective Search 方法得到物體候選框, 然后送入卷積神經(jīng)網(wǎng)絡(luò)中進(jìn)行特征提取, 最后利用SVM 分類器獲得最終的結(jié)果, 該方法效率低, 計算復(fù)雜. Fast R-CNN 使用ROI 池化層, 從而得到候選框, 雖檢測的效率得以提升, 但候選框的提取所需時間過長, 從而使整體的檢測效率降低. Faster R-CNN 設(shè)計了一個RPN 以生成區(qū)域建議框, 為提高速度與性能, 其采用了共享卷積層這一特性. Faster R-CNN模型是目前為止RCNN 系列算法最杰出的產(chǎn)物, 也是two-stage 中最經(jīng)典的物體檢測算法, Faster R-CNN 模型被應(yīng)用于本系統(tǒng). Faster R-CNN 可以簡單地看做“區(qū)域生成網(wǎng)絡(luò)RPN+Fast R-CNN”的系統(tǒng), 用區(qū)域生成網(wǎng)絡(luò)代替Fast R-CNN 中的Selective Search 方法[10]. 推理分成兩個階段:
(1) 尋找圖中未檢測物體的anchor 矩形框;
(2) 將anchor 框內(nèi)未檢測物體分成不同類. 它的思路是, 首先產(chǎn)生待檢測框, 然后將檢測框分類. Faster RCNN 利用神經(jīng)網(wǎng)絡(luò), 使待檢測框端到端的訓(xùn)練得以實現(xiàn)且大幅提速[11].
本文采用ResNet 網(wǎng)絡(luò)結(jié)構(gòu), ResNet 的網(wǎng)絡(luò)結(jié)構(gòu)深、參數(shù)量低, 這使它的分類效果極佳. 除此之外,ResNet 的結(jié)構(gòu)能大大提升神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度, 同時也能顯著提升模型的準(zhǔn)確率. ResNet50 是一種更加容易被優(yōu)化的模型, 是基于已有訓(xùn)練深度網(wǎng)絡(luò)提出的一種減輕了網(wǎng)絡(luò)訓(xùn)練負(fù)擔(dān)的殘差學(xué)習(xí)框架, 神經(jīng)網(wǎng)絡(luò)及精度都得到了增加. ResNet50 包含49 個卷積層及1 個全連接層, 共50 層, 其網(wǎng)絡(luò)結(jié)構(gòu)極其龐大[12], 見圖4.
圖4 ResNet50 網(wǎng)絡(luò)結(jié)構(gòu)示意圖
(1) 網(wǎng)絡(luò)結(jié)構(gòu)
整個Faster R-CNN 可分為3 部分:
1) backbone: 提取圖片特征, 為共享基礎(chǔ)卷積層.
2) RPN: 候選檢測框生成網(wǎng)絡(luò)(region proposal networks).
3) ROI pooling 與分類網(wǎng)絡(luò): 將候選檢測框分類,第2 次將候選框坐標(biāo)微調(diào). 輸出檢測結(jié)果.
(2) 模型遷移
固定特征提取層. 在對ResNet50 模型進(jìn)行加載時,每一次對參數(shù)值的更改在默認(rèn)情況下都將被存儲以用于訓(xùn)練的反向傳播圖中, 這使內(nèi)存需求大大增加. 遷移學(xué)習(xí)則使用ResNet50 模型, 大數(shù)據(jù)集ImageNet 已訓(xùn)練好大部分參數(shù), 所以僅需在模型初始化時凍結(jié)更新操作.
優(yōu)化全連接分類器. 為避免訓(xùn)練過程中的過擬合現(xiàn)象, 本文替換ResNet50 的最后一層, 然后把有256個輸出單元的線性層與最后一個全連接層的輸入進(jìn)行連接, 下一步連接ReLU 層和Dropout 層、256×40 的線性層, 進(jìn)而輸出Softmax 層.
(3) 模型配置
第1 步, 定義損失函數(shù). 本文的損失函數(shù)使用Metrics函數(shù).
第2 步, 定義優(yōu)化函數(shù), 本文的優(yōu)化函數(shù)為Adam 優(yōu)化算法. Adam 可以基于訓(xùn)練數(shù)據(jù)迭代更新神經(jīng)網(wǎng)絡(luò)權(quán)重,是一種可以替代傳統(tǒng)隨機(jī)梯度下降過程的一階優(yōu)化算法[13].
(4) 模型訓(xùn)練
1) backbone 利用ImageNet 預(yù)訓(xùn)練模型的初始化權(quán)重, 訓(xùn)練RPN 網(wǎng)絡(luò)要利用抽取樣品之后的正負(fù)例anchor 框. backbone 權(quán)重也參與微調(diào).
2) 利用在1)中訓(xùn)練好的RPN, 產(chǎn)生正例預(yù)測框,使用Faster R-CNN 分類網(wǎng)絡(luò)訓(xùn)練. 這時backbone 權(quán)值也由ImageNet 預(yù)訓(xùn)練模型進(jìn)行初始. 截止第2 步,Faster R-CNN 和RPN 利用兩個backbone, 無共享.
3) 使用2)中已訓(xùn)練完畢的Faster R-CNN 網(wǎng)絡(luò)中對應(yīng)的backbone 權(quán)值, 初始化RPN 網(wǎng)絡(luò)前的backbone,RPN 部分則利用第1 步的訓(xùn)練結(jié)果進(jìn)行初始化. 3)只微調(diào)RPN 中的權(quán)值. 截止第3 步, Faster R-CNN 與RPN開始共享backbone.
4) backbone 及RPN 權(quán)值不變, 利用2) 訓(xùn)練的Faster R-CNN 部分結(jié)果對Faster R-CNN 進(jìn)行初始化,再次進(jìn)行稍微調(diào)整的訓(xùn)練.
(5) 數(shù)據(jù)集及實現(xiàn)
在TensorFlow 2.0 深度學(xué)習(xí)框架上實現(xiàn)本文模型并對模型完成訓(xùn)練. 通過爬蟲技術(shù)得到相關(guān)數(shù)據(jù)集, 按照自然景物類別對其進(jìn)行分類, 共2 000 張圖片, 包含1 500 張訓(xùn)練集和500 張驗證集, 圖像格式均為JPG 格式, 如圖5, 圖6 所示.
圖5 數(shù)據(jù)集1
圖6 數(shù)據(jù)集2
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN) 是機(jī)器學(xué)習(xí)中處理與預(yù)測序列數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)模型. 循環(huán)結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)打破了傳統(tǒng)機(jī)器學(xué)習(xí)方法中的諸多限制, 讓它在深度學(xué)習(xí)領(lǐng)域中占據(jù)了重要地位. RNN 和它的變體網(wǎng)絡(luò)在多個領(lǐng)域取得了中成功, 特別是當(dāng)數(shù)據(jù)中有一定時間依賴性時[14]. RNN 可以有效地對序列數(shù)據(jù) (例如語言文本) 進(jìn)行學(xué)習(xí), 提取序列數(shù)據(jù)中的非線性特征.RNN 之所以稱為循環(huán)神經(jīng)網(wǎng)絡(luò), 與一個序列當(dāng)前的輸出與前面的輸出相關(guān)[15], 具體表現(xiàn)為網(wǎng)絡(luò)會記憶前面的信息且在現(xiàn)在輸出的計算中進(jìn)行應(yīng)用, 即隱藏層之間的節(jié)點(diǎn)不再無連接而是有連接的, 并且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出[16].
所有 RNN 都具有一種重復(fù)神經(jīng)網(wǎng)絡(luò)模塊的鏈?zhǔn)降男问絒17]. 在標(biāo)準(zhǔn) RNN 中, 這些重復(fù)模塊僅包含一個簡單結(jié)構(gòu), 例如一個 tanh 層. LSTM 亦為此結(jié)構(gòu), 但重復(fù)的模塊擁有一個不同的結(jié)構(gòu). 不同于單一神經(jīng)網(wǎng)絡(luò)層, 這里是有4 個, 以一種非常特殊的方式進(jìn)行交互[18].整體上除了隱藏狀態(tài)h在隨時間流動, 細(xì)胞狀態(tài)c也在隨時間流動, 細(xì)胞狀態(tài)c就代表著長期記憶. Seq2Seq 模型是輸出的長度不確定時采用的模型. Seq2Seq 解決問題的主要思路是通過深度神經(jīng)網(wǎng)絡(luò)模型(常用的是LSTM)將一個作為輸入的序列映射為一個作為輸出的序列, 這一過程由編碼輸入(encoder) 與解碼輸出(decoder)兩個環(huán)節(jié)組成[19]. 相比之下, LSTM 結(jié)構(gòu)更為復(fù)雜, RNN 簡單易于實現(xiàn). 因此本文選用RNN 來實現(xiàn)古詩生成.
(1) 功能介紹
1) 生成古詩: 利用模型隨機(jī)生成一首古詩.
2) 生成藏頭詩: 用戶輸入4 個關(guān)鍵字, 利用模型生成一首藏頭詩.
(2) 實現(xiàn)過程
建立函數(shù), 輸出預(yù)測結(jié)果: 分別建立隨機(jī)生成古詩函數(shù)和藏頭詩生成函數(shù), 即分別建立模型訓(xùn)練, 預(yù)測出來對應(yīng)字典編號, 最后轉(zhuǎn)化為相應(yīng)字符輸出.
RNN 模型的建立: 定義變量; 使用RNN 中的函數(shù)建立神經(jīng)元. 此時建立的神經(jīng)元cell 對象即為加載數(shù)據(jù)的張量對象, initial_state 對象為詞向量的初始化即為初始為0; 定義embedding, 將詩詞的文字對應(yīng)索引分別轉(zhuǎn)化為變量; 建立網(wǎng)絡(luò)層, 使用Softmax 激活函數(shù);使用均方差函數(shù)定義損失函數(shù)值, 使用梯度下降算法和優(yōu)化器減少損失.
梯度爆炸(gradients exploding) 以及梯度彌散(gradients disappearing)是RNN 會遇到的問題. LSTM可解決梯度彌散的問題, 但是gradients 仍然可能會爆炸, 因此我們通過采用gradient clippling 的方式來防止梯度爆炸. 即通過設(shè)置一個閾值, 當(dāng)gradients 超過這個閾值時, 就將它重置為閾值大小, 這就保證了梯度不會變得很大.
(3) 生成效果
由于前期并沒有平仄處理, 生成的唐詩可能對仗不太工整. 下面是效果測試, 第1 首是隨機(jī)生成, 第2 首則是以“深度學(xué)習(xí)”為關(guān)鍵字的藏頭詩, 見圖7.
圖7 古詩生成效果圖
前后端分離的開發(fā)方式以接口為標(biāo)準(zhǔn)分別開發(fā)各自的功能, 少不了調(diào)用接口來進(jìn)行業(yè)務(wù)交互, 這就造成了被人惡意利用請求獲取到數(shù)據(jù)的隱患. APP 內(nèi)集成了用戶個人信息、商城、社區(qū)等多種信息及功能, 一旦發(fā)生泄露將對用戶的隱私、財產(chǎn)安全造成巨大影響.因此, 應(yīng)當(dāng)提高對數(shù)據(jù)安全性的重視.
(1) 通信使用https
http 協(xié)議是一種明文傳輸協(xié)議, 交互過程及數(shù)據(jù)傳輸過程都未加密, 通信雙方也沒有相互認(rèn)證, 通信過程極其容易被獲得、篡改. 而https 利用SSL/TLS 建立全信道, 對數(shù)據(jù)包加密, 提供身份認(rèn)證, 更能保護(hù)交換數(shù)據(jù)的完整與隱私性.
(2) 身份確認(rèn)機(jī)制
Token 為服務(wù)器端生成的特定字符串. 初次登錄時, 用戶可輸入賬戶密碼或使用驗證碼以確定合法身份. 驗證后, 服務(wù)器便生成一個token 返回給客戶端, 之后凡是需要驗證的地方客戶端只用攜帶該token 請求數(shù)據(jù), 不用再攜帶用戶名和密碼. 服務(wù)器端驗證token,成功時正常返回客戶端所請求的結(jié)果, 失敗則返回錯誤信息, 并讓用戶重新登錄. Token 設(shè)定有效期, 每一次請求時服務(wù)器端都重新驗證token 和有效期.
(3)使用加解密算法
為了防止提交到接口的明文泄密, 可以對提交到接口的數(shù)據(jù)加密, 本系統(tǒng)使用AES 進(jìn)行接口加密. 高級加密標(biāo)準(zhǔn)(advanced encryption standard, AES)為最常見的對稱加密算法[20].
Flutter 打包環(huán)境為Android studio 3.2.
在terminal 執(zhí)行命令并生成key, Android studio 內(nèi)創(chuàng)建key.properties.
修改build.gradle 中的配置.
執(zhí)行flutter build apk, 安裝應(yīng)用到真機(jī).
服務(wù)器選擇阿里云服務(wù)器, 將war 包用xftp 放到tomcat 的webapp 目錄下, 打包項目部署到服務(wù)器, 運(yùn)行測試, 測試效果見第3.2 節(jié).
對系統(tǒng)關(guān)鍵環(huán)節(jié)進(jìn)行測試.如圖8(a)左為個人界面, 主要有登錄注冊、身份信息更改以及消息處理等功能. 其中登錄注冊部分, 可進(jìn)行賬號的登錄注冊以及密碼重置. 身份信息更改部分可更改用戶名、頭像、性別、個性簽名、所在地、手機(jī)號以及郵箱等, 可進(jìn)行實名認(rèn)證. 同時可處理收到的消息, 瀏覽歷史記錄及收藏夾. 圖8(b)、圖8(c),圖9(a)為古詩詞生成界面. 古詩生成包括隨機(jī)生成和藏頭詩兩種方式. 其中古詩隨機(jī)生成, 可系統(tǒng)直接生成詩詞. 藏頭詩部分在輸入框中填寫4 個關(guān)鍵字, 點(diǎn)擊生成鍵, 系統(tǒng)生成藏頭詩. 圖9(b)為圖像識別界面, 點(diǎn)擊主界面拍照按鈕, 系統(tǒng)識別景物, 顯示識別結(jié)果以及相關(guān)詩詞. 圖9(c), 圖10(a)、圖10(b)為商城界面, 點(diǎn)擊商城, 可瀏覽人氣推薦以及系統(tǒng)推薦好物. 點(diǎn)擊搜索框,可搜索具體商品及看到其詳細(xì)信息. 圖10(c)為社區(qū)界面可瀏覽評論其他用戶動態(tài), 發(fā)布帖子, 交流詩詞感受.經(jīng)測試, 各項功能均滿足要求.
圖8 系統(tǒng)效果圖1
圖9 系統(tǒng)效果圖2
圖10 系統(tǒng)效果圖3
本文介紹了移動端古詩詞學(xué)習(xí)系統(tǒng)的研究與應(yīng)用.面向?qū)υ娫~有深厚興趣的人群, 綜合比較截止目前市面上的古詩詞學(xué)習(xí)系統(tǒng), 從而建立結(jié)合圖像識別與深度學(xué)習(xí)的移動端古詩詞學(xué)習(xí)系統(tǒng). 本文設(shè)計的移動端古詩詞學(xué)習(xí)系統(tǒng), 可直接生成古詩或利用用戶提供的字詞進(jìn)行藏頭詩的生成, 以幫助用戶更好地應(yīng)用詩詞、理解詩詞. 同時結(jié)合圖像識別技術(shù), 使人“所見即所得”, 即看到的物品可通過圖像識別技術(shù)進(jìn)行識別,進(jìn)而得到與之相關(guān)的詩詞, 使我們的生活與詩詞融為一體, 促進(jìn)詩詞的傳承與發(fā)揚(yáng), 本課題所涉及的移動端古詩詞學(xué)習(xí)系統(tǒng)具有推廣的意義.