【NLP 困惑度解析和python實現】

**困惑度(Perplexity)**是自然語言處理和機器學習中常用的評價指標,尤其在評估語言模型時廣泛使用。它衡量的是一個概率模型對一個樣本(如一句話)的預測能力。


一、困惑度的定義

對于一個語言模型 $ P $ 和一個測試語料 $ W = w_1, w_2, \dots, w_N $,其困惑度定義為:

Perplexity = P ( w 1 , w 2 , … , w N ) ? 1 N = exp ? ( ? 1 N ∑ i = 1 N log ? P ( w i ) ) \text{Perplexity} = P(w_1, w_2, \dots, w_N)^{-\frac{1}{N}} = \exp\left( -\frac{1}{N} \sum_{i=1}^N \log P(w_i) \right) Perplexity=P(w1?,w2?,,wN?)?N1?=exp(?N1?i=1N?logP(wi?))

其中:

  • $ N $ 是測試集中詞的總數;
  • $ P(w_i) $ 是模型對第 $ i $ 個詞的概率估計;
  • 求和是對所有詞的概率取對數后的總和;
  • 外層指數化是為了得到更直觀的數值。

二、計算步驟

假設你有一個語言模型,并且已經對某個句子做了概率預測(即每個詞的概率),你可以按以下步驟計算困惑度:

步驟 1:獲取詞的對數概率

給定一個句子,例如:

“the cat sat on the mat”

假設你的模型輸出了每個詞的條件概率如下:

概率 P ( w i ) P(w_i) P(wi?) log ? P ( w i ) \log P(w_i) logP(wi?)
the0.1-2.30
cat0.05-3.00
sat0.02-3.91
on0.07-2.66
the0.1-2.30
mat0.08-2.53

注意,上表中使用的 log ? \log log 是以自然對數(ln)為基礎的。

步驟 2:求平均對數概率

avg_log_prob = 1 N ∑ i = 1 N log ? P ( w i ) = ? 2.30 ? 3.00 ? 3.91 ? 2.66 ? 2.30 ? 2.53 6 = ? 16.7 6 = ? 2.783 \text{avg\_log\_prob} = \frac{1}{N} \sum_{i=1}^N \log P(w_i) = \frac{-2.30 -3.00 -3.91 -2.66 -2.30 -2.53}{6} = \frac{-16.7}{6} = -2.783 avg_log_prob=N1?i=1N?logP(wi?)=6?2.30?3.00?3.91?2.66?2.30?2.53?=6?16.7?=?2.783

步驟 3:計算困惑度

Perplexity = exp ? ( ? avg_log_prob ) = exp ? ( 2.783 ) ≈ 16.16 \text{Perplexity} = \exp(-\text{avg\_log\_prob}) = \exp(2.783) \approx 16.16 Perplexity=exp(?avg_log_prob)=exp(2.783)16.16


三、代碼示例(Python)

import math# 假設這是模型對每個詞的預測概率
probs = [0.1, 0.05, 0.02, 0.07, 0.1, 0.08]# 計算 log probabilities
log_probs = [math.log(p) for p in probs]# 平均 log probability
avg_log_prob = sum(log_probs) / len(log_probs)# 計算困惑度
perplexity = math.exp(-avg_log_prob)print("Perplexity:", perplexity)

輸出類似:

Perplexity: 16.16

四、解釋與意義

  • 困惑度越低越好,表示模型對測試數據的預測越準確。
  • 如果困惑度很高,說明模型難以確定下一個詞是什么,不確定性大。
  • 最理想的情況是模型對每個詞都給出高概率,這時困惑度會很低。

五、注意事項

  1. 平滑處理:實際中由于某些詞可能未出現在訓練數據中,直接使用最大似然估計會導致概率為 0,困惑度變成無窮大。通常需要使用 拉普拉斯平滑Kneser-Ney 平滑 等方法。

  2. 交叉熵損失:困惑度和交叉熵密切相關。實際上,在深度學習中我們常用交叉熵損失來訓練語言模型,而困惑度是它的指數形式:

    Perplexity = exp ? ( CrossEntropyLoss ) \text{Perplexity} = \exp(\text{CrossEntropyLoss}) Perplexity=exp(CrossEntropyLoss)


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83217.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83217.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83217.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

編程題 02-線性結構3 Reversing Linked List【PAT】

文章目錄 題目輸入格式輸出格式輸入樣例輸出樣例 題解解題思路完整代碼 編程練習題目集目錄 題目 Given a constant K K K and a singly linked list L L L, you are supposed to reverse the links of every K K K elements on L L L. For example, given L being 1 → …

互聯網大廠Java求職面試實戰:Spring Boot到微服務全景解析

💪🏻 1. Python基礎專欄,基礎知識一網打盡,9.9元買不了吃虧,買不了上當。 Python從入門到精通 2. 我的免費工具站: 歡迎訪問 https://tools-6wi.pages.dev/ 😁 3. 畢業設計專欄,畢業…

課程11. 計算機視覺、自編碼器和生成對抗網絡 (GAN)

計算機視覺、自編碼器和生成對抗網絡(GAN) 自動編碼器Vanilla自動編碼器使用 AE 生成新對象. 變分 AE (VAE)AE 條件 GAN理論示例下載并準備數據GAN模型 額外知識 課程計劃: 自動編碼器: 自動編碼器結構;使用自動編碼器…

MarkitDown:AI時代的文檔轉換利器

在當今AI快速發展的時代,如何高效地將各種格式的文檔轉換為機器可讀的格式,成為了一個迫切需要解決的問題。今天,我們來介紹一款由微軟開發的強大工具——MarkitDown,它正是為解決這一問題而生的。 什么是MarkitDown? MarkitDown是一個用Python編寫的輕量級工具,專門用…

