趙吉山 王青海
摘 ?要: “花兒”是一種流傳在青海、甘肅兩省、寧夏回族自治區(qū)以及新疆個別地區(qū)的山歌,被譽為大西北之魂,是國家級人類非物質文化遺產(chǎn),2009年9月被聯(lián)合國列為人類非物質文化遺產(chǎn)。隨著網(wǎng)絡技術及機器學習的迅猛發(fā)展,對“花兒”信息的網(wǎng)絡傳播和深度挖掘至關重要。對此,筆者提出利用機器學習自然語言處理(Machine Learning-Natural Language Processing)來進行花兒唱詞信息挖掘。通過構建循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,RNN)青?;▋耗P停归_對花兒唱詞的數(shù)據(jù)挖掘,并且實現(xiàn)Python內置語言模塊與動態(tài)網(wǎng)頁互聯(lián),能為花兒藝術研究者及民間花兒藝術愛好者提供有效且高質量的花兒信息。利用RNN進行花兒唱詞挖掘是一個非常有意義的研究課題,對未來花兒藝術的發(fā)展和傳承具有重大的作用。
關鍵詞: 循環(huán)神經(jīng)網(wǎng)絡;青?;▋?信息挖掘;動態(tài)網(wǎng)頁
中圖分類號: TP389.1 ? ?文獻標識碼: A ? ?DOI:10.3969/j.issn.1003-6970.2020.06.004
本文著錄格式:趙吉山,王青海. 基于循環(huán)神經(jīng)網(wǎng)絡的花兒信息模型建模方法[J]. 軟件,2020,41(06):1923
【Abstract】: “Huaer” is a folk song spread in Qinghai、Gansu Province、Ningxia and some areas in Xinjiang. It is known as the soul of the Northwest and is a national intangible cultural heritage. Human intangible cultural heritage. With the rapid development of network technology and machine learning, it is very important for the network dissemination and deep mining of Huaer information. In this regard, the author proposes to use Machine Learning- Natural Language Processing to perform flower singing information mining. By constructing a Recurrent Neural Network (RNN) Qinghai Huaer model, the data mining of Huaer chanting is carried out, and the built-in language module of Python is interconnected with dynamic web pages, which can be a flower art researcher and folk flower art hobby Provide effective and high-quality Huaer information. The use of RNN for the mining of Huaer lyrics is a very significant research topic, and it will have a significant effect on the development and inheritance of Huaer art in the future.
【Key words】: Recurrent neural network; Qinghai huaer; Information mining; Dynamic webpage
0 ?引言
伴隨著計算機技術的不斷發(fā)展,國外及國內的網(wǎng)民獲取信息的速度更加迅速,人們日益增長的精神文化需求越來越高,青?;▋好耖g愛好者及花兒研究者急需獲取有效、全面、及數(shù)據(jù)規(guī)模較大的花兒信息。目前世界文化正處在大發(fā)展時期,各種思想文化交流交融更加頻繁,文化在綜合國力競爭中的作用及地位更加凸顯,作為中華民族傳統(tǒng)文化中的一部分,青?;▋旱陌l(fā)展與傳播在當下也是不可或缺的。對此,筆者利用計算機技術的優(yōu)勢,分析本地區(qū)特色文化——青?;▋?,通過研究青海花兒的發(fā)展狀況得出:互聯(lián)網(wǎng)上對于花兒信息的收錄量很少,內容不完整、不全面、且收集困難?;▋鹤鳛楸镜貐^(qū)特有的藝術,其有很大的發(fā)展空間,并且在傳承及發(fā)揚的過程中收到資源限制,因此,青?;▋盒畔⒌难芯吭诋斚赂@必要性和緊迫性。
1 ?RNN與PHP概述
1.1 ?RNN
RNN是一類專門用于處理序列x(1)、x(2)、...x(t)的神經(jīng)網(wǎng)絡。RNN可以擴展到更長的序列,大多數(shù)的RNN也能處理可變長度的序列。它以不同的方式共享參數(shù),輸出的每一項是前一項的函數(shù),輸出的每一項對先前的輸出應用相同的更新規(guī)則產(chǎn)生[1]。RNN可應用于跨越兩個維度的空間數(shù)據(jù),當某個應用涉及時間的數(shù)據(jù),并且將整個序列數(shù)據(jù)提供給網(wǎng)絡之前就能觀察到整個序列時,RNN可具有關于時間向后的連接[2]。主流的循環(huán)神經(jīng)網(wǎng)絡模型的基本結構如圖1所示。
圖1.1左半部為沒有按時間展開的RNN模型基本結構圖(圖中黑色方塊表示單個時間步的延遲),右半部為按時間展開的圖。在結構圖中,對于每個時間步t,一般的作如下表示:
(1)x(t)表示在時間步t時訓練樣本的輸入。而x(t–1)、x(t+1)分別表示在時間步t–1、t+1時訓練樣本的輸入。
(2)h(t)表示在時間步t時隱藏層的激活函數(shù)。h(t)由x(t)、h(t–1)共同決定,一般二分問題采用sigmoid函數(shù),K類別分類問題采用softmax函數(shù)。
(3)o(t)表示在時間步t時模型的輸出。o(t)只由模型當前的隱藏狀態(tài)h(t)決定。
(4)L(t)表示在時間步t時模型的損失函數(shù),損失函數(shù)L(t)表示輸出值o(t)與相應訓練目標y(t)的長度[3]。
(5)y(t)代表在時間步t時訓練樣本序列的目標輸出。輸入層到隱藏層、隱藏層到輸出層、隱藏層到隱藏層的連接分別由權重矩陣U、V、W參數(shù)化。
1.2 ?PHP
PHP:Hypertext Preprocessor(簡稱PHP)是一種通用編程語言,最初為動態(tài)網(wǎng)頁開發(fā)而設計。語法吸收了C、Java和Perl語言的特性,語法簡單利于學習,在互聯(lián)網(wǎng)動態(tài)網(wǎng)頁開發(fā)技術當中應用廣泛,主要適用于網(wǎng)頁開發(fā)領域。PHP獨特的語法混合了C、Java、Perl以及PHP自創(chuàng)的語法。它可以比CGI或者Perl更快速地執(zhí)行動態(tài)網(wǎng)頁。用PHP做動態(tài)頁面和其他的編程語言相比,PHP是將程序嵌入到HTML中去執(zhí)行,執(zhí)行效率比完全生成HTML標記的CGI要高許多[4]。PHP還可以執(zhí)行編譯后代碼,編譯可以達到加密和優(yōu)化代碼運行,使代碼運行更快。
2 ?python內置模塊與動態(tài)網(wǎng)頁互聯(lián)
Python是一門解釋型的編程語言,因此它具有解釋型語言的運行機制[5]。迄今為止Python由于其可擴展性、跨平臺等特性相較于其他語言擁有諸多的優(yōu)勢,python的可擴展性體現(xiàn)為它的模塊,其強大的類庫為機器學習等計算機前沿學科提供了有效的幫助。本次實驗涉及的Python模塊包括應用于文本中自動提取語義主題的Gensim模塊和Python標準庫中的sys、os、time、json、process、和網(wǎng)絡模塊socket等等。
Gensim是一款開源的第三方Python模塊,用于從原始的非結構化的文本中,無監(jiān)督地學習到文本隱層的主題向量表達[6]。它支持包括TF-IDF、LSA、LDA、和word2vec在內的多種主題模型算法,支持流式訓練,并提供了諸如相似度計算,信息檢索等一些常用任務的API接口。在本實驗中我們采用Word2vec,Word2Vec是Google公司推出的用于獲取詞向量的工具,該工具內部算法通過深度學習實現(xiàn)詞到向量的轉化。Word2vec模型輸出的詞向量可以被用來做很多自然語言處理的相關工作,比如聚類、找同義詞、詞性分析,預測等[7]。
本實驗采用Google公司開源項目PPython實現(xiàn)Python與動態(tài)網(wǎng)頁互聯(lián),其實現(xiàn)對兩種語言的優(yōu)勢互補,結合使用Python程序和PHP程序,可理解為Python語言和PHP語言相結合的技術,通俗的可以理解為Python語言和PHP語言混編技術。Python和PHP語言各有其內部定義的數(shù)據(jù)類型,當PHP端數(shù)據(jù)發(fā)送到Python端或者Python端數(shù)據(jù)發(fā)送到PHP端時在傳統(tǒng)技術上需要轉碼處理,而PPython技術通過將Python和PHP不同數(shù)據(jù)類型序列化就可以直接發(fā)送數(shù)據(jù),不用進行轉碼處理,大大提高開發(fā)速度。Python語言因其GIL(Global Interpreter Lock)特性,多線程效率不高,在基于由Python程序和PHP程序的混編機制實現(xiàn)的PPython中,Python端可進行多進程方式部署,從而提高Python程序的整體工作效率,此技術提高了Python的多線程效率。PPython技術實現(xiàn)基本原理為socket通信,因此需要網(wǎng)絡模塊socket支持。socket(套接字)是網(wǎng)絡編程中的一個基本組件,套接字基本上是一個信息通道,兩端各有一個程序[8]。這些程序可能都位于(通過網(wǎng)絡相連的)不同的計算機上,通過套接字向對方發(fā)送信息。PPython中網(wǎng)絡通信的主要原理如圖2所示。
3 ?基于RNN的青?;▋耗P蜆嫿?/p>
3.1 ?Python爬蟲構建
循環(huán)神經(jīng)網(wǎng)絡模型的構建對數(shù)據(jù)量有較高的要求,因此本實驗所用的花兒唱詞信息采用Python網(wǎng)絡爬蟲技術獲取。利用爬蟲技術可以快速、準確的從WEB應用中獲取花兒唱詞信息,為后續(xù)實驗的進行提供數(shù)據(jù)支持。Python網(wǎng)絡爬蟲的構建是模擬計算機網(wǎng)絡連接,即計算機對服務器進行一次Request請求(帶著請求頭和消息體),相應地服務器對于計算機的Request請求進行Response回應(帶著HTML文件)。爬蟲程序模擬計算機對服務器發(fā)起Request請求,并且接受服務器端的Response內容并解析、提取所需的信息。
筆者通過分析花兒信息源,發(fā)現(xiàn)現(xiàn)有的花兒信息主要分布在WEB應用網(wǎng)易云音樂、QQ音樂上。對此根據(jù)不同平臺WEB頁面的結構,相應的進行爬蟲程序的設計。通過分析,網(wǎng)易云音樂WEB頁面結構為多頁面網(wǎng)頁結構,這種類型的網(wǎng)頁爬蟲流程為。
(1)手動翻頁觀察個網(wǎng)頁的URL構成特點,構造出所有頁面的URL存入列表中。
(2)根據(jù)URL列表依次循環(huán)取出URL。
(3)定義爬蟲函數(shù)。
(4)循環(huán)調用爬蟲函數(shù),存儲數(shù)據(jù)。
(5)循環(huán)完畢,結束爬蟲程序。
多頁面爬蟲流程圖如圖3所示。
而QQ音樂WEB頁面結構為跨頁面網(wǎng)頁結構,跨頁面的爬蟲流程為。
(1)定義爬取函數(shù)爬取列表頁的所有專輯的URL。
(2)將專輯URL存入列表中。
(3)定義爬取詳細頁數(shù)據(jù)函數(shù)。
(4)進入專輯詳細頁面爬取詳細頁數(shù)據(jù)。
(5)存儲數(shù)據(jù),循環(huán)結束,結束爬蟲程序。
跨頁面爬蟲流程圖如圖4所示。
本實驗獲取到的所有花兒唱詞數(shù)據(jù)保存在文本文件中,以便后續(xù)處理。
3.2 ?唱詞分詞
中文與英文相比,英文以空格作為非常明顯的分隔符,而且一個英文單詞橫向可按字母拆分,但是中文由于繼承自古代漢語的傳統(tǒng),詞語之間沒有分隔符,并且按“永字八法”分為點、橫、豎、撇、捺、折、彎、鉤8種。古代漢語中除了人名、地名和連綿詞等,詞通常就是單個漢字,所以當時沒有分詞書寫的必要。而現(xiàn)代漢語中雙字或多字詞居多,一個字不再等同于一個詞[9]。因此給中文分詞帶來難度。為了得到更加有效的實驗數(shù)據(jù)及更為嚴謹?shù)膶嶒灲Y果分析,對于花兒唱詞采用目前主流的分詞工具jieba分詞。通過分詞工具jieba將爬取到的花兒唱詞進行去噪處理,并且剔除唱詞中含有的“,”、“?!薄ⅰ癬”、“《”、“》”、“[”、“]”、“(”、“)”、等特殊字符。分詞結束后即可得到可以用于訓練的預料庫,此后進行RNN模型的訓練。
3.3 ?系統(tǒng)建模
語料庫規(guī)模越大,模型的訓練結果就越好,而對于規(guī)模較小的語料則相反。模型訓練需要Python NLP gensim包,首先需要安裝gensim,但是gensim對科學技術庫NumPy和SciPy的版本有要求,需要注意NumPy和SciPy版本,當導入時算法程序不出錯則成功。在genism中,與訓練算法相關的參數(shù)都在gensim.models.word2vec.Word2Vec中。需要注意的參數(shù)有。
(1)sentences:此參數(shù)設置當前需要分析的語料庫,可以是序列、字符文件。在本實驗中,采用文件遍歷讀取。
(2)size:此參數(shù)設置詞向量的維度,默認值是100。這個維度的取值一般與當前所使用的語料的規(guī)模相關,如果語料庫很小,比如小于100M的文本語料,則使用默認值。如果語料庫規(guī)模較大,則增大維度。
(3)window:此參數(shù)為詞向量上下文最大距離,window越大,則和某一詞較遠的詞也會產(chǎn)生上下文關系。默認值為5。在實際使用中,可以根據(jù)實際的需求來動態(tài)調整這個參數(shù)的大小。如果是小語料則這個值可以設的更小。
(4)sg:此參數(shù)為word2vec兩個模型的選擇。如果是1,則是Skip-Gram模型,是0則是CBOW(Continuous Bag-of-Words)模型,默認參數(shù)值為0。
(5)hs:此參數(shù)為word2vec兩個解法的選擇,如果參數(shù)值是1,并且負采樣個數(shù)negative大于0,則是Hierarchical Softmax。參數(shù)值為0,則是Negative Sampling。默認參數(shù)值為0。
(6)negative:此參數(shù)為使用Negative Sampling時負采樣的個數(shù),默認是5。推薦在[3,10]之間。
(7)cbow_mean:此參數(shù)為用于CBOW在做投影的時候,為1則為上下文的詞向量的平均值。為0,則算法中的xw為上下文的詞向量之和。在本文中采用平均值來表示xw,默認值也是1,不推薦修改默認值。
(8)min_count:此參數(shù)為需要計算詞向量的最小詞頻。添加此參數(shù),可去掉生僻的低頻詞,默認是5。語料庫太小,則調低這個值。
(9)iter:此參數(shù)為隨機梯度下降法中迭代的最大次數(shù),默認是5。對于規(guī)模較小的語料庫,可以調小這個參數(shù)值,相應的規(guī)模較大的語料庫,可以增大這個參數(shù)值。
(10)alpha:此參數(shù)為在隨機梯度下降法中迭代的初始步長,默認是0.025。
(11)min_alpha:由于算法支持在迭代的過程中逐漸減小步長,min_alpha給出了最小的迭代步長值。
模型的訓練調用word2vec.Word2Vec()算法即可,對于不同規(guī)模的語料庫,需要對算法參數(shù)進行調整,才能達到更好的訓練結果。當模型訓練完成以后,需要保存模型以便重用。在word2vec中模型的保存有兩種方式可供選擇,一種是直接保存模型,另一種是以C語言可以解析的形式存儲,對此根據(jù)需求保存。
此外,模型訓練的速度受到訓練程序運行環(huán)境和語料庫規(guī)模的影響。當語料庫特別龐大時,性能更為優(yōu)良的計算機能更快的進行模型的訓練。
4 ?RNN花兒唱詞挖掘
4.1 ?挖掘結果
本實驗模型的訓練屬于無監(jiān)督學習,并沒有太多的類似于監(jiān)督學習里面客觀的評判方式,更多的依賴于端應用。利用RNN對青?;▋盒畔⑻幚?,實現(xiàn)對花兒唱詞信息進行聚類、找同義詞、詞性分析、預測。word2vec語言模型性能較高,但由于其對數(shù)據(jù)量有很高的要求。由于花兒信息搜集困難,預測的準確度不夠高。實驗部分結果如下:
4.2 ?挖掘分析
本實驗采用循環(huán)神經(jīng)網(wǎng)絡,這是為了綜合運用歷史信息中的正向信息和反向信息所設計的優(yōu)秀的神經(jīng)網(wǎng)絡,在數(shù)據(jù)采集上,由于青?;▋旱臍v史屬性及文化背景限制,筆者所搜集的花兒信息有限,加之神經(jīng)網(wǎng)絡對語料庫規(guī)模的要求較高,訓練結果的正確性有待提高,需要將語音識別技術把現(xiàn)有的花兒視頻、音頻的語音信號轉化為相應文本或命令來獲取大量花兒數(shù)據(jù)更為理想。
4.3 ?詞云生成
作為青海傳統(tǒng)文化——青海花兒,提取花兒唱詞關鍵內容形成詞云,詞云的生成對詞進行排序后,由于詞語過多,僅截取了前300個高頻詞,詞云如圖5所示,觀察詞云圖可知:“花兒”(圖5的中心位置)這個詞的詞頻最高,其他詞根據(jù)詞頻依次從原點展開分布在各點。
5 ?結論
本文通過循環(huán)神經(jīng)網(wǎng)絡序列建模,將深度學習自然語言處理應用于青海花兒信息挖掘當中。在實驗中發(fā)現(xiàn)許多有趣的特性,分析挖掘青?;▋何谋拘畔⒌脑硗瑯拥目梢詰玫胶芏喾矫妫斯ぶ悄艿陌l(fā)展會給我們帶來更多的機遇,我們也會面臨著更多的挑戰(zhàn)。合理有效的利用好計算機技術能為我們人類的方方面面帶來便利,例如語音識別、DNA序列分析、情感分類、機器翻譯、命名體識別等。實驗中在青?;▋盒畔⑺鸭^程中出現(xiàn)了些許困難,更大規(guī)模的語料庫及優(yōu)化RNN內部網(wǎng)絡架構能更加有效地分析花兒信息。如何通過語音識別、視頻行為識別技術的輔助來獲取數(shù)據(jù)規(guī)模更大的語料庫,及優(yōu)化網(wǎng)絡內部架構是下一部研究的問題。
參考文獻
[1] The Unreasonable Effectiveness of Recurrent Neural Networks. http://karpathy.github.io/2015/05/21/rnn-effectiveness/.
[2] 邵偉明, 葛志強, 李浩, 等. 基于循環(huán)神經(jīng)網(wǎng)絡的半監(jiān)督動態(tài)軟測量建模方法[J]. 電子測量與儀器學報, 2019, 33(11): 7-13.
[3] 余萍, 曹潔. 深度學習在故障診斷與預測中的應用[J/OL]. 計算機工程與應用: 1-25 [2020-02-17].
[4] [美] Luke Welling, Laura Thomson. PHP and MySQL Web Development[M]. 慧珍, 武欣, 羅云峰, 等譯. 北京: 機械工業(yè)出版社, 2018: X—XIV.
[5] 林信良. Python程序設計教程[M]. 北京: 清華大學出版社, 2017: 2—6.
[6] 唐曉麗, 白宇, 張桂平, 等. 一種面向聚類的文本建模方法[J]. 山西大學學報(自然科學版), 2014, 37(04): 595-600.
[7] 丁璐璐. 基于信息覓食理論的智庫情報分析質量及其提升策略研究[D]. 吉林大學, 2019.
[8] 董彧先. 基于Python的網(wǎng)絡編程研究與分析[J]. 科學技術創(chuàng)新, 2019(20): 85-86.
[9] 成銳. 基于Lucene面向主題的手機搜索引擎的研究與實現(xiàn)[D]. 電子科技大學, 2012.