【NLP】 19. Tokenlisation 分詞 BPE, WordPiece, Unigram/SentencePiece

1. 翻譯系統性能評價方法

在機器翻譯系統性能評估中,通常既有人工評價也有自動評價方法:

1.1 人工評價

人工評價主要關注以下幾點:

  • 流利度(Fluency): 判斷翻譯結果是否符合目標語言的語法和習慣。
  • 充分性(Adequacy): 判斷翻譯是否傳達了原文的全部信息。
  • 評價方式: 可以通過打分(Rate)、排序(Rank)以及編輯比較(Edit & Compare)的方式進行人工評測。

1.2 自動評價指標

自動評價方法常用的包括基于字符 n-grams 的指標(如 chrF)和基于單詞 n-grams 的指標(如 BLEU)。

chrF 指標
  • 基本思想:
    將翻譯結果與參考譯文在字符級別進行 n-gram 匹配,適合于捕捉詞形變化(如“read”與“Reading”),適合處理小寫、標點、甚至拼寫錯誤等情況。
  • 常用公式:
    • 精確率(Precision):
      precision = TP / (TP + FP)

    • 召回率(Recall):
      recall = TP / (TP + FN)

    • F-beita 分數(F_β-score):

      F β = ( ( 1 + β 2 ) ? T P ) / ( ( 1 + β 2 ) ? T P + β 2 ? F N + F P ) F_β = ((1+β^2)·TP) / ((1+β^2)·TP + β^2·FN + FP) Fβ?=((1+β2)?TP)/((1+β2)?TP+β2?FN+FP)
      其中,beita 參數控制精確率和召回率之間的權重。例如,F2-score中 β= 2(公式:F2 = 5TP/(5TP + 4FN + FP)),而 F0-score 則相當于Precision, 當β很大的時候,相當于Recall

當所評估句子數量較多時,chrF 能有效反映字符級匹配情況,但當匹配以單詞為單位時,可能出現“沒有4-gram匹配得分為0”的情況,因此常配合其他指標綜合評估。

BLEU 指標
  • 基本思想:
    BLEU 通過對比翻譯輸出與參考譯文的單詞 n-grams(通常計算一元、二元、三元和四元 n-grams)精確率,并取幾何平均后乘以一個懲罰因子(brevity penalty)來處理生成句子較短的問題。
  • 局限性:
    由于BLEU只計算精確率,不考慮單詞的形態變化(例如“read”和“Reading”在嚴格匹配時視為不同)以及上下文語序,且幾何平均在數據量不足時敏感,常常無法完全反映翻譯的流利性和充分性。

對比

BLEU vs. chrF

特征BLEUchrF
全稱Bilingual Evaluation UnderstudyCharacter n-gram F-score
單位基于詞級別(word-level)基于字符級別(character-level)
匹配單位n-gram(如詞組)字符n-gram(如連續的字符組合)
語言適用性英語/法語等空格分詞語言效果較好對形態復雜語言(如德語、芬蘭語、中文)效果更好
對詞形變化的魯棒性差(如“run”和“runs”會被認為不同)好(字符n-gram可以捕捉到詞形變化)
對詞序敏感非常敏感不那么敏感
評價精度偏向于流暢性(fluency)更能捕捉語義和詞形匹配(adequacy)
懲罰機制有 Brevity Penalty 懲罰過短的句子沒有專門懲罰機制
實現工具NLTK、SacreBLEU官方工具:chrF++,也在 SacreBLEU 中支持

2. Tokenisation 的基本概念與問題

Tokenisation(分詞或詞元化)指的是將一段文本切分為基本單元(token),如單詞、標點符號或子詞單元。傳統方法多采用基于空格分割,但存在以下問題:

2.1 基于空格分詞的局限性

  • 簡單的空格分割:
    通常將文本按照空格拆分出各個 token,此方法對于英文等基于空格分詞的語言基本適用。但在實際情況中會遇到:
    • 縮寫問題: 如 “won’t” 表示 “will not”,空格分詞時可能作為一個整體或拆分為 “won” 和 “'t”。
    • 標點處理: 如 “great!” 中的感嘆號有可能被保留或刪除,不同工具處理方式不一致。
    • 罕見詞或變體: 如 “taaaaaaasty” 可能有多種變體,直接按空格分割,無法解決拼寫變化或冗余重復問題。
    • 拼寫錯誤或新詞: 如 “laern” (原意 learn)和 “transformerify” 這樣的新造詞也會被簡單拆分,而無法充分捕捉原有語義。

