国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

NKCorpus:利用海量網(wǎng)絡(luò)數(shù)據(jù)構(gòu)建大型高質(zhì)量中文數(shù)據(jù)集

2022-06-16 08:34:44李東聞鐘震宇申峻宇王昊天孫羽菲張玉志
關(guān)鍵詞:高質(zhì)量數(shù)據(jù)庫文本

李東聞,鐘震宇,申峻宇,王昊天,孫羽菲,張玉志

南開大學(xué),軟件學(xué)院,天津 300350

引 言

近年來,隨著深度學(xué)習(xí)的發(fā)展,預(yù)訓(xùn)練語言模型(Pretrained Language Model,PLM)的研究取得了巨大進展。與有監(jiān)督學(xué)習(xí)相比,預(yù)訓(xùn)練語言模型能夠充分利用大規(guī)模的無標(biāo)注數(shù)據(jù)學(xué)習(xí)通用語言特征,且僅需要通過少試、單試甚至零試學(xué)習(xí)就能完成各項自然語言處理下游任務(wù),具備一定的常識和認知泛化能力[1]。隨著PLM 的快速發(fā)展,除模型結(jié)構(gòu)、模型規(guī)模外,大規(guī)模的高質(zhì)量訓(xùn)練數(shù)據(jù)對模型效果的提升起到了關(guān)鍵作用[2-3]。PLM 使用的訓(xùn)練數(shù)據(jù)通常來源廣泛、內(nèi)容豐富,具有數(shù)十GB 到數(shù)TB 的規(guī)模。然而,僅靠龐大的數(shù)據(jù)規(guī)模并不能保證模型的訓(xùn)練效果,還需要數(shù)據(jù)擁有較高的質(zhì)量和可靠性[4]。因此,對于大型PLM 及其他自然語言處理模型來說,使用大規(guī)模高質(zhì)量的中文數(shù)據(jù)集進行訓(xùn)練至關(guān)重要。

在目前的PLM 相關(guān)工作中,BookCorpus[5]、Wikipedia、WebText[6]及C4[3]等開源大規(guī)模高質(zhì)量英文數(shù)據(jù)集已被廣泛使用。開源的大規(guī)模高質(zhì)量中文數(shù)據(jù)集卻較少,nlp_chinese_corpus1https://github.com/fanziwei/nlp_chinese_corpus、CAIL2018[7]及MedDialog[8]等常用中文數(shù)據(jù)集的規(guī)模普遍不大,難以滿足大參數(shù)量模型的訓(xùn)練需求。一個可行的數(shù)據(jù)集獲取思路是對相對容易收集的低質(zhì)量數(shù)據(jù)進行處理,篩選出高質(zhì)量數(shù)據(jù)。但目前成熟的數(shù)據(jù)處理框架[4,9-10]普遍沒有針對中文數(shù)據(jù)處理進行設(shè)計或者沒有開源代碼,無法直接使用。此外,在面向大規(guī)模數(shù)據(jù)構(gòu)建時,現(xiàn)有方案的數(shù)據(jù)處理流程也有不少需要優(yōu)化改進的地方。

為了更好地應(yīng)對當(dāng)前公開數(shù)據(jù)集規(guī)模較小以及構(gòu)建大規(guī)模高質(zhì)量中文數(shù)據(jù)集困難的問題,本文提出了一種構(gòu)建大規(guī)模高質(zhì)量數(shù)據(jù)集的框架NKCorpus。NKCorpus 可以利用網(wǎng)絡(luò)上多類別的海量原始數(shù)據(jù)構(gòu)建大規(guī)模高質(zhì)量的中文數(shù)據(jù)集,主要包括網(wǎng)絡(luò)數(shù)據(jù)下載、中文數(shù)據(jù)提取、文本過濾及清洗、數(shù)據(jù)去重、高質(zhì)量數(shù)據(jù)篩選、文本格式處理功能。本文的貢獻可總結(jié)為以下四個方面:

(1)設(shè)計并實現(xiàn)了一個完整、高效的大規(guī)模高質(zhì)量中文數(shù)據(jù)集構(gòu)建框架,可根據(jù)對數(shù)據(jù)規(guī)模和數(shù)據(jù)質(zhì)量的不同需求靈活構(gòu)建數(shù)據(jù)集。此外,NKCorpus 是一個通用框架,用戶可以通過對語言提取、文本過濾及清洗的流程進行少量修改,用于構(gòu)建其他語言的數(shù)據(jù)集。

(2)針對現(xiàn)有開源中文數(shù)據(jù)集規(guī)模較小的問題,NKCorpus 利用海量原始網(wǎng)絡(luò)數(shù)據(jù)構(gòu)建大規(guī)模高質(zhì)量數(shù)據(jù)集,以適應(yīng)規(guī)模日漸增長的PLM 對于訓(xùn)練數(shù)據(jù)集的需求。

(3)針對現(xiàn)有開源中文數(shù)據(jù)集質(zhì)量較低的問題,NKCorpus 通過文本過濾及清洗、數(shù)據(jù)去重、高質(zhì)量數(shù)據(jù)篩選等多個步驟,保證了數(shù)據(jù)的質(zhì)量與多樣性。

(4)為了便于其他研究者使用NKCorpus,我們開源了NKCorpus 的源代碼2https://gitee.com/lidongwen1997/nkunlp-preprocessing。

1 相關(guān)工作

對于英文數(shù)據(jù)集,目前已有較多成熟的數(shù)據(jù)處理方案。Radford 等人[6]使用Reddit 平臺出站鏈接指向的網(wǎng)頁文本,構(gòu)建數(shù)據(jù)量達到40GB 的WebText數(shù)據(jù)集;Zhu 等人[5]使用網(wǎng)絡(luò)書籍文本,構(gòu)建數(shù)據(jù)量達6.2GB 的BookCorpus 數(shù)據(jù)集;英文維基數(shù)據(jù)集3https://dumps.wikimedia.org/enwiki/包含英文維基網(wǎng)站中的文章、模板及元頁面等信息,數(shù)據(jù)總量19GB;Colin 等人[3]對爬取的大批量網(wǎng)絡(luò)文本進行清洗篩選,構(gòu)建了數(shù)據(jù)量近750GB 的C4 數(shù)據(jù)集。這些數(shù)據(jù)集在此前的PLM 相關(guān)工作中發(fā)揮了重要作用[11],但由于其數(shù)據(jù)均為英文數(shù)據(jù),無法應(yīng)用于中文PLM 訓(xùn)練工作。

