王青海,劉怡凡
(青海師范大學(xué) 計(jì)算機(jī)學(xué)院,青海 西寧 810016)
“花兒”是一種民歌,廣泛流傳在西北部多個(gè)省區(qū),是國(guó)家級(jí)“人類(lèi)非物質(zhì)文化遺產(chǎn)”之一.青?;▋菏俏鞑棵窀枘酥林袊?guó)民歌中屬于標(biāo)志性的口承文藝,其集中體現(xiàn)了民族精神、風(fēng)俗習(xí)慣和風(fēng)土人情,它是民族文化之魂.豐富的民族性和地域性都對(duì)“青海花兒”的研究帶來(lái)了不小的困難,尤其是對(duì)唱詞情感方面的分析與挖掘.將迅猛發(fā)展的人工智能技術(shù)應(yīng)用到青?;▋焊柙~情感分析和信息挖掘[1],既是對(duì)非物質(zhì)文化遺產(chǎn)的合理開(kāi)發(fā)和有效保護(hù),又是對(duì)花兒唱詞的科學(xué)記錄和深度挖掘.
樸素貝葉斯(Naive Bayesian Model)是以貝葉斯定律為基礎(chǔ)再加上條件獨(dú)立假設(shè)所形成的一種具有優(yōu)良性能的分類(lèi)模型.由于有堅(jiān)實(shí)的數(shù)學(xué)基礎(chǔ)及穩(wěn)定的分類(lèi)效率,從而保證了該模型的實(shí)用性[2].
假設(shè)文本都是相互獨(dú)立的,所以在分類(lèi)的正確性上會(huì)有一定的影響.它通過(guò)計(jì)算分類(lèi)概率,選取概率較大的情況作為自身的預(yù)測(cè),屬于監(jiān)督學(xué)習(xí)類(lèi)的一種機(jī)器學(xué)習(xí)方法.
樸素貝葉斯算法的過(guò)程分為三步:第一步,計(jì)算先驗(yàn)概率,方法是求出要將唱詞文本分成多少類(lèi),計(jì)算出每一類(lèi)唱詞文本在總文本中的頻率.第二步,計(jì)算條件概率,將文本劃分為多個(gè)子集,分別對(duì)屬于不同類(lèi)別的子文本集進(jìn)行計(jì)算,計(jì)算在已知唱詞是那一類(lèi)文本的條件下,子集中的特征值是樣本中的特征值概率.第三步,對(duì)于待測(cè)樣本計(jì)算后驗(yàn)概率,即給定特征值時(shí)分類(lèi)的條件概率.其數(shù)據(jù)樣本的條件概率計(jì)算如公式(1-1)所示.
(1-1)
其中:P(Y=Ck)是分類(lèi)的概率,P(Xj=xj|Y=Ck)是給定分類(lèi)時(shí)特征值的條件概率,P(Y=Ck|X=x)是最后計(jì)算出給定特征值時(shí)分類(lèi)的條件概率.
樸素貝葉斯算法的流程如下:Step 1讀取唱詞數(shù)據(jù)并初始化;Step 2劃分訓(xùn)練集和測(cè)試集,生成文本特征值與Data Frame 矩陣;Step 3加載樸素貝葉斯模型并訓(xùn)練;Step 4預(yù)測(cè)測(cè)試集.
LSTM(Long Short-Term Memory)是一種在RNN結(jié)構(gòu)上增加了記憶功能的神經(jīng)網(wǎng)絡(luò),解決了在長(zhǎng)時(shí)間模擬訓(xùn)練的過(guò)程中出現(xiàn)的一些關(guān)鍵問(wèn)題,相比較于普通的RNN神經(jīng)網(wǎng)絡(luò)和CNN神經(jīng)網(wǎng)絡(luò)[3-4],LSTM神經(jīng)網(wǎng)絡(luò)在更長(zhǎng)的時(shí)間序列中會(huì)有更好的表現(xiàn).
LSTM神經(jīng)網(wǎng)絡(luò)與其他神經(jīng)網(wǎng)絡(luò)不同的地方是它加入了一個(gè)判斷信息是否有用的模塊,這個(gè)模塊的結(jié)構(gòu)稱為“細(xì)胞”.“細(xì)胞”中有三層結(jié)構(gòu),輸入門(mén)、遺忘門(mén)以及輸出門(mén),當(dāng)信息傳遞進(jìn)來(lái)后被判斷為有用的信息會(huì)繼續(xù)傳遞,無(wú)用的信息則會(huì)被拋棄.LSTM“細(xì)胞”的結(jié)構(gòu)如圖1所示,普通的RNN神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如圖2所示.
圖1 LSTM“細(xì)胞”結(jié)構(gòu)
圖2 RNN神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
LSTM神經(jīng)網(wǎng)絡(luò)算法的流程如下:Step 1讀取唱詞數(shù)據(jù)并初始化;Step 2設(shè)置超參數(shù),劃分訓(xùn)練集和測(cè)試集并轉(zhuǎn)為矩陣格式;Step 3加載長(zhǎng)短期記憶網(wǎng)絡(luò)模型并訓(xùn)練;Step 4預(yù)測(cè)測(cè)試集.
圖3 數(shù)據(jù)預(yù)處理流程圖Fig.3 Data preprocessing flow chart
原始收集到的唱詞往往包括許多臟數(shù)據(jù),比如相關(guān)的信息以及標(biāo)點(diǎn)符號(hào)或者包含大量的語(yǔ)氣詞,功能性的詞語(yǔ),去除這些停用詞,不僅可以節(jié)省文本空間,還能避免這些停用詞對(duì)結(jié)果造成影響,同時(shí)唱詞作為一種短文本,過(guò)多地使用停用詞會(huì)對(duì)有效的信息造成干擾,筆者所采用的停用詞表為哈工大停用詞表.去除停用詞會(huì)為后文的算法模型的研究提供更為干凈的數(shù)據(jù)集,另外唱詞中往往有重復(fù)的唱詞,如果不去除重復(fù)的唱詞則會(huì)讓模型進(jìn)行多次無(wú)用的處理,無(wú)疑會(huì)對(duì)運(yùn)行結(jié)果造成影響.不僅如此,過(guò)多重復(fù)的詞也會(huì)對(duì)產(chǎn)生的詞云有影響,數(shù)據(jù)預(yù)處理的流程圖如圖3所示.
在分詞技術(shù)中,英文文本和中文文本有很大的不同,英文分詞時(shí),大多數(shù)通過(guò)單詞與單詞之間的空格來(lái)劃分,而中文分詞時(shí),考慮到在不同的語(yǔ)境下,有些字有時(shí)候會(huì)和其他字一起組合起來(lái)成為一個(gè)詞語(yǔ),有時(shí)也會(huì)單獨(dú)出來(lái),所以給中文分詞增添了很大的難度.
分詞的準(zhǔn)確性會(huì)嚴(yán)重影響到最終的結(jié)果,目前常見(jiàn)的較為成熟的中文分詞工具有Jieba庫(kù),KAnalyzer庫(kù)以及Hanlp庫(kù)等,不同的分詞方式,適用在不同的開(kāi)發(fā)環(huán)境中.
本文采用Jieba分詞器進(jìn)行“青?;▋骸钡某~文本分詞,Jieba分詞是一個(gè)開(kāi)源分詞庫(kù),它有一個(gè)字典包含了日常生活中大多數(shù)能用到的中文詞語(yǔ),此外還提供了三種不同的分詞模式用來(lái)滿足不同的開(kāi)發(fā)人員的需求:(1)精確模式.如果不指定參數(shù),便會(huì)默認(rèn)在這個(gè)模式下,程序會(huì)嘗試將唱詞文本最精確地分成一個(gè)一個(gè)詞語(yǔ),效果較為理想,適合在做唱詞文本分析的時(shí)候使用.(2)全模式.在該模式下,程序會(huì)將唱詞文本中所有可能是詞語(yǔ)的都切割開(kāi)來(lái),會(huì)分割出來(lái)很多的單個(gè)字,效果并不理想.(3)搜索引擎模式.這種模式調(diào)用與上述兩種模式不同的函數(shù),在第一次劃分后的基礎(chǔ)上,對(duì)里面殘留的較長(zhǎng)的唱詞再次劃分.分詞和預(yù)處理結(jié)束后就得到了最終要使用的語(yǔ)料庫(kù).
Word2vec是由Mikolov在Google帶領(lǐng)的研究團(tuán)隊(duì)創(chuàng)造并提出的一種將文本訓(xùn)練為詞向量的方法,屬于一種簡(jiǎn)易的神經(jīng)網(wǎng)絡(luò)模型.該方法包含兩種模型:Skip-gram模型是給定一個(gè)詞語(yǔ),緊接著預(yù)測(cè)該詞語(yǔ)在上下文的概率.相反地,連續(xù)詞袋模型是給定該詞的上下文文本,然后預(yù)測(cè)當(dāng)前詞出現(xiàn)的概率[4],兩種不同模型的示意圖如圖4和圖5所示.
圖4 Skip-gram模型示意圖
圖5 連續(xù)詞袋模型示意圖
本文采用的是Skip-gram模型,在給出了當(dāng)前唱詞的情況下,預(yù)測(cè)相鄰位置的唱詞出現(xiàn)的概率.即P(wi|wt),其中:t-c≤i≤t+c,c是代表查找范圍.當(dāng)c的取值越大,上下文的信息會(huì)更為完整,效果也會(huì)更好,但相應(yīng)的訓(xùn)練時(shí)間會(huì)出現(xiàn)明顯增加.
Skip-gram計(jì)算公式如公式(2-1)所示,損失函數(shù)如公式(2-2)所示.
(2-1)
其中:Wi是中心詞,Wo是背景詞,VWi是中心詞的向量,VWo是背景詞的向量,最后計(jì)算出給定中心詞下的背景詞的條件概率
L=-logP(w0,1,w0,2,…,w0,c|wi),
(2-2)
其中:c是窗口長(zhǎng)度,對(duì)公式(2-1)求對(duì)數(shù)似然并轉(zhuǎn)換單調(diào)性就得到了損失函數(shù).
訓(xùn)練模型的算法都封裝在python的genism.models.word2vec.Wrod2Vec中,包含的關(guān)鍵參數(shù)有.
(1)sentences:設(shè)置當(dāng)前要訓(xùn)練的語(yǔ)料庫(kù),可以是序列或字符文件.
(2)size:設(shè)置詞向量的維度,默認(rèn)值為100.在本次實(shí)驗(yàn)中選擇默認(rèn)值.
(3)sg:此參數(shù)包含兩個(gè)值,“1”表示采用skip-gram模型訓(xùn)練,“0”表示采用連續(xù)詞袋模型訓(xùn)練.
(4)min_count:設(shè)置最小詞頻,去除一些太過(guò)于生僻的詞.
(5)windows:設(shè)置上下文最大距離,默認(rèn)值為5.
訓(xùn)練的模型主要需要python中sklearn下的CountVectorizer,MultinomialNB兩個(gè)依賴庫(kù),其中CountVectorizer是一個(gè)文本特征提取方法,用來(lái)將文本中的詞語(yǔ)轉(zhuǎn)化為詞頻矩陣,MultinomialNB庫(kù)用來(lái)構(gòu)建基本的樸素貝葉斯模型.CountVectorizer包含的關(guān)鍵參數(shù)有:
(1)max_df:取值范圍在[0.0~1.0],默認(rèn)為1.0.用來(lái)限制某一個(gè)詞如果出現(xiàn)頻率過(guò)高則不會(huì)被當(dāng)做關(guān)鍵詞.
(2)min_df:類(lèi)似于max_df,用來(lái)限制某一個(gè)詞的頻率過(guò)低則不會(huì)被當(dāng)作特征值.
(3)max_features:對(duì)所有的關(guān)鍵詞的詞頻進(jìn)行降序排列,只取前max_features個(gè)作為關(guān)鍵詞詞集.
(4)stop_words:設(shè)置停用詞,可以由用戶自定義等用詞表.
(5)MultinomialNB包含的關(guān)鍵參數(shù)有.
(6)alpha:是否添加拉普拉斯平滑,默認(rèn)為“1”添加平滑.
(7)fit_prior:是否考慮先驗(yàn)概率,默認(rèn)為true,讓函數(shù)自身計(jì)算先驗(yàn)概率.
(8)predict:輸出測(cè)試集的預(yù)測(cè)標(biāo)記類(lèi).
模型的訓(xùn)練主要步驟是先調(diào)用CountVectorizer方法生成詞頻矩陣,然后調(diào)用MultinomialNB方法進(jìn)行訓(xùn)練即可,對(duì)于不同的訓(xùn)練集要調(diào)整不同的參數(shù),以確保效果達(dá)到最好.
訓(xùn)練的模型主要需要Python中keras下的Sequential,Embedding,LSTM,Dense,Dropout五個(gè)依賴庫(kù).其中Sequential是一種層的線性堆棧,用來(lái)將多個(gè)網(wǎng)絡(luò)層堆疊起來(lái),Embedding用來(lái)降低詞向量的維度,即使面對(duì)大數(shù)據(jù)時(shí)也能有效的計(jì)算,LSTM用來(lái)構(gòu)建簡(jiǎn)單的LSTM神經(jīng)網(wǎng)絡(luò),Dense用來(lái)添加一個(gè)層函數(shù),Dropout用來(lái)緩解過(guò)擬合問(wèn)題.
LSTM中包含的關(guān)鍵參數(shù)如下.
(1)input_dim:輸入維度,當(dāng)使用LSTM模型為首層的時(shí)候,應(yīng)該顯示設(shè)定該參數(shù).
(2)units:輸出維度.決定了一層里面的LSTM單元的數(shù)量.
(3)activation:激活函數(shù)的類(lèi)型,提供網(wǎng)絡(luò)的非線性建模能力.
模型的訓(xùn)練主要步驟是先調(diào)用Sequential方法開(kāi)始線性的堆積網(wǎng)絡(luò)層,然后調(diào)用Embedding,LSTM,Dense,Dropout方法進(jìn)行網(wǎng)絡(luò)模型構(gòu)建,最后進(jìn)行訓(xùn)練即可,對(duì)于不同的訓(xùn)練集要調(diào)整不同的參數(shù),以確保效果達(dá)到最好.
預(yù)處理操作后,手工對(duì)唱詞進(jìn)行二分類(lèi)打分標(biāo)記,“0”為消極情感,“1”為積極情感,然后放入樸素貝葉斯模型中進(jìn)行測(cè)試,劃分70%為訓(xùn)練集,剩余30%為測(cè)試集.實(shí)驗(yàn)部分結(jié)果如下:
原文:好馬上備的是好鞍子
預(yù)測(cè)傾向?yàn)?
原文:鞍子上騎的是人梢子
預(yù)測(cè)傾向?yàn)?
原文:身穿皮襖金邊子
預(yù)測(cè)傾向?yàn)?
原文:腰里別的是三件子
預(yù)測(cè)傾向?yàn)?
原文:八寶山來(lái)火焰山
預(yù)測(cè)傾向?yàn)?
原文:牧民們占下的好草山
預(yù)測(cè)傾向?yàn)?
原文:甘州不干著水灘灘
預(yù)測(cè)傾向?yàn)?
原文:清水的鍋里面下上
預(yù)測(cè)傾向?yàn)?
原文:清眼淚淌給著腳面上
預(yù)測(cè)傾向?yàn)?
原文:維人哈就這個(gè)下場(chǎng)
預(yù)測(cè)傾向?yàn)?
原文:麥子地里的麥苒苒
預(yù)測(cè)傾向?yàn)?
原文:又長(zhǎng)了苦苦菜了
預(yù)測(cè)傾向?yàn)?
原文:相思病得哈著還沒(méi)好
預(yù)測(cè)傾向?yàn)?
LSTM神經(jīng)網(wǎng)絡(luò)模型+Word2vec:重復(fù)唱詞預(yù)處理和打分操作后,構(gòu)建LSTM神經(jīng)網(wǎng)絡(luò)模型,采用Word2vec詞向量技術(shù)生成詞向量,通過(guò)LSTM神經(jīng)網(wǎng)絡(luò)模型預(yù)測(cè)唱詞的情感分類(lèi).LSTM層采用超參數(shù)值如表1所示.
表1 部分超參數(shù)設(shè)置
續(xù)表
實(shí)驗(yàn)部分結(jié)果如下:
原文:烏木筷子下兩雙
預(yù)測(cè)傾向?yàn)椋篬0.7028313]
原文:眼睛似水憂傷
預(yù)測(cè)傾向:[0.53]
原文:心疼擦一把汗
預(yù)測(cè)傾向:[0.61]
原文為:花椒樹(shù)上甭上上時(shí)樹(shù)枝杈兒掛
預(yù)測(cè)傾向:[0.41]
原文為:聽(tīng)說(shuō)尕妹妹病哈了
預(yù)測(cè)傾向?yàn)椋篬0.83]
原文:我倆婚緣哈配
預(yù)測(cè)傾向?yàn)椋篬0.77]
原文:阿哥荒草灘睡
預(yù)測(cè)傾向:[0.32]
原文:心牽心想
預(yù)測(cè)傾向?yàn)椋篬0.42]
原文:尕妹山櫻地一枝花花兒唱家
預(yù)測(cè)傾向:[0.71]
原文:我倆婚緣散凍冰上開(kāi)一朵雪蓮
預(yù)測(cè)傾向:[0.40]
原文:聽(tīng)個(gè)歌花兒少年
預(yù)測(cè)傾向:[0.74]
原文:身穿皮襖金邊子
預(yù)測(cè)傾向:[0.96]
原文:好想跨上馬背迎著幸福追
預(yù)測(cè)傾向:[0.61]
在情感分析的結(jié)果評(píng)價(jià)中分類(lèi)準(zhǔn)確的概率、分類(lèi)召回的概率、和將兩者統(tǒng)一起來(lái)的F值(F-measure)這三項(xiàng)數(shù)據(jù)是通用的評(píng)價(jià)指標(biāo),本文也采用這三種方式對(duì)上述二組實(shí)驗(yàn)進(jìn)行評(píng)估,如表2所示:采用Word2vec的神經(jīng)網(wǎng)絡(luò)模型的預(yù)測(cè)在召回率方面優(yōu)點(diǎn)十分凸出,根據(jù)F值綜合對(duì)比,LSTM的效果較NBM的效果更為理想.
表2 兩組實(shí)驗(yàn)數(shù)據(jù)對(duì)比
筆者利用WordCloud下的WordCloud包對(duì)所收集到的唱詞中所采集的各民族(回族、土族、撒拉族及藏族)及不同區(qū)域(大通、循化、民和及同仁)的花兒唱詞進(jìn)行分類(lèi),通過(guò)對(duì)不同民族和不同地域的唱詞中出現(xiàn)頻率較高的唱詞生成詞云圖如圖6和圖7所示.
圖6 唱詞的民族傾向性詞云圖
圖7 唱詞的地域傾向性詞云圖
本文利用Python這一門(mén)解釋性語(yǔ)言[5]構(gòu)建了機(jī)器學(xué)習(xí)與深度學(xué)習(xí)中的樸素貝葉斯模型和LSTM神經(jīng)網(wǎng)絡(luò)模型,對(duì)“青?;▋骸背~的情感做了簡(jiǎn)要的分析和信息的挖掘,在實(shí)驗(yàn)中,由于民族歌曲多帶有地方特色,含有許多晦澀難懂的詞語(yǔ)和生僻詞,所以字典收錄不夠完善,分詞結(jié)果受到影響,導(dǎo)致情感打分出現(xiàn)偏差,造成測(cè)試數(shù)據(jù)集的積極和消極情感分類(lèi)不夠準(zhǔn)確.另外設(shè)計(jì)的模型和算法都較為簡(jiǎn)單,受客觀因素的影響較為嚴(yán)重,造成了分析結(jié)果不夠準(zhǔn)確.如何獲取更大規(guī)模的數(shù)據(jù)集以及如何優(yōu)化算法都是今后需要研究的問(wèn)題.
青海師范大學(xué)學(xué)報(bào)(自然科學(xué)版)2021年3期