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