目前廣泛使用的中文數(shù)據(jù)集有Xu 等人綜合中文維基、新聞、翻譯、社區(qū)問答及百科問答五個來源構(gòu)建的nlp_chinese_corpus1數(shù)據(jù)集,數(shù)據(jù)量16.8GB;Xiao 等人[7]收集了中華人民共和國最高人民法院發(fā)布的260 多萬件刑事案件,構(gòu)建近3.4GB的CAIL2018 數(shù)據(jù)集;Chen 等人[8]收集110 萬段醫(yī)患對話,構(gòu)建數(shù)據(jù)量達到2GB 的MedDialog 數(shù)據(jù)集;Sun 等人[12]對新浪新聞數(shù)據(jù)進行篩選過濾,構(gòu)建了THUCNews 數(shù)據(jù)集,包含74 萬篇新聞文檔,數(shù)據(jù)量達到2.19GB;與英文維基數(shù)據(jù)集相似,中文維基數(shù)據(jù)集4https://dumps.wikimedia.org/zhwiki/對中文維基中的文章、頁面文本等進行匯總,共包含2.3GB 的文本數(shù)據(jù)。雖然這些中文數(shù)據(jù)集質(zhì)量較高,但其數(shù)據(jù)規(guī)模均很小,無法滿足大規(guī)模中文模型訓(xùn)練的需求。

除以上公開數(shù)據(jù)集外,很多用于從低質(zhì)量數(shù)據(jù)中提取高質(zhì)量數(shù)據(jù)的數(shù)據(jù)處理方案被提出。Xu 等人[9]基于C4 數(shù)據(jù)集[3]的數(shù)據(jù)篩選流程,對其所依據(jù)的啟發(fā)性規(guī)則進行更改、拓展,并重新設(shè)計了中文語句選取、不文明詞句篩除、無意義語句篩除、短文本篩除及數(shù)據(jù)去重等一系列步驟,處理Common Crawl 數(shù)據(jù)后得到數(shù)據(jù)量達100GB 的CLUECorpus2020 數(shù)據(jù)集。Yuan 等人[13]對大量網(wǎng)頁數(shù)據(jù)進行清洗、篩選、去重處理,最終得到數(shù)據(jù)量達3TB 的WuDaoCorpora,該數(shù)據(jù)集規(guī)模較大,但是其處理過程中并未對數(shù)據(jù)進行直接的質(zhì)量評估及篩選,且目前僅公開了200GB 的數(shù)據(jù)。Lin 等人[14]收集了來自百科全書、網(wǎng)絡(luò)、法庭及產(chǎn)品描述等多種來源的廣域數(shù)據(jù),然后進行集中統(tǒng)一的清洗篩選,最終得到的M6-corpus 數(shù)據(jù)中中文數(shù)據(jù)量達292GB。他們的工作中并未包含數(shù)據(jù)間的去重處理,且該數(shù)據(jù)集及數(shù)據(jù)處理代碼未公開。Zeng 等人[15]搭建了面向大型數(shù)據(jù)處理的分布式集群,利用數(shù)據(jù)清洗過濾、去重、質(zhì)量評估等流程處理了近80TB 原始數(shù)據(jù)后得到一個約1.1TB 的高質(zhì)量中文數(shù)據(jù)集,然而,其數(shù)據(jù)并未公開并且開源代碼流程也不夠完整5https://git.openi.org.cn/PCLPlatform.Intelligence/ DataCollector/src/branch/master。Guillaume 等人[4]設(shè)計的CCNet 數(shù)據(jù)處理流程用于構(gòu)建單語言數(shù)據(jù)集,首先對已有數(shù)據(jù)分片并根據(jù)文本哈希值進行去重,接著使用語言分類器進行語言類型識別,此后根據(jù)分詞器[16]對數(shù)據(jù)進行分詞,并放入訓(xùn)練好的5-gram Kneser-Ney[17]語言模型中計算數(shù)據(jù)的困惑度,劃分出低、中、高三個質(zhì)量層級的數(shù)據(jù),最后根據(jù)文本語言類型與質(zhì)量進行合并,得到最終數(shù)據(jù)集。雖然目前已有較多的數(shù)據(jù)處理方案被提出,但是現(xiàn)有方案仍存在無開源代碼、公開的數(shù)據(jù)集規(guī)模較小、數(shù)據(jù)處理流程不完善、未針對中文數(shù)據(jù)設(shè)計清洗流程等問題。為了解決以上問題,本文提出了NKCorpus。

2 背景

語言模型是根據(jù)已有的一部分語句預(yù)測句中的下一個元素是什么。其標(biāo)準定義為,對于語言序列w1,w2,…,wn,計算該序列的概率,即P(w1,w2,…,wn)[18]。語言模型經(jīng)歷了80年代的專家語法規(guī)則模型,2000年左右的統(tǒng)計語言模型,目前通常使用神經(jīng)網(wǎng)絡(luò)語言模型。神經(jīng)網(wǎng)絡(luò)語言模型通過構(gòu)建神經(jīng)網(wǎng)絡(luò)的方式來探索和建模自然語言內(nèi)在的依賴關(guān)系。而對于大型PLM 來說,通常需要大量的高質(zhì)量數(shù)據(jù)進行模型訓(xùn)練,以得到在各類自然語言處理應(yīng)用上效果較好的模型。如表1所示,目前具有領(lǐng)先水平的英文預(yù)訓(xùn)練模型GPT2[6]和GPT3[1]訓(xùn)練時分別使用了40GB 和近1TB 的數(shù)據(jù),其數(shù)據(jù)類別覆蓋網(wǎng)絡(luò)數(shù)據(jù)、書籍、出版物、百科數(shù)據(jù)等。而對于中文PLM 模型,2020年智源研究院和清華大學(xué)團隊合作,使用來自百科、網(wǎng)絡(luò)、數(shù)據(jù)、新聞等領(lǐng)域的100GB 數(shù)據(jù)訓(xùn)練并開源了清源 CPM[19];2021年4月26日,華為諾亞方舟實驗室、鵬城實驗室等技術(shù)團隊發(fā)布“盤古”,一個參數(shù)達到2000 億的中文預(yù)訓(xùn)練模型,主要使用了500GB 的網(wǎng)絡(luò)和書籍?dāng)?shù)據(jù)進行訓(xùn)練[13];2021年6月1日,萬億參數(shù)量模型悟道2.0 在4.9TB 高質(zhì)量數(shù)據(jù)上訓(xùn)練,一統(tǒng)文本和視覺兩大任務(wù)領(lǐng)域;2021年9月,浪潮人工智能研究院正式發(fā)布的“源1.0”是目前最大規(guī)模的單體中文語言模型,參數(shù)規(guī)模高達2,457 億,使用的訓(xùn)練中文數(shù)據(jù)量達5,000GB,在新聞分類、原生中文推理、成語閱讀理解填空、名詞代詞關(guān)系等多項應(yīng)用上獲得領(lǐng)先成績。

表1 大型預(yù)訓(xùn)練語言模型及對應(yīng)訓(xùn)練數(shù)據(jù)規(guī)模Table 1 Large scale pre-trained language models and their corresponding training data size

