1. 程式人生 > >自然語言處理之資料平滑方法

自然語言處理之資料平滑方法

在自然語言處理中,經常要計算單詞序列(句子)出現的概率估計。但是,演算法訓練的時候,預料庫中不可能包含所有可能出現的序列,因此為了防止對訓練樣本中為出現的新序列概率估計值為零,人們發明了不少可以改善估計新序列出現的概率演算法,即資料的平滑。最常見的資料平滑演算法包括如下幾種:

  1. Add-one (Laplace) smoothing

  2. Add-k smoothing

  3. Backoff回退法

  4. Interpolation插值法

  5. Absolute discounting

  6. Kneser-Ney smoothing

  7. Modified Kneser-ney smoothing

這幾個方法實際上可以簡單的理解為三種不同的方法:第一種型別為政府給大家每人一筆或者幾筆錢(如1和2),第二種為找父母要(如3和4),最後一種就是劫富濟貧(如5-7)。下面依次簡單介紹上面的方法,具體詳細的介紹,大家可以參閱相應的論文和書籍。

資料預處理

在介紹上面幾種平滑的方法之前,這裡先給出一個簡單的的資料預處理的方法,特別是對於OOV(需要訓練的詞不在詞袋裡面)的情況特別有效,而且如果訓練的時候,如果有幾十萬的詞彙,一般不會對這幾十萬的詞彙進行全部訓練,而是需要預先做下面的處理後再進行資料的平滑和訓練。

假設訓練資料集中出現了|N|個不同的詞彙,那麼可以根據詞頻對這些詞彙進行排序,可以選擇詞頻最高的M個詞彙作為我們的詞彙集合,這樣在訓練和測試資料集中,將不屬於V的詞彙都替換成特殊的詞彙UNK,這樣可以大大減少計算量,也可以提高計算的精度。

Add-one (Laplace) smoothing

Add-one 是最簡單、最直觀的一種平滑演算法,既然希望沒有出現過的N-gram的概率不再是0,那就直接規定在訓練時任何一個N-gram在訓練預料至少出現一次(即規定沒有出現的,在語料中也出現一次),因此:Countnew(n-gram) = countold(n-gram)+1;

於是對於n-gram的模型而言,假設V是所有可能的不同的N-gram的型別個數,那麼根據貝葉斯公式有

當然這裡的n-gram的可以相應的改成uingram和bigram表示式,並不影響。其中C(x)為x在訓練中出現的次數,wi為給定的訓練資料中第i個單詞。

這樣一來,訓練語料庫中出現的n-gram的概率不再為0,而是一個大於0的較小的概率值,Add-one平滑演算法確實解決了我們的問題,但是顯然它也並不完美,由於訓練語料中未出現的n-gram數量太多,平滑後,所有未出現的佔據了整個概率分佈的一個很大的比例,因此,在自然語言處理中,Add-one給語料庫中沒有出現的n-gram分配了太多的概率空間。此外所有沒有出現的概率相等是不是合理,這也是需要考慮的。

Add-k smoothing

由Add-one衍生出來的另一種演算法就是Add-k,既然我們認為加1有點過了,那麼我們可以選擇一個小於1的正數k,概率計算公式就可以變成如下表達式:

它的效果通常會比Add-one好,但是依舊沒有辦法解決問題,至少在實踐中,k必須認為的給定,而這個值到底多少該取多少都沒有辦法確定。

Backoff回退法

回退模型,思路實際上是:如果你自己有錢,那麼就自己出錢,如果你自己沒有錢,那麼就你爸爸出,如果你爸爸沒有錢,就你爺爺出,舉一個例子,當使用Trigram的時候,如果Count(trigram)滿足條件就使用,否則使用Bigram,再不然就使用Unigram.

它也被稱為:Katz smoothing,具體的可以去檢視相應的書籍。

它的表示式為:

其中d,a和k分別為引數。k一般選擇為0,但是也可以選其它的值。

Interpolation插值法

插值法和回退法的思想非常相似,設想對於一個trigram的模型,我們要統計語料庫中“”“I like chinese food”出現的次數,結果發現它沒有出現,則計數為0,在回退策略中們將會試著用低階的gram來進行替代,也就是用“like chinese food”出現的次數來替代。在使用插值的時候,我們把不同階層的n-gram的模型線性疊加組合起來之後再使用,簡單的如trigram的模型,按照如下的方式進行疊加:

引數可以憑藉經驗進行設定,也可以通過特定的演算法來進行確定,比如EM演算法。對於資料一般可以分為: traning set, development set, testing set. 那麼P的概率使用training set進行訓練得出,lamda引數使用development set得到。

