python语言特点多模型_利用CRF模型进行文本分类完整教程(Python语言)
簡介
世界上產生的文本數據量十分驚人:谷歌每秒處理超過40000次搜索!根據福布斯的報道,我們每分鐘要發送1600萬條短信,在臉譜網(Facebook)上發布51000條評論。對門外漢來說,光是掌握數據量的絕對大小就很難吧?
僅新聞網站和其他在線媒體每小時就會生成大量文本內容。如果沒有正確的工具,分析數據中的模式則令人望而生畏。在此我們將討論運用實體識別技術的條件隨機域 (Conditional Random Fields, CRF)方法。
本文解釋了自標注數據集上條件隨機域的概念及其python實現。這是一個非常有趣的概念,相信你會喜歡與我一起開啟這次旅行!
目錄
1. 什么是實體識別?
2. 案例研究的目的和理解不同的方法
3. 條件隨機域 (CRF)的構造
4. 標注訓練數據
利用GATE進行標注
5. 利用Python構建和訓練一個CRF模塊
什么是實體識別?
隨著人們對自然語言處理(NLP)的深入研究,實體識別技術得到了越來越多的運用。實體通常可以定義為數據科學家或業務感興趣的那部分文本,可以頻繁提取的實體有人名、地址、帳號、位置等。這些只是簡單的例子,我們可以根據手頭的問題定義自己的實體。
舉個簡單的實體識別的例子:如果數據集中有任何帶有“London”的文本,該算法將自動將其分類或分類為一個位置(你一定對我要做的事情有了大致的了解)。
讓我們通過一個簡單的案例研究來更好地理解這個課題。
案例研究的目的&理解不同方法
假設你是一家保險公司的分析團隊成員,理賠小組每天都會收到數千封客戶的索賠申請電子郵件。理賠操作小組在處理每封電子郵件之前都會查看每一封電子郵件,并用郵件中的詳細信息來更新一份在線表單。
現在要求你與IT團隊協作,實現在線表單填充自動化。針對這個任務,分析團隊需要構建一個定制的實體識別算法。
要識別文本中的實體,首先必須能夠識別模式。例如,如果我們需要識別索賠號,我們可以查看它周圍的單詞,如“my id is”或“my number is”等等。讓我們研究下面將要提到的識別模式的幾種方法。
1. 正則表達式:正則表達式(RegEx)是一種有限狀態自動器,它們能識別遵循某種結構的模式。例如,電子郵件ID、電話號碼等可以很好地利用RegEx來識別。但這種方法的缺點是,需要知道在索賠號之前可能出現的所有準確單詞。這不是一種學習方法,而是一種蠻力的方法。
2. 隱馬爾可夫模型(Hidden Markov Model, HMM):這是一種識別和學習模式的序列建模算法。雖然HMM在學習模式中考慮了實體周圍的未來觀察,但它假設特征之間是相互獨立的。這種方法比正則表達式更優,因為我們無需為單詞集精準建模。但就性能而言,它并不是最好的實體識別方法。
3. MaxEnt馬爾可夫模型(MEMM):這也是一種序列建模算法。這個算法無需假設特征是相互獨立的,也不用考慮未來的觀察學習模式。就性能而言,它也不是識別實體關系的最佳方法。
4. 條件隨機域 (CRF):這種序列建模算法不僅假設特征之間相互依賴,而且在學習模式時考慮未來的觀察。它結合了HMM和MEMM的優點。就性能而言,它被認為是解決實體識別問題的最佳方法。
構造條件隨機域 (CRF)
詞袋(BoW)方法適用于多個文本的分類問題,這種方法假定單詞的存在與否比單詞的順序更為重要。然而,詞袋(BoW)方法也存在一些問題,如實體識別、詞性(part of speech)識別中,單詞順序很重要。條件隨機域 (CRF)使用詞的序列,而不僅僅是詞的存在。
現在讓我們來了解CRF是如何構造的。
下面是CRF的公式,其中Y是隱藏狀態(例如,詞性的一部分),X是觀察到的變量(在我們的示例中,這是實體或它周圍的其他單詞)。
一般說來,CRF公式有兩個組成部分:
1. 歸一化:你可能已經注意到:方程的右邊沒有概率,但是有權值和特征。然而,預期的輸出是一個概率,因此需要歸一化。歸一化常數Z(X)是所有可能的狀態序列之和,使總數成為1。您可以在參考文獻中找到更多細節,從而了解我們是如何得出這個值的。
2. 權重和特征:該部分可視為具有權值和相應特征的Logistic回歸公式。權重估計采用最大似然估計,特征則由我們來定義。
標注訓練數據
在了解CRF模型之后,我們來管理訓練數據。第一步是標注。標注是對相應的單詞打標記的過程。為簡單起見,我們假設只需要將2個實體填充到在線表單里,即索賠人的名稱和索賠號。
以下是收到的電子郵件樣本。需要對這樣的電子郵件進行標注之后,才可以訓練CRF模型。標注之后的文本為XML格式。盡管你可以選擇用你自己的方式標注文檔,但我會告訴你如何使用GATE架構來做同樣的事情。
收到的電子郵件全文如下:
“Hi,
I am writing this email to claim my insurance amount. My id is abc123 and I claimed it on 1st January 2018. I did not receive any acknowledgement. Please help.
Thanks,
randomperson”
標注后的電子郵件全文如下:
“Hi, I am writing this email to claim my insurance amount. My id is abc123 and I claimed on 1st January 2018. I did not receive any acknowledgement. Please help. Thanks, randomperson”
使用GATE架構進行標注
讓我們了解如何使用文本工程的通用架構 (GATE)對文本進行標注。請按照以下步驟安裝GATE。執行下載的安裝程序,按照安裝步驟來安裝GATE平臺
安裝完成之后,運行應用程序可執行文件,如下所示:打開應用程序后,通過右鍵單擊“LanguageResources”>New>GateDocument,將電子郵件迭代加載到語言資源中,如下所示。給每個電子郵件命名,將編碼設置為“utf-8”,這樣在Python中就沒有問題了,通過單擊SourceUrl中的圖標瀏覽電子郵件,如下所示。
1. 一次打開一封電子郵件,開始標注練習。有兩種方式來構建標注釋
A.將標注后的XML加載到GATE中并使用它
b.在fly中創建標注并使用它們。在本文中,我們將演示這種方法。
2. 單擊“語言資源”中的電子郵件即可打開它。點擊“注釋集”,然后將光標放在選定的單詞上面,停頓幾秒鐘。彈出一個標注窗口,然后鍵入標注來代替“_NEW_”,按Enter鍵。這樣一個新的標注便創建好了。如下所示,重復以上操作,對每封電子郵件添加注釋。為所有訓練郵件都有添加好標注之后,通過導航到Language Resources>NEW>GATE Corpus創建一個易于使用的語料庫
給新語料庫取一個名字作為參考,點擊導航圖標,將每一封電子郵件添加到語言語料庫中,如下所示
通過右鍵單擊語料庫,并導航到“Inline XML(.xml)”,將語料庫保存為本地文件夾中的“Inline XML(.xml)”,如下所示:
在下一個彈出窗口中,選擇預填充的標注類型并刪除它們,手動鍵入標注內容代替預填充的標注。單擊“includeFeatures”選項,將其設定為假(False),并在“rootElement”框中鍵入“Document”。完成所有這些更改后,單擊“Save To”圖標,將文件保存到計算機上的文件夾中。以下截圖供參考。
上述過程將所有帶標注的電子郵件保存到一個文件夾中。
用Python構建和訓練CRF模塊首先下載pycrf模塊。PIP安裝的命令是“pip install python-crfsuite”, conda安裝的命令是“conda install -c conda-forge python-crfsuite”。
如果按照上述步驟無法安裝,請從win-64/python-crfsuite-0.9.2-py27_vc9_0.tar.bz2提取pycrfSuet和python_crfsuite-0.9.2-py2.7.egg-info文件,并將它們放在其他包所在的文件夾中。例如,如果使用Anaconda,那么可以把它們放在 anaconda>lib>site-packages文件夾中。
安裝完成之后,您就可以訓練和構建自己的CRF模塊了。讓我們開始吧!
首先定義和構建一些函數。
然后導入帶標注的訓練數據。
生成特征,這些是NER算法在nltk中使用的默認特性,可以對它進行修改定制。
好了,我們可以構建特征,并創建訓練和測試數據框架。
來測試一下模型。
還可以通過選擇相應的行號“i”來檢查任意預測值。
檢查一下模型的性能。
打印分類報告。可以在此模型的基礎上,構建更好的特征來提高性能。
現在,您已經了解到如何標注訓練數據,如何使用Python來訓練CRF模型,以及如何從新文本中識別實體。雖然該算法提供了一些基本的特征集,但是您也可以提出自己的一組特征來提高模型的準確性。
尾注
總結一下,這是我們在本文中討論的要點:實體是當前的業務問題感興趣的那一部分文本
在識別實體的過程中,單詞的序列或標記是識別實體模式的重要方法
雖然正則表達式、基于圖形的模型、隱馬爾可夫模型和最大熵馬爾可夫模型可以識別實體。然而,條件隨機場(CRF)是一種流行且可以更好地解決實體識別問題的方法
CRF是一種基于無向圖的模型,它考慮的詞不僅發生在實體之前,而且還可以在它之后
可以利用GATE架構對訓練數據進行標注
提供的Python代碼可以幫助訓練CRF模型并從文本中提取實體
總之,本文為您的業務問題提供一個良好的起點。
參考文獻
總結
以上是生活随笔為你收集整理的python语言特点多模型_利用CRF模型进行文本分类完整教程(Python语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习项目简历收集册-----机器学习
- 下一篇: 飞桨2.0 PaddleDetectio