公開出版的書籍、報紙等高質(zhì)量數(shù)據(jù)遠不能滿足大型中文預(yù)訓(xùn)練語言模型訓(xùn)練時的海量數(shù)據(jù)需求,因此需要利用豐富的網(wǎng)絡(luò)數(shù)據(jù)資源。Common Crawl6https://commoncrawl.org/是一個非盈利組織,每月會隨機檢索并即時爬取網(wǎng)絡(luò)數(shù)據(jù)。Common Crawl 公開了自2013年至今所有已爬取的數(shù)據(jù),并且每月還在不斷更新中,目前約有PB 數(shù)量級的文本數(shù)據(jù)。Common Crawl 提供三種格式的數(shù)據(jù),分別為:

(1)WARC:爬取的原始數(shù)據(jù)。該格式可直接映射到網(wǎng)絡(luò)爬取過程,包含HTTP 響應(yīng)及爬取的元數(shù)據(jù)等。

(2)WAT:包括三種(請求、響應(yīng)、元數(shù)據(jù))重要元數(shù)據(jù)。對于HTML,保留返回頭信息和頁面鏈接。

(3)WET:文本數(shù)據(jù)。從原始數(shù)據(jù)中提取出的文本數(shù)據(jù)。

數(shù)據(jù)集的構(gòu)建僅需利用網(wǎng)頁中包含的文本數(shù)據(jù),因此WET 格式的數(shù)據(jù)能夠更高效率地提供信息。表2展示了Common Crawl 提供的部分數(shù)據(jù)的統(tǒng)計信息,2017年至2021年12月共有463.82TB 的原始文本數(shù)據(jù)。利用網(wǎng)絡(luò)數(shù)據(jù)構(gòu)建大型數(shù)據(jù)集首先需要對Common Crawl 提供的WET 數(shù)據(jù)進行下載。

表2 2017年至2021年WET 文件規(guī)模統(tǒng)計Table 2 Statistics of the WET file size from 2017 to 2021

Common Crawl 爬取的數(shù)據(jù)覆蓋英文、俄文、德文、中文、日文、法文等百余種語言7https://commoncrawl.github.io/cc-crawl- statistics/plots/languages。表3展示了2021年9月至12月部分語言統(tǒng)計信息,據(jù)統(tǒng)計,所有數(shù)據(jù)中40%以上為英文數(shù)據(jù),而僅有約5%為中文數(shù)據(jù)。Common Crawl 整體數(shù)據(jù)量過大且中文數(shù)據(jù)比例較少,不適于全部使用來構(gòu)建中文數(shù)據(jù)集,因此需要對其中的中文數(shù)據(jù)進行提取。

表3 2021年9月至12月部分語言統(tǒng)計信息Table 3 Language statistics from September to December,2021

此外,網(wǎng)絡(luò)數(shù)據(jù)中可能存在色情、暴力、反動和其他類型的不良文本,對構(gòu)建一個良好的、正向的模型有極大的負面影響。再者,內(nèi)容轉(zhuǎn)載、引用、抄襲等現(xiàn)象導(dǎo)致網(wǎng)絡(luò)數(shù)據(jù)重復(fù)率非常高,也會降低最終獲取數(shù)據(jù)集的多樣性。網(wǎng)絡(luò)中存在的大量不成文或隨機輸入的文本也會大大降低數(shù)據(jù)集的質(zhì)量。針對以上問題,需要設(shè)計出細致完善的方案對不良、重復(fù)數(shù)據(jù)進行刪除,以提高數(shù)據(jù)集的質(zhì)量。

3 框架設(shè)計

本文設(shè)計了一種流水線式的數(shù)據(jù)處理框架NKCorpus,該框架可以從海量的原始網(wǎng)絡(luò)數(shù)據(jù)中構(gòu)建規(guī)模較大、內(nèi)容覆蓋較廣、質(zhì)量較高的中文數(shù)據(jù)集。NKCorpus 采取了模塊化的功能設(shè)計,數(shù)據(jù)處理流程可從任意步驟靈活開始或結(jié)束,以適應(yīng)不同下游任務(wù)訓(xùn)練數(shù)據(jù)集的構(gòu)建需求。本章將詳細介紹NKCorpus 的處理流程以及每個步驟的具體解決方案。

3.1 整體流程

圖1展示了NKCorpus 的整體處理流程,共包含六個模塊:

圖1 NKCorpus 整體流程Fig.1 The overview of NKCorpus

(1)數(shù)據(jù)下載模塊:通過下載獲取海量原始文本。該模塊可通過修改數(shù)據(jù)鏈接的方式用于多種數(shù)據(jù)類型或數(shù)據(jù)來源的下載,具有一定通用性。本項目中被用于下載Common Crawl 提供的海量網(wǎng)絡(luò)文本數(shù)據(jù)。

(2)中文提取模塊:從數(shù)據(jù)中提取出對研究有幫助的內(nèi)容,具體到本項目中為提取出所有語言類型為中文的文本數(shù)據(jù)。通過修改語言類型設(shè)置,也可用于其他單語言數(shù)據(jù)或多語言數(shù)據(jù)的提取。

(3)文本過濾及清洗模塊:根據(jù)一定的規(guī)則去掉不良數(shù)據(jù)。不良數(shù)據(jù)既包括色情、反動等違反公序良俗的內(nèi)容,也包括過短的句子、網(wǎng)頁的導(dǎo)航欄文字等無意義的內(nèi)容。

(4)篇章級去重模塊:使用哈希算法計算文本的特征值,去掉特征值相同且文本相似度超過一定閾值的冗余數(shù)據(jù)。

(5)高質(zhì)量數(shù)據(jù)篩選模塊:通過計算文本困惑度[4]去掉不成文、不通順等質(zhì)量較低的數(shù)據(jù)。

(6)文本格式處理模塊:將文本字符轉(zhuǎn)換為ID,并添加開始和結(jié)束標(biāo)識符,將數(shù)據(jù)轉(zhuǎn)換為可以直接輸入模型的格式。

3.2 數(shù)據(jù)下載

構(gòu)建大型數(shù)據(jù)集需要海量的原始文本數(shù)據(jù)資源,本項目中需要下載Common Crawl 提供的近PB 的數(shù)據(jù),這對網(wǎng)絡(luò)帶寬要求極高,如果僅在單臺機器上下載,需要的時間讓人無法忍受。因此,NKCorpus選擇支持多設(shè)備節(jié)點并行下載并對下載任務(wù)進行統(tǒng)一調(diào)度管理。

Common Crawl 將每月整理的數(shù)據(jù)分為多個WET 文件進行存儲,每個WET 文件的大小在100MB 至200MB,這樣的數(shù)據(jù)存儲格式為多節(jié)點并行工作提供了便利。對于單個數(shù)據(jù)下載進程來說,進程首先向數(shù)據(jù)庫請求任務(wù),得到一個未下載的WET 文件的下載路徑并進行下載工作,下載完成后更新數(shù)據(jù)庫狀態(tài)。

