羅璐瑩, 李婧妍, 丁思文, 李兆發(fā), 王夢(mèng)琴, 晏嘉俊, 吳文娟, 王淑琴
1(天津師范大學(xué) 軟件學(xué)院, 天津 300387)
2(天津師范大學(xué) 文學(xué)院, 天津 300387)
3(天津師范大學(xué) 計(jì)算機(jī)與信息工程學(xué)院, 天津 300387)
詩(shī)詞對(duì)提高文化素養(yǎng)、培養(yǎng)審美情趣有深遠(yuǎn)影響.2014 年9 月, 在實(shí)地訪問北京師范大學(xué)時(shí), 面對(duì)古代經(jīng)典詩(shī)詞的現(xiàn)狀, 習(xí)主席如此感嘆: “我很不希望把古代經(jīng)典的詩(shī)詞和散文從課本中去掉, 應(yīng)該把這些經(jīng)典嵌在學(xué)生的腦子里, 成為中華民族的文化基因.”
從習(xí)主席寫詩(shī)詞到他在眾多場(chǎng)合談詩(shī)詞, 都可以體現(xiàn)出習(xí)主席對(duì)于詩(shī)詞文化的重視, 也引發(fā)我們?cè)谛聲r(shí)代中對(duì)于文化傳承教育的反思. 現(xiàn)如今, 國(guó)人對(duì)于詩(shī)詞的理解令人擔(dān)憂, 深究其中緣由, 一是詩(shī)詞顯現(xiàn)的內(nèi)容與思想感情和當(dāng)代人的生活存在客觀距離; 二是當(dāng)代人內(nèi)心浮躁, 難以靜下心學(xué)習(xí)含蓄隱晦的詩(shī)詞. 三是詩(shī)詞學(xué)習(xí)方式的枯燥乏味, 單一的背誦已無法滿足當(dāng)代人的詩(shī)詞學(xué)習(xí)需求. 綜上所述, 提升人們?cè)娫~學(xué)習(xí)興趣已迫在眉睫.
近幾年, 互聯(lián)網(wǎng)通信產(chǎn)業(yè)規(guī)模增長(zhǎng)迅速, 手機(jī)等移動(dòng)設(shè)備日益推廣, 移動(dòng)教育領(lǐng)域成為新熱點(diǎn)[1]. 移動(dòng)端的發(fā)展, 給人們的生活帶來了諸多便捷, 也滿足了當(dāng)前人們生活學(xué)習(xí)的需求. 目前, 國(guó)內(nèi)的主流教育類APP主要有內(nèi)容型、工具型、社區(qū)型、平臺(tái)型和管理型5 個(gè)大類[2], 其中, 排名top15 的主要是內(nèi)容型、工具型以及社區(qū)型3 類且劣勢(shì)頗多: 題目搜索不夠精準(zhǔn), 準(zhǔn)確率較低; 廣告植入以及收費(fèi)項(xiàng)目過多; 對(duì)人工智能的應(yīng)用只停留在拍照搜題、語音輸入等階段, 缺少針對(duì)學(xué)習(xí)者的個(gè)性化定制及人工智能更高層次的應(yīng)用. 同時(shí),目前大部分教育類APP 都是和數(shù)理化等科目相關(guān)的,致力于語文學(xué)習(xí)的內(nèi)容很少, 詩(shī)詞類APP 更是少之又少. 而僅有的幾款詩(shī)詞類APP 都只涉及到了詩(shī)詞的注解、譯文, 并不能由提供的字詞產(chǎn)生新的古詩(shī), 以幫助用戶更好地應(yīng)用詩(shī)詞、理解詩(shī)詞. 與圖像識(shí)別技術(shù)的結(jié)合可以使生活與詩(shī)詞融為一體, 更能促進(jìn)詩(shī)詞的傳承與發(fā)揚(yáng). 而目前已有的詩(shī)詞類APP 也未結(jié)合圖像識(shí)別技術(shù), 使人“所見即所得”, 即所見物品可以由圖像識(shí)別技術(shù)識(shí)別, 得到與之相關(guān)的詩(shī)詞.
綜合以上所有信息, 開發(fā)一個(gè)結(jié)合圖像識(shí)別與深度學(xué)習(xí)的、面向?qū)υ?shī)詞抱有濃厚興趣及對(duì)詩(shī)詞學(xué)習(xí)存在需求的人的移動(dòng)端古詩(shī)詞學(xué)習(xí)系統(tǒng)具有深遠(yuǎn)意義.
為提升當(dāng)代人的詩(shī)詞興趣, 將詩(shī)詞與現(xiàn)代人生活進(jìn)行聯(lián)系, 系統(tǒng)需依據(jù)科技現(xiàn)狀與當(dāng)代人生活需求進(jìn)行設(shè)計(jì). 適用對(duì)象包括對(duì)詩(shī)詞抱有濃厚興趣者及對(duì)詩(shī)詞學(xué)習(xí)存在需求者.
系統(tǒng)模塊主要包括詩(shī)詞、論壇以及商城, 見圖1.

