1. 程式人生 > >用深度學習做命名實體識別(七)-CRF介紹

用深度學習做命名實體識別(七)-CRF介紹

還記得之前介紹過的命名實體識別系列文章嗎,可以從句子中提取出人名、地址、公司等實體欄位,當時只是簡單提到了BERT+CRF模型,BERT已經在上一篇文章中介紹過了,本文將對CRF做一個基本的介紹。本文儘可能不涉及複雜晦澀的數學公式,目的只是快速瞭解CRF的基本概念以及其在命名實體識別等自然語言處理領域的作用。

什麼是CRF?

CRF,全稱 Conditional Random Fields,中文名:條件隨機場。是給定一組輸入序列的條件下,另一組輸出序列的條件概率分佈模型。

什麼時候可以用CRF?

當輸出序列的每一個位置的狀態,需要考慮到相鄰位置的狀態的時候。舉兩個例子:
1、假設有一堆小明日常生活的照片,可能的狀態有吃飯、洗澡、刷牙等,大部分情況,我們是能夠識別出小明的狀態的,但是如果你看到一張小明露出牙齒的照片,在沒有相鄰的小明的狀態為條件的情況下,是很難判斷他是在吃飯還是刷牙的。這時,就可以用crf。
2、假設有一句話,這裡假設是英文,我們要判斷每個詞的詞性,那麼對於一些詞來說,如果不知道相鄰詞的詞性的情況下,是很難準確判斷每個詞的詞性的。這時,也可以用crf。

什麼是隨機場?

我們先來說什麼是隨機場。
The collection of random variables is called a stochastic process.A stochastic process that is indexed by a spatial variable is called a random field.
隨機變數的集合稱為隨機過程。由一個空間變數索引的隨機過程,稱為隨機場。
也就是說,一組隨機變數按照某種概率分佈隨機賦值到某個空間的一組位置上時,這些賦予了隨機變數的位置就是一個隨機場。比如上面的例子中,小明的一系列照片分別是什麼狀態組成了一組位置,我們從一組隨機變數{吃飯、洗澡、刷牙}中取值,隨機變數遵循某種概率分佈,隨機賦給一組照片的某一張的輸出位置,並完成這組照片的所有輸出位置的狀態賦值後,這些狀態和所在的位置全體稱為隨機場。

為什麼叫條件隨機場?

回答這個問題需要先來看看什麼是馬爾可夫隨機場,如果一個位置的賦值只和與它相鄰的位置的值有關,與和它不相鄰的位置的值無關,那麼這個隨機場就是一個馬爾可夫隨機場。這個假設用在小明和詞性標註的例子中都是合適的,因為我們通過前一張照片就可以判斷當前露牙的照片是刷牙還是吃飯,根據前一個詞的詞性就可以判斷當前詞的詞性是否符合語法。
馬爾可夫模型是根據隱含變數(詞性)生成可觀測狀態(詞),而條件隨機場是根據觀測狀態(詞)判別隱含變數(詞性)。或者說條件隨機場是給定了觀測狀態(輸入序列)集合這個先驗條件的馬爾科夫隨機場。上面例子中的給定的小明照片,給定的英文句子,這些都是隨機場的先驗條件。

CRF的數學描述   

設X與Y是隨機變數,P(Y|X)是給定X時Y的條件概率分佈,若隨機變數Y構成的是一個馬爾科夫隨機場,則稱條件概率分佈P(Y|X)是條件隨機場。在實際的應用中,比如上面的兩個例子,我們一般都要求X和Y有相同的結構,如下:
X=(X1,X2,...Xn),Y=(Y1,Y2,...Yn)
比如詞性標註,我們要求輸出的詞性序列和輸入的句子中的每個詞是一一對應的。
X和Y有相同的結構的CRF就構成了線性鏈條件隨機場(Linear chain Conditional Random Fields,簡稱 linear-CRF)。
上面的例子中沒有提到命名實體識別,但其實命名實體識別的原理和上面的例子是一樣的,也是用到了linear-CRF,後面會提到。

CRF如何提取特徵?

