Ch2r_ood_understanding 本文档为论文限定领域口语对话系统中超出领域话语的对话行为识别的部分实验代码。代码基于Python,需要用到的外部库有: Keras(搭建神经网络) S
Ch2r_ood_understanding
本文檔為論文限定領(lǐng)域口語(yǔ)對(duì)話系統(tǒng)中超出領(lǐng)域話語(yǔ)的對(duì)話行為識(shí)別的部分實(shí)驗(yàn)代碼。代碼基于Python,需要用到的外部庫(kù)有:
- Keras(搭建神經(jīng)網(wǎng)絡(luò))
- Scikit-learn(最大熵,隨機(jī)森林)
- gensim(使用word2vec替換字典外的詞)
實(shí)驗(yàn)涉及的方法主要有
- 二階段法(two-phase)
- 最大熵法(ME(TFIDF+OOV))
- 隨機(jī)森林(RF(random_forest.py))
- CNN(cnn.py)
語(yǔ)料庫(kù)簡(jiǎn)介
語(yǔ)料庫(kù)中有兩個(gè)語(yǔ)料庫(kù)可供選擇:
- AIML語(yǔ)料庫(kù)(人造數(shù)據(jù)集)
- CCL語(yǔ)料庫(kù)(實(shí)際測(cè)試用到的數(shù)據(jù)集)
標(biāo)簽格式為:
categoryA # categoryB
即?大類維度為A,小類維度為B
其中?大類共4類,小類共16類
實(shí)驗(yàn)方法
預(yù)處理模塊
預(yù)處理中有兩個(gè)預(yù)處理腳本可供選擇:
- BOC(Bag-of-character 即按字劃分,制造“字袋”)
- BOW(Bag-of-word 即按詞劃分,制造“詞袋”)
二階段法
我們將分類切割成兩部分,首先進(jìn)行4個(gè)大類的分類,在大類的基礎(chǔ)上,再對(duì)大類下的小類進(jìn)行細(xì)分
這樣做的合理性,在部分比賽參賽選手的做法中得到證實(shí)。理由是我們認(rèn)為大類分類比小類分類更加容易,在大類之內(nèi)進(jìn)行小類分類,可以使得小類分類時(shí)范圍減少,減少小類分類的難度。然而這樣也有不合理性,比如,大類分類出錯(cuò),則小類分類則無(wú)機(jī)會(huì)再分對(duì),也即誤差的傳遞性。
參考論文:?Splusplus: A Feature-Rich Two-stage Classifier for Sentiment Analysis of Tweets
在代碼中,針對(duì)每個(gè)大類對(duì)應(yīng)的小類,重新訓(xùn)練了各自的分類器:
resultData,resultTarget = findAllTrainning('attitude',exam_bow_fea_data) #找到其大類的所有小類 gb1 = sub_classfier(resultData,resultTarget) resultData,resultTarget = findAllTrainning('shopping',exam_bow_fea_data) #找到其大類的所有小類 gb2 = sub_classfier(resultData,resultTarget) resultData,resultTarget = findAllTrainning('chatting',exam_bow_fea_data) #找到其大類的所有小類 gb3 = sub_classfier(resultData,resultTarget) resultData,resultTarget = findAllTrainning('trouble',exam_bow_fea_data) #找到其大類的所有小類 gb4 = sub_classfier(resultData,resultTarget) 最大熵法
使用最大熵模型直接分類作為對(duì)照組
- 最大熵模型在許多文本分類問(wèn)題中都表現(xiàn)了他優(yōu)越的性能,這里我們利用他作為對(duì)照組,觀察后面CNN和RF的效果
參考論文:?使用最大熵模型進(jìn)行中文文本分類
- 當(dāng)邏輯回歸用于多分類問(wèn)題時(shí),可將損失函數(shù)改為交叉熵之后,則其成為最大熵模型LogisticRegression
- 為了提高分類精度,針對(duì)部分在字典外的詞,使用word2vec用外部語(yǔ)料(論文中使用SMP2015給出的微博數(shù)據(jù),1000萬(wàn)條)進(jìn)行OOV(out-of-vocabulary)替換(替換為與詞匯表最近的詞)
參考論文:?基于詞矢量相似度的短文本分類
代碼中,需要設(shè)置LogisticRegression的參數(shù)
clf = LogisticRegression(multi_class="multinomial",solver="newton-cg")卷積神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)在NLP中的使用多種多樣,這里使用設(shè)置不同窗口大小的方法進(jìn)行探索,即seq-CNN和Bow-CNN
參考論文:?(Johnson and Zhang, NAACL 2015) Effective Use of Word Order for Text Categorization with Convolutional Neural Networks
Seq-CNN
由one-hot編碼拼接而來(lái)
優(yōu)點(diǎn):詞語(yǔ)之間順序的得到保留 缺點(diǎn):維度過(guò)大,容易造成維度災(zāi)難
Bow-CNN
在Seq-CNN的基礎(chǔ)上,進(jìn)行降維
在確定窗口大小為n的情況,n之內(nèi)的one-hot coding進(jìn)行對(duì)應(yīng)位數(shù)相加 優(yōu)點(diǎn):窗口內(nèi)的語(yǔ)序信息丟失 缺點(diǎn):窗口間的語(yǔ)序信息得到保留,維度得到降低
隨機(jī)森林
傳統(tǒng)的bagging融合模型,這里樹的棵樹使用交叉驗(yàn)證得到,樹的深度使用經(jīng)驗(yàn)值:
log(M),其中M為總特征數(shù)
評(píng)價(jià)指標(biāo)
準(zhǔn)確率: sum(test_data_label == clf.predict(test)) / (1.0 * len(test_data_label))
總結(jié)
以上是生活随笔為你收集整理的Ch2r_ood_understanding 本文档为论文限定领域口语对话系统中超出领域话语的对话行为识别的部分实验代码。代码基于Python,需要用到的外部库有: Keras(搭建神经网络) S的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 十分钟学习自然语言处理概述
- 下一篇: 文本深度表示模型Word2Vec 简介