圖1 系統(tǒng)功能結(jié)構(gòu)圖
(1) 詩(shī)詞模塊
1) AR 智能識(shí)圖: 通過手機(jī)攝像頭掃描身邊景物,系統(tǒng)對(duì)當(dāng)前物品進(jìn)行識(shí)別, 進(jìn)而推薦出與其相關(guān)古詩(shī)詞.
2) 詩(shī)詞查詢: 點(diǎn)擊推薦詩(shī)詞, 或通過搜索框查找并選擇相應(yīng)詩(shī)句, 能出現(xiàn)詳細(xì)注釋、翻譯, 有助于詩(shī)詞學(xué)習(xí)者對(duì)古詩(shī)詞的快速記憶.
3) 古詩(shī)文推送: 通過tag 分類、統(tǒng)計(jì)日常搜索關(guān)鍵詞、不同種詩(shī)詞瀏覽時(shí)間及點(diǎn)擊量等推薦古詩(shī)詞,有助于培養(yǎng)古詩(shī)詞學(xué)習(xí)興趣. 古詩(shī)文推送也會(huì)在搜索框界面下統(tǒng)計(jì)并推薦當(dāng)日搜索量前10 的熱點(diǎn)詩(shī)詞.
4) 古詞生成: 根據(jù)關(guān)鍵詞自動(dòng)生成藏頭詩(shī), 或直接生成古詩(shī).
(2) 論壇模塊
社區(qū)論壇讓用戶暢所欲言, 交流分享學(xué)習(xí)感悟.
(3) 商城模塊
按照點(diǎn)擊量, 購(gòu)買量及用戶喜好進(jìn)行商品推薦, 用戶可進(jìn)行商品瀏覽收藏及購(gòu)買.
系統(tǒng)軟件采用Client/Server (客戶/服務(wù)器)結(jié)構(gòu),使系統(tǒng)的穩(wěn)定、靈活及安全得以充分保證. 客戶端采用Flutter 框架提供的開發(fā)環(huán)境與模式, 后臺(tái)數(shù)據(jù)庫(kù)采用MySQL 關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng), 利用其容錯(cuò)機(jī)制與事務(wù)處理功能, 以保證數(shù)據(jù)的完整與一致.
1.2.1 數(shù)據(jù)流程設(shè)計(jì)
根據(jù)系統(tǒng)的數(shù)據(jù)需求及流向, 見圖2, 系統(tǒng)涉及到智能識(shí)圖系統(tǒng)、古詩(shī)生成系統(tǒng)以及APP 系統(tǒng)3 個(gè)系統(tǒng). 智能識(shí)圖系統(tǒng)負(fù)責(zé)對(duì)拍出圖片進(jìn)行識(shí)別, 進(jìn)而推薦相關(guān)詩(shī)詞. 古詩(shī)生成系統(tǒng)負(fù)責(zé)生成藏頭詩(shī)或隨機(jī)生成一首古詩(shī), APP 系統(tǒng)負(fù)責(zé)完成包括古詩(shī)詞查詢、理解、交流在內(nèi)的古詩(shī)詞學(xué)習(xí)體系以及用戶身份認(rèn)證、個(gè)人信息登記以及操作信息查詢.