CRF中有兩類特徵函式,分別是狀態特徵和轉移特徵,狀態特徵用當前節點(某個輸出位置可能的狀態中的某個狀態稱為一個節點)的狀態分數表示,轉移特徵用上一個節點到當前節點的轉移分數表示。其損失函式定義如下:

CRF損失函式的計算,需要用到真實路徑分數(包括狀態分數和轉移分數),其他所有可能的路徑的分數(包括狀態分數和轉移分數)。這裡的路徑用詞性來舉例就是一句話對應的詞性序列,真實路徑表示真實的詞性序列,其他可能的路徑表示其他的詞性序列。
這裡的分數就是指softmax之前的概率,或稱為未規範化的概率。softmax的作用就是將一組數值轉換成一組0-1之間的數值,這些數值的和為1,這樣就可以表示概率了。

對於詞性標註來說,給定一句話和其對應的詞性序列,那麼其似然性的計算公式(CRF的引數化公式)如下,圖片出自條件隨機場CRF:

  • l表示某個詞上定義的狀態特徵的個數,k表示轉移特徵的個數,i表示詞在句子中的位置。
  • tk和sl分別是轉移特徵函式和狀態特徵函式。
  • λk和μl分別是轉移特徵函式和狀態特徵函式的權重係數,通過最大似然估計可以得到。
  • 上面提到的狀態分數和轉移分數都是非規範化的對數概率,所以概率計算都是加法,這裡加上一個exp是為了將對數概率轉為正常概率。實際計算時還會除以一個規範化因子Z(x),其實就是一個softmax過程。

在只有CRF的情況下,上面說的2類特徵函式都是人工設定好的。通俗的說就是人工設定了觀測序列的特徵。
人為設定狀態特徵模板,比如設定“某個詞是名詞”等。
人為設定轉移特徵模板,比如設定“某個詞是名詞時,上一個詞是形容詞”等。
給定一句話的時候,就根據上面設定的特徵模板來計算這句話的特徵分數,計算的時候,如果這句話符合特徵模板中的特徵規則,則那個特徵規則的值就為1,否則就為0。
實體識別的表現取決於2種特徵模板設定的好壞。
所以如果我們能使用深度神經網路的方式,特徵就可以由模型自己學習得到,這就是使用BERT+CRF的原因。

命名實體識別中的BERT和CRF是怎麼配合的?

由BERT學習序列的狀態特徵,從而得到一個狀態分數,該分數直接輸入到CRF層,省去了人工設定狀態特徵模板。
這裡的狀態特徵是說序列某個位置可能對應的狀態(命名實體識別中是指實體標註),
狀態分數是每個可能的狀態的softmax前的概率(又稱非規範化概率,或者直接稱作分數),
實體標註通常用BIO標註,B表示詞的開始,I表示詞的延續,O表示非實體詞,比如下面的句子和其對應的實體標註(假設我們要識別的是人名和地點):
小 明 愛 北 京 的 天 安 門 。
B-Person I-Person O B-Location I-Location O B-Location I-Location I-Location O

也就是說BERT層學到了句子中每個字元最可能對應的實體標註是什麼,這個過程是考慮到了每個字元左邊和右邊的上下文資訊的,但是輸出的最大分數對應的實體標註依然可能有誤,不會100%正確的,出現B後面直接跟著B,後者標註以I開頭了,都是有可能的,而降低這些明顯不符規則的問題的情況的發生概率,就可以進一步提高BERT模型預測的準確性。此時就有人想到用CRF來解決這個問題。

