LSTM+CRF Pytorch tutorial 之從原理到代碼 # 摸着石頭入門系列

Pytorch 給出的命名體識別(NER)的小例子,簡潔清晰,深入原理及實現細節,比較適合想深入學習又沒有好的入門途徑的同學。不過他過於簡潔,一些理論背景沒有介紹,對於咱們這些,在門口晃悠的渣渣掌握起來還是有點兒費勁。

所以,本文打算總結自己的學習過程,從原理到代碼,走一遍這個小例子,算是摸着石頭入門吧~

outline:

  • 這個模型的用途
  • 模型的結構
  • 幾個關鍵代碼的原理

1、模型用途

輸入是一句話,或者更嚴謹一點說是一個多個詞(單詞)組成的自然序列,然後這個模型其中的實體(比如人名,地名,組織機構名等)識別出來。

比如輸入:我愛北京

模型給出標記:O O B-LOC I-LOC

O 其他
O 其他
B-LOC 地點實體開始
I-LOC 地點實體內部

這裏只是拿地點實體舉個例子,實際應用中,可以標記出任何你想識別的東西,前提是,語料中已經有標記好的訓練數據。順便多說兩句,現在(2020年)NER方面最先進的模型都會結合預訓練模型,不過這個經典模型任然在其中扮演着一些角色。

2、模型的結構

上邊是兩個圖,左邊黑白圖,右邊彩色圖。

簡單來說,模型分爲三層,如黑白圖的大括號標出來的那樣:

詞向量輸入層

原始輸入的句子,屬於非結構化數據,需要變成結構化數據輸入模型。此處的變換方式是給每個字隨機編號,再利用pytorch自帶的Embedding 方法映射成 embedding_dim 維的向量。

0 [e_1, e_2, ..., e_n]
1 [e_1, e_2, ..., e_n]

2 [e_1, e_2, ..., e_n]
3 [e_1, e_2, ..., e_n]

實際中,會用預訓練好的詞向量表,每個輸入字的詞向量,從詞向量表中查詢得到。

Bi-LSTM 層

雙向LSTM層,主要用來提取輸入數據的特徵。因爲包括Pytorch在內的框架,已經完美封裝了,交給我們的只剩下弄清楚輸入、輸出,更具體點可能是,輸入、輸出的維度

能看見的大多博客、知乎裏,對這個結構的解釋就兩點:1、能編碼序列輸入的雙向信息;2、一堆三個門控制的公式。雖然用的一個比一個666,但是都沒有解釋清楚其中原理。

或許是像我一樣,功利性的放棄深入探尋,繼續追逐新的模型。

CRF 層

 

 

(先保存,後續繼續寫。。。2020-5-20)

(有想急於瞭解的部分,歡迎在評論裏留言~)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章