貝葉斯推斷應用:基於中文分詞識別一串文本是否爲地址的思路

場景說明

經過hanlp中文分詞庫,能夠對輸入分詞獲得分詞結果集,例如對「深圳市南山區軟件產業基地」,會獲得如下結果html

[深圳市/ns, 南山區/ns, 軟件/n, 產業/n, 基地/n]
複製代碼

天然其餘輸入也會有對應的分詞結果集git

在針對地址識別這個需求下,因爲地址文本的不規範,github

  • 基於字典的正則判斷有必定的侷限性(省市區鎮鄉等關鍵字不必定會出現,樓盤名也沒有規律可尋)
  • 判斷分詞結果爲ns+以關鍵字(省|市|區|縣|路|街|座|號|樓|棟|梯|室|巷|大道|花園|苑|幢|弄|單元|鄉)結尾的詞的數量佔分詞結果集比例的方法,會容易誤判(閾值很差肯定)

假如能夠像看到陰天,就能預測下雨那樣子,看到一個ns或者以關鍵詞結尾的詞,就提高地址的機率,看到「的、了、咱們、大家」等和地址基本不相關的詞就下降地址的機率,根據不一樣的詞性加權平均,最後判斷哪個結果。理論上會減小誤判的可能性bash

貝葉斯公式

貝葉斯公式

想起大學裏學的貝葉斯公式,正好能夠用於上述場景。阮一峯的一篇文章貝葉斯推斷及其互聯網應用(一):定理簡介已經做出了很好的介紹測試

識別思路

思路設計

假設網站

  • 事件A爲:輸入是地址,則P(A)爲輸入是地址的機率
  • 事件B爲:出現XX詞性,則P(B)爲出現XX詞性的機率

進而spa

  • P(A|B)爲:出現XX詞性時,輸入是地址的機率
  • P(B|A)爲:輸入是地址時,出現XX詞性的機率

根據貝葉斯公式,就能夠計算出P(A|B)設計

計算出每一個詞性的P(A|B)以後,再預測某個輸入是否爲地址時,就能夠根據分詞後的詞性得出機率之和,取平均值再與閾值比較就能判斷輸入是否爲地址code

數據準備

由於先驗機率的計算須要樣本數據,而樣本數據的質量會直接影響貝葉斯推斷的效果,所以樣本數據最好可以反映出真實的狀況cdn

一、正樣本

準備22000條真實地址數據

二、負樣本

重新聞網站提取正文,按照","和「。」將文章切割成簡單句,篩選一下長度,得出10000條負樣本

機率計算

一、計算P(A)

從數據準備中就能夠計算出P(A)的機率了:正樣本條數/總樣本條數

二、計算P(B)

提取出全部出現的詞性,對每個詞性計算:出現該詞性的樣本條數/總樣本條數

三、計算P(B|A)

對每個詞性,計算:出現該詞性的樣本條數/正樣本條數

四、計算P(A|B)

依據上述三個值以及貝葉斯公式,就能夠得出:出現某個詞性時,輸入是地址的機率了

後續補充

因爲分詞的侷限性,有時以關鍵字(省|市|區|縣|路|街|座|號|樓|棟|梯|室|巷|大道|花園|苑|幢|弄|單元|鄉)結尾的詞並不會識別成"ns"詞性,而出現上述詞時是地址的機率又會提高。

因而,人爲地將符合上述特徵的詞的機率調整爲:出現ns詞性時,輸入是地址的機率。

閾值肯定

根據正負測試數據集的計算狀況設置機率閾值,將誤判率控制在1%之內

相關文章
相關標籤/搜索