3.3 中文提取

下載得到的Common Crawl 數(shù)據(jù)中包含多種語言數(shù)據(jù),為了有效提取出中文數(shù)據(jù),NKCorpus 采取高效的語言檢測算法并設(shè)計了以行為檢測單位的方案,能夠盡量去除非中文文本的同時減少有效數(shù)據(jù)的損失。

通過綜合評估三種文本檢測方法langid[20]、langdetect8https://github.com/shuyo/language-detection和fastText[10],NKCorpus 選用了運行效率較高、文本檢測準確率也較高的fastText 算法進行文本檢測。Buck 等人[21]指出網(wǎng)頁文本中通常會包含多種不同語言,為了盡可能多地保存中文數(shù)據(jù)并避免有效數(shù)據(jù)損失,NKCorpus 以文本中的行作為語言判斷的單位。對于每行,定義中文占比為單行文本中中文字符(包括簡體中文、繁體中文和中文標(biāo)點)數(shù)量與單行文本中除特殊字符(空格符、占位符、縮進等)外的所有字符數(shù)量的比值。當(dāng)單行文本長度較長時,采取較低的閾值可以保留較多有意義的中文句子;單行文本長度較短時,采取較高的閾值可以保留含有中文的短文本(如短標(biāo)題等)且不保留過多其他語言的文本。NKCorpus 采用表4展示的閾值進行中文數(shù)據(jù)提取,當(dāng)中文占比大于閾值時,保留該行文本,否則刪除。

表4 文本長度與中文比例閾值Table 4 The Chinese threshold for each length of text

3.4 文本過濾及清洗

通常中文提取后的數(shù)據(jù)中仍存在較多問題,不能直接用于構(gòu)建訓(xùn)練數(shù)據(jù)集。NKCorpus 通過一系列步驟對數(shù)據(jù)進行過濾清洗,可以將冗余文本、不良文本以及過短文本去除。

3.4.1 完整內(nèi)容提取

完整內(nèi)容提取是將不成句或與正文內(nèi)容無關(guān)的文本去除。主要去除以下幾個部分的內(nèi)容:(1)導(dǎo)航欄、短鏈接等不成句子的內(nèi)容;(2)網(wǎng)頁提示信息、聲明信息等網(wǎng)頁模板類內(nèi)容;(3)時間、訪問量等與正文內(nèi)容無關(guān)的內(nèi)容。

針對于上述需要去除的信息,NKCorpus 設(shè)置了兩個過濾器進行內(nèi)容的過濾:(1)網(wǎng)頁開始和結(jié)尾截??;(2)完整句子檢測。網(wǎng)頁開始和結(jié)尾通常為導(dǎo)航欄或者提示聲明等無關(guān)內(nèi)容,一般不含標(biāo)點。通過遍歷整體內(nèi)容,找到第一個標(biāo)點符號和最后一個標(biāo)點符號,將不與第一個標(biāo)點相關(guān)(中間存在空格、換行符等)的內(nèi)容以及最后一個標(biāo)點之后的內(nèi)容進行刪除。此外,在網(wǎng)頁中間通常包含一些導(dǎo)航、標(biāo)題、鏈接、日期等與正文內(nèi)容無關(guān)的信息??梢酝ㄟ^對句子的完整性進行檢測的方案提取出連續(xù)且有意義的內(nèi)容。由于網(wǎng)頁中不同部分的標(biāo)點符號密度不同[22],NKCorpus 針對文本內(nèi)容進行逐行檢測,根據(jù)行內(nèi)是否存在標(biāo)點判斷其是否為完整語句。

3.4.2 控制符檢測

網(wǎng)頁中一些具有特殊含義的控制符例如x01、x02、x08、u3000 等在文本中不具有實際意義,會對不良文本檢測造成干擾。因此,NKCorpus 利用正則匹配的方法將控制符刪除。

3.4.3 不良文本去除

在去除不良文本時,如果以行為單位對數(shù)據(jù)進行是否為不良數(shù)據(jù)的判定(包含過高比例或者過多數(shù)量的不良詞匯),會造成許多的誤判,并且可能造成數(shù)據(jù)內(nèi)容的不連續(xù)導(dǎo)致文本質(zhì)量降低。因此,NKCorpus 選擇以篇章作為不良文本的檢測單位。NKCorpus 檢測每篇文章中包含的不良詞匯表中的詞匯,并計算不良詞匯的出現(xiàn)次數(shù)以及占全文的比重,以此來判斷整段文本是否為不良文本。不良文本去除的關(guān)鍵是不良詞匯表的構(gòu)建,我們首先基于公開項目9https://github.com/fighting41love/funNLP/tree/master/data提供的詞庫對文本進行預(yù)檢測,然后通過檢查未能成功檢測出的不良文本對不良詞匯表進行補充。最終構(gòu)建得到的不良詞匯表中統(tǒng)計信息如表5所示。此外,NKCorpus 支持對不同類別的不良詞匯進行不同力度的檢測,通過調(diào)整不同類別對應(yīng)的閾值實現(xiàn)不同嚴格程度的檢測。

表5 各類不良詞匯統(tǒng)計信息Table 5 Statistics of censored words

3.4.4 文本長度檢測

通常,文本質(zhì)量與長度呈正相關(guān),因此對篇章級別的內(nèi)容進行長度限定是有意義的。進行長度篩選時,既需要篩去一定數(shù)量的低質(zhì)量、不完整數(shù)據(jù),也需要避免過多地將數(shù)據(jù)中篇幅較短但有實際意義的內(nèi)容刪除。NKCorpus 最終確定文本長度的篩選閾值為20,可以有效達到以上目的。

3.5 數(shù)據(jù)去重

Common Crawl 中存在較多的重復(fù)文本[4,10],因此需要設(shè)計合理的去重流程,保證數(shù)據(jù)集的多樣性。NKCorpus 針對文本進行篇章級去重并采用先局部再整體的設(shè)計實現(xiàn)方案(具體可參考章節(jié)§4.2.2),能夠在不犧牲效果的情況下?lián)碛休^高的處理效率。

傳統(tǒng)基于MD5[23]等哈希函數(shù)的算法僅能檢測出完全相同的文本,會導(dǎo)致文本相似度非常高但不完全相同的文本被保留下來。Jaccard 算法[24]]基于長文本的n-gram 計算兩條數(shù)據(jù)間的相似度,Jaccard相似度越高表示原始文本越相似。通過計算數(shù)據(jù)間的Jaccard 相似度,便能夠較為方便地去除高相似度文本。但Jaccard 算法需要將所有數(shù)據(jù)兩兩配對,并沿原始文本進行滑動窗口計算,時間復(fù)雜度非常高,難以應(yīng)用于大規(guī)模數(shù)據(jù)。