CRF演算法中涉及到2種特徵函式,一個是狀態特徵函式,計算狀態分數,一個是轉移特徵函式,計算轉移分數。前者只針對當前位置的字元可以被轉換成哪些實體標註,後者關注的是當前位置和其相鄰位置的字元可以有哪些實體標註的組合。BERT層已經將狀態分數輸出到CRF層了,所以CRF層還需要學習一個轉移分數矩陣,該矩陣表示了所有標註狀態之間的組合,比如我們這裡有B-Person I-Person B-Location I-Location O 共5種狀態,有時候還會在句子的開始和結束各加一個START 和 END標註,表示一個句子的開始和結束,那麼此時就是7種狀態了,那麼2個狀態(包括自己和自己)之間的組合就有7*7=49種,上面說的轉移分數矩陣中的元素就是這49種組合的分數(或稱作非規範化概率),表示了各個組合的可能性。這個矩陣一開始是隨機初始化的,通過訓練後慢慢會知道哪些組合更符合規則,哪些更不符合規則。從而為模型的預測帶來類似如下的約束:

  • 句子的開頭應該是“B-”或“O”,而不是“I-”。
  • “B-label1 I-label2 I-label3…”,在該模式中,類別1,2,3應該是同一種實體類別。比如,“B-Person I-Person” 是正確的,而“B-Person I-Organization”則是錯誤的。
  • “O I-label”是錯誤的,命名實體的開頭應該是“B-”而不是“I-”。

矩陣示意如下:

為什麼不能通過人工來判斷標註規則並編寫好修正邏輯呢?
因為人工雖然能判斷出預測的標註前後關係是否符合規則,但是無法知道如何對不符合規則的預測進行調整,比如我們知道句子的開頭應該是“B-”或“O”,而不是“I-”,但是究竟是B-還是O呢?而且對於標註狀態非常多的場景下,人工編寫的工作量和邏輯是非常大且複雜的。

CRF損失函式的計算,需要用到真實路徑分數(包括狀態分數和轉移分數),其他所有可能的路徑的分數(包括狀態分數和轉移分數)。其中真實路徑的狀態分數是根據訓練得到的BERT模型的輸出計算出來的,轉移分數是從CRF層提供的轉移分數矩陣得到的。其他路徑的狀態分數和轉移分數其實也是這樣計算的。

最後我們來看下真實路徑的計算原理,其實是使用了維特比演算法。

維特比演算法

概念:用相鄰兩個層的最優路徑來組成最終從起始層到結束層的最優路徑。最優路徑是指從上一層的各個節點到達當前層的某個節點的所有路徑中,概率最大 or 距離最短(或者其他理由,具體自行定義) 的路徑。
核心理念:從上一層的各個節點到達當前層的某個節點的路徑的概率最大,則該節點一定在最大路徑上。因為後續再計算狀態轉移的時候,該節點到下一個某狀態節點(或稱為目標節點)的概率一定也是大於其他節點到下一個某狀態節點的概率的,至於會到哪一個目標節點,只取決於當前節點到目標節點的轉移分數以及目標節點的狀態分數,但無論到哪個節點,當前節點在最優路徑上這個判斷是毋庸置疑的了。如下圖:


H,F之間的轉移概率是固定的,包括H->H和F->F,都來自於轉移分數矩陣,比如上圖藍色框中的0.084 * 0.3 * 0.6是來自H0.084節點,該節點是上一層計算得到的最大概率的路徑上的節點,你可能會想,如果這一層計算H->F的概率比F->F的概率小怎麼辦,維特比演算法是不是就不是全域性最優解了?其實這一層計算H->F的概率比F->F的概率小的情況不會出現,我們來看這一層(藍色框)兩個狀態轉移概率的計算:

  • H->F 0.084 * 0.3 * 0.6
  • F->F 0.027 * 0.6 * 0.6
    由於最後一個數字表示到最後一層F節點的狀態分數,所以都是0.6,那麼比較的時候可以不考慮,於是得到下面的計算式子:
  • 0.084 * 0.3 第一個數字是上一層求出的分數,這個分數是所有路徑中的最大值,這個最大值的計算:0.084=0.3 * 0.3 * 0.3
  • 0.027 * 0.6 第一個數字是上一層求出的分數,這個分數的計算:0.027=0.04 * 0.6 * 0.3
    根據上面的邏輯,得到下面的式子:
  • 0.084 * 0.3 = 0.3 * 0.3 * 0.3 * 0.3
  • 0.027 * 0.6 = 0.04 * 0.6 * 0.3 * 0.6

這裡的第一項的0.3和0.04分別表示上一層的H和F節點的狀態分數,我們分別設為a和b,現在已知a * 0.3 * 0.3=0.084,b * 0.6 * 0.3=0.027,0.084>0.027,所以後面再來一次轉移,也就是0.084 * 0.3也一定是大於0.027 * 0.6的,如果還有更多層的話,後面的計算還是一個乘以0.3,一個乘以0.6嗎,當然是的,因為0.3是H轉移到F的轉移概率,0.6是F轉移到F的轉移概率,這個轉移概率是固定的。