Python實戰案例:打造趣味猜拳小游戲

Python實戰案例:猜拳小游戲 文章目錄 Python實戰案例:猜拳小游戲一、案例背景二、代碼實現三、代碼解析3.1 執行過程3.2 流程圖 四、案例總結1. 核心知識點運用2. 編程思維提升 一、案例背景 猜拳游戲(石頭剪刀布)是一款規則簡單…

MCP:重塑AI交互的通用協議,成為智能應用的基礎設施

目錄: 為什么我們需要一個AI世界的USB-C?MCP的核心架構與工作原理MCP如何解決當前AI生態系統的碎片化問題從代碼到實踐:構建基于MCP的智能應用MCP的未來:從工具到生態為什么我們需要一個AI世界的USB-C? 還記得在USB-C標準普及之前,我們的數字生活是什么樣子嗎?抽屜里塞…

如何保證RabbitMQ消息的順序性?

保證RabbitMQ消息的順序性是一個常見的需求,尤其是在處理需要嚴格順序的消息時。然而,默認情況下,RabbitMQ不保證消息的全局順序,因為消息可能會通過不同的路徑(例如不同的網絡連接或線程)到達隊列&#xf…

HTML-2.2 列表--無序列表、有序列表、定義列表

本系列可作為前端學習系列的筆記,代碼的運行環境是在HBuilder中,小編會將代碼復制下來,大家復制下來就可以練習了,方便大家學習。小編作為新晉碼農一枚,會定期整理一些寫的比較好的代碼,作為自己的學習筆記…

Vuex和Vue的區別

Vue和Vuex有著不同的功能和定位,主要區別如下: 概念與功能 - Vue:是一個構建用戶界面的JavaScript框架,專注于視圖層的開發,采用組件化的方式構建應用程序,通過數據綁定和指令系統,能方便地…

數據可視化-----子圖的繪制及坐標軸的共享

目錄 繪制固定區域的子圖 (一)、繪制單子圖 subplot()函數 Jupyter Notebook的繪圖模式 (二)、多子圖 subplots()--可以在規劃好的所有區域中一次繪制多個子圖 (三)、跨行跨列 subplot2grid()---將整…

基于Qt6 + MuPDF在 Arm IMX6ULL運行的PDF瀏覽器——MuPDF Adapter文檔

項目地址:總項目Charliechen114514/CCIMXDesktop: This is a Qt Written Desktop with base GUI Utilities 本子項目地址:CCIMXDesktop/extern_app/pdfReader at main Charliechen114514/CCIMXDesktop 前言 這個部分說的是Mupdf_adaper下的文檔的工…

Linux 防火墻 firewalld 實戰配置教程!

最近工作上處理了很多關系配置服務器防火墻的操作,于是想寫一篇理論與實踐并存的文章,在這里分享給大家,希望對您有所幫助! 主要包括以下幾部分內容: 防火墻概述 firewalld原理框架 與iptables的異同點 firewalld常…

C#發送文件到藍牙設備

測試環境: visual studio 2022 win11筆記本電腦,具有藍牙功能 .net6控制臺 測試步驟如下: 1 新增名為BluetoothDemo控制臺項目 2 通過nuget安裝InTheHand.Net.Bluetooth,版本選擇4.2.1和安裝InTheHand.Net.Obex,版…

初識 Pandas:Python 數據分析的利器

在數據分析、數據清洗和可視化等領域,Python 無疑是最受歡迎的語言之一,而在 Python 的數據處理生態中,Pandas 是最核心、最基礎的庫之一。如果你接觸數據分析、機器學習、金融建模,或者只是想處理一些 Excel 表格,那么…

SpringBoot項目使用POI-TL動態生成Word文檔

近期項目工作需要動態生成Word文檔的需求,特意調研了動態生成Word的技術方案。主要有以下兩種: 第一種是FreeMarker模板來進行填充;第二種是POI-TL技術使用Word模板來進行填充; 以下是關于POI-TL的官方介紹 重點關注&#xff1…

fakeroot 在沒有超級用戶權限的情況下模擬文件系統的超級用戶行為

fakeroot 是一個在 Linux 環境中使用的工具,它允許用戶在沒有超級用戶權限的情況下模擬文件系統的超級用戶行為。它是一個在 Linux 環境中廣泛使用的工具,通常包含在大多數 Linux 發行版的軟件倉庫中。? 主要功能 ?模擬 root 權限?:fake…

Spring Spring Boot 常用注解整理

Spring & Spring Boot 常用注解整理 先理解核心概念:什么是注解(Annotation)?第一部分:IOC(控制反轉)和 DI(依賴注入)1. Component2. Service, Repository, Controll…

AIGC與數字媒體實驗室解決方案分享

第1部分 概述 1.1 建設目標 1.深度融合AIGC技術,培養能夠駕馭新質生產力的數字媒體人才 通過引入前沿的AIGC技術,確保學生能夠接觸到最先進的人工智能應用。教學內容理論和實踐結合,讓學生在實際操作中熟練掌握AIGC工具,生成高…

訊聯云庫項目開發日志(二)AOP參數攔截

目錄 利用AOP實現參數攔截: 一、??HTTP請求進入Controller?(發送郵件驗證碼) 二、AOP切面觸發 1. 切面攔截(GlobalOperactionAspect.class) method.getAnnotation()?? null interceptor 判斷?? 2.參數校驗注解 3. 參…

用OBD部署OceanBase社區版的避坑指南

以下是用OBD黑屏部署 OceanBase社區版時容易碰到的幾個問題及解決思路,供大家參考。 一、 遇坑步驟:用yaml文件部署集群: obd cluster deploy obtest -c mini-single-example.yaml 報錯: Package oceanbase-ce-4.2.1.8-108000…