主頁 >  其他 > HanLP《自然語言處理入門》筆記--5.感知機模型與序列標注

HanLP《自然語言處理入門》筆記--5.感知機模型與序列標注

2020-09-16 01:53:17 其他

筆記轉載于GitHub專案:https://github.com/NLP-LOVE/Introduction-NLP

5. 感知機分類與序列標注

第4章我們利用隱馬爾可夫模型實作了第一個基于序列標注的中文分詞器,然而效果并不理想,事實上,隱馬爾可夫模型假設人們說的話僅僅取決于一個隱藏的{B.M,E,S序列,這個假設太單純了,不符合語言規律,語言不是由這么簡單的標簽序列生成,語言含有更多特征,而隱馬彌可夫模型沒有捕捉到,隱馬彌可夫模型能捕捉的特征僅限于兩種: 其一,前一個標簽是什么;其二,當前字符是什么

為了利用更多的特征,線性模型( linear model )應運而生,線性模型由兩部分構成: 一系列用來提取特征的特征函式 φ,以及相應的權重向量 w,

本章將深人講解感知機演算法的原理,以及在分類和序列標注上的應用,在序列標注應用部分,我們將實作基于感知機的中文分詞器,由于感知機序列標注基于分類,并且分類問題更簡單,所以我們先學習分類問題,

5.1 分類問題

  1. 定義

    分類指的是預測樣本所屬類別的一類問題,二分類也可以解決任意類別數的多分類問題(one vs rest),

    • 將型別class1看作正樣本,其他型別全部看作負樣本,然后我們就可以得到樣本標記型別為該型別的概率 p1,

    • 然后再將另外型別class2看作正樣本,其他型別全部看作負樣本,同理得到 p2,

    • 以此回圈,我們可以得到該待預測樣本的標記型別分別為型別 class i 時的概率 pi,最后我們取 pi 中最大的那個概率對應的樣本標記型別作為我們的待預測樣本型別,

    • 總之還是以二分類來依次劃分,并求出最大概率結果,

  2. 應用

    在NLP領域,絕大多數任務可以用分類來解決,文本分類天然就是一個分類問題,關鍵詞提取時,對文章中的每個單詞判斷是否屬于關鍵詞,于是轉化為二分類問題,在指代消解問題中,對每個代詞和每個物體判斷是否存在指代關系,又是一個二分類問題,在語言模型中,將詞表中每個單詞作為一種類別,給定上文預測接下來要出現的單詞,

5.2 線性分類模型

線性模型是傳統機器學習方法中最簡單最常用的分類模型,用一條線性的直線或高維平面將資料一分為二,

直線將平面分割為兩部分,分別對應男女,對于任何姓名,計算它落入哪個區域,就能預測它的性別,這樣的區域稱為決策區域,它們的邊界稱為決策邊界,二維空間中,如果決策邊界是直線,則稱為線性分類模型: Y = Wx + b,

如果是任意維度空間中的線性決策邊界統稱為分離超平面

推廣到 D 維空間,分離超平面的方程為:

\[\sum_{i=1}^{D} w_{i} x_{i}+b=0 \]

其中,w 是權重,b 偏置(截距),可以寫成向量的形式:

\[\hat{y}={sign}(w \cdot x)=\{\begin{array}{cc}{-1,} {w \cdot x \leqslant 0} \\ {1,} {w \cdot x>0}\end{array}\]

\[\begin{aligned} &\boldsymbol{w}=\left[w_{1}, \cdots, w_{D}, b\right]\\ &x=\left[x_{1}, \cdots, x_{D}, 1\right] \end{aligned}\\ \hat{y}=\operatorname{sign}(\boldsymbol{w} \cdot \boldsymbol{x})=\left\{\begin{array}{cc} {-1,} & {\boldsymbol{w} \cdot \boldsymbol{x} \leqslant 0} \\ {1,} & {\boldsymbol{w} \cdot \mathbf{x}>0} \end{array}\right. \]

5.3 感知機演算法

找出這個分離超平面其實就是感知機演算法,感知機演算法則是一種迭代式的演算法:在訓練集上運行多個迭代,每次讀入一個樣本,執行預測,將預測結果與正確答案進行對比,計算誤差,根據誤差更新模型引數,再次進行訓練,直到誤差最小為止,

  • 損失函式: 從數值優化的角度來講,迭代式機器學習演算法都在優化(減小)一個損失函式( loss function ),損失函式 J(w) 用來衡量模型在訓練集上的錯誤程度,自變數是模型引數 w,因變數是一個標量,表示模型在訓練集上的損失的大小,
  • 梯度下降: 給定樣本,其特征向量 x 只是常數,對 J(w) 求導,得到一個梯度向量 Δw,它的反方向一定是當前位置損失函式減小速度最快的方向,如果引數點 w 反方向移動就會使損失函式減小,叫梯度下降,
  • 學習率: 梯度下降的步長叫做學習率,
  • 隨機梯度下降(SGD): 如果演算法每次迭代隨機選取部分樣本計算損失函式的梯度,則稱為隨機梯度下降,

這時候問題來了,假如資料本身線性不可分,感知機損失函式不會收斂,每次迭代分離超平面都會劇烈振蕩,這時可以對感知機演算法打補丁,使用投票感知機或平均感知機,

  1. 投票感知機和平均感知機

    投票感知機:每次迭代的模型都保留,準確率也保留,預測時,每個模型都給出自己的結果,乘以它的準確率加權平均值作為最終結果,

    投票感知機要求存盤多個模型及加權,計算開銷較大,更實際的做法是取多個模型的權重的平均,這就是平均感知機

5.4 基于感知機的人名性別分類

解決人名性別分類的監督學習流程:

  • 標注人名分類語料庫
  • 利用感知機演算法訓練線性模型
  • 利用線性模型給人名分類,評估準確率,
  1. 人名性別語料庫

    筆者整理了一份人名性別語料庫 cnname

    運行下面代碼后會自動下載,

    預料格式為逗號分隔的 .csv,第一列為姓名,第二列為性別:

    趙伏琴,女
    錢沐楊,男
    孫竹珍,女
    李潮陽,男
    
  2. 訓練

    代碼詳見:classify_name.py

    https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch05/classify_name.py

    運行結果如下:

    下載 http://file.hankcs.com/corpus/cnname.zip 到 /usr/local/lib/python3.7/site-packages/pyhanlp/static/data/test/cnname.zip
    100.00%, 1 MB, 256 KB/s, 還有 0 分  0 秒   
    =====樸素感知機演算法=====
    訓練集準確率: P=85.44 R=85.06 F1=85.25
    特征數量: 9089
    趙建軍=男
    沈雁冰=男
    陸雪琪=女
    李冰冰=女
    測驗集準確率: P=82.85 R=82.90 F1=82.88
    =====平均感知機演算法=====
    訓練集準確率: P=93.62 R=83.06 F1=88.02
    特征數量: 9089
    趙建軍=男
    沈雁冰=男
    陸雪琪=女
    李冰冰=女
    測驗集準確率: P=90.92 R=80.39 F1=85.33
    

5.5 結構化預測問題

自然語言處理問題大致可分為兩類,一種是分類問題,另一種就是結構化預測問題,序列標注只是結構化預測的一個特例,對感知機稍作拓展,分類器就能支持結構化預測,

  1. 定義

    資訊的層次結構特點稱作結構化,那么結構化預測(structhre,prediction)則是預測物件結構的一類監督學習問題,相應的模型訓練程序稱作結構化學習(stutured laming ),分類問題的預測結果是一個決策邊界, 回歸問題的預測結果是一個實數標量,而結構化預測的結果則是一個完整的結構,

    自然語言處理中有許多任務是結構化預測,比如序列標注預測結構是一整個序列,句法分析預測結構是一棵句法樹,機器翻譯預測結構是一段完整的譯文,這些結構由許多部分構成,最小的部分雖然也是分類問題(比如中文分詞時每個字符分類為{B,M,E,S} ),但必須考慮結構整體的合理程度,

  2. 結構化預測與學習流程

    結構化預測的程序就是給定一個模型 λ 及打分函式 score,利用打分函式給一些備選結構打分,選擇分數最高的結構作為預測輸出,公式如下:

    \[\hat{y}=\arg \max _{y \in Y} \operatorname{score}_{\lambda}(x, y) \]

    其中,Y 是備選結構的集合,既然結構化預測就是搜索得分最高的結構 y,那么結構化學習的目標就是想方設法讓正確答案 y 的得分最高,不同的模型有不同的演算法,對于線性模型,訓練演算法為結構化感知機,

5.6 線性模型的結構化感知機演算法

  1. 結構化感知機演算法

    要讓線性模型支持結構化預測,必須先設計打分函式,打分函式的輸入有兩個缺一不可的引數: 特征 x 和結構 y,但之前介紹的線性模型的“打分函式”只接受一個自變數 x,

    做法是定義新的特征函式 ?(x,y),把結構 y 也作為一種特征,輸出新的“結構化特征向量”,新特征向量與權重向量做點積后,就得到一個標量,將其作為分數:

    \[\operatorname{score}(x, y)=w \cdot \phi(x, y) \]

    打分函式有了,取分值最大的結構作為預測結果,得到結構化預測函式:

    \[\hat{y}=\arg \max _{y \in Y}(w \cdot \phi(x, y)) \]

    預測函式與線性分類器的決策函式很像,都是權重向量點積特征向量,那么感知機演算法也可以拓展復用,得到線性模型的結構化學習演算法,

    • 讀入樣本 (x,y),進行結構化預測 \(\hat{y}=\arg \max_{y \in Y}(w \cdot \phi(x, y))\)

    • 與正確答案相比,若不相等,則更新引數: 獎勵正確答案觸發的特征函式的權重,否則進行懲罰:

      \[w \leftarrow w+\phi\left(x^{(i)}, y\right)-\phi\left(x^{(i)}, \hat{y}\right) \]

    • 還可以調整學習率:

      \[\boldsymbol{w} \leftarrow \boldsymbol{w}+\alpha\left(\phi\left(\boldsymbol{x}^{(i)}, \boldsymbol{y}\right)-\phi\left(\boldsymbol{x}^{(i)}, \hat{\boldsymbol{y}}\right)\right) \]

  2. 與感知機演算法比較

    • 結構化感知機修改了特征向量,
    • 結構化感知機的引數更新賞罰分明,
  3. 結構化感知機與序列標注

    上面已經講了結構化感知機的模型公式,看如何運用到序列標注上,我們知道序列標注最大的結構特點就是標簽相互之間的依賴性,這種依賴性利用初始狀態概率想倆狗和狀態轉移概率矩陣體系那,那么對于結構化感知機,就可以使用轉移特征來表示:

    \[\phi_{k}\left(y_{t-1}, y_{t}\right)=\left\{\begin{array}{ll} {1,} & {y_{t-1}=s_{i}, \mathrm{H} y_{t}=s_{j}} \\ {0,} & {其他 } \end{array} \quad i=0, \cdots, N ; j=1, \cdots, N\right. \]

    其中,Yt 為序列第 t 個標簽,Si 為標注集第 i 種標簽,N 為標注集大小,

    狀態特征如下,類似于隱馬爾可夫模型的發射概率矩陣,狀態特征只與當前的狀態有關,與之前的狀態無關:

    \[\phi_{i}\left(x_{i}, y_{i}\right)=\left\{\begin{array}{l} {1} \\ {0} \end{array}\right. \]

    于是,結構化感知機的特征函式就是轉移特征和狀態特征的合集:

    \[\phi=\left[\phi_{k} ; \phi_{l}\right] \quad k=1, \cdots, N^{2}+N ; l=N^{2}+N+1, \cdots \]

    基于以上公式,我們統一用打分函式來表示:

    \[\operatorname{score}(\boldsymbol{x}, \boldsymbol{y})=\sum_{t=1}^{T} \boldsymbol{w} \cdot \phi\left(y_{t-1}, y_{t}, \boldsymbol{x}_{t}\right) \]

    有了打分公式,就可以利用維特比演算法求解得分最高的序列,

5.7 基于結構化感知機的中文分詞

代碼詳見(注釋寫得很清楚): perceptron_cws.py

https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch05/perceptron_cws.py

運行以上代碼結果如下:

P:96.68 R:96.51 F1:96.59 OOV-R:71.54 IV-R:97.18
[王思斌, ,, 男, ,, 1949年10月, 生, ,]
[山東, 桓臺縣, 起鳳鎮, 穆寨村, 婦女, 穆玲英]
[現, 為, 中國藝術研究院中國文化研究所, 研究員, ,]
[我們, 的, 父母, 重, 男, 輕, 女]
[北京輸氣管道, 工程]

準確性與性能的比較

演算法 P R F1 R(oov) R(IV)
最長匹配 89.41 94.64 91.95 2.58 97.14
二元語法 92.38 96.70 94.49 2.58 99.26
一階HHM 78.49 80.38 79.42 41.11 81.44
二階HHM 78.34 80.01 79.16 42.06 81.04
平均感知機 96.69 96.45 96.57 70.34 97.16
結構化感知機 96.67 96.64 96.65 70.52 97.35

對比各項指標,我們終于將 OOV 提高到了 70% 以上,并且綜合 F1 也提高了 96.7%,感知機是截止到這章最好用的演算法,完全達到了實用水平,在實際專案中,無非還需要掛載一些領域詞庫,

5.8 GitHub

HanLP何晗--《自然語言處理入門》筆記:

https://github.com/NLP-LOVE/Introduction-NLP

專案持續更新中......

目錄


章節
第 1 章:新手上路
第 2 章:詞典分詞
第 3 章:二元語法與中文分詞
第 4 章:隱馬爾可夫模型與序列標注
第 5 章:感知機分類與序列標注
第 6 章:條件隨機場與序列標注
第 7 章:詞性標注
第 8 章:命名物體識別
第 9 章:資訊抽取
第 10 章:文本聚類
第 11 章:文本分類
第 12 章:依存句法分析
第 13 章:深度學習與自然語言處理

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/51669.html

標籤:其他

上一篇:AB實驗人群定向HTE模型4 - Double Machine Learning

下一篇:怎么移植X86平臺下intel 集成顯卡wince6 驅動?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more