實戰HMM-Viterbi角色標注地名識別

http://www.hankcs.com/nlp/ner/place-names-to-identify-actual-hmm-viterbi-role-labeling.html

命名實體識別(Named Entity Recognition)也是自然語言處理中的一個難關,特別是中文這樣沒有大小寫等固定形態的語言。上次介紹過《實戰HMM-Viterbi角色標注中國人名識別》,這次基于類似的原理,為HanLP實現中文地址地名(NS)的自動識別。

原理

訓練

對熟語料自動角色標注,統計單詞的角色頻次、角色的轉移概率等,訓練出一個模型,同時總結一些可用的模式串。

識別

根據上述模型,利用HMM-Viterbi算法標注陌生文本的粗分結果,利用Aho-Corasick算法模式匹配,匹配出可能的地址,將其送入第二層隱馬爾可夫模型中。

實戰

訓練

自動角色標注

基于層疊隱馬爾可夫模型的中文命名實體識別.pdf》中使用如下地名識別角色:

我在此基礎上拓充了CDE分別為三字地名的三個字位,H為中國地名的后綴,G為整個地址,這樣一般最多可以識別6字地名(CDE地名+三字后綴),比論文有所改進。

通過少量的代碼即可自動對熟語料進行角色標注,比如對于這一句人民日報2014切分語料中的句子:

1
王先東/nr?來自/v?湖北/ns?荊門/ns?,/w?在/p?佛山市/ns?[南海區/ns?大瀝鎮/ns]/nz?某/rz?物業公司/nis?做/v?保安/b

逐步處理得到