NKCorpus 選用局部敏感哈希(Locally Sensitive Hashing,LSH)[25]算法結(jié)合Jaccard 算法來進行大規(guī)模的數(shù)據(jù)去重處理。LSH 基于MinHash[26]算法構(gòu)建,能高效處理海量高維數(shù)據(jù)的相似性問題,LSH 能夠使兩個相似度很高的數(shù)據(jù)以較高的概率映射成同一個哈希值,兩個相似度很低的數(shù)據(jù)以極低的概率映射成同一個哈希值。NKCorpus 采用相同的哈希函數(shù)處理所有數(shù)據(jù)獲取哈希值,并通過比較哈希值判斷兩條數(shù)據(jù)是否可能相似。如果相似性分數(shù)高于閾值,再比較兩條原始數(shù)據(jù)的Jaccard 相似度。結(jié)合使用兩種算法可以保證較高的效率和較好的去重效果。

3.6 高質(zhì)量數(shù)據(jù)篩選

上述處理步驟可以篩去文本中的正文無關(guān)內(nèi)容和重復(fù)數(shù)據(jù),但表達混亂的文本并不能被很好地識別。NKCorpus 使用當(dāng)前頗受認可的困惑度篩選方式,從已有數(shù)據(jù)中篩選出語句通順的文本,以此提高數(shù)據(jù)整體質(zhì)量。

NKCorpus 首先使用公開的新聞、百科類等高質(zhì)量數(shù)據(jù)[12]訓(xùn)練了一個小型GPT-3[1]模型(下文簡稱:GPT-3S)。將待檢測數(shù)據(jù)處理后(可以使用§3.7)逐條輸入模型,并利用模型輸出結(jié)果計算文本困惑度[1],困惑度公式為:

其中w1,w2,…,wi表示文本第1,2…i個字出現(xiàn)的概率,N表示文本長度。困惑度越低表示文本質(zhì)量越高,因此NKCorpus 保留困惑度低于閾值的數(shù)據(jù)來保證保留數(shù)據(jù)的質(zhì)量。

3.7 文本格式處理

PLM 無法直接接受文本數(shù)據(jù),而是需要將文本數(shù)據(jù)轉(zhuǎn)換為數(shù)字ID 的格式。NKCorpus 基于BERT[27]提供的數(shù)據(jù)格式處理方案進行調(diào)整,將文本按字分割并轉(zhuǎn)換為ID 形式,并在一條數(shù)據(jù)起始位置添加開始標(biāo)識,在結(jié)束位置添加結(jié)束標(biāo)識。然后根據(jù)數(shù)據(jù)集構(gòu)建需求確定是否將不同文章進行拼接處理。最后使用滑動窗口分割的方式將數(shù)據(jù)處理為PLM 需要的長度。

使用字而非詞進行切割主要有以下優(yōu)勢:(1)在神經(jīng)網(wǎng)絡(luò)框架下進行中文自然語言處理任務(wù),“字”級別的表現(xiàn)幾乎總是優(yōu)于“詞”級別的表現(xiàn);(2)對大部分中文自然語言處理任務(wù)而言,使用字更為方便,不需要進行額外分詞,“詞”級別的分割容易引起數(shù)據(jù)稀疏問題、OOV(out-of-vocabulary)問題和訓(xùn)練過擬合問題[28]。

通過NKCorpus 提供的六個步驟§3.2~§3.7,可以獲取覆蓋包括新聞、娛樂、人物、電影等各個領(lǐng)域的高質(zhì)量中文數(shù)據(jù)集。

4 工程實現(xiàn)及結(jié)果

4.1 項目環(huán)境及選型

NKCorpus 工程項目實現(xiàn)及實驗驗證使用的軟硬件環(huán)境分別如表6、表7所示。其中,MySQL 8 是一種關(guān)系型數(shù)據(jù)庫,在項目中用于任務(wù)管理,MySQL 8及以上版本支持FOR UPDATE SKIP LOCKED 語句,可以自動跳過被上鎖的數(shù)據(jù)條目,方便進行進程間同步,避免訪問沖突。MongoDB 是一種非關(guān)系型、基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng),在高負載的情況下可以通過添加節(jié)點數(shù)量來保證存儲空間和處理能力。由于數(shù)據(jù)去重階段需要存儲大量的哈希值,因此選用MongoDB 進行數(shù)據(jù)存儲。

表6 項目軟件環(huán)境Table 6 Project software environment

表7 項目硬件環(huán)境Table 7 Project hardware environment

4.2 項目工程實現(xiàn)

NKCorpus 的工程實現(xiàn)具有基本功能覆蓋全面、性能及可靠性有保障、錯誤處理成熟完善的特性。

項目實現(xiàn)時對各個功能模塊進行抽象和解耦,具體設(shè)計分為通用基礎(chǔ)組件、子功能組件、錯誤處理組件等。整體設(shè)計如圖2所示,NKCorpus 的設(shè)計能夠保證系統(tǒng)的通用性、靈活性和可靠性,組件的高度抽象也增強了代碼的復(fù)用性,避免代碼冗余。

圖2 NKCorpus 整體結(jié)構(gòu)Fig.2 Overview of NKCorpus

此外,NKCorpus 的實現(xiàn)支持多機多線程處理任務(wù),具有高擴展性,在有大量計算設(shè)備可用時,其效率與設(shè)備數(shù)量基本成線性關(guān)系,可以充分利用設(shè)備計算資源,提升運算效率。如圖3所示,任務(wù)執(zhí)行設(shè)備與存儲磁盤協(xié)同進行模塊任務(wù)。首先,下載服務(wù)器從互聯(lián)網(wǎng)上下載數(shù)據(jù)至存儲磁盤。接著,中文提取服務(wù)器對已下載的數(shù)據(jù)進行中文提取工作并存儲到相同的存儲磁盤上。然后,這些中文提取完畢的文件依次由清洗服務(wù)器進行文本過濾及清洗工作,由去重服務(wù)器進行數(shù)據(jù)去重工作,篩選服務(wù)器進行高質(zhì)量數(shù)據(jù)篩選工作,最后由格式處理服務(wù)器進行格式轉(zhuǎn)換獲取可以直接用于語言模型訓(xùn)練的數(shù)據(jù)。下載服務(wù)器、中文提取服務(wù)器等各類型服務(wù)器在物理意義上可以是相同的服務(wù)器也可以是不同的服務(wù)器,在執(zhí)行不同模塊功能時使用不同的名稱進行表示。

圖3 任務(wù)執(zhí)行設(shè)備與存儲磁盤協(xié)同執(zhí)行任務(wù)示意圖Fig.3 The diagram of computing devices and storage devices

4.2.1 通用基礎(chǔ)組件

NKCorpus 對系統(tǒng)進行了抽象以提高復(fù)用性。配置讀取組件、數(shù)據(jù)庫連接組件、進度監(jiān)控組件、網(wǎng)絡(luò)檢測組件、任務(wù)獲取組件被所有數(shù)據(jù)處理模塊調(diào)用,因此抽離出來作為通用基礎(chǔ)組件。