Absolute discounting

插值法使用的引數實際上沒有特定的選擇,如果將lamda引數根據上下文進行選擇的話就會演變成Absolute discounting。對於這個演算法的基本想法是,有錢的,每個人交固定的稅D,建立一個基金,沒有錢的根據自己的爸爸有多少錢分這個基金。比如對於bigram的模型來說,有如下公式。

D為引數,可以通過測試優化設定。

Kneser-Ney smoothing

這種演算法是目前一種標準的而且是非常先進的平滑演算法,它其實相當於前面講過的幾種演算法的綜合。它的思想實際上是:有錢的人,每個人交一個固定的稅D,大家一起建立一個基金,沒有錢的呢,根據自己的的爸爸的“交際的廣泛”的程度來分了這個基金。這裡交際的廣泛實際上是指它爸爸會有多少種不同的型別,型別越多,這說明越好。其定義式為:

其中max(c(X)-D,0)的意思是要保證最後的計數在減去一個D後不會變成一個負數,D一般大於0小於1。這個公式遞迴的進行,直到對於Unigram的時候停止。而lamda是一個正則化的常量,用於分配之前的概率值(也就是從高頻詞彙中減去的準備分配給哪些未出現的低頻詞的概率值(分基金池裡面的基金))。其表達是為:

PKN是在wi固定的情況下,unigram和bigram數目的比值,這裡需要注意的是PKN是一個分佈,它是一個非負的值,求和的話為1。

Modified Kneser-ney smoothing

這一種方法是上一種方法的改進版,而且也是現在最優的方法。上一個方法,每一個有錢的人都交一個固定的銳,這個必然會出現問題,就像國家收稅一樣,你有100萬和你有1個億交稅的量肯定不一樣這樣才是比較合理的,因此將上一種方法改進就是:有錢的每個人根據自己的收入不同交不同的稅D,建立一個基金,沒有錢的,根據自己的爸爸交際的廣泛程度來分配基金。

這裡D根據c來設定不同的值,比如c為unigram,則使用D1,c位bigram,則使用D2,如果是大於等於3階的使用D3.

轉自:微信公眾號:自然語言處理技術

參考書籍:

[1] Speech and language processing, Daniel Jurafsky, et la.

[2] 語音識別實踐,俞棟等人。

相關推薦

自然語言處理資料平滑方法

在自然語言處理中,經常要計算單詞序列(句子)出現的概率估計。但是,演算法訓練的時候,預料庫中不可能包含所有可能出現的序列,因此為了防止對訓練樣本中為出現的新序列概率估計值為零,人們發明了不少可以改善估計新序列出現的概率演算法,即資料的平滑。最常見的資料平滑演算法包括如下幾種:

自然語言處理jieba, gensim模塊

src tex tokenize 出現 其中 lambda pip 理論 aid 一,自然語言處理 自然語言處理(NLP) :自然語言處理是計算機科學領域與人工智能領域中的一個重要方向。它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理是一門融

自然語言處理:搭建基於HanLP的開發環境(轉)

環境搭建比FNLP的簡單,具體參考:https://github.com/hankcs/HanLP 各個版本的下載:https://github.com/hankcs/HanLP/releases 完畢後有一個報錯: 字元型別對應表載入失敗: D:/eclipse_workspace

自然語言處理AI深度學習頂級實戰課

自然語言處理之AI深度學習頂級實戰課網盤地址:https://pan.baidu.com/s/1cPqqMpX-xDEMoA3iDscrnw 提取碼: swqh備用地址(騰訊微雲):https://share.weiyun.com/5UGchsv 密碼:pp5ix3 課程大綱:1、NLP和深度學習發展概況和

自然語言處理情感分析與觀點挖掘

觀點、情感以及與之相關的許多概念,如評價、評估、態度、感情、情緒和心情,與我們主觀的感覺和感受密切相關。這些是人類心理活動的核心要素,也是影響人們日常行為的關鍵因素。情感分析也稱為觀點挖掘,是一個旨在利用可計算的方法從自然語言文字中提取觀點和情感資訊的研究課題。 一.情感分

自然語言處理分詞、命名主體識別、詞性、語法分析-stanfordcorenlp-NER(二)

轉載請註明出處:https://blog.csdn.net/HHTNAN 在前面我們介紹了Stanford CoreNLP, 自然語言處理之命名實體識別-tanfordcorenlp-NER(一) 功能列表 工具以及對各種語言的支援如下表(英文和中文支援的最好),分別對應:

自然語言處理命名實體識別-tanfordcorenlp-NER(一)

轉載請註明出處:https://blog.csdn.net/HHTNAN 簡介 CoreNLP 專案是Stanford開發的一套開源的NLP系統。包括tokenize, pos , parse 等功能,與SpaCy類似。SpaCy號稱是目前最快的NLP系統, 並且提供現成的pyt

第八章 自然語言處理-概括資料-資料清洗加去掉常規詞語

#!/usr/bin/env python # _*_ coding:utf-8 _*_ import operator import re import string from collections import OrderedDict from urllib.reque

自然語言處理Bag-of-words,TF-IDF模型

轉自:https://blog.csdn.net/m0_37744293/article/details/78881231 Bag-of-words,TF-IDF模型 Bag-of-words model (BoW model)忽略文字的語法和語序,用一組無序的單詞(words)來表達一段文

自然語言處理-中文分詞方法總結

中文分詞是中文文字處理的一個基礎步驟,也是中文人機自然語言互動的基礎模組。不同於英文的是,中文句子中沒有詞的界限,因此在進行中文自然語言處理時,通常需要先進行分詞,分詞效果將直接影響詞性、句法樹等模組的效果。當然分詞只是一個工具,場景不同,要求也不同。前人做的工

自然語言處理維特比(Viterbi)演算法

維特比演算法 (Viterbi algorithm) 是機器學習中應用非常廣泛的動態規劃演算法,在求解隱馬爾科夫、條件隨機場的預測以及seq2seq模型概率計算等問題中均用到了該演算法。實際上,維特比演算法不僅是很多自然語言處理的解碼演算法,也是現代數字通訊中使用最頻繁的演

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

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

自然語言處理word2vec原理詞向量生成

前言 word2vec是如何得到詞向量的?這個問題比較大。從頭開始講的話,首先有了文字語料庫,你需要對語料庫進行預處理,這個處理流程與你的語料庫種類以及個人目的有關,比如,如果是英文語料庫你可能需要大小寫轉換檢查拼寫錯誤等操作,如果是中文日語語料庫你需

自然語言處理中文分詞器詳解

中文分詞是中文文字處理的一個基礎步驟,也是中文人機自然語言互動的基礎模組,不同於英文的是,中文句子中沒有詞的界限,因此在進行中文自然語言處理時,通常需要先進行分詞,分詞效果將直接影響詞性,句法樹等模組

自然語言處理:c++中文分詞(附原始碼)

githup地址:https://github.com/jbymy 一、簡介 中文分詞是地然語言處理中的最基礎的環節,到目前為止已經有不少優秀的分詞工具的出現,如“中科院分詞”,“結

自然語言處理中文分詞器-jieba分詞器詳解及python實戰

中文分詞是中文文字處理的一個基礎步驟,也是中文人機自然語言互動的基礎模組,在進行中文自然語言處理時,通常需要先進行分詞。本文詳細介紹現在非常流行的且開源的分詞器結巴jieba分詞器,並使用python實

自然語言處理hanlp,Python呼叫與構建,分詞、關鍵詞提取、命名主體識別

HanLP是一系列模型與演算法組成的NLP工具包,由大快搜索主導並完全開源,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、效能高效、架構清晰、語料時新、可自定義的特點。在Python中一種是直接呼叫hanlp的介面pyhanlp.還有就是

Java開發、網路爬蟲、自然語言處理資料探勘簡介

  也叫spider,始於也發展於百度、谷歌。但隨者近幾年大資料的興起,爬蟲應用被提升到前所未有的高度。就大資料而言,其實自有資料或使用者產生資料平臺很有限,只有像電商、微博類這樣的平臺才能免強自給自足,像很多資料分析挖掘公司多以網路爬蟲的方式得到不同來元的資料集合,最後為其所用,構建屬於自己的大資料綜合平

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

假定現在有一篇長文《中國的蜜蜂養殖》,我們準備用計算機提取它的關鍵詞。 一個容易想到的思路,就是找到出現次數最多的詞。如果某個詞很重要,它應該在這篇文章中多次出現。於是,我們進行"詞頻"(Term Frequency,縮寫為TF)統計。 結果你肯定猜到了,出現次數最多的詞是----"的"、"是"、"在"--

自然語言處理LCS最長公共子子序列

else turn src 進行 字串 bubuko pri class code #!一個序列S任意刪除若幹個字符得到的新序列T,則T叫做S的子序列 註意,這個和最長公共字串不一樣,最長公共子串要求連續。 1.算法公式: def lcs(a,b): lena