Python中文自然語言處理基礎與實戰(zhàn)(課件)第11章 智能問答系統(tǒng)_第1頁
Python中文自然語言處理基礎與實戰(zhàn)(課件)第11章 智能問答系統(tǒng)_第2頁
Python中文自然語言處理基礎與實戰(zhàn)(課件)第11章 智能問答系統(tǒng)_第3頁
Python中文自然語言處理基礎與實戰(zhàn)(課件)第11章 智能問答系統(tǒng)_第4頁
Python中文自然語言處理基礎與實戰(zhàn)(課件)第11章 智能問答系統(tǒng)_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

智能問答系統(tǒng)1問答系統(tǒng)的主要組成目錄問答系統(tǒng)簡介2基于Seq2Seq的智能問答系統(tǒng)3隨著時代的發(fā)展,人們越來越想要快速、準確的獲取想要的信息。單純通過人工客服處理客戶問題需要消耗很多人力和成本,于是自動化的問答系統(tǒng)被提出且逐漸發(fā)展起來。問答系統(tǒng)(QuestionAnsweringSystem,QA)是信息檢索系統(tǒng)的一種高級形式,它能用準確、簡潔的自然語言回答用戶用自然語言提出的問題。圖靈測試是指在測試者與被測試者(一個人和一臺機器)隔開的情況下,測試者通過一些鍵盤或者其他裝置向被測試者隨意提問,由被測試者進行回答,如果在進行多次測試后仍有超過30%的測試者不能確定出被測試者是人還是機器,那么這臺機器就通過了測試,并被認為具有人類智能。1990年為了推動問答系統(tǒng)的發(fā)展,休·羅布納設立羅布納獎,用于獎勵通過圖靈測試的系統(tǒng)或最出色的系統(tǒng)。2014年,一個帶有聊天機器人程序的人工智能軟件尤金?古斯特曼成功地讓人類相信它是一個13歲男孩,并且這臺計算機成為史上著名的第一臺通過圖靈測試的計算機。目前,問答系統(tǒng)是人工智能和NLP領域中一個倍受關注并具有廣泛發(fā)展前景的方向。問答系統(tǒng)概述1問答系統(tǒng)的主要組成目錄問答系統(tǒng)簡介2基于Seq2Seq的智能問答系統(tǒng)3問答系統(tǒng)的問答過程和人與人之間的對話過程是一樣的,首先由一個人進行提問,另一個人在腦海中思考問題,最后組織語言回答問題。問答系統(tǒng)流程由問題理解、知識檢索、答案生成三個部分組成。問題理解包括關鍵詞提取、問題分類。知識檢索包括結構化和非結構化信息檢索。答案生成包括答案定位、答案抽取、答案驗證。問答系統(tǒng)的兩個主要難題就是問題的理解和問句與答案之間的匹配關系。問答系統(tǒng)的主要構成通常對于每一個提出的問題,都包含有問題主體。問題主體的類別可以總結為“5W1H”。即Who(問人物)、When(問時間)、Where(問地點)、What(問事件)、Why(問原因)、How(問怎么做)。為了更好的確定問題的類別還將問題的分類標準再細分為若干種分類體系。UIUC分類體系是一個雙層層次結構體系,主要針對事實類問題,擁有6大類和50小類,分別有實體、描述、人物、地點、數(shù)值、縮寫。單層次的分類體系,德拉戈米爾·R·拉德夫(DragomirR.Radev)設計了17個分類類別,包括人物、數(shù)字、描述、原因、地點、定義、縮寫、長度、日期等??梢愿鶕?jù)問題所屬的垂直領域進行分類,垂直領域下的相關問題交由相關領域特定的功能處理問題,如天氣類、食物類、百科類等。問題理解1.問題分類簡單直觀的提取關鍵詞的方式為基于規(guī)則的匹配方法,用于識別能夠定義類的查詢句子?;谝?guī)則的方法雖然簡單直接,但是不能靈活應對變化多樣的自然語言。更好的提取關鍵詞的方式需要結合詞性、句法等關鍵詞提取技術,通過進行詞性標注、命名實體識別等操作提取關鍵的詞語。問題理解2.關鍵詞提取知識庫的內容和規(guī)模能直接改變問答系統(tǒng)結果,并影響問答能力和效率。一個好的問答系統(tǒng),背后的知識庫通常是非常龐大且全面的。知識庫是通過人工的方式整理成結構化數(shù)據(jù),便于計算機進行處理。然而在大數(shù)據(jù)時代,結構化的數(shù)據(jù)相對于非結構化的數(shù)據(jù)要少得多,而且有的結構化數(shù)據(jù)還是通過人工的方式整理的。所以如果能夠從非結構化數(shù)據(jù)中提取有效的答案,可以明顯地增強問答系統(tǒng)回答問題的效率。知識檢索概述問答系統(tǒng)的結構化信息檢索,其實質是一個問題與多個答案之間的關系,側重的是實體的各個屬性以及實體與各屬性之間的關系。結構化信息主要有關系類知識和百科類知識。關系類知識可以簡化的表示為兩個事物和兩個事物之間的關系,即有兩個事物A和B,它們之間存在某種關系R,表示為A—R—B,能夠解決一些事實類的問答問題。百科類知識是由一個個條目信息組成,每個條目中都有其簡介、屬性等相關信息。百科類條目信息的屬性結構性強,內容清晰,但存在其他部分為非結構化信息。知識檢索1.結構化檢索問答系統(tǒng)的非結構化信息,是指沒有組織成的屬性或實體、隱藏在文本中的信息??梢酝ㄟ^非結構化信息檢索的方法搜索和挖掘問題相關的信息。非結構化信息的檢索方式與搜索引擎技術相同,以某個關鍵詞為索引,查找與索引內容相關的信息,再進行答案生成。如果一篇文檔或者一段文本中包含關鍵詞相關的答案信息,則關鍵詞與關鍵詞之間的位置相對較近。因此可以以段落為單位,計算連續(xù)的少量段落內是否出現(xiàn)了所有的關鍵詞。這種方法可以去除一些雖與關鍵詞相關,但與問題答案并不相關的文檔或文本。知識檢索2.非結構化檢索在問題理解環(huán)節(jié)中,會對問題進行一定程度的分類,如問題提問的是人物、數(shù)值、地點、日期等。然后通過NLP技術,如詞性標注、命名實體識別、關鍵詞提取等方式,從文本中抽取更加可能是答案的詞或句子。由于問題的關鍵詞和答案的詞語之間必然存在某種聯(lián)系,還可以考察問題和候選答案的相似度,如問題關鍵詞和答案詞之間語義聯(lián)系的遠近。答案生成1.答案抽取2.答案驗證隨著候選答案范圍的逐步縮小,可以借助其他工具驗證答案的可信程度。例如采用其他的信息源,在其中檢索問題和答案的相關性。在互聯(lián)網中檢索答案,然后驗證問題與答案同現(xiàn)的頻率是一種簡單有效的驗證方法。1問答系統(tǒng)的主要組成目錄問答系統(tǒng)簡介2基于Seq2Seq的智能問答系統(tǒng)3本節(jié)將實現(xiàn)問答系統(tǒng)中的對話式問答系統(tǒng),它是基于Seq2Seq模型的聊天機器人。Seq2Seq模型可用于機器翻譯、文本摘要、會話建模等。該技術突破了傳統(tǒng)的固定大小輸入問題框架,將神經網絡模型運用于翻譯與智能問答這一類序列任務,在機器翻譯和人機短問快答中得到廣泛的應用?;赟eq2Seq模型的聊天機器人實現(xiàn)流程如下。讀取語料庫。抽取數(shù)據(jù)中的問答對話集合。對語料庫數(shù)據(jù)進行預處理。Seq2Seq模型計算圖搭建、添加注意力機制、模型訓練、模型測試。模型評價。任務描述使用的語料樣本一共有5個txt文件,存放在dialog文件下,且文件以UTF-8的編碼方式進行保存。語料樣本包括問題和回答兩部分,其中奇數(shù)行為問題,偶數(shù)行為回答。每個文檔都具有相同的數(shù)據(jù)格式,其中“one.txt”“two.txt”“three.txt”“four.txt”中的部分內容,如表所示。因為語料儲存于data路徑dialog下的多個語料文件中,所以在讀取前需要先批量獲取文件名稱,再使用循環(huán)進行文件讀取。讀取語料庫one.txttwo.txtthree.txtfour.txt你好您好你吃了嗎吃過了......你多大了你猜猜我看你沒到20......你是誰聊天機器人你知道我是誰嗎你還沒告訴我呢......今天天氣怎么樣?很好。你感冒了?有點難受。......將獲取到語料文件進行分詞并構建詞典。Python中文分詞庫有很多,在本案例中采用的是使用范圍最廣泛的jieba分詞。分詞步驟如下。對語料文件進行分詞。構建詞典。將代碼寫入data_utls.py文件。文本預處理1.Jieba中文分詞并構建詞典構建好詞典后需要將詞典保存為本地文件,需要保存的文件有如下三個,然后都保存在data路徑tmp文件夾下。詞典文件all_dict問句文件source答句文件target文本預處理2.拆分問、答和保存文件通過tf.lookup.StaticHashTable函數(shù)將all_dict.txt初始化為一個不可變的通用哈希表。哈希表是一個散列表,它存儲的內容是鍵值對(key-value)映射。在缺少鍵時通過設置default_value確定使用的值。加載完詞典后,就加載預處理后的數(shù)據(jù)。將source.txt和target.txt文件加載轉化為python的Mapdataset格式。文本預處理3.加載詞典、數(shù)據(jù)為了防止模型過擬合,需要在構建模型前對數(shù)據(jù)進行一些處理,步驟如下。將之前得到的src_train和tgt_train數(shù)據(jù)用zip函數(shù)進行打包,得到train_dataset數(shù)據(jù)。通過filter_instance_by_max_length函數(shù)設置一個最大長度值控制過濾數(shù)據(jù)實例數(shù)。調用一個shuffle方法,該方法是TensorFlow中數(shù)據(jù)集類Dataset的一個數(shù)據(jù)處理方法,用于打亂數(shù)據(jù)集中數(shù)據(jù)的順序。文本預處理4.數(shù)據(jù)準備在構建模型之前,需先設置模型參數(shù),如模型訓練迭代的次數(shù)、加載數(shù)據(jù)集時將緩沖的實例數(shù)和詞嵌入維度等等,以及模型的輸入、輸出等占位符的定義。需要添加額外的字符標記_UNK、_EOS、_BOS和_PAD,這些額外字符在訓練模型的過程中能夠起到輔助作用,額外字符的具體作用如下。_UNK:用于替代處理樣本時出現(xiàn)的字典中沒有的字符、低頻詞或一些未遇到過的詞等。_EOS:endofsentence,解碼器端的句子結束標識符。_BOS:beginofsentence,解碼器端的句子起始標識符。_PAD:占位符,為了對齊填充占位,補全字符。模型的基本參數(shù)還包括了每次訓練數(shù)據(jù)樣本數(shù)、隱層神經元個數(shù)等,并將模型參數(shù)保存在checkpoint_path變量中的路徑下。模型構建1.參數(shù)設置某些機器學習和深度學習的程序常常需要進行大量的計算,需要消耗計算機中的大量運算資源,導致運行速度變慢,而如果將Python程序設置在GPU上運行,則可以提高運行速度。通過設置device參數(shù)值確定是否使用GPU,默認值為-1,即不使用GPU。如果選擇使用GPU,需要先獲得當前主機上GPU運算設備的列表,再限制TensorFlow僅使用指定的GPU。模型構建2.GPU設置在原始的多對多結構中,要求輸入序列與輸出序列等長,而現(xiàn)實中遇到的大部分情況為輸入序列與輸出序列不等長。在本案例中,聊天機器人的問題和回答往往沒有長度相等的關系。為了有效解決輸入序列與輸出序列不等長的問題,需要使用Seq2Seq模型(SequencetoSequenceModel,也稱Encoder-Decoder模型)搭建聊天機器人。(1)定義Encoder端聊天機器人實現(xiàn)過程常用的是LSTM算法,而GRU模型比標準的LSTM模型要簡單,也是非常流行的變體。GRU同樣還混合了細胞狀態(tài)