配置讀取組件。為了靈活地控制參數(shù),NKCorpus 實現(xiàn)了一套從配置文件中讀取參數(shù)的機制。配置文件分為默認配置文件與本地配置文件兩個部分,默認配置文件隨系統(tǒng)版本進行更新,提供默認參數(shù)以及配置文件規(guī)范;本地配置文件不會被同步到系統(tǒng)中,用于用戶需要自行修改配置參數(shù)的情況。

數(shù)據(jù)庫連接組件。各功能子模塊均需與數(shù)據(jù)庫連接獲取任務(wù)信息或者更新任務(wù)狀態(tài),因此NKCorpus 提供了統(tǒng)一的數(shù)據(jù)庫連接組件。用戶只需修改配置文件中的數(shù)據(jù)庫地址、數(shù)據(jù)庫名稱等參數(shù)即可方便地訪問數(shù)據(jù)庫,無需編寫復(fù)雜代碼。

進度監(jiān)控組件。執(zhí)行任務(wù)時,用戶希望及時地了解任務(wù)的狀態(tài)及進度,以便恰當(dāng)?shù)亻_始新任務(wù)或者臨時結(jié)束任務(wù)。處理模塊實現(xiàn)時均以文件為處理單位,因此可以使用統(tǒng)一的進度監(jiān)控組件,輸出任務(wù)處理進度。

網(wǎng)絡(luò)檢測組件。數(shù)據(jù)下載時需要與網(wǎng)絡(luò)進行連接以及由于數(shù)據(jù)庫與任務(wù)執(zhí)行代碼可能不在同一個計算設(shè)備上,處理進程需要利用網(wǎng)絡(luò)與數(shù)據(jù)庫進行連接。NKCorpus 提供的網(wǎng)絡(luò)檢測組件首先檢測網(wǎng)絡(luò)是否連通,未連通時會提示用戶進行網(wǎng)絡(luò)連接。

任務(wù)獲取組件。為了支持多機、多進程執(zhí)行任務(wù)并保證一定的容錯性,NKCorpus 提供兩種任務(wù)獲取方案,一種是掃描本地數(shù)據(jù)目錄的方式獲取任務(wù),首先掃描本地數(shù)據(jù)目錄獲取到本地存在的文件列表后,根據(jù)一定規(guī)則選取文件,再在數(shù)據(jù)庫中查找對應(yīng)條目,若能成功查找到對應(yīng)條目則任務(wù)獲取成功;另一種是從數(shù)據(jù)庫中檢索待執(zhí)行的任務(wù)。

4.2.2 模塊功能組件及模塊實現(xiàn)

各模塊(見§3)工作流程大致相同,數(shù)據(jù)下載模塊任務(wù)獲取采用從數(shù)據(jù)庫檢索任務(wù)的方案,其他模塊均采用掃描本地文件獲取任務(wù)的方案,具體工作流程如圖4所示,首先讀取配置文件中有關(guān)具體任務(wù)的配置信息,檢測網(wǎng)絡(luò)連接是否正常,再建立與數(shù)據(jù)庫連接,然后重復(fù)執(zhí)行任務(wù)獲取、任務(wù)執(zhí)行、數(shù)據(jù)庫狀態(tài)更新三個步驟,直到用戶手動停止任務(wù)或者全部任務(wù)執(zhí)行完畢后退出,其中任意步驟出錯則會進行對應(yīng)的錯誤處理流程。

圖4 NKCorpus 數(shù)據(jù)處理工作流程Fig.4 The data processing workflow of NKCorpus

除去重外的模塊均針對單文件進行處理,處理過程中不存在內(nèi)存不足的問題。由于去重模塊需要對所有文件(TB 級別)進行處理,無法一次性加載到內(nèi)存中。NKCorpus 特別設(shè)計了先局部再全局的方案,工作流程如圖5所示。首先,針對本地的200個文件進行局部去重,一次性將文件加載到內(nèi)存中,計算LSH 后對可能重復(fù)的數(shù)據(jù)計算Jaccard 相似度,僅保留高相似度數(shù)據(jù)中的一條,其余進行刪除處理。然后進行全局去重,將所有局部去重后的數(shù)據(jù)的LSH 與數(shù)據(jù)庫中存儲的已完成去重的數(shù)據(jù)的LSH進行比較,如果存在哈希值重復(fù),則取回數(shù)據(jù)庫中的記錄(包括數(shù)據(jù)存儲路徑、文件中的唯一標(biāo)識等),通過計算Jaccard 相似度確認正在處理的數(shù)據(jù)中是否存在與已處理的數(shù)據(jù)高度相似的數(shù)據(jù),若存在則刪除。通過兩階段去重工作,可以使用有限的內(nèi)存高效完成去重工作。

圖5 去重模塊組件工作流程Fig.5 The workflow of the deduplication component

4.2.3 性能及可靠性

性能。為了保證性能,NKCorpus 進行了四個方面的優(yōu)化:(1)任務(wù)并行:為了提高數(shù)據(jù)處理的效率,充分利用計算資源,每個步驟都支持多線程、多進程、多機并行進行處理。并且對每一部分的代碼都進行了優(yōu)化,以達到資源高效利用。(2)任務(wù)自動流轉(zhuǎn):每個處理進程在上一個處理任務(wù)完成(或失?。┖罂梢孕薷臄?shù)據(jù)庫中相關(guān)的狀態(tài),并自動獲取新任務(wù)開始執(zhí)行,無需人工參與。(3)分時處理任務(wù):針對服務(wù)器可能出現(xiàn)的性能周期性波動(例如處理數(shù)據(jù)的服務(wù)器被多人共享,白天空閑算力及可用內(nèi)存較少導(dǎo)致數(shù)據(jù)處理效率較低或因內(nèi)存不足頻繁失敗),用戶可配置一個允許NKCorpus 進行處理的時間段,在設(shè)置時間段內(nèi)才會執(zhí)行任務(wù),時間段之外自動停止處理,無需人工干預(yù)。(4)處理流程自動化:數(shù)據(jù)處理流水線中的每一個步驟可以進行自動銜接,單文件被上一個模塊處理后,可以自動被下一個處理模塊所對應(yīng)的處理進程處理。