圖2 數(shù)據(jù)流向圖
1.2.2 系統(tǒng)界面功能設(shè)計(jì)
(1) 主頁
1) AR 智能識(shí)圖及古詩(shī)生成: 通過手機(jī)攝像頭拍攝, 識(shí)別出當(dāng)前實(shí)物, 并推薦出相關(guān)古詩(shī)詞, 點(diǎn)擊所需古詩(shī)詞, 或通過搜索框查找并選擇相應(yīng)詩(shī)句, 能出現(xiàn)詳細(xì)注釋及翻譯. 古詞生成部分可根據(jù)關(guān)鍵詞自動(dòng)生成藏頭詩(shī)或直接生成古詩(shī).
2) 趣味游戲.
3) 詩(shī)詞搜索: 可于搜索框中搜索感興趣的文章.
(2) 商城頁面
進(jìn)行商品推薦, 提供詩(shī)詞相關(guān)交易平臺(tái).
(3) 社區(qū)頁面
瀏覽其他用戶動(dòng)態(tài), 交流詩(shī)詞感受.
(4) 個(gè)人界面
1) 注冊(cè)與登錄: 輸入手機(jī)號(hào)或郵箱注冊(cè)并登錄.
2) 個(gè)人信息登記與更改: 用戶點(diǎn)擊頭像或用戶名,進(jìn)入個(gè)人信息更改界面, 可更改用戶頭像、用戶名、性別、個(gè)性簽名、所在地、手機(jī)號(hào)與郵箱等個(gè)人信息.
3) 消息: 可瀏覽收到的消息, 用戶個(gè)人發(fā)表的帖子及評(píng)論, 可一鍵已讀.
4) 我的收藏: 可瀏覽已收藏的帖子、商品及詩(shī)詞.
5) 歷史記錄: 可瀏覽曾讀過的商品、詩(shī)詞、帖子、識(shí)圖及游戲.
6) 設(shè)置: 可進(jìn)行個(gè)人隱私設(shè)置、消息設(shè)置, 瀏覽用戶協(xié)議及隱私條款, 可聯(lián)系工作人員、退出登錄.
7) 管理員入口.
本文針對(duì)項(xiàng)目需求, 提煉關(guān)鍵技術(shù)點(diǎn)進(jìn)行系統(tǒng)開發(fā), 從數(shù)據(jù)庫(kù)、古詩(shī)詞推薦、圖像識(shí)別的實(shí)現(xiàn)、古詩(shī)詞生成的實(shí)現(xiàn)以及安全性5 個(gè)方面進(jìn)行開發(fā).
由MySQL 的特性, 設(shè)計(jì)系統(tǒng)邏輯, 見圖3.

圖3 數(shù)據(jù)庫(kù)關(guān)系表
(1) 用戶表(user): 存儲(chǔ)用戶注冊(cè)信息, 賬戶及店鋪狀態(tài).
(2) 作者表(author): 存儲(chǔ)詩(shī)人的編號(hào)和個(gè)人介紹, 根據(jù)編號(hào)與詩(shī)詞表(poetry)相連接完成搜索和推薦等功能.
(3) 標(biāo)簽表(tag): 保存標(biāo)簽, 根據(jù)用戶對(duì)不同標(biāo)簽的搜索及詩(shī)詞的點(diǎn)擊率完成推薦, 每個(gè)詩(shī)人及每首詩(shī)詞都會(huì)對(duì)應(yīng)不同標(biāo)簽, 用戶也可根據(jù)收藏對(duì)應(yīng)的標(biāo)簽更方便搜索. 商品表(mallf)、店鋪表(malls)、訂單表(mallt)用于確定店鋪以及訂單信息, 管理員表(manager)和超級(jí)管理員表(supermanager)用于存儲(chǔ)管理員及超級(jí)管理員的信息及其操作記錄, 可以對(duì)用戶進(jìn)行封號(hào),將貼子升為精品貼等操作. 最終所有表由用戶表(user)和標(biāo)簽表(tag)串聯(lián).
經(jīng)驗(yàn)證, 該數(shù)據(jù)庫(kù)滿足巴斯-科德范式, 在使用中可正常進(jìn)行修改, 插入和刪除操作[3].
推薦算法依據(jù)用戶所產(chǎn)生數(shù)據(jù), 利用數(shù)學(xué)算法, 進(jìn)而預(yù)測(cè)用戶行為興趣. 對(duì)于系統(tǒng)中相關(guān)商品推薦、古詩(shī)詞個(gè)人推薦、論壇等使用場(chǎng)景, 推薦算法都具有很高的價(jià)值. 推薦算法有很多種, 在此之中, 基于協(xié)同過濾的推薦算法(collaborative filtering recommendation)在推薦系統(tǒng)中具有重要地位, 它對(duì)數(shù)據(jù)源無特定要求,圖像、視頻、物品等非結(jié)構(gòu)化內(nèi)容都能進(jìn)行處理[4]. 皮爾森相關(guān)系數(shù)(Pearson product-moment correlation coefficient)用于度量X和Y兩個(gè)變量的相關(guān) (線性相關(guān)), 值介于-1 與1 之間. 相關(guān)系數(shù)越高, 就意味著兩變量的共變部分越多, 便越能精確的通過一個(gè)變量預(yù)測(cè)另一個(gè)變量[5]. 在自然科學(xué)領(lǐng)域中, 此系數(shù)被廣泛應(yīng)用在衡量?jī)勺兞肯嚓P(guān)程度上. 兩變量間的協(xié)方差和標(biāo)準(zhǔn)差的商是皮爾森相關(guān)系數(shù)定義, 計(jì)算公式如下:

通過以下取值范圍判斷變量的相關(guān)強(qiáng)度, 見表1.

表1 相關(guān)度判斷表
系統(tǒng)采用基于皮爾森相關(guān)系數(shù)的協(xié)同過濾推薦算法對(duì)用戶可能喜歡的古詩(shī)詞、商品等進(jìn)行推薦, 并考慮以下因素:
(1) 用戶自身屬性, 如性別年齡.
(2) 產(chǎn)品自身屬性, 如種類.
(3) 用戶歷史數(shù)據(jù), 如瀏覽、收藏記錄.
記錄以上數(shù)據(jù)作為數(shù)據(jù)源, 計(jì)算變量之間的相關(guān)系數(shù)即可進(jìn)行初步的推薦, 但相關(guān)系數(shù)有一個(gè)明顯的缺點(diǎn), 即它接近于1 的程度與數(shù)據(jù)組數(shù)n相關(guān),n較小時(shí), 相關(guān)系數(shù)的波動(dòng)會(huì)較大.
推薦系統(tǒng)需要根據(jù)大量的用戶數(shù)據(jù)訓(xùn)練數(shù)據(jù)模型,沒有數(shù)據(jù)集就無法對(duì)用戶行為興趣進(jìn)行預(yù)測(cè)并推薦,這就是冷啟動(dòng)問題.
冷啟動(dòng)問題主要包括3 種類型[6]:
(1) 用戶冷啟動(dòng): 如何為新用戶進(jìn)行個(gè)性化推薦.
(2) 物品冷啟動(dòng): 如何將新物品推薦給適當(dāng)用戶.
(3) 系統(tǒng)冷啟動(dòng): 如何為新創(chuàng)立網(wǎng)站在無歷史數(shù)據(jù)時(shí)進(jìn)行個(gè)性化推薦.
未繼承數(shù)據(jù)的全新系統(tǒng), 都會(huì)遇到以上3 類問題.為解決這一問題, 在采集到足夠的數(shù)據(jù)前, 使用以下解決方案:
(1) 根據(jù)用戶信息分類, 即根據(jù)性別、年齡等對(duì)用戶進(jìn)行粗略地分類, 提供粗粒度的個(gè)性化推薦.
將同一性別年齡段的用戶視為同類用戶, 分別計(jì)算不同類別的用戶關(guān)注度, 便可以對(duì)同類用戶按熱度等進(jìn)行粗略推薦[7].
(2) 按熱度、時(shí)間等推薦, 即根據(jù)點(diǎn)擊量、收藏、發(fā)布時(shí)間等數(shù)據(jù)提供非個(gè)性化推薦.
非個(gè)性化的推薦可以實(shí)現(xiàn)“0”數(shù)據(jù)量依賴, 僅按發(fā)布時(shí)間、熱度等排序推薦更加客觀且能在任何情況下使用, 可以作為個(gè)性化的輔助并行.
(3) 豐富冷啟動(dòng)過程中可獲得的用戶和物品特征,如引導(dǎo)用戶填寫的如興趣領(lǐng)域、職業(yè)等調(diào)查.
(4) 使用“探索與利用”機(jī)制, 平衡新數(shù)據(jù)的探索及舊數(shù)據(jù)的利用間“新”與“舊”的關(guān)系, 一方面收集新數(shù)據(jù), 一方面暫時(shí)使用相近的舊數(shù)據(jù). 使系統(tǒng)既能夠利用舊數(shù)據(jù)進(jìn)行推薦, 又能使得冷啟動(dòng)物品獲得曝光的傾向, 高效地探索冷啟動(dòng)的物品的屬性, 快速收集冷啟動(dòng)數(shù)據(jù).
如新用戶注冊(cè)時(shí), 僅能獲知年齡性別等數(shù)據(jù), 推薦系統(tǒng)便使用方法(1)對(duì)新用戶進(jìn)行初步推薦. 對(duì)同一類別的用戶行為如點(diǎn)擊、瀏覽時(shí)長(zhǎng)等統(tǒng)計(jì)并加權(quán)計(jì)算熱度, 按熱度排序推薦, 記為a. 同時(shí)收集“新數(shù)據(jù)”, 記錄下該用戶近期點(diǎn)擊的關(guān)鍵詞、收藏物品等, 檢索具有同樣關(guān)鍵詞的用戶, 計(jì)算皮爾森相關(guān)系數(shù). 取相關(guān)度最高的k個(gè)用戶, 將這k個(gè)用戶喜愛的物品詩(shī)詞作為要推薦的備選, 并加權(quán)計(jì)算, 記為b. 在“新數(shù)據(jù)”較少時(shí),皮爾森相關(guān)系數(shù)的波動(dòng)大, 推薦并不一定準(zhǔn)確. 此時(shí)可以偏重于“舊數(shù)據(jù)”, 多推薦a, 隨著“新數(shù)據(jù)”的加多, 結(jié)果逐漸準(zhǔn)確, 便可使用b逐步取代a, 以獲得更佳的推薦效果.
具體如下:
測(cè)試用戶q1新注冊(cè)時(shí), 數(shù)據(jù)僅有女、23 歲. 在female 20 類別中統(tǒng)計(jì)熱度前5 的商品為背包、手袋、飾品、筆記本、潮流穿搭, 并推薦以上商品.
收集一定數(shù)據(jù)后,q1與q2,q3,…,qk具有同類的興趣關(guān)鍵詞, 通過公式計(jì)算這k名用戶間皮爾森相關(guān)系數(shù), 由大到小排序, 前3 個(gè)結(jié)果分別為0.986, 0.863,0.802.
選擇這3 個(gè)用戶的相關(guān)商品分別計(jì)算, 如第1、3 個(gè)用戶均喜愛某一商品, 則該商品的推薦度為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)被利用在識(shí)別與檢測(cè)的任務(wù)中, 精確度甚至能超過人類的感覺器官[8].
伴隨大數(shù)據(jù)時(shí)代, 有更多隱含層的深度卷積神經(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)檢測(cè)中已被廣泛使用[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é)果, 該方法效率低, 計(jì)算復(fù)雜. Fast R-CNN 使用ROI 池化層, 從而得到候選框, 雖檢測(cè)的效率得以提升, 但候選框的提取所需時(shí)間過長(zhǎng), 從而使整體的檢測(cè)效率降低. Faster R-CNN 設(shè)計(jì)了一個(gè)RPN 以生成區(qū)域建議框, 為提高速度與性能, 其采用了共享卷積層這一特性. Faster R-CNN模型是目前為止RCNN 系列算法最杰出的產(chǎn)物, 也是two-stage 中最經(jīng)典的物體檢測(cè)算法, Faster R-CNN 模型被應(yīng)用于本系統(tǒng). Faster R-CNN 可以簡(jiǎn)單地看做“區(qū)域生成網(wǎng)絡(luò)RPN+Fast R-CNN”的系統(tǒng), 用區(qū)域生成網(wǎng)絡(luò)代替Fast R-CNN 中的Selective Search 方法[10]. 推理分成兩個(gè)階段:
(1) 尋找圖中未檢測(cè)物體的anchor 矩形框;
(2) 將anchor 框內(nèi)未檢測(cè)物體分成不同類. 它的思路是, 首先產(chǎn)生待檢測(cè)框, 然后將檢測(cè)框分類. Faster RCNN 利用神經(jīng)網(wǎng)絡(luò), 使待檢測(cè)框端到端的訓(xùn)練得以實(shí)現(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)練速度, 同時(shí)也能顯著提升模型的準(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 個(gè)卷積層及1 個(gè)全連接層, 共50 層, 其網(wǎng)絡(luò)結(jié)構(gòu)極其龐大[12], 見圖4.

圖4 ResNet50 網(wǎng)絡(luò)結(jié)構(gòu)示意圖
(1) 網(wǎng)絡(luò)結(jié)構(gòu)
整個(gè)Faster R-CNN 可分為3 部分:
1) backbone: 提取圖片特征, 為共享基礎(chǔ)卷積層.
2) RPN: 候選檢測(cè)框生成網(wǎng)絡(luò)(region proposal networks).
3) ROI pooling 與分類網(wǎng)絡(luò): 將候選檢測(cè)框分類,第2 次將候選框坐標(biāo)微調(diào). 輸出檢測(cè)結(jié)果.
(2) 模型遷移
固定特征提取層. 在對(duì)ResNet50 模型進(jìn)行加載時(shí),每一次對(duì)參數(shù)值的更改在默認(rèn)情況下都將被存儲(chǔ)以用于訓(xùn)練的反向傳播圖中, 這使內(nèi)存需求大大增加. 遷移學(xué)習(xí)則使用ResNet50 模型, 大數(shù)據(jù)集ImageNet 已訓(xùn)練好大部分參數(shù), 所以僅需在模型初始化時(shí)凍結(jié)更新操作.
優(yōu)化全連接分類器. 為避免訓(xùn)練過程中的過擬合現(xiàn)象, 本文替換ResNet50 的最后一層, 然后把有256個(gè)輸出單元的線性層與最后一個(gè)全連接層的輸入進(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ù)測(cè)框,使用Faster R-CNN 分類網(wǎng)絡(luò)訓(xùn)練. 這時(shí)backbone 權(quán)值也由ImageNet 預(yù)訓(xùn)練模型進(jìn)行初始. 截止第2 步,Faster R-CNN 和RPN 利用兩個(gè)backbone, 無共享.
3) 使用2)中已訓(xùn)練完畢的Faster R-CNN 網(wǎng)絡(luò)中對(duì)應(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é)果對(duì)Faster R-CNN 進(jìn)行初始化,再次進(jìn)行稍微調(diào)整的訓(xùn)練.
(5) 數(shù)據(jù)集及實(shí)現(xiàn)
在TensorFlow 2.0 深度學(xué)習(xí)框架上實(shí)現(xiàn)本文模型并對(duì)模型完成訓(xùn)練. 通過爬蟲技術(shù)得到相關(guān)數(shù)據(jù)集, 按照自然景物類別對(duì)其進(jìn)行分類, 共2 000 張圖片, 包含1 500 張訓(xùn)練集和500 張驗(yàn)證集, 圖像格式均為JPG 格式, 如圖5, 圖6 所示.

