李曉娜 蔡 瓊 陳子曦 李俊民
(江漢大學(xué) 湖北·武漢 430056)
隨著現(xiàn)代信息科學(xué)技術(shù)的發(fā)展,網(wǎng)絡(luò)上各類問答平臺越來越受到網(wǎng)絡(luò)用戶的歡迎,例如知乎平臺用戶數(shù)量已經(jīng)破億,而技術(shù)社區(qū)問答平臺可以作為網(wǎng)絡(luò)用戶相互分享交流經(jīng)驗(yàn)技術(shù)的社區(qū)平臺,近年來逐步成為網(wǎng)絡(luò)用戶尋找技術(shù)類疑難解答的首要渠道。然而隨著各分類技術(shù)性問題的文本數(shù)據(jù)量不斷攀升,給技術(shù)問答平臺的日常運(yùn)營維護(hù)帶來了挑戰(zhàn)。因?yàn)殡S著新用戶的不斷加入導(dǎo)致用戶數(shù)量的增加,而新用戶提出的疑問可能已經(jīng)在本平臺上被其他用戶提出過并且已經(jīng)存在解決方案了。但由于技術(shù)性問題的復(fù)雜性,不同用戶提出的問題的切入角度不同,用問題標(biāo)題關(guān)鍵詞匹配的搜索系統(tǒng)無法高效指引新用戶至現(xiàn)有的問題解決方案。于是,新用戶就會在該平臺上提出重復(fù)的問題,所以這些重復(fù)的問題會進(jìn)一步增加平臺后臺工作運(yùn)行的文本量,導(dǎo)致平臺重復(fù)響應(yīng)相同的問題,工浪費(fèi)時間且工作效率極低。對于這種現(xiàn)象,通常的做法是及時找到新增的重復(fù)問題并打上相應(yīng)的標(biāo)簽,然后在用戶的搜索結(jié)果中隱藏該類重復(fù)問題,保證對應(yīng)已解決問題出現(xiàn)的優(yōu)先級。所以,本文將會建立一個基于自然語言處理技術(shù)的自動標(biāo)重系統(tǒng)會對該問答平臺的日常維護(hù)起到極大幫助。
2.1.1 去重和去敏
對附件1:對于附件1進(jìn)行數(shù)據(jù)清洗,首先檢查附件1中是否含有缺失值和異常值。經(jīng)檢驗(yàn)該表格中不含有缺失值和異常值。然后利用pycharm的中的pandas語句讀取附件1,開始我們先只提取“translated”一列,因?yàn)槲覀円龅氖菍χ形奈谋镜牟橹兀晕覀兙椭苯觿h掉英文版問題,以便于我們后期的數(shù)據(jù)清洗。利用drop_duplicates()語句對全體中文問題文本進(jìn)行去重,即去掉完全重復(fù)的問題,再利用lambda x:re.sub刪去敏感詞匯。
2.1.2 jieba分詞
去重去敏結(jié)束之后,我們利用jieba進(jìn)行分詞切割。Jieba分詞是一種基于前綴詞典及動態(tài)規(guī)劃實(shí)現(xiàn)分詞,jieba分詞主要是基于統(tǒng)計詞典,構(gòu)造一個前綴詞典,然后利用前綴動態(tài)詞典對輸入句子進(jìn)行切分,得到所有的切分可能,根據(jù)切分位置,構(gòu)造一個有向無環(huán)圖,然后通過動態(tài)規(guī)劃算法,計算得到最大概率路徑,也就得到了最終的切分形式。我們利用jieba分詞將每個問題文本化為一組分詞。
2.1.3 去停用詞和標(biāo)點(diǎn)
我們?yōu)榱耸沟脝栴}重復(fù)率的檢驗(yàn)更加高效成功,所以我們要對前面分詞得到后的結(jié)果再進(jìn)行去停用詞。我們在pycharm中利用‘stopword.txt’導(dǎo)入常見停用詞庫,根據(jù)我們觀察該表格得到的一些額外的停用詞,例如‘≮’,‘≯’,‘≠’,‘≮’,‘?’,‘會’,‘月’,‘日’,‘–’等等也計入停用詞庫,然后對translated整體去停用詞。并且去掉所有標(biāo)點(diǎn)。
2.1.4 整理重復(fù)問題組
對附件2:在excel中先將附件2中“duplicates”一列的數(shù)據(jù)移動到“questionID”一列,然后利用excel中的排序功能對總體數(shù)據(jù)進(jìn)行id升序排列,此時這一列有很多id重復(fù),然后我們利用excel中的數(shù)據(jù)功能找出重復(fù)值并且高亮重復(fù)值,然后刪掉重復(fù)值,這時我們發(fā)現(xiàn)有很多重復(fù)值的label既有0也有1,此時我們優(yōu)先刪掉lebal為0的id,得到新表格。
我們提取詞向量使用的是 CountVectorizer和 Tfidf-Transformer方法。CountVectorizer是通過fit_transform函數(shù)將文本中的詞語轉(zhuǎn)換為詞頻矩陣CountVectorizer是屬于常見的特征數(shù)值計算類,是一個文本特征提取方法。對于每一個訓(xùn)練文本,它只考慮每種詞匯在該訓(xùn)練文本中出現(xiàn)的頻率。CountVectorizer會將文本中的詞語轉(zhuǎn)換為詞頻矩陣,它通過fit_transform函數(shù)計算各個詞語出現(xiàn)的次數(shù)。
我們對于語義相似度的計算選擇的是Google研發(fā)的當(dāng)下最火的BERT。
我們將原附件2中的所有重復(fù)問題,即label為1的問題組留下,其他label為0的問題先刪掉,如果存在“一對二”或“一對多”即有兩個或兩個以上的問題重復(fù),我們將這類數(shù)據(jù)進(jìn)行拆分,全部變成一對一的問題組,方便我們模型的建立和使用。
我們對模型進(jìn)行測試:
隨機(jī)挑選一個目標(biāo)問題的id:2,輸入在pycharm程序代碼中,點(diǎn)擊運(yùn)行,結(jié)果顯示,id為2的問題找出的重復(fù)問題的top 10。經(jīng)我們?nèi)斯づ卸?,其中top K列表結(jié)果中正確檢測到的重復(fù)問題編號數(shù)量為7個,該樣本實(shí)際擁有的重復(fù)問題數(shù)量為10個,所以R=0.7。
決策樹的優(yōu)點(diǎn):決策樹易于理解和實(shí)現(xiàn),人們在在學(xué)習(xí)過程中不需要使用者了解很多的背景知識,這同時是它的能夠直接體現(xiàn)數(shù)據(jù)的特點(diǎn),只要通過解釋后都有能力去理解決策樹所表達(dá)的意義。
決策樹的缺點(diǎn):(1)對連續(xù)性的字段比較難預(yù)測;(2)對有時間順序的數(shù)據(jù),需要很多預(yù)處理的工作;(3)當(dāng)類別太多時,錯誤可能就會增加得比較快;(4)一般的算法分類的時候,只是根據(jù)一個字段來分類。
BERT的優(yōu)點(diǎn):BERT是截至2018年10月的最新state oftheart模型,通過預(yù)訓(xùn)練和精調(diào)橫掃了11項(xiàng)NLP任務(wù),這首先就是最大的優(yōu)點(diǎn)了。而且它還用的是Transformer,也就是相對rnn更加高效、能捕捉更長距離的依賴。對比起之前的預(yù)訓(xùn)練模型,它捕捉到的是真正意義上的bidirectional context信息。
BERT的缺點(diǎn):BERT在第一個預(yù)訓(xùn)練階段,假設(shè)句子中多個單詞被Mask掉,這些被Mask掉的單詞之間沒有任何關(guān)系,是條件獨(dú)立的,然而有時候這些單詞之間是有關(guān)系的,比如“NewYorkisacity”,假設(shè)我們Mask住“New”和“York”兩個詞,那么給定“is a city”的條件下“New”和“York”并不獨(dú)立,因?yàn)椤癗ew York”是一個實(shí)體,看到“New”則后面出現(xiàn)“York”的概率要比看到“Old”后面出現(xiàn)“York”概率要大得多。
BERT模型的推廣:本文解決技術(shù)平臺對重復(fù)問題的識別使用的是一種稱之為BERT的新語言表征模型,意為來自變換器的雙向編碼器表征量(BidirectionalEncoder Representations from Transformers)。不同于最近的語言表征模型(Peters等,2018;Radford等,2018),BERT旨在基于所有層的左、右語境來預(yù)訓(xùn)練深度雙向表征。因此,預(yù)訓(xùn)練的BERT表征可以僅用一個額外的輸出層進(jìn)行微調(diào),進(jìn)而為很多任務(wù)(如問答和語言推理)創(chuàng)建當(dāng)前最優(yōu)模型,無需對任務(wù)特定架構(gòu)做出大量修改。
決策樹模型的推廣:企業(yè)管理實(shí)踐,企業(yè)投資決策,由于決策樹很好的分析能力,在用戶分群、用戶流失等領(lǐng)域應(yīng)用較多。