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