1
2
3
4
5
6
7
原始語料?[未##人/nr,?來自/v,?湖北/ns,?的/ude1,?荊門/ns,?,/w,?在/p,?烏魯木齊市/ns,?[南海區/ns?大瀝鎮/ns]/ns,?某/rz,?物業公司/nis,?做/v,?保安/b]
添加首尾?[始##始/S,?未##人/nr,?來自/v,?湖北/ns,?的/ude1,?荊門/ns,?,/w,?在/p,?烏魯木齊市/ns,?[南海區/ns?大瀝鎮/ns]/ns,?某/rz,?物業公司/nis,?做/v,?保安/b,?末##末/Z]
標注上文?[始##始/S,?未##人/nr,?來自/A,?湖北/ns,?的/A,?荊門/ns,?,/w,?在/A,?烏魯木齊市/ns,?[南海區/ns?大瀝鎮/ns]/ns,?某/rz,?物業公司/nis,?做/v,?保安/b,?末##末/Z]
標注下文?[始##始/S,?未##人/nr,?來自/A,?湖北/ns,?的/B,?荊門/ns,?,/B,?在/A,?烏魯木齊市/ns,?[南海區/ns?大瀝鎮/ns]/ns,?某/B,?物業公司/nis,?做/v,?保安/b,?末##末/Z]
標注中間?[始##始/S,?未##人/nr,?來自/A,?湖北/ns,?的/X,?荊門/ns,?,/B,?在/A,?烏魯木齊市/ns,?[南海區/ns?大瀝鎮/ns]/ns,?某/B,?物業公司/nis,?做/v,?保安/b,?末##末/Z]
拆分地名?[始##始/S,?未##人/nr,?來自/A,?湖北/ns,?的/X,?荊門/ns,?,/B,?在/A,?烏魯木齊市/ns,?南海區/ns,?大瀝鎮/ns,?某/B,?物業公司/nis,?做/v,?保安/b,?末##末/Z]
處理整個?[始##始/S,?未##人/Z,?來自/A,?湖北/G,?的/X,?荊/C,?門/H,?,/B,?在/A,?烏魯木齊/G,?市/H,?南/C,?海/D,?區/H,?大/C,?瀝/D,?鎮/H,?某/B,?物業公司/Z,?做/Z,?保安/Z,?末##末/Z]

統計詞頻

在對所有熟語料句子執行自動標注后,即可統計每一個非Z詞語的詞頻,得到一個角色詞典:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
位于?A?1660?X?93?B?33
位列?B?17?A?13?X?1
位居?B?25?A?14?X?1
位次?B?1
位置?B?5?A?1
低?B?9
低于?A?18?B?2
低產田?B?1
低價?B?1
低估?A?5
低保?B?3
低保戶?B?3
低效?B?1
低溫?B?3
低熱值?B?1
低碳?B?27
低空?B?2
低調?B?5
低速?B?3
低階煤?B?1
住?A?81?B?53
住友?B?1
住在?A?271?B?1

統計轉移矩陣

轉移矩陣指的是從一個角色標簽轉移到另一個角色的頻次,利用它和角色詞頻可以計算出HMM中的初始概率、轉移概率、發射概率,進而完成求解。關于維特比算法和實現請參考《通用維特比算法的Java實現》。

這里對人民日報2014切分語料訓練出如下轉移矩陣:

?

?

識別

例子

以“南翔向寧夏固原市彭陽縣紅河鎮黑牛溝村捐贈了挖掘機”為例,不進行地名識別時,會得出下列輸出:

1
[南翔/ns,?向/p,?寧夏/ns,?固原市/ns,?彭/nz,?陽/ag,?縣/n,?紅/a,?河鎮/ns,?黑/a,?牛/n,?溝/n,?村/n,?捐贈/v,?了/ule,?挖掘機/n]

上例中“寧夏”“固原市”等屬于常用地名,因此被收錄到核心詞典中,此處表現出正確的分詞結果。但是像“彭陽縣”“紅河鎮”“黑牛溝村”等地名屬于非常小的地方,沒有被詞典收錄,自然也沒法得出正確的分詞結果。

角色標注

1
2
地名角色觀察:[??Z?41339414?][南翔?H?1000?][向?A?1076?B?115?X?70?C?49?D?5?][寧夏?H?1000?][固原市?H?1000?][彭?C?85?][陽?D?1255?C?81?B?1?][縣?H?6878?B?25?A?23?D?19?X?3?C?2?][紅?C?1000?B?46?A?3?][河鎮?H?1000?][黑?C?960?B?25?][牛?D?24?C?8?B?7?][溝?H?107?D?90?E?36?C?27?B?14?A?3?][村?H?4467?D?68?B?28?A?8?C?3?][捐贈?B?10?A?1?][了?A?4115?B?97?][挖掘機?B?1?][??Z?41339414?]
地名角色標注:[?/Z?,南翔/H?,向/B?,寧夏/H?,固原市/H?,彭/C?,陽/D?,縣/H?,紅/C?,河鎮/H?,黑/C?,牛/D?,溝/E?,村/H?,捐贈/B?,了/A?,挖掘機/B?,?/Z]

模式匹配

利用Aho-Corasick算法模式匹配如下模式串:

1
2
3
4
????????CH
????????CDH
????????CDEH
????????GH

得到如下地名:

1
2
3
識別出地名:彭陽縣?CDH
識別出地名:紅河鎮?CH
識別出地名:黑牛溝村?CDEH

第二層隱馬模型細分

其實這應該算是第三層隱馬模型,因為地名識別中也用到了一次HMM,并且那次的輸出是這次的輸入。細分之后得出最終的結果:

1
[南翔/ns,?向/p,?寧夏/ns,?固原市/ns,?彭陽縣/ns,?紅河鎮/ns,?黑牛溝村/ns,?捐贈/v,?了/ule,?挖掘機/n]

總結

HMM模型可以解決很多問題,將多個HMM模型層疊起來,可以發揮出更加精準的效果。

不過2元文法依然會有誤命中的情況,事實上,一些高頻地名已經收錄到核心詞典和用戶自定義詞典中。所以HanLP的默認配置關閉了地名識別,僅僅在一些極端情況下(專門提取縣級地址)交由用戶打開。

目錄

  • 原理
  • 訓練
  • 識別
  • 實戰
  • 訓練
  • 自動角色標注
  • 統計詞頻
  • 統計轉移矩陣
  • 識別
  • 角色標注
  • 模式匹配
  • 第二層隱馬模型細分
  • 總結

轉載請注明:碼農場???實戰HMM-Viterbi角色標注地名識別

轉載于:https://www.cnblogs.com/DjangoBlog/p/4224606.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386256.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386256.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386256.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

看完99%的人都學會了!9次Android面試經驗總結,我先收藏為敬

我們都是被圈養的人? 我的朋友程序員K,說他在電力行業的一家軟件公司做了八年Android開發,用到的各種技術,數據庫,網絡請求,事件傳遞,響應框架都很熟悉,甚至JNI/NDK/Framework&…

從外包公司到今日頭條offer,含BATJM大廠

前言 最近有不少人問我這樣一個問題:「我剛接觸編程,準備學習下Android開發,但是擔心現在市場飽和了,Android開發的前景怎么樣?」 想著可能有很多人都有這樣的擔心,于是就趕緊寫篇文章,來跟你…

PTA -- A1046 Shortest Distance

題意及思路 題意:有N個節點(1至N),求給定的st號到en號的距離最小值,這些點構成一個環,即1->2 ... ->N ->1。 思路:第一步,預處理操作,以dis[ i ] 表示&#xff…

從外包公司到今日頭條offer,聰明人已經收藏了!

開頭 讓我們一起來看看,字節跳動的第三面,面試官都問了什么?(第一二面的題目及答案已整理,需要的可以在文末領取) 從七月中旬開始,我前前后后差不多一共投遞了八十份簡歷,到目前為…

程序從高版本降到2.0,數據集報錯 TypedTableBase

錯誤 命名空間“System.Data”中不存在類型或命名空間名稱“TypedTableBase”(是缺少程序集引用嗎?) 解決&#xff1a; 該錯誤出現在自動生成的XXX.Designer.cs里。 .NET 3.5 : public partial class T_OPERATOR_WLDataTable : global::System.Data.TypedTableBase<T_OPER…

從外包月薪5K到阿里月薪15K,原理+實戰+視頻+源碼

前言 轉眼間&#xff0c;2020 年已過去一大半了&#xff0c;2020 年很難&#xff0c;各企業裁員的消息蠻多的&#xff0c;降職&#xff0c;不發年終獎等等。2020 年確實是艱難的一年。然而生活總是要繼續&#xff0c;時間不給你喪的機會&#xff01;如果我們能堅持下來&#x…

C#編寫的發送手機短信的類庫 C#開發短信的方法和簡介 短信編程實例

發送手機短信源代碼(針對國內短信編碼) / ///文 件&#xff1a;PDUdecoding.cs ///概 要&#xff1a;針對國內短信編碼&#xff08;USC2&#xff09; ///組成結構&#xff1a;包含四個函數&#xff1a; /// smsDecodedCenterNumber(string srvCenterNumber) …

從新手到Flutter架構師,一篇就夠!吐血整理

在開始回答前&#xff0c;先簡單概括性地說說Linux現有的所有進程間IPC方式&#xff1a; 1. **管道&#xff1a;**在創建時分配一個page大小的內存&#xff0c;緩存區大小比較有限&#xff1b; 2. 消息隊列&#xff1a;信息復制兩次&#xff0c;額外的CPU消耗&#xff1b;不合…

小程序自定義組件中observer函數的應用

<!-- 單個數據監聽 --> <view>白菜</view> <view>價格&#xff1a;{{price}}</view> <!-- bindinput輸入時觸發方法 --> <view>數量&#xff1a; <input type"number" bindinputchangee value"{{num1}}">…

從新手到Flutter架構師,一篇就夠!學習路線+知識點梳理

前言 IT行業薪水高&#xff0c;這是眾所周知的&#xff0c;所以很多人大學都選擇IT相關專業&#xff0c;即使非該專業的人&#xff0c;畢業了也想去一個培訓機構鍍鍍金&#xff0c;進入這一行業。 但是有關這個行業35歲就退休的說法&#xff0c;也一直盛傳。 加上這幾年不斷…

Es6常用方法filter

1. filter針對數組起過濾作用篩選出符合條件的一個或多個元素 lvar newarr [ { num: 1, val: ceshi, flag: aa }, { num: 2, val: ww } ] console.log(newarr.filter(item > item.num2 )) // [{num:2,val:ww}] 2 .filter 自動多慮數組中 空字符串、undefined、null var …

從新手到Flutter架構師,一篇就夠!幫你突破瓶頸

前言 馬上快到金三銀四都春招階段了&#xff0c;在這本就是跳槽、找工作的年后黃金時間&#xff0c;大多數求職者都早早做好年后求職的準備&#xff0c;其中不乏有年前早早辭了工作準備年后跳槽的有經驗的職場老人們&#xff0c;也有一批即將畢業的應屆畢業生的職場新人們。 …

從新手到Flutter架構師,一篇就夠!附贈課程+題庫

導語 Android 音視頻開發這塊目前的確沒有比較系統的教程或者書籍&#xff0c;網上的博客文章也都是比較零散的。只能通過一點點的學習和積累把這塊的知識串聯積累起來。 音視頻的開發&#xff0c;往往是比較難的&#xff0c;而這個比較難的技術就是NDK里面的技術。音視頻/高…

微信小程序之視圖容器(swiper)組件創建輪播圖

一、視圖容器&#xff08;Swiper&#xff09; 1、swiper&#xff1a;滑塊視圖容器 微信官方文檔&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html 二、swiper應用 1、頁面邏輯&#xff08;index.js&#xff09; Page({data: {imgUrls: [{l…

從草根到百萬年薪程序員的十年風雨之路,使用指南

前言 文章篇幅較長&#xff0c;建議耐心食用&#xff0c;相信對你有幫助。碼字不易&#xff0c;如果有誤&#xff0c;歡迎指出。 前部分是面試經歷&#xff0c;后部分是附帶的問題筆記/推薦回答/書籍。 我的微信小號有一組特殊的朋友。他們從 CSDN上看到我之前發布的《從阿里到…

修復png bug的腳本

代碼 //IE5.5 PNG Alpha Fix v2.0 Alpha: Background Tiling Support//(c) 2008 Angus Turnbull http://www.twinhelix.com//This is licensed under the GNU LGPL, version 2.1 or later.//For details, see: http://creativecommons.org/licenses/LGPL/2.1/varIEPNGFix windo…

從草根到百萬年薪程序員的十年風雨之路,吊打面試官系列!

開頭 大家好&#xff0c;我是G哥&#xff0c;目前人在荊州辦事&#xff0c;但是干貨還是要安排上&#xff01; 國外有一個爆火的開發人員學習路線&#xff0c;目前已經在 Github收獲了 131 k star&#xff0c;Star 數量在 Github 所有倉庫中排名第 9 。這個倉庫有多火就不用說…

Android View系列(二):事件分發機制源碼解析

概述 在介紹點擊事件規則之前&#xff0c;我們需要知道我們分析的是MotionEvent&#xff0c;即點擊事件&#xff0c;所謂的事件分發就是對MotionEvent事件的分發過程&#xff0c;即當一個MotionEvent生成以后&#xff0c;系統需要把這個事件傳遞給具體的View&#xff0c;而這個…

從零開始系統化學Android,值得收藏!

前言 每年的3、4月份是各大企業為明年拓展業務大量吸納人才的關鍵時期&#xff0c;招聘需求集中、空缺崗位多&#xff0c;用人單位也習慣在初秋進行大規模招聘。 金九銀十&#xff0c;招聘旺季&#xff0c;也是一個求職旺季。 不打無準備的仗&#xff0c;在這種關鍵時期&…

[轉]清華夢的粉碎——寫給清華大學的退學申請

[轉]清華夢的粉碎——寫給清華大學的退學申請 讀了全文&#xff0c;感同身受&#xff0c;全文轉載。 By 王垠&#xff08;2005.09.22&#xff09; 作者王垠&#xff0c;非常有思想的一個人&#xff0c;川大計算機系97級本科&#xff0c;2001年畢業后直博保送清華大學計算機系&a…