(信息傳輸?shù)穆窂剑┖碗[藏狀態(tài)以及一些其他的改動。GRU比LSTM雖然少了一個狀態(tài)輸出,因此在編碼使用時使用GRU可以讓代碼更為簡單一些。模型構建3.Seq2Seq模型(2)定義BahdanauAttentionEncoder-Decoder有一個缺陷,就是當輸入信息太長時,會丟失掉一些信息,而引入Attention機制就是為了解決這樣的問題。引入Attention模型的特點是Encoder不再將整個輸入序列編碼為固定長度的中間向量,而是編碼成一個向量的序列。這里選擇使用的是Bahdanau注意力機制。(3)定義Decoder端Encoder-Decoder模型中的Decoder又稱作解碼器。它的作用是求解數(shù)學問題,并轉化為現(xiàn)實世界的解決方案。定義Decoder端包括Embedding層、GRU模型和網絡層數(shù)的設置,還有使用引入的Attention機制等。(4)模型構建調用定義好的Encoder和Decoder,建立Encoder-Decoder模型。模型構建(1)優(yōu)化器優(yōu)化器可解決神經網絡中經常面對非凸函數(shù)的優(yōu)化問題。在神經網絡中經常會面對非凸函數(shù)的優(yōu)化問題,在平時經常會使用一些網絡的優(yōu)化方法成為優(yōu)化器。常見的優(yōu)化器有梯度下降法(SGD)和自適應梯度法(AdaGrad)等。AdaGrad就是將每一維各自的歷史梯度的平方疊加起來,然后在更新的時候除以該歷史梯度值即可。AdaGrad可以對低頻的參數(shù)做較大的更新,對高頻的做較小的更新,也因此,對于稀疏數(shù)據(jù)有較好的表現(xiàn),很好地提高了SGD的魯棒性。在聊天機器人模型計算圖搭建過程中,采用自適應梯度法(AdaGrad)進行模型優(yōu)化。模型構建4.優(yōu)化契合損失函數(shù)(2)損失函數(shù)損失函數(shù)是度量神經網絡輸出的預測值與實際值之間的差距的一種方式。在計算損失函數(shù)之前,需要先指定目標函數(shù),使用Keras中的SparseCategoricalCrossentropy函數(shù),即交叉熵損失函數(shù)。id向量填充的時候填補了大量的占位符_PAD以確保輸入id向量的長度一致,而這部分內容在計算損失函數(shù)時應不予與考慮,所以在計算損失函數(shù)的時候需要添加權重調整_PAD的對應位置都為0,不計算損失,其余語料id向量正文部分的對應權重數(shù)值為1。模型構建(3)模型保存當語料庫數(shù)量增加時,模型訓練速度將會變慢,而語料庫的數(shù)量和質量是聊天機器人中較為重要的組成部分,會對最后模型訓練的效果產生影響。為了讓模型能夠定期保存模型參數(shù)、數(shù)據(jù)等內容,實現(xiàn)下次訓練時能夠接著使用前面訓練好的部分繼續(xù)訓練,因此添加checkpoint文件保存模型。TensorFlow的Checkpoint機制將可追蹤變量以二進制的方式儲存成一個.ckpt文件,儲存變量的名稱及對應張量的值。在模型訓練完成后能將訓練好的參數(shù)(變量)保存起來。在需要使用模型的其他地方載入模型和參數(shù),就能直接得到訓練好的模型。模型構建模型訓練時,需要設置tf.GradientTape,即訓練步,作用是在eager模式下計算梯度,tf.GradientTape的出現(xiàn)是TensorFlow2中最大的變化之一。訓練步以一種簡潔優(yōu)雅的方式,為TensorFlow的即時執(zhí)行模式和圖執(zhí)行模式提供了統(tǒng)一的自動求導API。訓練步中通過訓練Encoder-Decoder模型得到的loss,再將其除以tgt_length,得到batch_loss。模型訓練1.設置訓練步2.訓練模型對模型進行循環(huán)訓練,epoch為訓練次數(shù),本案例中設置為501次。當循環(huán)中epoch次數(shù)能被100整除時,則將模型進行保存,保存在checkpoint_path的路徑下。每次循環(huán)中將每一步訓練的次數(shù)和損失函數(shù)值打印出來。對訓練后保存下來的聊天機器人模型進行測試,先讀取相關的文件并加載計算圖,再調用計算圖進行模型測試。(1)結果預測模型訓練結束后,可以通過輸入對話進行測試,觀察模型的效果。預測模型部分中需要先調用之前訓練好的模型,然后將需要預測的語句前后分別加上_BOS和_EOS,輸入變量則需通過TensorFlow中的keras.preprocessing.sequence.pad_sequences函數(shù)進行預處理操作。(2)調用Flask前端進行測試模型測試階段使用Flask前端進行人機交互,chat函數(shù)用于從輸入中返回聊天的應答結果,reply應答函數(shù)中返回的為一個jsonify函數(shù)。jsonify函數(shù)是用于處理序列化json數(shù)據(jù)的函數(shù),作用是將數(shù)據(jù)組裝成json格式返回。模型訓練

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論