圖5 數(shù)據(jù)集1

圖6 數(shù)據(jù)集2
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN) 是機(jī)器學(xué)習(xí)中處理與預(yù)測(cè)序列數(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ò)在多個(gè)領(lǐng)域取得了中成功, 特別是當(dāng)數(shù)據(jù)中有一定時(shí)間依賴性時(shí)[14]. RNN 可以有效地對(duì)序列數(shù)據(jù) (例如語言文本) 進(jìn)行學(xué)習(xí), 提取序列數(shù)據(jù)中的非線性特征.RNN 之所以稱為循環(huán)神經(jīng)網(wǎng)絡(luò), 與一個(gè)序列當(dāng)前的輸出與前面的輸出相關(guān)[15], 具體表現(xiàn)為網(wǎng)絡(luò)會(huì)記憶前面的信息且在現(xiàn)在輸出的計(jì)算中進(jìn)行應(yīng)用, 即隱藏層之間的節(jié)點(diǎn)不再無連接而是有連接的, 并且隱藏層的輸入不僅包括輸入層的輸出還包括上一時(shí)刻隱藏層的輸出[16].
所有 RNN 都具有一種重復(fù)神經(jīng)網(wǎng)絡(luò)模塊的鏈?zhǔn)降男问絒17]. 在標(biāo)準(zhǔn) RNN 中, 這些重復(fù)模塊僅包含一個(gè)簡(jiǎn)單結(jié)構(gòu), 例如一個(gè) tanh 層. LSTM 亦為此結(jié)構(gòu), 但重復(fù)的模塊擁有一個(gè)不同的結(jié)構(gòu). 不同于單一神經(jīng)網(wǎng)絡(luò)層, 這里是有4 個(gè), 以一種非常特殊的方式進(jìn)行交互[18].整體上除了隱藏狀態(tài)h在隨時(shí)間流動(dòng), 細(xì)胞狀態(tài)c也在隨時(shí)間流動(dòng), 細(xì)胞狀態(tài)c就代表著長(zhǎng)期記憶. Seq2Seq 模型是輸出的長(zhǎng)度不確定時(shí)采用的模型. Seq2Seq 解決問題的主要思路是通過深度神經(jīng)網(wǎng)絡(luò)模型(常用的是LSTM)將一個(gè)作為輸入的序列映射為一個(gè)作為輸出的序列, 這一過程由編碼輸入(encoder) 與解碼輸出(decoder)兩個(gè)環(huán)節(jié)組成[19]. 相比之下, LSTM 結(jié)構(gòu)更為復(fù)雜, RNN 簡(jiǎn)單易于實(shí)現(xiàn). 因此本文選用RNN 來實(shí)現(xiàn)古詩(shī)生成.
(1) 功能介紹
1) 生成古詩(shī): 利用模型隨機(jī)生成一首古詩(shī).
2) 生成藏頭詩(shī): 用戶輸入4 個(gè)關(guān)鍵字, 利用模型生成一首藏頭詩(shī).
(2) 實(shí)現(xiàn)過程
建立函數(shù), 輸出預(yù)測(cè)結(jié)果: 分別建立隨機(jī)生成古詩(shī)函數(shù)和藏頭詩(shī)生成函數(shù), 即分別建立模型訓(xùn)練, 預(yù)測(cè)出來對(duì)應(yīng)字典編號(hào), 最后轉(zhuǎn)化為相應(yīng)字符輸出.
RNN 模型的建立: 定義變量; 使用RNN 中的函數(shù)建立神經(jīng)元. 此時(shí)建立的神經(jīng)元cell 對(duì)象即為加載數(shù)據(jù)的張量對(duì)象, initial_state 對(duì)象為詞向量的初始化即為初始為0; 定義embedding, 將詩(shī)詞的文字對(duì)應(yīng)索引分別轉(zhuǎn)化為變量; 建立網(wǎng)絡(luò)層, 使用Softmax 激活函數(shù);使用均方差函數(shù)定義損失函數(shù)值, 使用梯度下降算法和優(yōu)化器減少損失.
梯度爆炸(gradients exploding) 以及梯度彌散(gradients disappearing)是RNN 會(huì)遇到的問題. LSTM可解決梯度彌散的問題, 但是gradients 仍然可能會(huì)爆炸, 因此我們通過采用gradient clippling 的方式來防止梯度爆炸. 即通過設(shè)置一個(gè)閾值, 當(dāng)gradients 超過這個(gè)閾值時(shí), 就將它重置為閾值大小, 這就保證了梯度不會(huì)變得很大.
(3) 生成效果
由于前期并沒有平仄處理, 生成的唐詩(shī)可能對(duì)仗不太工整. 下面是效果測(cè)試, 第1 首是隨機(jī)生成, 第2 首則是以“深度學(xué)習(xí)”為關(guān)鍵字的藏頭詩(shī), 見圖7.

