周俊明,李艷翠,來純曉,李國厚
(1.河南科技學(xué)院信息工程學(xué)院,河南 新鄉(xiāng) 453003;2.河南師范大學(xué)計(jì)算機(jī)與信息工程學(xué)院,河南 新鄉(xiāng) 453007;3.武漢理工大學(xué)計(jì)算機(jī)與人工智能學(xué)院,湖北 武漢 430070)
隨著農(nóng)業(yè)領(lǐng)域信息化進(jìn)程的不斷推進(jìn),出現(xiàn)了越來越多的信息化應(yīng)用和服務(wù).農(nóng)業(yè)從事人員在生產(chǎn)中遇到問題時(shí)的解答方式也逐步從線下轉(zhuǎn)移到了線上.問答系統(tǒng)可以為用戶提供高效、便捷的服務(wù).構(gòu)建一個(gè)農(nóng)業(yè)問答語料庫,實(shí)現(xiàn)對語料的結(jié)構(gòu)化存儲和管理,可以提高數(shù)據(jù)的管理效率,方便后續(xù)問答系統(tǒng)相關(guān)研究的展開,對農(nóng)業(yè)領(lǐng)域的信息化具有重要意義.
目前,機(jī)器學(xué)習(xí)廣泛應(yīng)用于各領(lǐng)域.近來年由于計(jì)算機(jī)系統(tǒng)算力的提升,深度學(xué)習(xí)技術(shù)在圖像、語音、文字等領(lǐng)域不斷取得了新的成就.問答系統(tǒng)作為自然語言處理領(lǐng)域的一個(gè)重要研究方向,越來越多的專家學(xué)者把深度學(xué)習(xí)的方法應(yīng)用到了問答系統(tǒng)領(lǐng)域的研究中.在醫(yī)療領(lǐng)域,張興等[1]在媽媽網(wǎng)中抓取兒童病護(hù)理的相關(guān)數(shù)據(jù),構(gòu)建了兒童病護(hù)理問答數(shù)據(jù)集ChildQA,并提出了一種基于多模型融合的TIBD-QA的問答方法.在法律領(lǐng)域,武鈺智等[2]構(gòu)建了有6 萬條民事相關(guān)的數(shù)據(jù)集,并構(gòu)建了基于Bert-Base-Chinese的民事相關(guān)問題分類模型.在工業(yè)領(lǐng)域,劉根等[3]通過互聯(lián)網(wǎng)和企業(yè)積累的問答數(shù)據(jù)構(gòu)建了汽車行業(yè)知識庫,并基于知識圖譜構(gòu)建了專家系統(tǒng)模型.在農(nóng)業(yè)領(lǐng)域,姜鑫等[4]構(gòu)建了面向水產(chǎn)疾病領(lǐng)域的語料庫,為后續(xù)研究打下基礎(chǔ);閆麗華等[5]收集了7828 個(gè)句子構(gòu)建了葡萄病蟲害知識圖譜,設(shè)計(jì)并實(shí)現(xiàn)了葡萄病蟲害自動(dòng)問答系統(tǒng).問答系統(tǒng)由問句分類、信息檢索、答案抽取三部分組成,其中問句分類則是問答系統(tǒng)研究的第一步.針對農(nóng)業(yè)領(lǐng)域中問答系統(tǒng)的研究,王郝日欽[6]等收集了12000 條提問數(shù)據(jù),并進(jìn)行人工標(biāo)注,提出了一種用于水稻提問數(shù)據(jù)分類的模型,在CNN 的上下游卷積塊之間建立了一條稠密的鏈接,并結(jié)合了Attention 機(jī)制,解決了水稻問句特征不足的問題.楊國峰等[7]構(gòu)建了常見作物病害問句數(shù)據(jù)集,并構(gòu)建了基于BERT 微調(diào)的問句分類模型,以提升問答系統(tǒng)的檢索效率.
在對農(nóng)業(yè)問句分類進(jìn)行研究時(shí),存在語料庫較少、語料內(nèi)容范圍窄或需要手工標(biāo)注等問題,構(gòu)建一個(gè)數(shù)量充足、覆蓋范圍廣和帶標(biāo)注的農(nóng)業(yè)領(lǐng)域語料庫是至關(guān)重要的.本文將針對這一問題將收集互聯(lián)網(wǎng)中的帶標(biāo)簽數(shù)據(jù),構(gòu)建一個(gè)可用于農(nóng)業(yè)領(lǐng)域問答系統(tǒng)研究的語料庫,對數(shù)據(jù)進(jìn)行一定的分析,并選擇一個(gè)合適的分類模型搭建一個(gè)可用于農(nóng)業(yè)問句分類的基準(zhǔn)模型, 后續(xù)將在此基礎(chǔ)上進(jìn)一步對農(nóng)業(yè)問句分類效果的提升進(jìn)行研究.
在互聯(lián)網(wǎng)技術(shù)和移動(dòng)通訊技術(shù)極度發(fā)達(dá)的今天,網(wǎng)絡(luò)中的數(shù)據(jù)呈現(xiàn)出了指數(shù)式的增長,農(nóng)業(yè)領(lǐng)域的信息也變得更加豐富,網(wǎng)頁上的文本、圖片等是一種非結(jié)構(gòu)化的信息,不便于數(shù)據(jù)的存儲管理和充分使用.因此,本文將使用Python 爬蟲程序從互聯(lián)網(wǎng)中獲取農(nóng)業(yè)領(lǐng)域的問句和答案對,并使用MySQL 數(shù)據(jù)庫對獲取到的數(shù)據(jù)進(jìn)行結(jié)構(gòu)化的存儲管理,以方便后續(xù)研究中的使用.
第一農(nóng)經(jīng)網(wǎng)(http://net.1nongjing.com/)是第一家垂直型資訊網(wǎng)站,內(nèi)容范圍主要包括養(yǎng)殖、水產(chǎn)、花草、種子、飲料、食品、旅游農(nóng)業(yè)、農(nóng)機(jī)、飼料、肥料以及科技等方面,為農(nóng)業(yè)從事人員提供在線的信息服務(wù),促進(jìn)現(xiàn)代農(nóng)業(yè)的發(fā)展.本文在第一農(nóng)經(jīng)網(wǎng)中獲取了科技資訊、動(dòng)物醫(yī)學(xué)、養(yǎng)殖技術(shù)、種植技術(shù)和植物病蟲害共5 類文本數(shù)據(jù),包含問句和答案,并以成對的形式存儲在MySQL 數(shù)據(jù)庫中.如圖1 所示,為網(wǎng)站中養(yǎng)殖技術(shù)類問答句對文本示例.
圖1 養(yǎng)殖技術(shù)問答句對示例Fig.1 Examples of answers to questions on aquaculture technology
對于第一農(nóng)經(jīng)網(wǎng)中大量的文本數(shù)據(jù),使用人工進(jìn)行收集和標(biāo)注將消耗大量的時(shí)間和人力,選擇Python 爬蟲程序?qū)ξ谋緮?shù)據(jù)進(jìn)行自動(dòng)化的獲取,這將大大提高數(shù)據(jù)收集的效率.本文在進(jìn)行爬蟲程序的編寫時(shí),主要使用了Requests 和BeastifulSoup 庫,其主要流程是:首先獲取第一農(nóng)經(jīng)網(wǎng)某類文本網(wǎng)頁的URL,向該URL 發(fā)送request 請求,接收站點(diǎn)返回的網(wǎng)頁數(shù)據(jù),然后使用BeautifulSoup 庫中的方法對網(wǎng)頁數(shù)據(jù)進(jìn)行解析,向解析到的資訊文本URL 發(fā)送request 請求,再次對返回的網(wǎng)頁數(shù)據(jù)進(jìn)行解析,從中獲取資訊的標(biāo)題和內(nèi)容,將其保存至本地,并重復(fù)上述操作.
本文從第一農(nóng)經(jīng)網(wǎng)中獲取的數(shù)據(jù)共分為5 類,分別為動(dòng)物醫(yī)學(xué)、養(yǎng)殖技術(shù)、科技資訊、植物病蟲害、種植技術(shù),共獲取28608 條數(shù)據(jù),每條數(shù)據(jù)包含問句和答案,在獲取數(shù)據(jù)時(shí)把不同類別的數(shù)據(jù)分開進(jìn)行保存,方便后續(xù)給文本加注類別標(biāo)簽.爬取到的類別、問句樣例和數(shù)量如表1 所示.
表1 農(nóng)業(yè)問答數(shù)據(jù)統(tǒng)計(jì)Tab.1 Distribution of Wheat Germplasm information sources
從第一農(nóng)經(jīng)網(wǎng)獲取到的數(shù)據(jù)中,除了構(gòu)建語料庫所用的文本信息,還有很多的噪聲數(shù)據(jù),如特殊字符和空格、回車等無意義字符,這些無意義字符會影響使用數(shù)據(jù)構(gòu)建模型時(shí)的特征提取.文本中的逗號、句號、問號等常用符號對語義的理解具有幫助,因此對數(shù)據(jù)進(jìn)行清洗時(shí)僅刪除文本中摻雜的特殊字符、空格、換行和制表符等對語義表達(dá)無效的內(nèi)容.數(shù)據(jù)在獲取時(shí)使用了“[CLS]”和“[SEP]”對標(biāo)題和內(nèi)容進(jìn)行標(biāo)準(zhǔn),“[CLS]”和“[SEP]”間的文本為標(biāo)題,“[SEP]”和“[SEP]”間的文本為詳細(xì)內(nèi)容.如圖2、圖3 所示,分別為進(jìn)行數(shù)據(jù)清洗前和進(jìn)行數(shù)據(jù)清洗后的數(shù)據(jù)示例.
圖2 數(shù)據(jù)清洗前的數(shù)據(jù)示例Fig.2 Sample data before data cleaning
圖3 數(shù)據(jù)清洗后的數(shù)據(jù)示例Fig.3 Example of data after data cleaning
為了將爬取的數(shù)據(jù)使用MySQL 進(jìn)行結(jié)構(gòu)化存儲,需要對“標(biāo)題”和“答案”數(shù)據(jù)進(jìn)行提取,并添加上相對應(yīng)的標(biāo)簽.在語料庫中的存儲形式為{(ID1,問題1,答案1,類別),(ID2,問題2,答案2,類別),…,(IDn,問題n,答案n,類別)},一個(gè)ID 對應(yīng)一個(gè)問句、一個(gè)答案和標(biāo)簽,其存儲內(nèi)容如表2 所示.
表2 語料庫數(shù)據(jù)存儲內(nèi)容示例Tab.2 Examples of corpus data store content
問答系統(tǒng)由問句分類、信息檢索、答案抽取3 部分組成,其中問句分類則是問答系統(tǒng)研究的第一步.本文分類任務(wù)按照長度的不同可以劃分為長文本分類和短文本分類,在長文本分類任務(wù)中,由于文本長度充足能夠從中抽取出較多的特征信息,對于短文本分類任務(wù)來說,文本長度較短會造成特征提取的困難.在對文本進(jìn)行分類時(shí),長文本和短文本對應(yīng)了不同的方法和模型,因此要對問句的長度進(jìn)行統(tǒng)計(jì),然后根據(jù)問句的長度選擇合適的方法.
對文本所爬取的28608 條數(shù)據(jù)中的問句文本長度進(jìn)行統(tǒng)計(jì)分析,統(tǒng)計(jì)結(jié)果如圖4 所示.從圖中可以看出長度主要集中在30 個(gè)字符以內(nèi),短文本在進(jìn)行分類任務(wù)時(shí)具有特征稀疏的特點(diǎn),由于其長度較短,在模型訓(xùn)練時(shí)也更容易收到噪聲的干擾.
圖4 問句長度分布Fig.4 Question length distribution
本文所獲取的5 類文本數(shù)據(jù)是以問答對的形式進(jìn)行存儲, 其中問句則可表達(dá)這一對文本的主題信息,因此獲取不同類別的主題信息僅需對問句文本進(jìn)行分析,以獲取其中蘊(yùn)藏的規(guī)律.對問句的主題進(jìn)行分析,首先要去除問句中不能表達(dá)主題信息的停用詞和標(biāo)點(diǎn)符號,然后對問句文本進(jìn)行分詞處理,由于本文文本中包含有較多的農(nóng)業(yè)領(lǐng)域?qū)S迷~,為了保證分詞的正確性和專業(yè)性,因此本文分詞使用了搜狗詞庫中的“農(nóng)業(yè)詞匯大全”詞庫.去除停用詞和進(jìn)行分詞前后的文本數(shù)據(jù)如表3 所示.
表3 預(yù)處理前后文本數(shù)據(jù)對比Tab.3 Comparison of text data before and after preprocessing
詞云(WordCloud)是一種數(shù)據(jù)可視化的方法,能夠?qū)ξ谋局谐霈F(xiàn)頻次較高的詞組進(jìn)行展示,能夠以直觀的方式展示出數(shù)據(jù)中的主題詞.在對問句文本進(jìn)行預(yù)處理后,分別對動(dòng)物醫(yī)學(xué)、養(yǎng)殖技術(shù)、植物病蟲害、種植技術(shù)和科技資訊這5 種不同類型的文本數(shù)據(jù)中詞匯出現(xiàn)的頻次進(jìn)行統(tǒng)計(jì),各選取了50 個(gè)出現(xiàn)頻次最高的詞匯進(jìn)行展示,在詞云圖中出現(xiàn)頻次越高的詞所占的面積越大,出現(xiàn)頻次較低的詞所占面積則小些.詞云結(jié)果展示如圖5 所示.
圖5 主題詞可視化展示Fig.5 Visual display of subject words
如圖5 所示,a 動(dòng)物醫(yī)學(xué)和b 養(yǎng)殖技術(shù)都是動(dòng)物的相關(guān)內(nèi)容,但動(dòng)物醫(yī)學(xué)側(cè)重于疾病的治療、防治和預(yù)防方面,養(yǎng)殖技術(shù)則側(cè)重于動(dòng)物的養(yǎng)殖、管理和飼養(yǎng).c 植物病蟲害和d 種植技術(shù)是植物相關(guān)內(nèi)容,植物病蟲害的主要內(nèi)容是植物的常見病蟲害、防治和癥狀等,種植技術(shù)則主要是種植、栽培技術(shù)、管理等.e科技資訊的主要內(nèi)容是現(xiàn)代農(nóng)業(yè)、技術(shù)創(chuàng)新、新品種等,作物方面的科技內(nèi)容相對較多.動(dòng)物醫(yī)學(xué)和植物病蟲害相比于其他幾類問題,在解答時(shí)需要更加的及時(shí)和準(zhǔn)確.由圖5 還可看出,“技術(shù)”“方法”這兩個(gè)詞語在5 類文本中出現(xiàn)的頻次都比較高,且對于主題內(nèi)容的區(qū)分沒有實(shí)際意義,因此可加入到停用詞表中,以減少問句分類的噪聲干擾.
在對數(shù)據(jù)進(jìn)行查閱時(shí),發(fā)現(xiàn)科技資訊類文本中省份地區(qū)名稱出現(xiàn)的頻次較多,于是對各類文本中包含的省份地區(qū)名稱進(jìn)行了統(tǒng)計(jì),省份地區(qū)名稱在5 個(gè)類別中共出現(xiàn)了2094 次,在科技資訊類中出現(xiàn)1966 次,出現(xiàn)率達(dá)到了93.89%.出現(xiàn)頻次最高的10 個(gè)省份,統(tǒng)計(jì)結(jié)果如表4 所示.
表4 出現(xiàn)頻次最高的10 個(gè)省份Tab.4 Ten provinces with the highest frequency
在科技資訊類的數(shù)據(jù)中,內(nèi)容主要是以報(bào)道的形式進(jìn)行的,區(qū)域名稱則是為了標(biāo)明事件的所在地,但其他類別中會出現(xiàn)如“山東獅子貓”這種含有區(qū)域名稱的品種,這在訓(xùn)練模型時(shí)可能會讓模型以為“山東獅子貓”和山東地區(qū)的科技資訊比較相似,造成錯(cuò)誤的分類.可嘗試將“科技資訊”類中的區(qū)域名稱進(jìn)行去除,以減少模型訓(xùn)練中的噪聲數(shù)據(jù).
本實(shí)驗(yàn)基于Windows 10 專業(yè)版X64 操作系統(tǒng)進(jìn)行,硬件環(huán)境為AMD Ryzen 5600X 處理器,DRR43 600 MHz 16Gb 內(nèi)存,NVIDIAGeForceRTX3060 GDDR612G 顯卡, 軟件環(huán)境為Python 3.7,Pytorch 1.10.0,Numpy 1.21.4,CudaToolKit 11.3.1.
實(shí)驗(yàn)數(shù)據(jù)為本文采集的5 類共28608 條數(shù)據(jù)中的問句文本,分別使用僅清洗后的問句、去除“技術(shù)”和“方法”后的問句和去除省份地區(qū)名稱后的問句進(jìn)行實(shí)驗(yàn),并使用8∶1∶1 的比例將數(shù)據(jù)劃分為訓(xùn)練集、驗(yàn)證集和測試集.
分類模型采用TextCNN(Text Convolutional Neural Network),該模型即Kim[9]提出的一種多通道CNN模型,單通道的CNN 模型采用了固定大小的卷積核對特征進(jìn)行提取,TextCNN 在卷積層使用了多個(gè)不同大小的卷積核,對不同粒度的文本信息特征進(jìn)程抽取,以彌補(bǔ)短文本在進(jìn)行特征抽取時(shí)存在的特征不足的問題.對于短文本的分類來說,使用詞向量會加劇短文本特征信息不足的問題,且文本中存在的不規(guī)范詞語也會對模型的訓(xùn)練造成不利的影響,所以使用基于字粒度的編碼方式更加適合本次實(shí)驗(yàn).由3.1 節(jié)可知,問句的長度主要集中在30 個(gè)字符內(nèi),在進(jìn)行模型的訓(xùn)練時(shí),每條問句的長度設(shè)置為32 個(gè)字符,超出的部分進(jìn)行截?cái)?不足的則在問句后補(bǔ)0.模型訓(xùn)練時(shí)使用了EarlyStopping,若超過1000 batch 效果還沒提升,則提前結(jié)束訓(xùn)練,模型具體參數(shù)設(shè)置如表5 所示.
表5 實(shí)驗(yàn)參數(shù)設(shè)置Tab.5 Experimental parameter setting
由于問句文本具有樣本比例不均衡的特點(diǎn),所以選擇了準(zhǔn)確率(Precision)、召回率(Recall)和二者的綜合(F1-Score)指標(biāo)衡量模型的分類性能,并給出了更注重大樣本量Class 的宏平均(Macro avg)和更注重小樣本量Class 的微平均(Micro avg).其Precision、Recall 和F1-Score 的計(jì)算方法如式(1)、式(2)和式(3)所示
式(1)~(3)中:TP(True Positive)表示問句類別為正且預(yù)測結(jié)果也為正的樣本數(shù);FP(False Positive)表示問句類別為負(fù)且預(yù)測結(jié)果為正的樣本數(shù);FN(False Negatives)表示問句類別為正且預(yù)測結(jié)果為負(fù)的樣本數(shù).
實(shí)驗(yàn)1,對收集的問句進(jìn)行數(shù)據(jù)清洗后作為實(shí)驗(yàn)數(shù)據(jù),使用TextCNN 進(jìn)行訓(xùn)練時(shí)共迭代9 次;實(shí)驗(yàn)2,將各類問句中出現(xiàn)頻次都比較的詞語進(jìn)行去除,在實(shí)驗(yàn)1 數(shù)據(jù)的基礎(chǔ)上,對“技術(shù)”和“方法”兩個(gè)詞進(jìn)行了去除,使用TextCNN 進(jìn)行訓(xùn)練時(shí)共迭代9 次;實(shí)驗(yàn)3,在實(shí)驗(yàn)1 數(shù)據(jù)的基礎(chǔ)上,對“科技資訊”類中省份地區(qū)名稱進(jìn)行了去除,模型訓(xùn)練過程中共迭代8 次.3 次實(shí)驗(yàn)的結(jié)果如表6 所示.
表6 實(shí)驗(yàn)結(jié)果Tab.6 Results of experiment
由實(shí)驗(yàn)1 和實(shí)驗(yàn)2可知,去除“技術(shù)”和“方法”后前4 中問句的分類效果均有提升,其中動(dòng)物醫(yī)學(xué)類F1 值提升最多為9.09,種植技術(shù)類F1 值提升0.35,僅科技資訊類下降了0.12,實(shí)驗(yàn)2 的宏平均F1 值相比實(shí)驗(yàn)1 提升了2.1,整體效果優(yōu)于實(shí)驗(yàn)1.因此,在進(jìn)行文本分類時(shí),可將不同類別中共同出現(xiàn)頻次較高的詞語進(jìn)行去除,以提升模型的分類效果.
由實(shí)驗(yàn)1 和實(shí)驗(yàn)3可知,在對“科技資訊”類文本中的省份地區(qū)名稱進(jìn)行去除后,前四個(gè)類別的F1值平均提升了0.875,“科技資訊”類的F1 值下降了3.22.對數(shù)據(jù)進(jìn)行分析后發(fā)現(xiàn),“種植技術(shù)”和“科技資訊”中部分問句相似度較高,從圖5-e 中也可以看出“科技資訊”類中有關(guān)植物的內(nèi)容相對較多,因此在去除省份地區(qū)名稱后造成了這兩類問句的分類錯(cuò)誤. 實(shí)驗(yàn)3 中整體的模型結(jié)果雖然略低于實(shí)驗(yàn)2 的結(jié)果,但從實(shí)際應(yīng)用角度出發(fā),實(shí)驗(yàn)3 中的結(jié)果更加符合農(nóng)業(yè)生產(chǎn)場景的應(yīng)用.
隨著農(nóng)業(yè)領(lǐng)域信息化進(jìn)程的不斷推進(jìn),網(wǎng)絡(luò)中出現(xiàn)了大量農(nóng)業(yè)類問答的資源,但依靠搜索引擎對這些資源的利用率并不高,未能充分發(fā)揮其價(jià)值.本文針對農(nóng)業(yè)問答領(lǐng)域內(nèi)缺少語料庫的問題,使用爬蟲技術(shù)獲取了5 類共計(jì)28608 條問句- 答案對的文本數(shù)據(jù),并對獲取的文本數(shù)據(jù)進(jìn)行了數(shù)據(jù)清洗、分詞等預(yù)處理,構(gòu)建了一個(gè)可用于問答系統(tǒng)研究的農(nóng)業(yè)文本語料庫.數(shù)據(jù)分析結(jié)果表明,問句文本的長度主要集中在30 個(gè)字符內(nèi),各類文本的主題明確具有可辨識度.
使用TextCNN 模型進(jìn)行實(shí)驗(yàn),首先對預(yù)處理后的問句進(jìn)行實(shí)驗(yàn),驗(yàn)證了數(shù)據(jù)的可用性;其次對各類文本中共同出現(xiàn)頻次較高的詞語進(jìn)行了去除,提升了模型整體的分類效果;然后對“科技資訊”類問句中出現(xiàn)頻次極高且與主題相關(guān)性不高的“省份地區(qū)”名稱進(jìn)行去除,使模型的分類效果更加符合實(shí)際生產(chǎn)的使用需求.
本文構(gòu)建的農(nóng)業(yè)領(lǐng)域問答語料庫,可用于知識庫的構(gòu)建和問答系統(tǒng)的相關(guān)研究,有助于促進(jìn)農(nóng)業(yè)領(lǐng)域語料庫的完善,緩解農(nóng)業(yè)領(lǐng)域研究中語料庫不足的問題.本文構(gòu)建的語料庫中還存在樣本不均衡的問題,下一步將對語料庫進(jìn)行擴(kuò)充,對文本的局部特征和上下文特征進(jìn)行提取,并使用預(yù)訓(xùn)練模型等方法進(jìn)一步提升模型的分類效果.