高秀艷 耿興隆 李戰(zhàn)軍
【摘 要】智能機(jī)器人自動(dòng)回復(fù)功能的實(shí)現(xiàn)依賴于足量的語料庫,語料庫的基本單位為詞語,因此將整篇的文章語料進(jìn)行分詞并對(duì)出詞語進(jìn)行詞頻統(tǒng)計(jì),可以為下一步的機(jī)器學(xué)習(xí)做好準(zhǔn)備。Python語言在自然語言處理過程中廣受編程者青睞,它簡潔的語法和強(qiáng)大的第三方庫為編程提供了極大的方便。Jieba模塊在自然語言處理中功能強(qiáng)大,能按照全模式、精確模式和搜索引擎模式對(duì)文章進(jìn)行分詞,使用該模塊對(duì)文章進(jìn)行分詞后,再利用analyse子模塊進(jìn)行詞頻統(tǒng)計(jì),可以為后期的模型訓(xùn)練提供更準(zhǔn)確的數(shù)據(jù)集,從而提高機(jī)器人的回復(fù)準(zhǔn)確率。
【關(guān)鍵詞】機(jī)器人;語料庫;Jieba模塊
自然語言處理是和語言緊密相關(guān)的一門學(xué)科,是統(tǒng)計(jì)和機(jī)器學(xué)習(xí)和語言學(xué)的交叉學(xué)科,是讓計(jì)算機(jī)能夠理解人類語言的一種技術(shù)。自然語言處理的主要目的是研究能夠表示自然語言的模型,及如何通過計(jì)算機(jī)處理這些數(shù)學(xué)模型[1]。智能機(jī)器人即依據(jù)此進(jìn)行工作,獲取足量的語料后進(jìn)行分詞,并對(duì)詞語按一定的規(guī)則進(jìn)行建模,用模型訓(xùn)練機(jī)器人,使它具備根據(jù)輸入內(nèi)容自動(dòng)檢索答案并給出反饋的功能,從而實(shí)現(xiàn)自動(dòng)回復(fù)。
一、漢語分詞的研究現(xiàn)狀
中文分詞有人工分詞和機(jī)器分詞兩種,鑒于分詞效率,目前多使用機(jī)器分詞,目前常用的機(jī)器自動(dòng)分詞方法有:基于詞典的分詞方法、基于統(tǒng)計(jì)的分詞方法和混合方法[2][3],其中詞典和統(tǒng)計(jì)的方法是目前分詞技術(shù)的主要方法,但基于詞典的分詞方法在處理歧義字段時(shí)性能欠佳,而基于統(tǒng)計(jì)的分詞方法雖能解決這一問題,但由于其需要大量的計(jì)算,時(shí)間消耗相當(dāng)可觀,因此混合方法是目前被最多采用的方法。
二、python語言及jieba分詞模塊介紹
Python語言是當(dāng)今流行的開源編程語言,它可以跨平臺(tái)使用,語法簡潔,安裝方便,廣受編程者青睞,其豐富的第三方庫也使它如虎添翼,更加方便的完成各種數(shù)據(jù)處理及運(yùn)算。
Jieba模塊是免費(fèi)的第三方模塊,也是目前Python中最好的中文分詞組件,它可以以精確模式、全模式、搜索引擎模式三種模式對(duì)語料進(jìn)行分詞,并可使用子模塊analyse進(jìn)行關(guān)鍵詞提取及詞頻統(tǒng)計(jì)。
Jieba模塊使用cut函數(shù)或lcut函數(shù)實(shí)現(xiàn)分詞,使用cut_all參數(shù)來判斷是否使用精確模式:
cut_all = True:使用全模式,獲取文本中所有可能的組詞方式。
cut_all = False: 使用精確模式,也即默認(rèn)模式。
Cut函數(shù)返回可迭代序列,可以使用for循環(huán)進(jìn)行遍歷,lcut則直接返回分詞后的詞語列表。
jieba的安裝及導(dǎo)入:
Jieba的安裝非常方便,可以直接使用python中的pip命令進(jìn)行安裝,保證電腦聯(lián)網(wǎng)的情況下,在windows運(yùn)行窗口輸入pip install jieba,即可進(jìn)行安裝,成功安裝后的提示如圖1。
若遇此種方法安裝不成功,也可以單獨(dú)下載jieba的安裝包,并使用cd命令切換到該安裝包所在目錄下,執(zhí)行python setup.py install命令進(jìn)行安裝。
Jieba成功安裝后,可以使用import jieba來在程序中導(dǎo)入模塊。
三、使用jieba模塊實(shí)現(xiàn)對(duì)文章的分詞及詞頻統(tǒng)計(jì)
Jieba模塊提供了豐富的函數(shù)用于處理語料文本,但在此之前我們應(yīng)先獲得文本,為不再額外安裝其它的文字處理模塊,本文使用txt文件進(jìn)行語料文章存儲(chǔ),進(jìn)行分詞及詞頻統(tǒng)計(jì)的基本流程為:打開文件→讀取文件內(nèi)容→進(jìn)行分詞→統(tǒng)計(jì)各詞權(quán)重。
由于全模式分詞時(shí)可能帶來大量的詞匯冗余,影響后期模塊訓(xùn)練時(shí)的數(shù)據(jù)集,進(jìn)而影響模型的準(zhǔn)確性,本文選取精確模式進(jìn)行分詞,兩種模式對(duì)部分語句的分詞結(jié)果比較如下:
原句:戰(zhàn)士們的三只小船就奔著東南方向,箭一樣飛去了。
全模式分詞結(jié)果:戰(zhàn)士/們/的/三只/小船/就/奔/著/東南/南方/方向///箭/一樣/飛去/了.
精確模式的分詞結(jié)果:戰(zhàn)士/們/的/三只/小船/就/奔/著/東南/方向/,/箭/一樣/飛去/了.
本文使用jieba模塊的cut函數(shù)對(duì)讀取到的語料內(nèi)容進(jìn)行分詞,將分詞結(jié)果以斜線(/)連接進(jìn)行打印,使用analyse模塊的extract_tags函數(shù)統(tǒng)計(jì)出現(xiàn)頻率最高的前20個(gè)單詞及單詞頻率,部分源碼如下:
f=open("hehuadian.txt",'r')#打開《荷花淀》文件
content = f.read()
print(type(content))
f.close()
word_list = jieba.cut(content,cut_all=False)#精確模式實(shí)現(xiàn)分詞
print("分詞結(jié)果:",'/'.join(word_list))
#統(tǒng)計(jì)出現(xiàn)頻率最高的20個(gè)單詞及其頻率
tags = jieba.analyse.extract_tags(content,topK=20,withWeight=True)
print("頻率前20的關(guān)鍵詞及其權(quán)重為:")
for i in tags:
print("%-3s:%6.2f;"%(i[0],i[1]))
運(yùn)行效果如圖2所示:
對(duì)語料源進(jìn)行分詞是實(shí)現(xiàn)智能機(jī)器人的第一步工作,接下來將根據(jù)分詞及詞頻統(tǒng)計(jì)結(jié)果構(gòu)建訓(xùn)練模型,進(jìn)而構(gòu)建問題/答案庫,從而實(shí)現(xiàn)針對(duì)給定提問內(nèi)容的自動(dòng)回復(fù)。
參考文獻(xiàn):
[1]]董永漢.一種網(wǎng)絡(luò)聊天機(jī)器人的研究與實(shí)現(xiàn)[D].杭州:浙江大學(xué),2017.
[2]張喜.基于主義模板與知識(shí)庫的智能導(dǎo)購機(jī)器人系統(tǒng)的研究與實(shí)現(xiàn)[D].北京:中央民族大學(xué),2012.
[3]黃昌寧,趙海.中文分詞十年回顧[J].中文信息學(xué)報(bào),2007,21(3):8-19.