所以當前層狀態分數最大的節點,一定在最優路徑上,以此遞推到最後一層後,反過來追溯每次記錄下來的概率最大的節點,就可以得到一條最優的路徑了。
上圖的最優路徑是:Start-H-H-F

總結

命名實體識別中,BERT負責學習輸入句子中每個字和符號到對應的實體標籤的規律,而CRF負責學習相鄰實體標籤之間的轉移規則。

ok,本篇就這麼多內容啦~,感謝閱讀O(∩_∩)O。

相關推薦

深度學習命名實體識別()-CRF介紹

還記得之前介紹過的命名實體識別系列文章嗎,可以從句子中提取出人名、地址、公司等實體欄位,當時只是簡單提到了BERT+CRF模型,BERT已經在上一篇文章中介紹過了,本文將對CRF做一個基本的介紹。本文儘可能不涉及複雜晦澀的數學公式,目的只是快速瞭解CRF的基本概念以及其在命名實體識別等自然語言處理領域的作用

深度學習命名實體識別(六)-BERT介紹

什麼是BERT? BERT,全稱是Bidirectional Encoder Representations from Transformers。可以理解為一種以Transformers為主要框架的雙向編碼表徵模型。所以要想理解BERT的原理,還需要先理解什麼是Transformers。 Transforme

深度學習命名實體識別(一):文字資料標註

“ 本文是用深度學習做命名實體識別系列的第一篇,通過本文,你將瞭解如何用brat做文字資料標註。” 一、 什麼是命名實體識別?  從一句話中識別出人名,地名,組織名,日期時間,這就是命名實體識別的一個例子,而人名,地名等這些被識別的目標就是命名實體。當然命名實體還可以是很多其它有

深度學習命名實體識別(三):文字資料標註過程

上一篇文章,我們介紹了brat的安裝和配置,當成功安裝和配置好了brat,我們就可以進行文字標註了。 首先,在brat專案的data目錄下新建一個project目錄,然後在brat專案的主目錄下找到以下檔案,複製到project目錄: 主目錄:/var/www/html/brat project目

深度學習命名實體識別(四)——模型訓練

通過本文你將瞭解如何訓練一個人名、地址、組織、公司、產品、時間,共6個實體的命名實體識別模型。 準備訓練樣本 下面的連結中提供了已經用brat標註好的資料檔案以及brat的配置檔案,因為標註內容較多放到brat里加載會比較慢,所以拆分成了10份,每份包括3000多條樣本資料,將這10份檔案和相應的配置檔案

基於深度學習命名實體識別

note 深度學習 以及 效果 數據集 pre 之前 得到 高達 基於CRF做命名實體識別系列 用CRF做命名實體識別(一) 用CRF做命名實體識別(二) 用CRF做命名實體識別(三) 摘要 1. 之前用CRF做了命名實體識別,效果還可以,最高達到0.9293,當然這是自己

NLP入門(五)深度學習實現命名實體識別(NER)

前言   在文章:NLP入門(四)命名實體識別(NER)中,筆者介紹了兩個實現命名實體識別的工具——NLTK和Stanford NLP。在本文中,我們將會學習到如何使用深度學習工具來自己一步步地實現NER,只要你堅持看完,就一定會很有收穫的。   OK,話不多說,讓我們進入正題。   幾乎所有的NLP都依賴一

一文詳解深度學習命名實體識別(NER)中的應用

近幾年來,基於神經網路的深度學習方法在計算機視覺、語音識別等領域取得了巨大成功,另外在自然語言處理領域也取得了不少進展。在NLP的關鍵性基礎任務—命名實體識別(Named Entity Recognition,NER)的研究中,深度學習也獲得了不錯的效果。最近,筆者閱讀了一系列基於深度學習的NE

手把手教你深度學習物體檢測(五):YOLOv1介紹

