1. 程式人生 > >N-gram語言模型 & Perplexity & 平滑

N-gram語言模型 & Perplexity & 平滑

1. N-gram語言模型

  • 語言模型(Language Model,LM)的一個常見任務,是已知一句話的前面幾個詞,預測下一個是什麼,即對P(wiw1i1)P(w_i|w_1^{i−1})建模

  • N-gram語言模型,是基於Markov假設,假設文字中的每個詞只與前面的n-1個詞有關,即P(wiw1i1)P(wiwin+1i1)=P(wiwi1,,win+1)P(w_i|w_{1}^{i-1}) \approx P(w_i|w_{i-n+1}^{i-1}) = P(w_i|w_{i-1}, \dots ,w_{i-n+1})

    w1i1)P(wiwin+1i1)=P(wiwi1,,win+1)
    這可以通過對訓練語料做極大似然估計,
    P(wiwin+1i1)=Count(wi,wi1,,win+1)Count(wi1,,win+1) P(w_i|w_{i-n+1}^{i-1}) = \frac{Count(w_i, w_{i−1},…,w_{i−n+1})}{Count(w_{i−1},…,w_{i−n+1)}}

  • 由此我們可以求一段文字(句子)s

    s 的概率

    • 首先在句子的首尾增加兩個特殊標記 <s>, </s>\text{<s>, </s>}

    • 再通過鏈式法則,以bigram(n=2)為例,
      P(s)=P(<s>,w1,,wN,</s>)=P(<s>)P(w1<s>)P(w2w1,<s>)P(wNw1N1,<s>

      )P(</s>w1N,<s>)=P(w1<s>)P(w2w1)P(wNwN1)P(</s>wN) \begin{aligned} P(s) &= P(\text{<s>}, w_1, \dots, w_N, \text{</s>}) \\ &= P(\text{<s>}) P(w_1 | \text{<s>}) P(w_2 | w_1, \text{<s>}) \dots P(w_N |w^{N−1}_1, \text{<s>})P( \text{</s>} |w^N_1, \text{<s>}) \\ &= P(w_1 | \text{<s>}) P(w_2 | w_1) \dots P(w_N |w_{N−1})P( \text{</s>} | w_N) \end{aligned}

      • 這裡忽略P(<s>)P(\text{<s>}),因為始終等於1
      • 這裡一共是N+1N+1(與很多地方說的都不一樣)
        • 不能沒有</s>\text{</s>}
          • 可以證明,對於一個固定長度NN,所有可能句子{SN}\{S_N\}的概率之和,即
            s{SN}P(<s>,w1,,wN)=1\sum_{s \in \{S_N\}} P(\text{<s>}, w_1, \dots, w_N) = 1
          • 那麼對於不同長度的句子集合,即“所有可能的句子”,其概率之和 > 1
    • 通常,為了防止概率(<1)連乘 導致浮點underflow,對其取對數,這樣乘法就變成了加法
      logP(s)=logP(w1&lt;s&gt;)+logP(w2w1)++logP(&lt;/s&gt;wN)\log P(s) = \log P(w_1 | \text{&lt;s&gt;}) + \log P(w_2 | w_1) + \dots + \log P(\text{&lt;/s&gt;}|w_N)

2. Perplexity(困惑度)