2.2 Tokenisation 幫助處理罕見詞等問題

通過更細粒度的分詞方法,可以減少由于拼寫錯誤、變形或新詞帶來的問題。例如,將長詞拆成子詞單元,可以使得詞形變化不至于使整個單詞無法識別。

  • 實例:
    • “laern” 拆分為 “la##”, “ern”。
      這樣一來,即使遇到拼寫錯誤或不常見的詞,模型也能通過子詞組合部分捕捉到詞語的語義,從而提高整體泛化能力。

3. 子詞分割策略與方法

為了更好地處理詞形變化、罕見詞及新詞,現有許多基于子詞單位的分詞算法。主要包括以下三類:

3.1 Byte-Pair Encoding (BPE)

BPE 的基本算法步驟為:

  1. 初始化詞匯表:
    將詞匯表設置為所有單獨的字符。
  2. 查找頻率最高的相鄰字符對:
    遍歷語料,找出最常在一起出現的兩個字符或子詞。
  3. 合并:
    將這一對合并,生成一個新的子詞單位,并更新整個語料中的分詞表示。
  4. 檢查詞匯表大小:
    如果詞匯表大小未達到預設目標(例如 100,000),則返回步驟2繼續合并,直到達到要求。

這種方法簡單高效,常用于許多現代 NLP 框架中。
假設我們現在的訓練語料有以下 4 個詞:

1. low
2. lower
3. newest
4. widest

初始我們會把每個詞都拆成字符 + 特殊結束符號 </w>來防止詞和詞連接在一起:

l o w </w>  
l o w e r </w>  
n e w e s t </w>  
w i d e s t </w>  

🔁 步驟 0:統計所有字符對頻率

從上面所有詞中,統計所有相鄰字符對的頻率(包括 </w>):

PairCount
l o2
o w2
w 1
w e1
e r1
r 1
n e1
e w1
w e1
e s2
s t2
t 2
w i1
i d1
d e1

注意:

  • w e 出現了兩次(一次是 “lower”,一次是 “newest”);
  • e ss tt </w> 是在 “newest” 和 “widest” 中反復出現的。

🔨 步驟 1:合并頻率最高的字符對

我們假設 s t 是當前頻率最高的(2 次)。那我們合并 s t → st

現在變成:

l o w </w>  
l o w e r </w>  
n e w e st </w>  
w i d e st </w>  

🔁 步驟 2:重新統計字符對頻率

重新統計所有字符對(只列幾個):

PairCount
l o2
o w2
e st2
st 2

我們發現 e stst </w> 又很頻繁 → 合并 e st → est


🔨 步驟 3:合并 e st → est

結果:

bashCopyEditl o w </w>  
l o w e r </w>  
n e w est </w>  
w i d est </w>  

你看,“newest” 和 “widest” 的后綴變成了統一的 est,這就是 BPE 的威力!


🔁 再來幾輪(每次合并頻率最高的)

假設繼續合并:

Round合并操作影響
4l olo得到 lo w
5lo wlow得到完整詞 low
6e rer合并 “lower” 的尾部
7w ewe合并 “newest” 的 “we” 部分
8we + rwer可得 “lower” 更完整

每合并一次,詞匯表中就新增一個子詞(如 lowester 等),最終我們就有一個子詞詞表,用于之后的分詞。


? 最終效果(假設分詞完成后):
原始詞分詞結果
lowlow
lowerlow + er
newestnew + est
widestwid + est

這樣,即使將來出現一個從沒見過的詞,比如 bravest,我們也可以分成:

brav + est

🧠 總結亮點
  • BPE 把頻繁出現的字符組合合并成更長的單元
  • 最終詞匯表里既有完整詞(如 low),也有子詞(如 est, er);
  • 能處理拼寫變化、形態變化、新詞
  • 是 GPT、BERT、RoBERTa、T5 等模型使用的標準方法。

