精通Python自然語言處理 2 :統計語言建模
程式碼
https://github.com/PacktPublishing/Mastering-Natural-Language-Processing-with-Python
1、理解單詞頻率
詞的搭配可以被定義為傾向於並存的兩個或多個識別符號的集合。如The United States
Unigram(一元語法)代表單一識別符號:以下為Alpino語料庫生成unigrams
import nltk
from nltk.util import ngrams
from nltk.corpus import alpino
alpino.words()
# unigrams = ngrams(alpino.words(), 1)
quadgrams = ngrams(alpino.words(), 4)
for i in quadgrams:
print(i)
bigram(二元語法)。首先需要搜尋小寫單詞,把文字建立為小寫單詞列表後,然後建立BigramCollocation- Finder 例項。在nltk.metrics包中找到BigramAssocMeasures可用於在文字中查詢bigrams:
# -*- coding: utf-8
import nltk
from nltk.collocations import BigramCollocationFinder
from nltk.corpus import webtext
from nltk.metrics import BigramAssocMeasures
from nltk.corpus import stopwords
# 新增消除停止詞和標點符號的單詞過濾器
set = set(stopwords.words('english'))
stops_filter = lambda w: len(w) < 3 or w in set
# 轉為小寫
tokens = [t.lower() for t in webtext.words('grail.txt')]
words = BigramCollocationFinder.from_words(tokens)
words.apply_word_filter(stops_filter)
print(words.nbest(BigramAssocMeasures.likelihood_ratio, 10))
為給定的文字開發MLE:最大似然估計(Maximum Likelihood Estimate)也被稱為多元邏輯迴歸或條件指數分類器。在nltk.classify.maxent模組裡,所有的概率分佈被認為是與訓練資料保持一致的。該模型用於指代兩個特徵,即輸入特徵(未加標籤)和聯合特徵(加標籤)。MLE用於生成freqdist,包含了文字中給定識別符號出現的概率分佈。引數freqdist由作為概率分佈基礎的頻率分佈組成。
為了獲取頻率分佈,可以使用最大似然估計。它基於各個識別符號在頻率分佈中的頻率來計算器概率。
隱馬爾科夫模型估計:
2、在MLE模型上應用平滑
平滑(Smoothing)用於處理之前未曾出現過的單詞。因此,未知單詞的概率為0 。為了解決這個問題,我們用了平滑。
加法平滑:
Good Turing平滑:是一種有效的平滑方法,這種方法提高了用於執行語言學任務的統計技術的效能,例如詞義消歧、命名實體識別、拼寫矯正、機器翻譯等。此方法有助於預測未來物件的概率。
Kneser Ney平滑:
Witten Bell平滑:
3、為MLE開發一個回退機制
Katz回退模型可以認為是一個具備高效生產力的n-gram語言模型,如果在n-gram中能夠給出一個指定識別符號的先前資訊,那麼該模型可以計算出其條件概率。
4、應用資料的插值以便獲取混合搭配
使用加法平滑模型bigram的區域性是當我們處理罕見文字時就會回退到一個不可知的狀態。
5、通過複雜度來評估語言模型
NLTK中的nltk.model.ngram模組有一個子模組perplexity(text)。
6、在語言建模中應用Metropolis-Hastings演算法
在馬爾科夫鏈(Markov Chain Monte Carlo, MCMC)中有多種關於後驗概率的執行處理方法。一種方法是使用Mertorpolis-Hastings取樣器。為了實現,需要標準的均勻分佈、建議分佈和與後驗概率成正比的目標分佈。
7、在語言處理中應用Gibbs取樣法
在Gibbs取樣法的幫助下,可以通過從條件概率中取樣建立Markov。
相關文章
- 精通Python自然語言處理 1 :字串操作Python自然語言處理字串
- Python自然語言處理 1 語言處理與PythonPython自然語言處理
- 精通Python自然語言處理 3 :形態學Python自然語言處理
- Python自然語言處理Python自然語言處理
- 自然語言處理(NLP)自然語言處理
- 自然語言處理(NLP)系列(一)——自然語言理解(NLU)自然語言處理
- Python自然語言處理 3 處理原始文字Python自然語言處理
- 自然語言處理(NLP)概述自然語言處理
- 自然語言處理NLP(四)自然語言處理
- 中國語文(自然語言處理)作業自然語言處理
- HanLP 自然語言處理 for nodejsHanLP自然語言處理NodeJS
- [譯] 自然語言處理真是有趣!自然語言處理
- 自然語言處理:分詞方法自然語言處理分詞
- 自然語言處理與分析(one)自然語言處理
- 精通Python自然語言處理 4 :詞性標註--單詞識別Python自然語言處理詞性標註
- Python自然語言處理 2 獲得文字語料和詞彙資源Python自然語言處理
- Python自然語言處理工具Python自然語言處理
- Python自然語言處理入門Python自然語言處理
- 自然語言處理中的語言模型預訓練方法自然語言處理模型
- hanlp自然語言處理包的基本使用--pythonHanLP自然語言處理Python
- 《Python自然語言處理實戰》連結表Python自然語言處理
- Python 自然語言處理(NLP)工具庫彙總Python自然語言處理
- 自然語言處理之jieba分詞自然語言處理Jieba分詞
- 人工智慧 (06) 自然語言處理人工智慧自然語言處理
- 自然語言處理的最佳實踐自然語言處理
- 機器學習工作坊 - 自然語言處理機器學習自然語言處理
- 配置Hanlp自然語言處理進階HanLP自然語言處理
- 自然語言處理NLP快速入門自然語言處理
- 自然語言處理(NLP)入門指南自然語言處理
- 使用Mahout實現自然語言處理自然語言處理
- 自然語言處理與情緒智慧自然語言處理
- 探索自然語言處理:語言模型的發展與應用自然語言處理模型
- Python自然語言處理實戰(1):NLP基礎Python自然語言處理
- NLP1 —— Python自然語言處理環境搭建Python自然語言處理
- Python自然語言處理 6 學習分類文字Python自然語言處理
- 牛津大學xDeepMind自然語言處理 第13講 語言模型(3)自然語言處理模型
- 大學書信選2(關於自然語言處理) (轉)自然語言處理
- 自然語言處理NLP(6)——詞法分析自然語言處理詞法分析