剛才我們通過訓練集得到了語言模型,而perplexity是一種評價語言模型在測試集上表現的方法

  • 對一句句子來說,
    Perplexity(s)=P(s)1N+1=21N+1logP(s)Perplexity(s) = P(s)^{-\frac{1}{N+1}} = 2^{-\frac{1}{N+1} \cdot \log P(s)}

  • 對於bigram LM來說,就是
    1P(w1&lt;s&gt;)P(w2w1)P(wNwN1)P(&lt;/s&gt;wN)N+1\sqrt[N+1]{\frac{1}{P(w_1 | \text{&lt;s&gt;}) P(w_2 | w_1) \dots P(w_N |w_{N−1})P( \text{&lt;/s&gt;} | w_N)}}

  • 對於整個測試集,我們再對所有句子的perplexity,求幾何平均,得到整體的結果
    這裡用NN&#x27;表示所有測試集中句子長度之和,即N=(Nk+1)N&#x27;=\sum (N_k+1)
    Perplexity=P(S)1N=21NlogP(S)=2logP(sk)(Nk+1)Perplexity = P(S)^{-\frac{1}{N&#x27;}} = 2^{-\frac{1}{N&#x27;} \cdot \log P(S)} = 2^{-\frac{\sum \log P(s_k)}{\sum (N_k+1)}}

  • 解釋

    • 注意上面的指數表達形式,其中1Nlogp(S)-\frac{1}{N&#x27;} \log p(S)可以理解為(對詞平均的)交叉熵(cross-entropy),也就是H(q,p)=q(w)logp(w)H(q, p) = -\sum q(w) \log p(w)
    • 這裡q(w)q(w)是經驗分佈,即nN\frac{n}{N&#x27;}

      相關推薦

      N-gram語言模型 & Perplexity & 平滑

      1. N-gram語言模型 語言模型(Language Model,LM)的一個常見任務,是已知一句話的前面幾個詞,預測下一個是什麼,即對P(wi∣w1i−1)P(w_i|w_1^{i−1})P(wi​∣w1i−1​)建模 N-gram語言模型,是基於

      n-gram語言模型平滑演算法

      一、n-gram模型概念 n-gram模型也稱為n-1階馬爾科夫模型,它有一個有限歷史假設:當前詞的出現概率僅僅與前面n-1個詞相關,可以表示為:                     &n

      通俗理解N-gram語言模型。(轉)

      資料 簡化 事情 自然 自然語言 規模 什麽 發音 給定 N-gram語言模型 考慮一個語音識別系統,假設用戶說了這麽一句話:“I have a gun”,因為發音的相似,該語音識別系統發現如下幾句話都是可能的候選:1、I have a gun. 2、I have a gu

      (五)N-gram語言模型的資料處理

      一、步驟 資料集說明:一段英文 (1)分詞:把原始的英文分詞,只保留詞之間的順序不變,多個句子也是看出整體進行分詞。 (2)統計詞頻:按照n元進行詞頻統計,比如“I love NLP I enjoy it”當n=2時候,可以劃分為(【I love】,【love NLP】,【NLP

      (四)N-gram語言模型與馬爾科夫假設

      1、從獨立性假設到聯合概率鏈 樸素貝葉斯中使用的獨立性假設為 P(x1,x2,x3,...,xn)=P(x1)P(x2)P(x3)...P(xn)(1) (1

      N-Gram語言模型

      一、n-gram是什麼 wikipedia上有關n-gram的定義: n-gram是一種統計語言模型,用來根據前(n-1)個item來預測第n個item。在應用層面,這些item可以是音素(語音識別應用)、字元(輸入法應用)、詞(分詞應用)或鹼基對(基因資訊

      N-gram語言模型與馬爾科夫假設

      1、從獨立性假設到聯合概率鏈 樸素貝葉斯中使用的獨立性假設為  P(x1,x2,x3,...,xn)=P(x1)P(x2)P(x3)...P(xn)(1) (1)P(x1,x2,x3,...,xn)=P(x1)P(x2)P(x3)...P(xn) 去掉獨立性假設,有下面這個恆等式,即聯

      N語言模型

      語言模型是幹嘛的? 語言模型可以計算任何句子的概率。例如,“I love you”的概率是多少?用數學語言表述,N元語言模型(N-gram model)根據一個詞語的前N−1個詞語,來計算這個詞語的概率。如果我們有了一個2元模型,“I love you”的概率

      語言模型N-gram的理解

      今天我們一起來學習一下語言模型N-gram,首先我們來用數學的方法來描述一下語言的規律,這個數學模型就是我們在自然語言處理中的統計語言模型(Statistical Language Model)。在自然語言處理中,所謂的一個句子是否合理通順,就看這個句子的可能性,這裡的可能性就要用概率來

      python 自然語言處理 統計語言建模 - (n-gram模型

      N-gram語言模型 考慮一個語音識別系統,假設使用者說了這麼一句話:“I have a gun”,因為發音的相似,該語音識別系統發現如下幾句話都是可能的候選:1、I have a gun. 2、I have a gull. 3、I have a gub. 那麼問題來了,到底哪一個是正確答案呢?

      自然語言處理中的N-Gram模型詳解

      N-Gram(有時也稱為N元模型)是自然語言處理中一個非常重要的概念,通常在NLP中,人們基於一定的語料庫,可以利用N-Gram來預計或者評估一個句子是否合理。另外一方面,N-Gram的另外一個作用是用來評估兩個字串之間的差異程度。這是模糊匹配中常用的一種手段。本文將從此開始

      N-gram統計語言模型(總結)

      為了解決引數空間過大的問題,引入了馬爾科夫假設:任意一個詞的出現的概率僅僅與它前面出現的有限的一個或者幾個詞有關。如果一個詞的出現的概率僅於它前面出現的一個詞有關,那麼我們就稱之為bigram model(二元模型)。即    P(S) = P(W1,W2,W3,…,Wn)=P(W1)P(W2|W1)P

      2017MySQL中文索引解決辦法 自然語言處理(N-gram parser)

      ray spa 全文索引 rom alt lte int 中文索引 ble   問題:長期以來MYSQL搜索對於中文來說不太理想,InnoDB引擎對FULLTEXT索引的支持是MySQL5.6新引入的特性,但是用“初級”一詞在“我是一名初

      N-Gram模型

      組成 下一個 相關 出現 缺陷 wid html order hellip http://www.cnblogs.com/chaosimple/p/3376438.html N-Gram模型時大詞匯連續語音識別中常用的一種語言模型,對中文而言,我們稱之為漢語語言模型(CL

      為什麼使用神經網路訓練得到的語言模型不需要做資料平滑

      我們都知道,在自然語言處理的語言模型裡面,最核心的就是計算得到一個句子的概率,為了得到這個概率,我們需要計算得到一系列的條件概率。這些條件概率就是整個語言模型的引數。 為了得到條件概率,我們可以有兩種不同的方法。 第一種就是使用統計概率方法,通過統計的方法得到不同的詞對的條件概率。這種方

      一文詳解NGram語言模型以及困惑度perplexity

        歡迎關注“勇敢AI”公眾號,更多python學習、資料分析、機器學習、深度學習原創文章與大家分享,還有更多電子資源、教程、資料集下載。勇敢AI,一個專注於人工智慧AI的公眾號。 ==========================================

      詞向量的Distributed Representation與n元語法模型(n-gram model)

      所謂的word vector,就是指將單詞向量化,將某個單詞用特定的向量來表示。將單詞轉化成對應的向量以後,就可以將其應用於各種機器學習的演算法中去。一般來講,詞向量主要有兩種形式,分別是稀疏向量和密集向量。 所謂稀疏向量,又稱為one-hot representation,就是用一個很長的

      快速熟悉one-hot,N-gram,word2vec模型

      在自然語言處理領域,最開始的學習肯定繞不開one-hot,N-gram,word2vec。下文會快速,簡要的介紹這兩種技術,至於更多的技術細節,可以參考文章最後的參考文獻。在閱讀了本篇文章後,讀者應該能夠達到如下幾個目的: 1.明白one-hot,N-gram,word2v

      一種基於CNN的自動化提取n-gram feanture的文字分類模型

      今天寫的部落格主要參考了清華大學黃民烈老師團隊2018年在IJCAI上發表的paper《Densely Connected CNN with Multi-scale Feature Attention for Text Classification》。 這篇p

      中文資訊處理 N-gram模型

      一. 什麼是建模?模型又是什麼? 建模,是人們為了理解事物而對事物做出的一種抽象,是對事務進行書面無歧義的描述。 模型就是對實際問題或者是客觀規律進行的形式化的表達。 二. 關於語言模型 長久以來,人們一直希望計算機可以理解我們人類的