3.2 WordPiece

WordPiece 最早由 Google 提出,其主要步驟與 BPE 類似,但在合并步驟中使用更復雜的決策標準:

  • 訓練一個 n-gram 語言模型,
    并考慮所有可能的詞匯對,選擇那個加入后能最大程度降低困惑度perplexity的組合;
  • HuggingFace 實現的 WordPiece 則有時選擇使得合并后 token 的概率比例滿足某個公式,例如選擇使得
    “|combined| / (|first symbol| * |second symbol|)” 最大的詞對。

這種方法可在一定程度上更好地平衡子詞與完整詞的表達效果。

?? 分詞示例(WordPiece)

playing 為例,假設詞表中包含:

[ "play", "##ing", "##er", "##est", "##s" ]

playing 會被分為:

play + ##ing

再比如 unbelievable

如果詞表中有:

["un", "##believable", "##able", "##lievable", ...]

則可能被分為:

un + ##believable

(如果沒有 “believable”,那就會繼續拆成 ##believe + ##able


🎯 WordPiece 構建流程(簡要)
  1. 初始化詞表:包含所有單字符 token(如 a, b, c,…);
  2. 基于最大似然概率計算所有可能合并的對;
  3. 每輪合并一對,使得整體訓練語料的似然性最大;
  4. 直到詞表達到預設大小(如 30,000 個 token)為止;

這比 BPE 更慢,但能得到更“語言合理”的子詞。


🔍 分詞過程總結

WordPiece 是一種貪心最長匹配算法,遵循以下原則:

  1. 從詞首開始;
  2. 找到最長可匹配的 token(如 “unbelievable” → “un”);
  3. 然后從該點繼續向右,查找 ## 前綴的匹配;
  4. 直到整個詞完成或無法繼續拆分;

🧠 舉個例子(完整流程)

假設詞表里有:

["un", "##believe", "##able", "##believable"]

處理 unbelievable

  • unbelievableun + ##believable

再處理 unbelievably

如果 ##ly 也在詞表中,就可以是:

  • un + ##believable + ##ly

如果 ##believable 不在詞表中:

  • 嘗試 un + ##believe + ##able

? 總結

BPE 看頻率,WordPiece 看語言模型概率。

WordPiece 更“聰明”,但 BPE 更“高效”。它們都用來解決“詞太多”和“未知詞”的問題。

WordPiece vs. BPE 的區別
特性BPEWordPiece
合并策略每次合并頻率最高的 pair每次合并帶來最大 語言模型概率提升 的 pair
評分標準純粹基于頻率基于最大似然估計(MLE)
分詞方式貪心從左到右合并也使用貪心,但遵循“最大匹配”原則
應用例子GPT、RoBERTa、OpenNMTBERT、ALBERT、DistilBERT 等
詞邊標記可無(GPT類)## 表示詞中間部分(如 play ##ing

3.3 Unigram / SentencePiece

Unigram 模型(或稱 SentencePiece)采取另一種策略,不是從最小單元不斷合并,而是:

  1. 初始化:
    從所有字符以及語料中頻率較高的連續字符序列(甚至包括完整單詞)構建一個較大的初始詞匯表;
  2. 精簡:
    通過一種復雜的概率模型和迭代過程,逐步刪除貢獻較小的詞匯項,直到詞匯表達到預期大小。

這種方法的優勢在于能夠同時考慮大單元和小單元的信息,從而得到更優的子詞表示。

用 Unigram 分詞 internationalization

假設詞表中有:

["international", "##ization", "inter", "##national", "##ize", "##ation", "##al", "##i", "##zation"]

Unigram 會考慮所有可能組合:

  1. international + ization
  2. inter + national + ization
  3. inter + nation + al + ization

對每個組合計算 概率乘積(P(a) × P(b) × P? …),然后選取概率 最大的組合方式

比如:

international + ization → P1  
inter + national + ization → P2  
inter + nation + al + ization → P3

選取 max(P1, P2, P3) 那個組合。

3.4 各方法的比較
  • BPE: 簡單、直接,廣泛應用,合并依據頻率;
  • WordPiece: 考慮對語言模型困惑度的影響,通常效果更好,但實現較復雜;
  • Unigram/SentencePiece: 允許初始詞匯同時包含較大和較小單元,通過概率模型精簡詞匯,具有更大的靈活性。
Unigram vs. BPE/WordPiece
特性Unigram(SentencePiece)BPEWordPiece
分詞方式選擇概率最高的子詞組合(非貪心)左到右合并字符對(貪心)貪心最長匹配
詞表生成方式預設大詞表 → EM算法刪掉低概率的子詞每輪合并頻率最高的 pair每輪合并最大增益的 pair
分詞結果是否唯一? 可能多個組合概率差不多? 唯一貪心路徑? 貪心最長匹配
優點更靈活,能找到最優子詞拆法簡單快速精確但復雜
模型代表ALBERT, XLNet, T5, mBART, SentencePieceRoBERTa, GPT, MarianMTBERT, DistilBERT
特殊符號不需要空格、可直接處理未空格文本需提前空格/處理標記通常需要空格

4. 特殊常見詞(例如“the”)的處理

在分詞和詞嵌入訓練中,常見詞(如 “the”、“is”、“and” 等)通常出現頻率極高,這會帶來兩個問題:

  1. 模型訓練時的影響:
    高頻詞容易主導模型權重,導致訓練過程中對低頻實義詞的信息關注不足。為此,許多方法會在訓練時對這些高頻詞進行下采樣(sub-sampling),降低它們在訓練中的出現頻率。
  2. 評價指標的匹配:
    在翻譯評價、自動摘要或其他生成任務中,通常不希望因為 “the” 這種功能詞的不同寫法(例如大小寫問題)產生低分。在實際 tokenisation 中,往往會將所有單詞統一小寫,或者對停用詞單獨處理,從而確保這些高頻但語義信息較弱的詞對整體模型影響較小。

例如,在 BLEU 計算中,盡管 “read” 和 “Reading” 在大小寫和形態上有所不同,但通常在預處理階段會進行小寫化;而在子詞分割中,“the” 可能不再被拆分,因為它本身已經十分常見而且具有固定形式。因此,“the” 通常被保留為一個完整的 token,同時在訓練和評價中通過下采樣等方式控制其權重。


5. 實際案例補充

假設我們有一段英文文本作為翻譯系統的輸入與參考譯文,并希望利用自動評價指標來評估翻譯質量,同時考慮分詞細節:

案例 1:翻譯評價中 chrF 指標計算

  • 參考譯文: “I like to read too”
  • 機器譯文: “Reading, I too like”
  • 處理流程:
    1. 分詞:
      利用子詞分割策略處理標點和縮寫,確保“Reading”可以與“read”在字符 n-gram 層面匹配。

    2. 計算字符 n-gram 匹配:
      對機器譯文和參考譯文分別計算字符 n-grams,再計算精確率和召回率。

    3. Fbeita 分數計算:

    4. 結果說明:
      通過字符匹配,可以部分容忍由于詞形變化(例如 “read” 與 “Reading”)而帶來的微小差異。

案例 2:使用 BPE 處理新詞

假設文本中出現一個新詞 “transformerify”,傳統的詞匯表中可能未收錄。通過 BPE 分詞過程:

  1. 初始化:
    將 “transformerify” 拆分為單個字符,即 [“t”, “r”, “a”, “n”, “s”, “f”, “o”, “r”, “m”, “e”, “r”, “i”, “f”, “y”]。
  2. 迭代合并:
    統計在整個語料中最頻繁出現的相鄰字符對,如果 “er” 出現次數最多,則將“e”與“r”合并為 “er”。不斷進行,直到達到預定詞匯大小。
  3. 結果:
    最終可能將 “transformerify” 分割為 “transforme” 和 “##ify”,使得即使新詞未見過,也能利用已有的子詞表示捕捉部分語義。

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

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

相關文章

openai發布今天發布了o3和o4-mini。

ChatGPT Plus、Pro和Team用戶已經可以使用o3、o4-mini和o4-mini-high&#xff0c;取代o1、o3-mini和o3-mini-high。具體特點&#xff1a; ChatGPT-o3 特點&#xff1a;o3模型使用高級推理技術&#xff0c;這意味著它在處理復雜問題和邏輯推理方面表現出色。但是不能聯網搜索 …

ESP-ADF外設子系統深度解析:esp_peripherals組件架構與核心設計(輸入類外設之觸摸屏 Touch)

目錄 ESP-ADF外設子系統深度解析&#xff1a;esp_peripherals組件架構與核心設計&#xff08;輸入類外設之觸摸屏 Touch&#xff09;簡介模塊概述功能定義架構位置核心特性 觸摸(Touch)外設觸摸外設概述觸摸外設API和數據結構外設層API&#xff08;periph_touch.h/periph_touch…

python 讀取分級目錄

import osdef read_files_in_directory(root_dir):# 遍歷根目錄下的所有文件和目錄for year_dir in os.listdir(root_dir):year_path os.path.join(root_dir, year_dir)if os.path.isdir(year_path): # 確保是目錄for month_dir in os.listdir(year_path):# if month_dir in …

MongoServerError: Authentication failed.處理辦法

1停止MongoDB服務&#xff1a; systemctl stop mongod2臨時修改MongoDB配置&#xff0c;禁用認證&#xff1a; vim /etc/mongdb.config 在配置文件中找到 security:authorization: disabled # 臨時關閉認證3.重啟MongoDB服務 # 重啟MongoDB服務 sudo systemctl restart mon…

ObjectInputStream 終極解析與記憶指南

ObjectInputStream 終極解析與記憶指南 一、核心本質 ObjectInputStream 是 Java 提供的對象反序列化流,繼承自 InputStream,用于讀取由ObjectOutputStream序列化的Java對象。 核心特性速查表 特性說明繼承鏈InputStream → ObjectInputStream核心功能實現Java對象反序列化…

Java面試高頻問題(1-5)

一、HashMap實現原理與并發問題 核心機制 1. 哈希沖突解決方案&#xff1a;采用數組鏈表紅黑樹結構&#xff08;JDK1.8&#xff09;&#xff0c;當鏈表長度超過閾值&#xff08;默認8&#xff09;時轉為紅黑樹&#xff0c;提升查詢效率 2. 擴容機制&#xff1a;當元素數量超過…

Genspark:重新定義AI搜索與代理的全能型工具

在當今快速發展的AI技術領域&#xff0c;搜索工具正在經歷前所未有的變革。Genspark&#xff0c;這家由前百度高管景鯤和朱凱華創立的AI公司&#xff0c;為我們帶來了全新的AI代理引擎體驗。作為一位專注于AI工具分享的博主&#xff0c;今天我將為大家詳細介紹這款強大的工具&a…

工作記錄3

前言: 繼續刷尚硅谷的前端視頻,查漏補缺。 JS (1)apply() 方法與 call() 方法 (2)構造函數 (3)原型對象<

photo-sphere-viewer 4.8.1在vue中使用

photo-sphere-viewer 加載單張平面圖 import { Viewer } from photo-sphere-viewerthis.viewer new Viewer({panorama: ‘完整的url,也可以是一個base64’,// Containercontainer: document.getElementById(viewer1),navbar: true,// Resize the panoramasize: {width: 100%,…

【PyTorch】PyTorch中的非線性激活函數詳解:原理、優缺點與實戰指南

目錄 PyTorch中的非線性激活函數詳解&#xff1a;原理、優缺點與實戰指南一、核心激活函數作用、分類與數學表達1. 傳統飽和型激活函數2. ReLU族&#xff08;加權和類核心&#xff09;3. 自適應改進型激活函數4. 輕量化與硬件友好型 二、優缺點對比與適用場景三、選擇策略與PyT…

中間件--ClickHouse-7--冷熱數據分離,解決Mysql海量數據瓶頸

在web應用中&#xff0c;當數據量非常大時&#xff0c;即使MySQL的存儲能夠滿足&#xff0c;但性能一般也會比較差。此時&#xff0c;可以考慮使用ClickHouse存儲歷史數據&#xff0c;在Mysql存儲最近熱點數據的方式&#xff0c;來優化和提升查詢性能。ClickHouse的設計初衷就是…

阿里一面:Nacos配置中心交互模型是 push 還是 pull ?(原理+源碼分析)

對于Nacos大家應該都不太陌生&#xff0c;出身阿里名聲在外&#xff0c;能做動態服務發現、配置管理&#xff0c;非常好用的一個工具。然而這樣的技術用的人越多面試被問的概率也就越大&#xff0c;如果只停留在使用層面&#xff0c;那面試可能要吃大虧。 比如我們今天要討論的…

DAY09:【pytorch】nn網絡層

1、卷積層 1.1 Convolution 1.1.1 卷積操作 卷積運算&#xff1a;卷積核在輸入信號&#xff08;圖像&#xff09;上滑動&#xff0c;相應位置上進行乘加卷積核&#xff1a;又稱為濾波器、過濾器&#xff0c;可認為是某種模式、某種特征 1.1.2 卷積維度 一般情況下&#xf…

Pinpoint - 大型分布式系統的 APM(應用性能管理)工具

文章目錄 一、關于 Pinpoint最新版本&#xff08;2024/10/23&#xff09;-- v3.0.1PHP, PYTHON 二、概述支持的模塊 一、關于 Pinpoint Pinpoint 是一個用于大型分布式系統的 APM&#xff08;應用性能管理&#xff09;工具&#xff0c;由 Java / PHP/PYTHON 編寫。 受 Dapper …

設計模式實踐:模板方法、觀察者與策略模式詳解

目錄 1 模板方法1.1 模板方法基本概念1.2 實驗1.2.1 未使用模板方法實現代碼1.2.2 使用模板方法的代碼 2 觀察者模式2.1 觀察者模式基本概念2.2 實驗 3 策略模式3.1 策略模式基本概念3.2 實驗 1 模板方法 1.1 模板方法基本概念 定義&#xff1a;一個操作中的算法的骨架 &…

Vue 2.0和3.0筆記

Vue 3 關于組件 今天回顧了下2.0關于組件的內容&#xff0c;3.0定義組件的方式多了一種就是通過單文件組件&#xff08;Single-File Component&#xff09;的方式將Vue的模板&#xff0c;邏輯和樣式放到一個文件中&#xff0c;2.0則不同&#xff0c;它是將模板放到一個屬性中…

前端面試-微前端

1. 什么是微前端&#xff1f;它的核心價值是什么&#xff1f; 答案&#xff1a; 微前端是一種將前端應用拆分為獨立模塊的架構模式&#xff0c;每個模塊可由不同團隊獨立開發、測試、部署和運行。其核心價值包括&#xff1a; 技術棧無關性&#xff1a;支持 React、Vue、Angul…

Axure高保真AI算法訓練平臺

點擊下載《Axure高保真AI算法訓練平臺(.rp) 》 原型效果&#xff1a;https://axhub.im/ax9/69fdf8f2b10b59c3/#g1 摘要 本文介紹了一款功能全面且高效的AI算法訓練平臺&#xff0c;旨在為數據科學家、研究人員和工程師提供從數據準備到模型部署的一站式解決方案。該平臺由四大…

Ubuntu服務器日志滿audit:backlog limit exceeded了會報錯解決方案-Linux 審計系統 (auditd) 工具

auditd 是 Linux 系統中的審計守護進程&#xff0c;負責收集、記錄和監控系統安全相關事件。以下是相關工具及其功能&#xff1a; 核心組件 auditd - 審計守護進程 系統的審計服務主程序 收集系統調用信息并寫入日志文件 通常存儲在 /var/log/audit/audit.log auditctl - 審計控…

Windows10系統RabbitMQ無法訪問Web端界面

項目場景&#xff1a; 提示&#xff1a;這里簡述項目相關背景&#xff1a; 項目場景&#xff1a; 在一個基于 .NET 的分布式項目中&#xff0c;團隊使用 RabbitMQ 作為消息隊列中間件&#xff0c;負責模塊間的異步通信。開發環境為 Windows 10 系統&#xff0c;開發人員按照官…