錯誤處理。NKCorpus 使用設(shè)計錯誤處理方案保證處理流程的可靠性。(1)統(tǒng)一任務(wù)管理:為了解決多個進程同時處理數(shù)據(jù)導(dǎo)致的進程同步問題,使用數(shù)據(jù)庫進行統(tǒng)一的數(shù)據(jù)管理,存放任務(wù)(文件)的相關(guān)信息(包括文件URI、處理狀態(tài)、文件大小等)。(2)高并發(fā)一致性、安全性保證:高并發(fā)時可能出現(xiàn)訪問沖突的問題。在處理大量的數(shù)據(jù)時,難免會出現(xiàn)錯誤,可能會帶來數(shù)據(jù)一致性方面的隱患。NKCorpus 設(shè)計在程序出現(xiàn)異?;虿东@Ctrl + C 等中斷指令時,會回滾數(shù)據(jù)庫并恢復(fù)本地文件。以及本地文件全部使用雙重備份機制,任務(wù)獲取后(功能執(zhí)行前)首先將要處理的數(shù)據(jù)文件進行備份;任務(wù)執(zhí)行后將數(shù)據(jù)轉(zhuǎn)移到另一存儲地址。定時檢查兩份數(shù)據(jù)一致性,僅當(dāng)兩份文件信息完全一致時,刪除備份文件;否則將備份文件轉(zhuǎn)移回待處理文件夾,等待下一次任務(wù)執(zhí)行時重新處理該文件。因此能夠保證在高并發(fā)(數(shù)百個進程同時運行)時,整個系統(tǒng)的可靠性與數(shù)據(jù)一致性。(3)網(wǎng)絡(luò)連通性檢查:由于需要通過網(wǎng)絡(luò)連接中央數(shù)據(jù)庫或者進行下載任務(wù),所以需要保證網(wǎng)絡(luò)的可用性。處理進程開始時需要檢測網(wǎng)絡(luò)通斷,如果失敗進行重試。重試超過一定次數(shù)表示網(wǎng)絡(luò)不通,此時報錯并正常退出程序。(4)全流程錯誤處理:在整個程序的運行過程中,任何時刻出現(xiàn)錯誤都會捕獲該錯誤并進行相應(yīng)處理(重試或者退出任務(wù)并報告錯誤)。

4.2.4 任務(wù)并行支持

為了提高數(shù)據(jù)的整體處理效率,NKCorpus 支持多線程、多進程、多機協(xié)同工作,并且提供了易上手的配置方案,可以充分利用任意的空閑計算資源。

多線程。為了提高對單文件處理速度,NKCorpus 在中文提取、文本過濾及清洗、數(shù)據(jù)去重、高質(zhì)量數(shù)據(jù)篩選和文本格式處理等模塊均提供了多線程支持,可以有效減少因處理單文件時間過長,中間出現(xiàn)網(wǎng)絡(luò)中斷或計算資源不可用而造成的任務(wù)失敗。例如,在中文提取子功能中,以行為單位進行判斷,而單文件中包含若干行,可以通過建立線程池,將行文本分配到空閑線程中進行中文比例檢測。對單文件的處理效率隨線程數(shù)呈線性提高且單多線程的方案文件處理成功率較單線程也有優(yōu)勢。

單機多進程。每個進程以文件作為單位進行處理,與中央數(shù)據(jù)庫通信獲取文件處理狀態(tài),這種使用中央數(shù)據(jù)庫統(tǒng)一管理任務(wù)狀態(tài)的方案使得任務(wù)不會重復(fù)執(zhí)行;通過掃描文件夾的方式對文件進行任務(wù)處理直至文件夾為空也能保證不會漏掉待處理文件。以上兩點設(shè)計使得NKCorpus 能夠支持單機多進程執(zhí)行任務(wù),充分利用計算資源。

多機并行??紤]到有大量計算資源可用的情況,NKCorpus 對多機并行也提供了良好的支持,主要體現(xiàn)在:(1)一鍵配置環(huán)境:工程實現(xiàn)中打包了需要的所有環(huán)境,可以方便地一鍵配置環(huán)境;配備了完善的使用手冊,簡單修改配置文件即可根據(jù)資源的空閑情況、已有數(shù)據(jù)情況執(zhí)行數(shù)據(jù)處理流程;(2)硬盤存儲數(shù)據(jù):數(shù)據(jù)存儲在離線磁盤而非計算設(shè)備上,既保證了充分的存儲資源同時也能保證數(shù)據(jù)不和設(shè)備綁定,任務(wù)未執(zhí)行完成而計算資源資源不可用時可以方便地切換計算設(shè)備并保證數(shù)據(jù)的完整性和可用性。

4.3 關(guān)鍵技術(shù)驗證

4.3.1 去重處理方案

NKCorpus 在去重部分采用了先局部再全局的方案,可以有效地降低與已去重數(shù)據(jù)沖突的概率以及數(shù)據(jù)庫查詢時間,從而提高整體的去重效率。本文對比了傳統(tǒng)去重方案與本文提出的方案,傳統(tǒng)方案即一次處理一個文件立即與已去重數(shù)據(jù)進行全局去重。去重效率實驗結(jié)果如圖6及表8所示,本文提出的方案具有明顯優(yōu)勢,在處理前200 個文件(每個文件大小約13MB,包含約1,500 篇文章)時,用時僅為傳統(tǒng)方法的68.5%,而在處理第800 至第1,000 個文件時,用時為傳統(tǒng)方法的41.5%,隨著累計處理文件數(shù)量的增加,先局部再整體的優(yōu)勢愈發(fā)明顯。并且可以看出,隨著累計處理文件數(shù)量的增加,本文提出的方案每次處理200 個文件的用時沒有顯著增加,該方案對于數(shù)據(jù)整體數(shù)量的增加更具有魯棒性。此外,本文通過對比兩種方案去重后保留的數(shù)據(jù)數(shù)量和數(shù)據(jù)重合度來驗證兩種方案的效果。累計處理1,000 個文件后,傳統(tǒng)去重方案與本文提出的方案保留的數(shù)據(jù)數(shù)量分別為1,153,843 條和1,144,754條,二者基本一致。數(shù)據(jù)重合度通過對兩種方案保留的數(shù)據(jù)兩兩計算Jaccard 相似度得到,若Jaccard相似度高于閾值則認為保留數(shù)據(jù)重合,傳統(tǒng)去重方案獲取的1,153,843 條數(shù)據(jù)中有1,150,465 條與本文提出方案保留數(shù)據(jù)一致,占比達到99.71%;本文提出方案保留數(shù)據(jù)全部與傳統(tǒng)方案重合。以上實驗結(jié)果可以看出兩種方案的去重效果基本保持一致??傮w來講,本文提出的方案在不犧牲效果的前提下具有更高效率,更加適用于大規(guī)模數(shù)據(jù)的去重工作。

表8 先局部再全局去重效率驗證Table 8 The comparison of single deduplication and batch deduplication

圖6 先局部再全局方案效率驗證Fig.6 The comparison of single deduplication and batch deduplication

4.3.2 多進程、多機效率驗證

使用多進程、多機在實驗環(huán)境下可以達到表9所示的數(shù)據(jù)處理效率。由于不同處理模塊對內(nèi)存和算力需求不同,單機支持的進程數(shù)略有差別,但仍可以看出隨著進程數(shù)和機器數(shù)量的增加,單日處理效率有顯著增加并且與進程數(shù)量、機器數(shù)量基本呈線性關(guān)系。

