張童越,張紹武,林鴻飛,徐 博,楊 亮
(大連理工大學(xué) 計算機科學(xué)與技術(shù)學(xué)院, 遼寧 大連 116024)
幽默是人類交流的重要組成部分,情景喜劇作為一種大量包含幽默元素的藝術(shù)形式深受人們的青睞,在情景喜劇中,笑點(punchline)是幽默的載體,它是對白中使人發(fā)笑的一個或多個句子,是情景喜劇具有幽默性的關(guān)鍵之一。情景喜劇的對白具有復(fù)雜的語境,識別對白中的笑點對于提高計算機識別人類幽默的能力有著重要作用,但是從大量的對白中識別出少量的笑點是一項有挑戰(zhàn)性的任務(wù)。 情景喜劇的對白由大量的笑話組成,Bright等[1]指出笑話一般是由笑點和笑點的上文鋪墊(setup)所組成的,Raskin等[2]認為“鋪墊”的作用是為笑點提供上下文信息,笑點的作用是通過表達與鋪墊相違背的語義來產(chǎn)生幽默的效果,這在幽默理論中被稱為不一致性[3]。在情景喜劇笑點識別任務(wù)中,笑點和非笑點在對白中的分布情況直觀反映在句子標簽的分布規(guī)律上,但是現(xiàn)有的笑點識別方法通常只通過建模鋪墊和笑點之間的上下文語義關(guān)系分析不一致性并識別笑點,對標簽的利用并不充分。為了彌補這一不足,本文引入了在標簽層面的分析,將相鄰標簽之間的轉(zhuǎn)移關(guān)系看作是不一致性的一種體現(xiàn)。相鄰標簽之間的轉(zhuǎn)移關(guān)系存在于單詞級別和句子級別兩個粒度上,例如,句子A為“You fell Asleep !!”,句子A的下一句句子B為“There was no kangroo !”,句子A為鋪墊,標簽值為0,句子B為笑點,標簽值為1,句子B能夠產(chǎn)生和句子A的不一致性。在單詞級別,將組成句子的字符(包括單詞和標點符號)分為兩類,正類代表該字符所在的句子能產(chǎn)生與鋪墊的不一致性,標簽值為1,其中字符的生成方式將在2.2節(jié)做詳細介紹,因此句子A中所有字符均為負類,句子B中所有字符均為正類,即每個句子中相鄰先后兩個字符的標簽不會是“1,0”或“0,1”,即標簽不會在0和1之間發(fā)生轉(zhuǎn)移。在句子級別,句子A和B之間的不一致性直觀體現(xiàn)在句子的標簽由0變?yōu)?的標簽轉(zhuǎn)移現(xiàn)象。為了挖掘在單詞級別和句子級別同時存在的兩種標簽轉(zhuǎn)移關(guān)系,考慮到條件隨機場能夠計算相鄰標簽的轉(zhuǎn)移可能性大小,使用線性鏈條件隨機場(Linear Chain Conditional Random Field,CRF)[4]學(xué)習上述兩種轉(zhuǎn)移關(guān)系。最后,由于學(xué)習相鄰標簽之間的轉(zhuǎn)移關(guān)系以及上下文語義關(guān)系均能夠?qū)W習到鋪墊和笑點之間的不一致性,兩者之間存在相關(guān)性,為了利用這種相關(guān)性提高模型的性能,本文采用多任務(wù)學(xué)習方法并定義了四個子任務(wù),如表1所示,將子任務(wù)一作為主任務(wù),其他作為副任務(wù),子任務(wù)一和子任務(wù)三為僅學(xué)習詞義或句義而不使用條件隨機場挖掘標簽序列中的信息,子任務(wù)二和子任務(wù)四為學(xué)習詞義或句義的同時使用條件隨機場挖掘標簽序列中的信息,并同時對四個子任務(wù)進行學(xué)習。
表1 子任務(wù)描述
本文的貢獻分為以下兩點: (1)提出了結(jié)合條件隨機場的單詞-句子級多任務(wù)學(xué)習方法。在情景喜劇笑點識別任務(wù)中,該方法將標簽序列中相鄰兩個標簽之間的轉(zhuǎn)移看作是幽默理論中不一致性理論的一種體現(xiàn),為了學(xué)習相鄰標簽之間的轉(zhuǎn)移關(guān)系,本文結(jié)合了神經(jīng)網(wǎng)絡(luò)與條件隨機場。(2)使用多任務(wù)學(xué)習方法同時學(xué)習四個子任務(wù),并通過實驗證明了多任務(wù)學(xué)習的有效性。
幽默是人們?nèi)粘=涣鞯闹匾M成部分,隨著機器學(xué)習和深度學(xué)習技術(shù)的發(fā)展,幽默識別受到了較多的關(guān)注。在以往的工作中,為了識別幽默,Mihalcea和Strapparava[5]提出了四種特征,分別為頭韻(西方詩歌的一種押韻形式)、反義詞組,同義詞組以及上下文特征,并使用這些特征識別文本是否幽默。Yang等[6]設(shè)計了一種用于識別幽默的分類器,該分類器從不協(xié)調(diào)性、歧義、說話者和傾聽者之間的影響以及發(fā)音特征四個層面挖掘幽默背后的語義結(jié)構(gòu)。Morales和Zhai[7]利用了文本的背景信息,如維基百科的詞條描述,并構(gòu)建多種特征識別互聯(lián)網(wǎng)上的幽默評論。以上都是基于特征工程的幽默識別方法,隨著深度學(xué)習技術(shù)的發(fā)展,基于神經(jīng)網(wǎng)絡(luò)的方法同樣取得了好的效果,Chen和Soo[8]使用卷積神經(jīng)網(wǎng)絡(luò)進行幽默識別。Zhou[9]等指出雙關(guān)語是實現(xiàn)幽默效果的方式之一,包括諧音相關(guān)和語義相關(guān),并使用一種基于BERT和注意力機制的方法同時對單詞的音素(根據(jù)語音的自然屬性劃分出來的最小語音單位)和語義進行建模。Fan等[10]提出的模型結(jié)合了卷積神經(jīng)網(wǎng)絡(luò)、門控循環(huán)神經(jīng)網(wǎng)絡(luò)和注意力機制,該模型通過學(xué)習語音結(jié)構(gòu)和語義表征的方法進行幽默識別。 笑點是幽默的重要表現(xiàn)形式之一,并廣泛存在于對白中,為了識別笑點,以往的工作大多從鋪墊和笑點組成的句子對這一角度解決問題。在以往的工作中,Xie等[11]為了區(qū)分笑話和非笑話,使用預(yù)訓(xùn)練語言模型學(xué)習鋪墊和笑點之間的語義關(guān)系,并將不一致性擴展到不 確定度和驚喜度兩個方面,從這兩個方面對鋪墊和笑點之間的語義關(guān)系進行評估;受到不一致性理論的啟發(fā),Mihalcea等[12]提出了一種通過計算鋪墊和笑點之間語義關(guān)系來識別笑點的方法。Andrew 和Cattle[13]使用了五種不同的度量方法計算鋪墊和笑點之間的語義相關(guān)度;Bertero和Fung[14]使用長短時記憶網(wǎng)絡(luò)建模鋪墊和笑點之間的關(guān)系;Choube等[15]通過融合來自文本、音頻和視頻三個模態(tài)的信息,提高了語義識別的準確性,同時使用門控循環(huán)單元進行上下文建模,進一步提高了笑點識別的效果。
綜上所述,鋪墊和笑點這一概念常被用于笑點識別工作中,但是以往的笑點識別工作通常只通過建模鋪墊和笑點之間的上下文語義關(guān)系分析不一致性并識別笑點,忽視了標簽序列中的信息,導(dǎo)致對標簽信息的利用并不充分。
圖1 結(jié)合標簽轉(zhuǎn)移關(guān)系的多任務(wù)笑點識別模型圖
為了將輸入文本轉(zhuǎn)換為模型可接受的向量形式,需要對輸入文本進行詞嵌入。模型的輸入為一個由對白中N個句子拼接成的序列S=[s1;s2;…;sN],使用預(yù)訓(xùn)練語言模型對輸入序列進行詞嵌入,現(xiàn)有的預(yù)訓(xùn)練模型包括BERT[16],XLNet[17],RoBERTA[18]等,本框架使用RoBERTA作為詞嵌入層,同時規(guī)定:
其中,len(·)是計算一個句子經(jīng)過Roberta的分詞處理后生成的字符總數(shù)的操作,max為超參數(shù),si代表輸入序列中第i個句子,并且將si包含的所有字符表示為:W={wi,1,wi,2,…,wi,len(si)},其中i∈RN,wi,j為si的第j個字符,N表示一個batch包含的句子數(shù)量。將輸入序列送入入嵌入層,得到每個字符的詞向量,將詞嵌入層的輸出定義為:
其中,Ri={vi,1,…,vi,len(si)},vi,j∈Rb×l×d,i∈RN,vi,j表示第si的j個字符對應(yīng)的詞向量,b為輸入的batch數(shù)量,l為si中包含的字符數(shù)量之和,d為Roberta隱藏層大小。
本文將相鄰標簽之間的轉(zhuǎn)移關(guān)系看作幽默理論中的不一致性理論的一種體現(xiàn),為了在標簽層面分析鋪墊和笑點之間的不一致性,模型在單詞級別和句子級別同時挖掘相鄰標簽之間的轉(zhuǎn)移關(guān)系,本節(jié)詳細介紹如何在單詞級別和句子級別上挖掘相鄰標簽之間的轉(zhuǎn)移關(guān)系,以及如何設(shè)置共享層。
2.3.1 單詞級別
在單詞級別,標簽層面和單純詞義層面共享一部分隱藏層,定義為shareword,被共享隱藏層的參數(shù)同時受到兩個層面的影響,使模型學(xué)習到更多的信息。詞嵌入層中的Transformers能夠忽略字符之間的距離,并學(xué)習句子中全部字符之間的特征依賴關(guān)系,為了學(xué)習部分字符之間的局部特征依賴關(guān)系,考慮到卷積運算只對卷積核大小范圍內(nèi)的輸入進行處理[19],我們使用卷積神經(jīng)網(wǎng)絡(luò)處理輸入字符序列的詞嵌入向量,即圖1中的“CNN”,并使用一個特征組合層將CNN的輸出向量和詞嵌入層的輸出相加,如式(3)、式(4)所示。
(5)
其中,Linear1(·)為一層用于二分類的全連接層,即fc1。為了學(xué)習相鄰字符的標簽之間的轉(zhuǎn)移關(guān)系,將輸出Pcrf1定義為:
其中,CRF1(·)為一個線性鏈條件隨機場,Pcrf1為條件隨機場對每個字符預(yù)測得到的標簽。
其中,yi為輸入序列中第i個字符的標簽,n為輸入序列的長度,得分函數(shù)值越大,對輸入序列的標簽預(yù)測的合理性越高。
2.3.2 句子級別
在句子級別上,為了學(xué)習相鄰句子的標簽之間的轉(zhuǎn)移關(guān)系,將輸出定義為:
其中,yi為輸入序列中第i個字符的標簽,n為輸入序列的長度,得分函數(shù)值越大,對輸入序列的標簽預(yù)測的合理性越高。
模型在單詞級別和句子級別同時挖掘鋪墊和笑點在單純語義層面的關(guān)系,本節(jié)詳細介紹如何在單詞級別挖掘詞義和在句子級別挖掘句義,以及如何設(shè)置共享層。
2.4.1 單詞級別
2.4.2 句子級別
由于數(shù)據(jù)集中正樣本數(shù)量遠少于負樣本數(shù)量,因此將二分類問題轉(zhuǎn)化為異常檢測問題進行處理[21],其中,Linear2(·)代表用于異常檢測的全連接層,即圖1中的fc2。
為了使模型同時學(xué)習標簽層面和單純語義層面的信息,使用多任務(wù)學(xué)習方法,將任務(wù)一作為主任務(wù),將其他任務(wù)作為副任務(wù),同時對四個任務(wù)進行學(xué)習,提高主任務(wù)的泛化性。
任務(wù)一為學(xué)習字符的詞義,損失函數(shù)采用交叉熵損失函數(shù),并將損失函數(shù)定義為lossword,由于數(shù)據(jù)集中只有每個句子的標簽,因此將一個句子中所有字符的真實標簽定義為該句的真實標簽,標簽為1代表該字符所處的句子能夠產(chǎn)生和上文的不一致性,否則相反。
任務(wù)二為學(xué)習不同類別字符的轉(zhuǎn)移關(guān)系,損失函數(shù)為線性鏈條件隨機場產(chǎn)生的損失函數(shù),將損失函數(shù)定義為:
任務(wù)三為學(xué)習句子的句義,由于數(shù)據(jù)集中存在正負樣本數(shù)量不均衡問題,因此使用GHM損失函數(shù)[22],并將損失函數(shù)定義為lossutt,GHM損失函數(shù)通過衡量一定梯度范圍內(nèi)的正負樣本數(shù)量,使數(shù)量較多的類別對應(yīng)的樣本權(quán)重下降,讓模型能夠更多地關(guān)注數(shù)量較少的樣本。
任務(wù)四為學(xué)習相鄰句子的標簽轉(zhuǎn)移關(guān)系,損失函數(shù)定義為:
其中,λ是權(quán)重衰減系數(shù),θ是所有可訓(xùn)練參數(shù)。
本文在CCL2020“小牛杯”幽默計算——情景喜劇笑點識別評測任務(wù)的英文數(shù)據(jù)集上進行實驗,該數(shù)據(jù)集來自電視劇《老友記》。根據(jù)場景的變換,將情景劇的對話結(jié)構(gòu)分為對白(Dialogue)和句子(Utterance)兩個層級,對白層級以一段獨立的對白為單位,每段對白包含不同數(shù)量的樣本,句子層級以一條樣本為單位,每條樣本為一個句子,如表2所示,對白A來自該數(shù)據(jù)集,包含7條樣本,每條樣本為一條句子。數(shù)據(jù)集中每條樣本帶有一個標簽,標簽為“0”表示該樣本不是笑點,為“1”表示該樣本是笑點,訓(xùn)練集包含7 472條樣本,550段對白, 其中包括1 773條笑點和5 699條非笑點,測試集包含2 096條樣本,157段對白,如表3所示。
表2 對白結(jié)構(gòu)樣例
表3 數(shù)據(jù)集規(guī)模
情景喜劇被劃分成若干段對白(Dialogue),每段對白由不同數(shù)量的句子(Utterance)組成,考慮到每段對白包含的句子數(shù)量不同,評測官方將F1+Acc的值作為最終評價指標,該值的大小代表笑點識別效果的好壞(1)http://cips-cl.org/static/CCL2020/humorcomputation.html,其中F1為句子層級的F1分數(shù),F1分數(shù)為所有正類樣本的召回率(Recall)和準確率(Precision)的調(diào)和平均數(shù);Acc為對白層級的精確率,精確率的計算方法為首先得到每段對白的精確率,再對所有對白的精確率取平均。
基線模型如表4所示,第一類是自設(shè)計的基線模型,BERT代表使用預(yù)訓(xùn)練BERT模型對輸入序列進行詞嵌入,并使用全連接層和Softmax函數(shù)為每個句子進行分類,TextCNN[23]和LSTM[24]被用于提取句向量中的幽默特征,BiLSTM使用雙向LSTM從前到后和從后到前對輸入句子序列的句向量進行編碼;最后,所有自設(shè)計基線模型均使用預(yù)訓(xùn)練BERT作為詞嵌入層。第二類是CCL2020任務(wù)三參賽隊伍中在英文數(shù)據(jù)集上取得前六名的隊伍所采用的方案(2)https://github.com/DUTIR-Emotion-Group/CCL2020-Humor-Computation,第六名使用門控循環(huán)單元對句子進行上下文建模。第五名構(gòu)建了四個基于長短時記憶網(wǎng)絡(luò),卷積神經(jīng)網(wǎng)絡(luò)和多頭注意力機制的不同模型,并對四個模型進行模型融合。第四名使用了多種數(shù)據(jù)增強方法,并使用模型融合方法融合由不同數(shù)據(jù)訓(xùn)練得到的模型。第三名使用多任務(wù)學(xué)習方法同時對句子是否為笑點以及當前句子的說話者進行預(yù)測。第二名將命名實體識別的思想應(yīng)用于笑點識別任務(wù),通過判斷一句話中所有預(yù)測標簽為1的字符總數(shù)和該句長度的比例判斷該句是否為笑點,本文的模型是在該方法上做出的改進。第一名使用預(yù)測下一句的方法對句子進行分類,在將數(shù)據(jù)輸入到預(yù)訓(xùn)練模型時,輸入策略為將待分類句的前十句和后兩句作為輸入的第一個序列,待分類句作為第二個序列。
表4 CCL2021英文數(shù)據(jù)集實驗結(jié)果
實驗在Pytorch環(huán)境下進行。優(yōu)化器為AdamW。為了減少過擬合現(xiàn)象的發(fā)生,采用權(quán)重衰減策略,權(quán)重衰減系數(shù)為0.01。學(xué)習率為5×10-6,同時采用學(xué)習率衰減策略,模型每處理300個batch學(xué)習率變?yōu)楫斍爸档?.8倍。Dropout設(shè)置為0.1。Batchsize為1,即每次向模型輸入由NF條句子組成的單個序列,并規(guī)定輸入序列經(jīng)過預(yù)訓(xùn)練模型分詞后的字符總數(shù)必須小于256。在詞嵌入層使用的預(yù)訓(xùn)練模型為含24個Transformer[25]的RoBERTA(large),RoBERTA(large)的隱藏層大小為1 024,并將最后一層Transformer的輸出向量作為詞嵌入層的輸出。卷積神經(jīng)網(wǎng)絡(luò)的卷積層層數(shù)為1,同時為了保證輸出向量的維度與輸入向量保持一致,卷積層的卷積核大小設(shè)置為3,步長設(shè)置為1,卷積核數(shù)量與詞嵌入層的隱藏層大小相同。當閾值設(shè)置為0.3時模型的性能相對最佳。
表4展示了本文提出的方法和基線模型的比較結(jié)果。在自設(shè)計的基線模型中,使用TextCNN挖掘句向量之間的短距離上下文語義關(guān)系,以及使用LSTM和雙向LSTM(BiLSTM)捕捉句向量之間的長距離上下文語義關(guān)系,雖然LSTM可彌補TextCNN只能提取短距離特征這一不足,但是會更多地關(guān)注后輸入的信息從而導(dǎo)致丟失部分信息,雙向LSTM通過對輸入序列進行從前到后和從后到前的編碼解決了丟失信息的問題,但是由于挖掘幽默特征較為困難,而且數(shù)據(jù)集中正負樣本數(shù)量差別大,使用傳統(tǒng)神經(jīng)網(wǎng)絡(luò)作為分類器無法取得理想的識別效果。在參賽隊伍使用的六種模型中,為了彌補傳統(tǒng)神經(jīng)網(wǎng)絡(luò)在笑點識別工作中的不足,使用了BERT或基于BERT改進的預(yù)訓(xùn)練語言模型獲得單詞或句子向量,使用傳統(tǒng)或人工設(shè)計的分類器提取語義特征并對句子進行分類,同時為了進一步提高笑點識別性能,第一名、第四名和第五名使用模型融合方法中的投票法提高輸出結(jié)果的準確性,第三名使用多任務(wù)學(xué)習方法提高模型的泛化性。與所有基線模型相比,本文提出的結(jié)合條件隨機場的單詞-句子級多任務(wù)學(xué)習模型將在標簽層面的分析引入到笑點識別任務(wù)中,并使用多任務(wù)學(xué)習方法融合來自標簽層面和單純語義層面的信息,不同的子任務(wù)為模型訓(xùn)練提供了不同的噪聲,噪聲的存在能夠提高模型擬合真實數(shù)據(jù)分布的能力,使模型從訓(xùn)練數(shù)據(jù)中學(xué)習到更具一般性的表征,提高模型的泛化性,超過了所有基線模型中的最好模型的性能。與所有基線模型相比,本文提出的模型在F1分數(shù)(F1)上比基線模型中最好的方法提高了4.1%;在精確率(Acc)上比基線模型中的“第一名”低0.9%,原因是模型雖然提高了將正樣本正確識別的概率,因此使正類的召回率(Recall)比第一名高12.7%,但是將更多的負樣本錯誤識別為正樣本,因此正類的查準率(Precision)比第一名低3.2%,導(dǎo)致精確率(Acc)低于第一名。由于數(shù)據(jù)集由大量獨立的對白組成,且每段對白包含的句子數(shù)量不同,只在句子層級或?qū)Π讓蛹壏治鲂c識別效果無法準確判斷模型的性能,因此遵循評測官方的規(guī)定,將F1分數(shù)和精確率之和“F1+Acc”作為最終評價指標,本文提出的模型在“F1+Acc”上比基線模型中最好的方法提高了3.2%,證明使用多任務(wù)學(xué)習方法將在標簽層面的分析融入到情景喜劇笑點識別任務(wù)中能夠有效提高笑點識別的性能。
為了更好地證明模型中各部分的作用,本文進行了消融實驗研究,結(jié)果如表5所示??梢钥闯?只刪除任務(wù)二、任務(wù)三或任務(wù)四會使模型的性能分別下降2.3%、1.4%和0.8%,證明任務(wù)二對提高模型性能的貢獻最大,刪除任務(wù)四和任務(wù)二以及刪除任務(wù)四、任務(wù)二和任務(wù)三同樣會導(dǎo)致模型的性能分別下降3.4%和3.7%,證明在情景喜劇笑點識別任務(wù)中,使用線性鏈條件隨機場在單詞級別學(xué)習相鄰字符的標簽轉(zhuǎn)移關(guān)系以及在句子級別學(xué)習相鄰句子的標簽轉(zhuǎn)移關(guān)系能使模型獲得對提高笑點識別效果有用的信息,同時隨著子任務(wù)數(shù)量的減少,模型的性能隨之下降,證明多任務(wù)學(xué)習方法在笑點識別任務(wù)中的有效性以及學(xué)習標簽序列中的信息和學(xué)習語義信息之間具有相關(guān)性。
表5 消融實驗結(jié)果
為了識別情景喜劇對白中的笑點,本文提出了結(jié)合條件隨機場的單詞級-句子級多任務(wù)學(xué)習模型,該模型將標簽序列中相鄰兩個標簽之間的轉(zhuǎn)移看作幽默理論中的不一致性理論的一種體現(xiàn),并使用多任務(wù)學(xué)習方法同時在標簽層面和單純語義層面進行分析,通過和六個基線模型的對比實驗以及消融實驗證明了該模型在情景喜劇笑點識別工作中是有效的。今后的工作中, 將考慮通過將外部知識引入到情景喜劇笑點識別任務(wù)中以提高模型的性能。