圖7 古詩(shī)生成效果圖
前后端分離的開發(fā)方式以接口為標(biāo)準(zhǔn)分別開發(fā)各自的功能, 少不了調(diào)用接口來進(jìn)行業(yè)務(wù)交互, 這就造成了被人惡意利用請(qǐng)求獲取到數(shù)據(jù)的隱患. APP 內(nèi)集成了用戶個(gè)人信息、商城、社區(qū)等多種信息及功能, 一旦發(fā)生泄露將對(duì)用戶的隱私、財(cái)產(chǎn)安全造成巨大影響.因此, 應(yīng)當(dāng)提高對(duì)數(shù)據(jù)安全性的重視.
(1) 通信使用https
http 協(xié)議是一種明文傳輸協(xié)議, 交互過程及數(shù)據(jù)傳輸過程都未加密, 通信雙方也沒有相互認(rèn)證, 通信過程極其容易被獲得、篡改. 而https 利用SSL/TLS 建立全信道, 對(duì)數(shù)據(jù)包加密, 提供身份認(rèn)證, 更能保護(hù)交換數(shù)據(jù)的完整與隱私性.
(2) 身份確認(rèn)機(jī)制
Token 為服務(wù)器端生成的特定字符串. 初次登錄時(shí), 用戶可輸入賬戶密碼或使用驗(yàn)證碼以確定合法身份. 驗(yàn)證后, 服務(wù)器便生成一個(gè)token 返回給客戶端, 之后凡是需要驗(yàn)證的地方客戶端只用攜帶該token 請(qǐng)求數(shù)據(jù), 不用再攜帶用戶名和密碼. 服務(wù)器端驗(yàn)證token,成功時(shí)正常返回客戶端所請(qǐng)求的結(jié)果, 失敗則返回錯(cuò)誤信息, 并讓用戶重新登錄. Token 設(shè)定有效期, 每一次請(qǐng)求時(shí)服務(wù)器端都重新驗(yàn)證token 和有效期.
(3)使用加解密算法
為了防止提交到接口的明文泄密, 可以對(duì)提交到接口的數(shù)據(jù)加密, 本系統(tǒng)使用AES 進(jìn)行接口加密. 高級(jí)加密標(biāo)準(zhǔn)(advanced encryption standard, AES)為最常見的對(duì)稱加密算法[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 目錄下, 打包項(xiàng)目部署到服務(wù)器, 運(yùn)行測(cè)試, 測(cè)試效果見第3.2 節(jié).
對(duì)系統(tǒng)關(guān)鍵環(huán)節(jié)進(jìn)行測(cè)試.如圖8(a)左為個(gè)人界面, 主要有登錄注冊(cè)、身份信息更改以及消息處理等功能. 其中登錄注冊(cè)部分, 可進(jìn)行賬號(hào)的登錄注冊(cè)以及密碼重置. 身份信息更改部分可更改用戶名、頭像、性別、個(gè)性簽名、所在地、手機(jī)號(hào)以及郵箱等, 可進(jìn)行實(shí)名認(rèn)證. 同時(shí)可處理收到的消息, 瀏覽歷史記錄及收藏夾. 圖8(b)、圖8(c),圖9(a)為古詩(shī)詞生成界面. 古詩(shī)生成包括隨機(jī)生成和藏頭詩(shī)兩種方式. 其中古詩(shī)隨機(jī)生成, 可系統(tǒng)直接生成詩(shī)詞. 藏頭詩(shī)部分在輸入框中填寫4 個(gè)關(guān)鍵字, 點(diǎn)擊生成鍵, 系統(tǒng)生成藏頭詩(shī). 圖9(b)為圖像識(shí)別界面, 點(diǎn)擊主界面拍照按鈕, 系統(tǒng)識(shí)別景物, 顯示識(shí)別結(jié)果以及相關(guān)詩(shī)詞. 圖9(c), 圖10(a)、圖10(b)為商城界面, 點(diǎn)擊商城, 可瀏覽人氣推薦以及系統(tǒng)推薦好物. 點(diǎn)擊搜索框,可搜索具體商品及看到其詳細(xì)信息. 圖10(c)為社區(qū)界面可瀏覽評(píng)論其他用戶動(dòng)態(tài), 發(fā)布帖子, 交流詩(shī)詞感受.經(jīng)測(cè)試, 各項(xiàng)功能均滿足要求.

圖8 系統(tǒng)效果圖1

圖9 系統(tǒng)效果圖2

圖10 系統(tǒng)效果圖3
本文介紹了移動(dòng)端古詩(shī)詞學(xué)習(xí)系統(tǒng)的研究與應(yīng)用.面向?qū)υ?shī)詞有深厚興趣的人群, 綜合比較截止目前市面上的古詩(shī)詞學(xué)習(xí)系統(tǒng), 從而建立結(jié)合圖像識(shí)別與深度學(xué)習(xí)的移動(dòng)端古詩(shī)詞學(xué)習(xí)系統(tǒng). 本文設(shè)計(jì)的移動(dòng)端古詩(shī)詞學(xué)習(xí)系統(tǒng), 可直接生成古詩(shī)或利用用戶提供的字詞進(jìn)行藏頭詩(shī)的生成, 以幫助用戶更好地應(yīng)用詩(shī)詞、理解詩(shī)詞. 同時(shí)結(jié)合圖像識(shí)別技術(shù), 使人“所見即所得”, 即看到的物品可通過圖像識(shí)別技術(shù)進(jìn)行識(shí)別,進(jìn)而得到與之相關(guān)的詩(shī)詞, 使我們的生活與詩(shī)詞融為一體, 促進(jìn)詩(shī)詞的傳承與發(fā)揚(yáng), 本課題所涉及的移動(dòng)端古詩(shī)詞學(xué)習(xí)系統(tǒng)具有推廣的意義.