表9 各流程單日處理數(shù)據(jù)量Table 9 The data processing capability of each process (per day)

4.4 實驗結(jié)果

本文使用NKCorpus 構(gòu)建了一個約700GB 的高質(zhì)量中文數(shù)據(jù)集,該數(shù)據(jù)集規(guī)模遠高于目前公開的中文數(shù)據(jù)集并且仍有很大的拓展空間。

本文針對各模塊獲取的數(shù)據(jù)量(如表10所示)進行分析,得到以下結(jié)論:(1)NKCorpus 獲取的中文數(shù)據(jù)占所有下載數(shù)據(jù)的9.7%,與Common Crawl給出的語言統(tǒng)計(中文數(shù)據(jù)占5%左右)略有不同,這可能是因為統(tǒng)計方法不同。此外,使用NKCorpus構(gòu)造的數(shù)據(jù)集中保留了一部分其他語言的數(shù)據(jù),其他語言數(shù)據(jù)主要由專有名詞、公式、習(xí)慣性表達等構(gòu)成,在PLM 模型訓(xùn)練時對這些數(shù)據(jù)加以考慮對訓(xùn)練效果有積極作用。(2)文本過濾及清洗模塊過濾掉了65.3%的數(shù)據(jù),說明了網(wǎng)絡(luò)數(shù)據(jù)中包含較多的低質(zhì)量數(shù)據(jù)(不良文本、不完整文本),設(shè)計合理的清洗過濾方案是十分必要的,低質(zhì)量文本比例過高會影響后續(xù)的PLM 模型訓(xùn)練。(3)數(shù)據(jù)去重模塊保留了22.7%的清洗后數(shù)據(jù),也就是說網(wǎng)絡(luò)數(shù)據(jù)重復(fù)比例極高。越大的PLM 模型需要越多的信息進行訓(xùn)練,如果沒有經(jīng)過完善的去重流程,即使獲取了大規(guī)模的數(shù)據(jù)集,其中包含的信息量也較為有限,會浪費巨大的資源進行模型訓(xùn)練。(4)高質(zhì)量篩選模塊保留了約46.7%的數(shù)據(jù),說明網(wǎng)絡(luò)環(huán)境的自由性和開放性導(dǎo)致網(wǎng)絡(luò)數(shù)據(jù)中可能存在較多不通順、不成文的數(shù)據(jù),去除這些低質(zhì)量數(shù)據(jù)有助于訓(xùn)練一個較好的PLM 模型。整體來講,NKCorpus 中的每一個處理模塊都對提高最終構(gòu)建得到數(shù)據(jù)集的質(zhì)量起到了重要保障。

表10 NKCorpus 各模塊獲得數(shù)據(jù)量統(tǒng)計Table 10 The data size output by each module

4.5 數(shù)據(jù)集質(zhì)量驗證

為了驗證使用NKCorpus 構(gòu)建出的數(shù)據(jù)集的質(zhì)量,本文對比了NKCorpus 最終構(gòu)建出的數(shù)據(jù)集及CLUECorpus2020[9]的質(zhì)量。質(zhì)量評價采用困惑度作為評價指標(biāo),困惑度越低表示文本質(zhì)量越高。為了更加公平地評價兩個數(shù)據(jù)集的質(zhì)量,本文采用三種模型計算數(shù)據(jù)困惑度,分別為本文訓(xùn)練的小型GPT模型、KenLM(分字)模型和KenLM(分詞)模型[17]。具體上講,我們首先從兩個數(shù)據(jù)集中各隨機抽取1,000 條數(shù)據(jù),然后利用三個模型進行困惑度計算,最終使用1,000 條數(shù)據(jù)困惑度的平均值作為數(shù)據(jù)集的質(zhì)量分數(shù)。

實驗結(jié)果如表11所示。由于不同模型默認使用的窗口大小不同,不同模型困惑度的數(shù)量級也不同,但這并不影響相同模型在不同數(shù)據(jù)集上輸出的可比較性。從實驗結(jié)果中可以看出,使用小型GPT 模型和KenLM(分詞)模型進行質(zhì)量評價時,NKCorpus構(gòu)建得到的數(shù)據(jù)集質(zhì)量更具優(yōu)勢,使用KenLM(分字)模型進行質(zhì)量評價時CLUECorpus 質(zhì)量更具優(yōu)勢。整體來講,可以認為NKCorpus 構(gòu)建的數(shù)據(jù)集質(zhì)量較高,與目前公開的高質(zhì)量數(shù)據(jù)集質(zhì)量相當(dāng)。

表11 NKCorpus 構(gòu)建出的數(shù)據(jù)集與CLUECorpus2020 的質(zhì)量對比Table 11 Quality comparison between the dataset built by NKCorpus and CLUECorpus2020

5 結(jié)論與展望

本文提出并實現(xiàn)了NKCorpus,一個可以利用海量網(wǎng)絡(luò)數(shù)據(jù)構(gòu)建大型高質(zhì)量中文數(shù)據(jù)集的流水線工作框架。利用該框架我們完成了一個700GB 高質(zhì)量中文數(shù)據(jù)集的構(gòu)建工作。該數(shù)據(jù)集可用于PLM 訓(xùn)練或者其他無監(jiān)督NLP 模型的訓(xùn)練,具有廣泛的實際應(yīng)用價值。同時,我們開源了NKCorpus 的代碼,以便各位學(xué)者學(xué)習(xí)、使用。未來我們將會研究更加通用的,能夠處理多種語言數(shù)據(jù)的處理框架。

利益沖突聲明

所有作者聲明不存在利益沖突關(guān)系。

猜你喜歡
高質(zhì)量數(shù)據(jù)庫文本
堅持以高質(zhì)量發(fā)展統(tǒng)攬全局
高質(zhì)量項目 高質(zhì)量發(fā)展
牢牢把握高質(zhì)量發(fā)展這個根本要求
在808DA上文本顯示的改善
“三部曲”促數(shù)學(xué)復(fù)習(xí)課高質(zhì)量互動
基于doc2vec和TF-IDF的相似文本識別
電子制作(2018年18期)2018-11-14 01:48:06
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
中江县| 新密市| 梅州市| 雅江县| 东兰县| 中牟县| 固安县| 江安县| 景德镇市| 古田县| 峨边| 枣庄市| 藁城市| 新余市| 马山县| 宁蒗| 黔西| 无极县| 盖州市| 绥棱县| 平潭县| 武义县| 开封县| 丰县| 土默特左旗| 龙川县| 电白县| 类乌齐县| 阿合奇县| 新源县| 长寿区| 江山市| 沽源县| 舞钢市| 甘孜| 芜湖县| 长寿区| 化德县| 金溪县| 衡阳县| 浦县|