看了crf相關的東西好幾天了,現在也過來總結總結。我本人喜歡以講故事的方式闡述一些東西,純理論總是很抽象,而且很容易讓人失去耐心。那就以「詞性標註」為切入點,去理解一下crf(conditional random field)條件隨機場的演算法原理(難免有不對或者不全的地方,持續更新)。
crf(conditional random field)條件隨機場模型是一種典型的判別式模型,它在觀測序列的基礎上對目標序列進行建模,重點解決「序列化標註問題」。言下之意,就是給定的輸出識別序列y和觀測序列x,通過定義條件概率p(y|x)來描述模型。
條件隨機場模型既具有判別式模型的優點,又具有產生式模型考慮到的上下文標記間的轉移概率。以序列化形式進行全域性引數優化和解碼的特點,解決了其他判別式模型難以避免的標記偏執問題。
可以用於「序列標記」、「資料分割」、「組塊分析」等自然語言處理任務。在「中文分詞」、「中文人名識別」、「歧義消除」等任務中表現很好。
首先,需要將分詞語料的標註符號轉化為用於命名實體序列標註的標記。
其次,確定特徵模板,一般採用當前位置的前後n個位置的字及其標記表示,即以當前位置的前後n個位置範圍內的子串及其標記作為觀察視窗(一般n取2~3)
然後,得到相應的特徵函式
最後,剩下的工作就是訓練crf模型的引數λ0
詞性標註,顧名思義,就是說一句話中**出各個片語的詞性(比如:動詞、名詞、形容詞、介詞等等)。
以一句話:「我們是中國人」為例,通過片語分割後的結果就是:「我們(n)/是(v)/中國人(n)」(這裡相當於是訓練資料,這樣的訓練資料假設我們有1000條)
假設我們的label有5個:(當然還有很多,這裡點到為止)
現在給出乙個特徵模板:以當前位置為起始,向後,以n=2為滑動視窗,即:當前詞和接下來的乙個詞為乙個特徵模板(假設我們類似的特徵模板有7個)
準備好了嗎?要開始解釋公式部分了,該部分請對照crf的公式。
其中,函式t()代表轉移函式,而函式s()代表狀態函式;j是模板序列號(一種模板有一種轉移特徵函式),k是標籤個數(乙個標籤有乙個狀態函式)
來說說什麼是「狀態函式」吧,狀態函式則表示在標註序列中第i個位置標記((以模板序列為段)某個label的概率。(第i個位置就有5個引數)
再來說說什麼是「轉移函式」吧,就是在標註序列中第i個位置是某個label到另乙個label的概率,這些概率都是基於統計頻數計算的。(第i個位置就有5*5個引數)
簡單理解函式宣告 以signal函式為例
signal 幾乎所有c語言程式的實現過程中都要用到signal函式,作為捕獲不同步的一種方式。我們使用者要呼叫signal函式,可以這樣使用,首先在標頭檔案中加入 include,然後我們可以這樣呼叫signal函式 signal signal type,sighandler t hander 這...
轉置卷積個人理解(以pytorch為例)
直觀理解就是卷積的反向操作,比如4 4的用3 3的卷積核卷積,s 1,p 0,得到2 2的大小,反卷積就是要使輸入2 2的輸出為4 4的。在pytorch使用 class torch.nn.convtranspose2d in channels,out channels,kernel size,st...
BTARN 接收訊息流以3A7為例
rnmimedecoder mime 預處理器 解碼器 對rnif2.0e服務內容及附件 如有 進行解密。對於rnif1.1,對負載末尾的八字節和分離的簽名頭進行處理。rndasm 拆裝器,基於xmldesimber 1 如果某個傳入文件含有 doctype 頭,則本元件根據該頭生成乙個命名空間,然...