1. 程式人生 > >乾貨 | 自然語言處理(1)之聊一聊分詞原理

乾貨 | 自然語言處理(1)之聊一聊分詞原理

微信公眾號

關鍵字全網搜尋最新排名

【機器學習演算法】:排名第一

【機器學習】:排名第一

【Python】:排名第三

【演算法】:排名第四

前言

在做文字挖掘時,首先要做的預處理就是分詞。英文單詞天然有空格隔開容易按照空格分詞,但有時也需要把多個單詞做為一個分詞,比如一些名詞如“New York”,需要做為一個詞看待。而中文由於沒有空格,分詞就是一個需要專門去解決的問題了。無論是英文還是中文,分詞的原理都類似,本文就對文字挖掘時的分詞原理做一個總結。

分詞的基本原理

現代分詞都是基於統計的分詞,而統計的樣本內容來自於一些標準的語料庫。假如有一個句子:“小明來到荔灣區”,我們期望語料庫統計後分詞的結果是:"小明/來到/荔灣/區",而不是“小明/來到/荔/灣區”。

那麼如何做到這一點呢?

從統計的角度,我們期望"小明/來到/荔灣/區"這個分詞後句子出現的概率要比“小明/來到/荔/灣區”大。如果用數學的語言來說說,如果有一個句子S,它有m種分詞選項如下:

0?wx_fmt=png

其中下標ni代表第i種分詞的詞個數。如果我們從中選擇了最優的第r種分詞方法,那麼這種分詞方法對應的統計分佈概率應該最大,即:

0?wx_fmt=png

但概率分佈P(Ai1,Ai2,...,Aini)並不容易計算,因為涉及到ni個分詞的聯合分佈。在NLP中,為了簡化計算,我們通常使用馬爾科夫假設,即每一個分詞出現的概率僅僅和前一個分詞有關,即:

0?wx_fmt=png

使用了馬爾科夫假設,則聯合分佈為:

0?wx_fmt=png

而通過標準語料庫可以近似的計算出所有的分詞之間的二元條件概率,

比如任意兩個詞w1,w2,它們的條件概率分佈可以近似的表示為

0?wx_fmt=png

其中freq(w1,w2)表示w1,w2在語料庫中相鄰一起出現的次數,而其中freq(w1),freq(w2)分別表示w1,w2在語料庫中出現的統計次數。

利用語料庫建立的統計概率,對於一個新的句子就可以通過計算各種分詞方法對應的聯合分佈概率,找到最大概率對應的分詞方法,即為最優分詞。

N元模型

只依賴於前一個詞或許太武斷,則依賴於前兩個詞呢?即:

0?wx_fmt=png

這樣也可以,只是聯合分佈的計算量大大增加。一般稱只依賴於前一個詞的模型為二元模型(Bi-Gram model),而依賴於前兩個詞的模型為三元模型。以此類推,我們可以建立四元模型,五元模型,...一直到通用的N元模型。越往後,概率分佈的計算複雜度越高。當然演算法的原理是類似的。

在實際應用中,N一般都較小,一般都小於4,主要原因是N元模型概率分佈的空間複雜度為O(|V|^N),其中|V|為語料庫大小,而N為模型的元數,當N增大時,複雜度呈指數級的增長。

基於N元模型的分詞方法雖然很好,但在實際中應用也有很多問題,首先,某些生僻詞,或者相鄰分詞聯合分佈在語料庫中沒有,概率為0。這種情況我們一般會使用拉普拉斯平滑,即給它一個較小的概率值第二個問題是如果句子長,分詞情況多,計算量非常大,可以用維特比演算法來優化演算法時間複雜度。

維特比演算法在分詞中的應用

為便於描述,所有討論以二元模型為基礎

對於一個有多種分詞可能的長句子,可以使用暴力方法計算出所有的分詞可能的概率,再找出最優分詞方法。但用維特比演算法可以大大簡化求出最優分詞的時間。

維特比演算法常用於隱式馬爾科夫模型HMM的解碼過程,但它是一個通用的求序列最短路徑的方法,也可以用於其他的序列最短路徑演算法,比如最優分詞。

維特比演算法採用的是動態規劃來解決這個最優分詞問題的。首先看一個簡單的分詞例子:"人生如夢境"。它的可能分詞可以用下面的概率圖表示:

