李碧秋,王佳斌,劉雪麗
(華僑大學(xué)工學(xué)院,泉州 362000)
數(shù)據(jù)清洗是發(fā)現(xiàn)并解決數(shù)據(jù)質(zhì)量問(wèn)題的過(guò)程,通常包含對(duì)相似重復(fù)數(shù)據(jù)、異常數(shù)據(jù)、不一致數(shù)據(jù)等的清洗,通過(guò)數(shù)據(jù)清洗提高數(shù)據(jù)質(zhì)量,使得企業(yè)能夠通過(guò)數(shù)據(jù)挖掘與數(shù)據(jù)分析做出科學(xué)判斷。針對(duì)相似重復(fù)數(shù)據(jù)的清洗可以降低數(shù)據(jù)庫(kù)的冗余度,提高數(shù)據(jù)庫(kù)的利用率。目前關(guān)于相似重復(fù)中文文本數(shù)據(jù)清洗主要包括通過(guò)預(yù)處理將句子文本這種非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)化為結(jié)構(gòu)化數(shù)據(jù)進(jìn)行處理;基于詞語(yǔ)共現(xiàn)度或基于詞袋模型的詞向量判斷文本是否相似;針對(duì)不同領(lǐng)域的特點(diǎn)制定相應(yīng)的清洗算法;考慮中英文的差異,從詞語(yǔ)語(yǔ)義角度分析記錄的相似性、精確度仍不夠理想??梢?jiàn)已有研究對(duì)中文數(shù)據(jù)清洗效率問(wèn)題、算法普適性及相似性檢測(cè)的準(zhǔn)確度方面還有很大提升空間。所以本文在現(xiàn)有研究基礎(chǔ)上提出利用BERT模型改進(jìn)文本向量化過(guò)程,將文本轉(zhuǎn)化為計(jì)算機(jī)可理解的數(shù)學(xué)表達(dá),再求可計(jì)算的文本之間的余弦相似度,利用K-means和Canopy算法將相似重復(fù)文本聚類(lèi),實(shí)現(xiàn)相似重復(fù)數(shù)據(jù)的清洗。
計(jì)算機(jī)不能直接對(duì)自然語(yǔ)言進(jìn)行計(jì)算,所以需要將文本數(shù)據(jù)轉(zhuǎn)化為向量形式,再對(duì)其做數(shù)學(xué)計(jì)算。常用的文本向量化方法包括TF-IDF[1]、Word2Vec模型[2]、GloVe模型[3]、ELMo模型[4]等,但是上述方法缺失文本語(yǔ)義信息、不具有上下文的“語(yǔ)義分析”能力。2018年谷歌AI團(tuán)隊(duì)發(fā)布的BERT模型[5]在問(wèn)答任務(wù)與語(yǔ)言推理方面展示了驕人的成績(jī)。其亮點(diǎn)在于,與傳統(tǒng)雙向模型只考慮句子左右兩側(cè)的上下文信息不同,BERT還將融合在所有層結(jié)構(gòu)中共同依賴的左右兩側(cè)上下文信息。此模型主要基于雙向Transformer編碼器[6]實(shí)現(xiàn)。BERT模型結(jié)構(gòu)如圖1所示。
圖1 BERT模型結(jié)構(gòu)
t1,t2...ti代表文本輸入,T1,T2...Ti代表經(jīng)過(guò)Transformer處理后的文本向量化表示。
BERT主要用了Transformer的Encoder,而沒(méi)有用其Decoder。Transformer模型中Encoder的結(jié)構(gòu)如圖2所示。
圖2 Encoder結(jié)構(gòu)
圖2表示了自然語(yǔ)言序列經(jīng)過(guò)計(jì)算得到文本的數(shù)學(xué)表達(dá),Transformer模型沒(méi)有循環(huán)神經(jīng)網(wǎng)絡(luò)的迭代操作,而是引入位置信息來(lái)識(shí)別語(yǔ)言中的順序關(guān)系。
此外,在BERT中提出了兩個(gè)新的預(yù)訓(xùn)練任務(wù)Masked LM(Masked Language Model)和Next Sentence Prediction。Masked LM即隨機(jī)把一句話中15%的token替換成以下內(nèi)容:
(1)這些token有80%的幾率被替換成[mask];
(2)有10%的幾率被替換成任意一個(gè)其他的token;
(3)有10%的幾率原封不動(dòng)。
在Next Sentence Prediction任務(wù)中選擇一些句子對(duì)S1與S2,其中50%的數(shù)據(jù)S1與S2是一組有邏輯的句子,剩余50%的數(shù)據(jù)S2是隨機(jī)選擇的,學(xué)習(xí)其中的相關(guān)性,添加這樣的預(yù)訓(xùn)練的目的是讓模型更好地理解兩個(gè)句子之間的關(guān)系。
基于以上理論,具體的向量化過(guò)程為:
Step1:文本預(yù)處理,去掉停用詞與特殊符號(hào),留下有實(shí)際意義的文本;
Step2:將超過(guò)512字符的長(zhǎng)文本數(shù)據(jù)的前128個(gè)字符與后382個(gè)字符相加代替原文本,使其符合BERT可接受的文本序列范圍;
Step3:構(gòu)建字向量、位置向量、文本向量作為BERT模型的輸入;
Step4:通過(guò)BERT模型中的Transformer編碼器融合全文語(yǔ)義信息,得到文本向量。
向量化結(jié)果為{詞id:向量表示}
部分句子向量化結(jié)果如下:
{45466:11.464980125427246,45438:11.46498012
5427246,10419:3.8473434448242188,44612:11.46498
0125427246......7173:10.771833419799805}
經(jīng)過(guò)向量化的文本即可進(jìn)行余弦相似度的計(jì)算。用向量空間中的兩個(gè)向量夾角的余弦值作為衡量?jī)蓷l記錄間的差異大小的度量,余弦值越接近1,就說(shuō)明向量夾角角度越接近0°,也就是兩個(gè)向量越相似,就叫做余弦相似。計(jì)算方法為:
(1)
聚類(lèi)算法是指將一堆沒(méi)有標(biāo)簽的數(shù)據(jù)自動(dòng)劃分成幾類(lèi)的方法,這個(gè)方法要保證同一類(lèi)數(shù)據(jù)有相似的特征,所以相似重復(fù)文本數(shù)據(jù)的清洗可以采用聚類(lèi)的思路。K-means[7]首先隨機(jī)初始化質(zhì)心,然后重復(fù)執(zhí)行以下兩項(xiàng)操作:①計(jì)算每個(gè)成員與質(zhì)心之間的距離,并將其分配給距離最近的質(zhì)心;②使用每個(gè)質(zhì)心的成員實(shí)例的坐標(biāo)重新計(jì)算每個(gè)簇的質(zhì)心坐標(biāo),直到類(lèi)簇中心不再改變(或誤差平方和最小或達(dá)到指定的迭代次數(shù))。
K-means聚類(lèi)原理簡(jiǎn)單,容易實(shí)現(xiàn),聚類(lèi)效果較優(yōu),可解釋度較強(qiáng),整個(gè)過(guò)程只需調(diào)整參數(shù)k。該算法簡(jiǎn)單的同時(shí)也帶來(lái)了一定的麻煩:①人為選取k值不一定能得到理想的結(jié)果,不同的k得到的最終聚類(lèi)結(jié)果相差明顯,需要反復(fù)實(shí)驗(yàn)才能找到最佳k值,這樣就會(huì)浪費(fèi)大量的精力和時(shí)間,并且要求開(kāi)發(fā)人員有相關(guān)的經(jīng)驗(yàn)。②k值選取不當(dāng)會(huì)導(dǎo)致聚類(lèi)結(jié)果的不穩(wěn)定。所以本文先采用Canopy粗聚類(lèi)[8]確定聚類(lèi)中心,獲取聚類(lèi)中心后執(zhí)行K-means聚類(lèi)算法,以此避免k值選取的隨機(jī)性。
本實(shí)驗(yàn)數(shù)據(jù)來(lái)自某平臺(tái)運(yùn)行過(guò)程中產(chǎn)生的日志數(shù)據(jù),主要記錄了該平臺(tái)在運(yùn)行過(guò)程中產(chǎn)生的業(yè)務(wù)流程信息,共317.11萬(wàn)條記錄,其中包含了大量的相似重復(fù)記錄。
分別選擇100萬(wàn)、150萬(wàn)、200萬(wàn)、250萬(wàn)、300萬(wàn)條數(shù)據(jù)作為實(shí)驗(yàn)數(shù)據(jù),對(duì)通過(guò)TF-IDF向量化的K-means算法、Canopy+K-means算法與本文提出的基于BERT的Canopy+K-means算法就查準(zhǔn)率、查全率、F1值進(jìn)行對(duì)比。
(1)查準(zhǔn)率
查準(zhǔn)率以預(yù)測(cè)結(jié)果為計(jì)算范圍,計(jì)算方法為預(yù)測(cè)為重復(fù)的記錄中實(shí)際也為重復(fù)的記錄與所有預(yù)測(cè)為重復(fù)記錄的比值,取值在0到1之間,越接近1,說(shuō)明聚類(lèi)正確的命準(zhǔn)率越高,效果越好。結(jié)果如表1所示。
表1 查準(zhǔn)率對(duì)比
從表1可以看出,經(jīng)過(guò)BERT向量化的聚類(lèi)結(jié)果準(zhǔn)確率最高,而傳統(tǒng)K-means聚類(lèi)最差,且效果不太穩(wěn)定,當(dāng)k值恰好取到合適的值時(shí),其效果最好,但仍不夠理想,雖然經(jīng)過(guò)Canopy大致確定k值,由于向量化不夠準(zhǔn)確,本不相似的數(shù)據(jù)被聚到一個(gè)類(lèi)里,導(dǎo)致最終聚類(lèi)結(jié)果排名沒(méi)達(dá)到最優(yōu)。出現(xiàn)以上結(jié)果的原因是,在日常表達(dá)中,同一個(gè)詞在不同語(yǔ)境下代表不同的意思,如“在商店里買(mǎi)了一袋蘋(píng)果”與“在商店里買(mǎi)了一部蘋(píng)果手機(jī)”,兩句話的詞語(yǔ)共現(xiàn)度達(dá)到了80%,意思卻明顯不同,第一句話中的“蘋(píng)果”代表一種水果,第二句話中的“蘋(píng)果”代表一種手機(jī)品牌,按照傳統(tǒng)的TF-IDF向量化表示,則將其識(shí)別為相似重復(fù)數(shù)據(jù),而按照BERT模型學(xué)習(xí)之后,判斷這兩句話相似度很小,后續(xù)聚到不同的類(lèi)里,準(zhǔn)確度有所提升。再如“我比你高”與“你比我高”,兩句話的意思完全相反,而按照TF-IDF得到的結(jié)果是兩句話共同出現(xiàn)的字詞達(dá)到100%,認(rèn)為這兩句話重復(fù),這顯然是錯(cuò)誤的。而B(niǎo)ERT引入位置信息,得到恰當(dāng)?shù)南蛄勘磉_(dá),進(jìn)而在計(jì)算句子間的相似度時(shí)更加準(zhǔn)確,聚類(lèi)結(jié)果也更加可信。以上結(jié)果說(shuō)明BERT對(duì)存在一詞多義的文本進(jìn)行相似性聚類(lèi)有重要作用。
(2)查全率
查全率以原樣本為計(jì)算范圍,計(jì)算方法為:預(yù)測(cè)為重復(fù)的記錄中,實(shí)際也為重復(fù)的記錄占樣本所有重復(fù)記錄的比例。取值在0到1之間,越接近1,說(shuō)明聚類(lèi)覆蓋的越全面。結(jié)果如表2所示。
表2 查全率結(jié)果對(duì)比
從表2可以看出,K-means算法雖然在查準(zhǔn)率上波動(dòng)較大,但是在查全率大致穩(wěn)定0.6附近,Canopy+K-means較之略有提升,大約在0.7附近,兩種方法都未能將所有的相似重復(fù)數(shù)據(jù)聚到一類(lèi)中。而經(jīng)過(guò)BERT文本向量化處理后的聚類(lèi)則有優(yōu)秀的表現(xiàn),這是因?yàn)閷?duì)于兩個(gè)文本,采用大量同義詞來(lái)表達(dá)相近的意思時(shí),其詞語(yǔ)共現(xiàn)度很小,因此采用傳統(tǒng)TF-IDF向量化的K-means聚類(lèi)難以將全部相似的文本聚類(lèi)到一起,而經(jīng)過(guò)BERT模型處理后,充分理解句子語(yǔ)義,從而將字面上看似不同的相似文本檢測(cè)出來(lái)并聚到一起。以上結(jié)果說(shuō)明BERT對(duì)存在多詞一義的文本進(jìn)行相似性聚類(lèi)有重要作用。
(3)F1值
查全率與查準(zhǔn)率是一對(duì)互斥的量,一般不能同時(shí)得到最優(yōu)值,F(xiàn)1值是二者調(diào)和平均值,計(jì)算公式為:
(2)
F1取值在0到1之間,越接近于1,聚類(lèi)效果越好。結(jié)果如表3所示。
表3 F1值對(duì)比
F1值對(duì)前兩個(gè)指標(biāo)做了一個(gè)平衡,從表3可以得知,本文提出的基于BERT的相似重復(fù)聚類(lèi)表現(xiàn)最好,Canopy+K-means次之,傳統(tǒng)K-means最差。綜上可以看出,中文文本通過(guò)BERT模型生成向量后再進(jìn)行相似聚類(lèi)能得到更好的清洗效果。
本文充分考慮了中文文本存在的不同語(yǔ)境下一詞多義與多詞一義的情況,引入了BERT語(yǔ)言模型,改進(jìn)文本向量化過(guò)程,使文本的向量化表達(dá)更能承載真實(shí)的語(yǔ)義信息,從而使后續(xù)相似文本聚類(lèi)更加準(zhǔn)確。