之前寫物體檢測系列文章的時候說過,關於YOLO演算法,會在後續的文章中介紹,然而,由於YOLO歷經3個版本,其論文也有3篇,想全面的講述清楚還是太難了,本週終於能夠抽出時間寫一些YOLO演算法相關的東西。本篇文章,我會先帶大家完整的過一遍YOLOv1的論文,理解了YOLOv1才能更好的理解它的後續版本,YO

CRF命名實體識別

裏的 以及 命名 語料庫 images AD 之前 .dll alt 摘要 本文主要講述了關於人民日報標註語料的預處理,利用CRF++工具包對模型進行訓練以及測試 目錄 明確我們的標註任務 語料和工具 數據預處理 1.數據說明 2.數據預處理 模型訓練及測試 1.流程 2

手把手教你深度學習物體檢測():YOLOv3介紹

YOLOv3 論文:《 YOLOv3: An Incremental Improvement 》 地址: https://arxiv.org/pdf/1804.02767.pdfyolov3 相比之前版本的改進 網路的特徵提取部分 由 Darknet-19改成了&n

深度學習球星顏值打分完整案例(一)

已經上傳了完整的程式碼和資料,資料比較少,大家可以幫忙補充。專案地址(記得給個start):https://github.com/jimenbian/face_rank先來說一下專案的背景,這次做的是一個最基礎的影象識別案例,通過訓練一個模型來給NBA球星的顏值打分,嗯,樓主

關於深度學習answer selection的論文

最近做question-answering系統,看了幾篇相關的論文,涉及到用CNN、LSTM、RNN、Attention等演算法,這裡做個記錄。 1 Attention-Based Convolutional Neural Network for Modeli

手把手教你深度學習物體檢測(二):資料標註

  “本篇文章將開始我們訓練自己的物體檢測模型之旅的第一步—— 資料標註。”   上篇文章介紹瞭如何基於訓練好的模型檢測圖片和視訊中的物體,若你也想先感受一下物體檢測,可以看看上篇文章:《手把手教你用深度學習做物體檢測(一):快速感受物體檢測的酷炫 》。   其實,網上關於資料標註的文章已有很多,但

手把手教你深度學習物體檢測(三):模型訓練

本篇文章旨在快速試驗使用yolov3演算法訓練出自己的物體檢測模型,所以會重過程而輕原理,當然,原理是非常重要的,只是原理會安排在後續文章中專門進行介紹。所以如果本文中有些地方你有原理方面的疑惑,也沒關係,可以自行網上搜索相關資料,也可以先留著問題,相信你會在後續文章中找到答案。    

手把手教你深度學習物體檢測(四):模型使用

上一篇《手把手教你用深度學習做物體檢測(三):模型訓練》中介紹瞭如何使用yolov3訓練我們自己的物體檢測模型,本篇文章將重點介紹如何使用我們訓練好的模型來檢測圖片或視訊中的物體。   如果你看過了上一篇文章,那麼就知道我們用的是 AlexeyAB/darknet專案,該專案雖然提供了物體檢測的

深度學習keras的cnn影象識別分類,準確率達97%

Keras是一個簡約,高度模組化的神經網路庫。可以很容易和快速實現原型(通過總模組化,極簡主義,和可擴充套件性)同時支援卷積網路(vision)和複發性的網路(序列資料)。以及兩者的組合。無縫地執行在CPU和GPU上。keras的資源庫網址為https://github.co

深度神經網路處理NER命名實體識別問題

本文結構: 什麼是命名實體識別(NER) 怎麼識別? cs224d Day 7: 專案2-用DNN處理NER問題 課程專案描述地址 什麼是NER? 命名實體識別(NER)是指識別文字中具有特定意義的實體,主要包括人名、地名、機構名、專有

【論文筆記】《基於深度學習的中文命名實體識別研究》閱讀筆記

作者及其單位:北京郵電大學,張俊遙,2019年6月,碩士論文 摘要 實驗資料:來源於網路公開的新聞文字資料;用隨機欠取樣和過取樣的方法解決分類不均衡問題;使用BIO格式的標籤識別5類命名實體,標註11種標籤。 學習模型:基於RNN-CRF框架,提出Bi-GRU-Attention模型;基於改進的ELMo可