0?wx_fmt=png

圖中箭頭為通過統計語料庫得到的各分詞條件概率。維特比演算法需要找到從Start到End之間的一條最短路徑。對於在End之前的任意一個當前區域性節點,需要計算到達該節點的最大概率δ,和到達當前節點滿足最大概率的前一節點位置Ψ。

維特比演算法的計算過程

首先初始化為:

0?wx_fmt=png

對於節點"生",只有一個前向節點,因此有:

0?wx_fmt=png

對於節點"如",情況稍微複雜一點,因為它有多個前向節點,要計算出到“如”概率最大的路徑:

0?wx_fmt=png

類似的方法可以用於其他節點如下:

0?wx_fmt=png

最後看最終節點End:

0?wx_fmt=png

由於最後的最優解為“夢境”,現在開始用Ψ反推:

0?wx_fmt=png

從而最終的分詞結果為"人生/如/夢境"。

常用分詞工具

對於文字挖掘中需要的分詞功能,一般會用現有的工具。簡單的英文分詞不需要任何工具,通過空格和標點符號就可以分詞而進一步的英文分詞推薦使用nltk(下載地址:http://www.nltk.org/)對於中文分詞,則推薦用結巴分詞(下載地址:https://github.com/fxsjy/jieba/)

總結

分詞是文字挖掘的預處理的重要的一步,分詞完成後,可以繼續做一些其他的特徵工程,比如向量化(vectorize),TF-IDF以及Hash trick,這些在後面會逐一給出。

歡迎分享給他人讓更多的人受益

0?wx_fmt=png

參考:

  1. 宗成慶《統計自然語言處理》 第2版

  2. 部落格園

    http://www.cnblogs.com/pinard/p/6677078.html

  3. 李航《統計學習方法》維特比演算法

  4. nltk:http://www.nltk.org/

  5. 結巴分詞:https://github.com/fxsjy/jieba/

近期熱文

0?wx_fmt=png

進機器學習微信交流群

請加微信(guodongwe1991

備註(姓名-單位-研究方向)

廣告、商業合作

請發郵件:[email protected]

0?wx_fmt=jpeg

相關推薦

乾貨 | 自然語言處理(1)原理

微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前言 在做文字挖掘時,首先要做的預處理就是分詞。英文單詞天然有空格隔開容易按照空格分詞,但有時也需要把多個單詞做為一個分詞,比如一些名詞如“New York”,需要做

自然語言處理入門(4)——中文原理工具介紹

本文首先介紹下中文分詞的基本原理,然後介紹下國內比較流行的中文分詞工具,如jieba、SnowNLP、THULAC、NLPIR,上述分詞工具都已經在github上開源,後續也會附上github連結,以供參考。 1.中文分詞原理介紹 1.1 中文分詞概述 中

自然語言處理】詳說中文自動

文章目錄 詳說中文自動分詞 前言 一、 what is 中文分詞 二、中文分詞的用途 三、中文分詞的特點和難點 四、常見的中文分詞方法 五、中文分詞工具 1、Ha

自然語言處理概述及應用和中文簡述

自然語言處理概述及應用和中文分詞簡述 自然語言處理概述 0.概念 自然語言處理(Natural Language Processing,簡稱NLP)是主要研究人與計算機交際中的語言問題的一門學科。“自然語言處理要研製表示語言能力(linguistic competence)和語言

自然語言處理】python中的jieba使用手冊

這篇文章是轉載的,但是我沒找到出處啊,宣告一下~ jieba “結巴”中文分詞:做最好的 Python 中文分片語件 "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to b

HanLP《自然語言處理入門》筆記--2.詞典

筆記轉載於GitHub專案:https://github.com/NLP-LOVE/Introduction-NLP 2. 詞典分詞 中文分詞:指的是將一段文字拆分為一系列單詞的過程,這些單詞順序拼接後等於原文字。 中文分詞演算法大致分為基於詞典規則與基於機器學習這兩大派。 2.1 什麼是詞 在基於詞典

乾貨 | 自然語言處理(5)英文文字挖掘預處理流程

前言原文連結:http://www.cnblogs.com/pinard/p/6756534.h

cs224d 自然語言處理作業 problem set3 () 實現Recursive Nerual Net Work 遞歸神經網絡

函數 rec 合並 聯系 cs224 作業 itl clas 自然語言處理 1、Recursive Nerual Networks能夠更好地體現每個詞與詞之間語法上的聯系這裏我們選取的損失函數仍然是交叉熵函數 2、整個網絡的結構如下圖所示: 每個參數的更新時的梯隊值如何計算

Python自然語言處理1

cmd 輸入 函數調用 down load src 選擇 分享 cnblogs 首先,進入cmd 輸入pip install的路徑 隨後開始下載nltk的包 一、準備工作 1、下載nltk 我的之前因為是已經下載好了 ,我現在用的參考書是Python自然語言處理這本書,最

自然語言處理技術HanLP介紹

自然語言處理技術 dkhadoop自然語言處理技術 這段時間一直在接觸學習hadoop方面的知識,所以說對自然語言處理技術也是做了一些了解。網絡上關於自然語言處理技術的分享文章很多,今天就給大家分享一下HanLP方面的內容。自然語言處理技術其實是所有與自然語言的計算機處理相關聯的技術的統稱,自然語言處

python自然語言處理——1.4 回到python:決策和控制

ott thead top linear 控制 san max-width eight 技術分享 微信公眾號:數據運營人本系列為博主的讀書學習筆記,如需轉載請註明出處。 第一章 語言處理與python 1.4 回到python:決策和控制條件對每個元素進行操作嵌套

python自然語言處理——1.2 近觀python:將文本當作詞鏈表

bsp family round orm 學習 splay letter mic lock 微信公眾號:數據運營人本系列為博主的讀書學習筆記,如需轉載請註明出處。 第一章 語言處理與python 1.2 近觀python:將文本當作詞鏈表鏈表索引列表變量字符串 1

C# 自然語言處理1-識別文字到語音

1. 引入System.Speech.dll2. 實現:  static void Main(string[] args)         {             SpeechS

python自然語言處理——1.5 自動理解自然語言

微信公眾號:資料運營人本系列為博主的讀書學習筆記,如需轉載請註明出處。 第一章 語言處理與python 1.5 自動理解自然語言詞意消歧指代消解自動生成語言機器翻譯人機對話系統文字的含義 1.5 自動理解自然語言 詞意消歧 大家都應該知道,無論是漢語,英語甚至其他語言,

自然語言處理1 --

1 概述 分詞是自然語言處理的基礎,分詞準確度直接決定了後面的詞性標註、句法分析、詞向量以及文字分析的質量。英文語句使用空格將單詞進行分隔,除了某些特定詞,如how many,New York等外,大部分情況下不需要考慮分詞問題。但中文不同,天然缺少分隔符,需

乾貨 | 自然語言處理入門資料推薦

微信公眾號關鍵字全網搜尋最新排名【機器學習演算法】:排名第一【機器學習】:排名第一【Python

自然語言處理 學習筆記(

個人學習nlp筆記:學習材料CS124、COSC572和《Speech and Language Processing》第三版 自然語言處理 學習筆記(一) 1.正則表示式和文字標準化 1.1正則表示式 1.2文字標準化(text no

自然語言處理技術準確率(Precision)、召回率(Recall)、F值(F-Measure)簡介

下面簡單列舉幾種常用的推薦系統評測指標: 1、準確率與召回率(Precision & Recall) 準確率和召回率是廣泛用於資訊檢索和統計學分類領域的兩個度量值,用來評價結果的質量。其中精度是檢索出相關文件數與檢索出的文件總數的比率,衡量的是檢索系統的查準

自然語言處理系列TF-IDF演算法

TF-IDF演算法 TF-IDF(詞頻-逆文件頻率)演算法是一種統計方法,用以評估一字詞對於一個檔案集或一個語料庫中的其中一份檔案的重要程度。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。該演算法在資料探勘、文字

自然語言處理NLP終極指南(Pytho…

理解和使用自然語言處理之終極指南(Python編碼)(經典收藏版12k字,附資料簡化籌員2月17日Fri新聞) 秦隴紀10譯編 12k字:理解和使用自然語言處理之終極指南(Python編碼)7k字;附資料簡化DataSimp籌收技術簡歷414字、2月17日Fri新聞四則4k字。歡迎加入共建“資