《分詞算法大揭秘:BPE、BBPE、WordPiece、ULM常見方法介紹》

分詞算法是自然語言處理(NLP)中的一個重要預處理步驟,它將文本分割成更小的單元(如單詞、子詞或字符)。以下是幾種常見的分詞算法:Byte Pair Encoding (BPE)、Byte-level BPE (BBPE)、WordPiece 和 Unigram Language Model (ULM)


1. Byte Pair Encoding (BPE)

論文摘要

  • 標題:Neural Machine Translation of Rare Words with Subword Units
  • 連接:點擊這里閱讀論文全文

核心思想

從一個基礎小詞表開始,通過不斷合并最高頻的連續token對來產生新的token。
詳細可參考BPE 算法原理及使用指南【深入淺出】
在這里插入圖片描述

具體做法

  1. 準備基礎詞表,如英文中26個字母加上各種符號,并初始化ID。
  2. 基于基礎詞表將準備的語料拆分為最小單元,末尾添加</ w>(示例中使用_)。
  3. 在語料上統計單詞內相鄰單元對的頻率,選擇頻率最高的單元對進行合并。
  4. 重復第3步直到達到預先設定的subword詞表大小或下一個最高頻率為1。

優缺點

  • 優點:可以有效地平衡詞匯表大小和編碼步數。
  • 缺點
    1. 無法提供帶概率的多個分詞結果。
    2. 局部高頻對合并可能破壞全局更有意義的組合。

2. Byte-level BPE (BBPE)

論文信息

  • 標題:Neural Machine Translation with Byte-Level Subwords
  • 鏈接:https://arxiv.org/pdf/1909.03341

核心思想

該論文提出了一種名為BBPE(Byte-level BPE)的新型機器翻譯方法,將傳統BPE的字符級操作擴展到字節級別,直接處理UTF-8編碼的字節序列。此舉有助于避免傳統字符級BPE中稀有字符(如生僻漢字)占用詞表空間的問題。

具體做法

  • 使用基礎詞表,采用256的字節集,UTF-8編碼。

優點

  1. 與BPE相媲美,但詞表大為減小。
  2. 可在多語言間通過字節級別的子詞實現更好的共享。
  3. 即使字符集不重疊,也可通過字節層面的共享實現良好的遷移。
  4. 高效的壓縮效果,根據文本中的重復模式和常見片段來動態生成詞匯表,尤其適用于大量重復內容的文本數據。
  5. 適用于多種類型的數據,包括文本、圖像等,因其基于字節級別的編碼方法。
  6. 無損壓縮,確保壓縮后的數據與原始數據無信息損失。
  7. 可解碼性,可輕松將編碼后的數據解碼回原始數據。
  8. 靈活性高,可根據需求調整壓縮效果和詞匯表大小。

缺點

  1. 編碼序列時可能略長于BPE,計算成本更高。
  2. 由byte解碼時可能會遇到歧義,需要通過上下文信息和動態規劃進行解碼,確保輸出有效句子。

BBPE和BPE的關鍵區別

在這里插入圖片描述


3. WordPiece

論文:Fast WordPiece Tokenization

  • 鏈接:https://arxiv.org/pdf/2012.15524

核心思想

與BPE類似,Fast WordPiece Tokenization 從基礎小詞表出發,通過合并子詞來生成最終詞表。不同之處在于,WordPiece 選擇合并的token對時基于token間的互信息而非頻率。這里的互信息衡量的是兩個子詞同時出現的概率相比于它們各自獨立出現的概率。
在這里插入圖片描述

具體做法

  1. 輸入:訓練語料和詞表大小 V。

  2. 準備基礎詞表,如英文字母和符號。

  3. 使用基礎詞表將語料拆分為最小單元。

  4. 基于拆分后的數據訓練語言模型,可以是 unigram 語言模型,通過極大似然估計。
    在這里插入圖片描述

  5. 選擇能最大程度增加訓練數據概率的 token 對進行合并。假設句子由 N 個子詞組成 S = ( t 1 , t 2 , . . . , t N ) S = (t_1, t_2, ..., t_N) S=(t1?,t2?,...,tN?),句子的似然值為所有子詞概率的乘積:
    log ? P ( s ) = ∑ i = 1 N log ? P ( t i ) \log P(s) = \sum_{i=1}^{N} \log P(t_i) logP(s)=i=1N?logP(ti?)
    合并相鄰兩個子詞 x 和 y 產生新的子詞 z,句子的似然值變化為兩個子詞之間的互信息:
    log ? P ( t z ) ? ( log ? P ( t x ) + log ? P ( t y ) ) = log ? P ( t z ) P ( t x ) P ( t y ) \log P(t_z) - (\log P(t_x) + \log P(t_y)) = \log \frac{P(t_z)}{P(t_x)P(t_y)} logP(tz?)?(logP(tx?)+logP(ty?))=logP(tx?)P(ty?)P(tz?)?
    每次選擇互信息最大的兩個子詞合并,基于子詞在語言模型上的關聯性,得分計算公式為:
    score = P ( t z ) P ( t x ) P ( t y ) \text{score} = \frac{P(t_z)}{P(t_x)P(t_y)} score=P(tx?)P(ty?)P(tz?)?

  6. 重復第 5 步直到達到預設的子詞表大小或概率增量低于閾值。

優點

  • 能平衡詞表大小和 OOV 問題

缺點

  • 可能產生一些不合理的子詞或錯誤劃分
  • 拼寫錯誤敏感
  • 對前綴支持不夠好

一種解決方案是將復合詞和前綴拆開處理。


4. Unigram Language Model (ULM)

核心思想

初始化一個大詞表,然后通過unigram語言模型計算刪除不同subword造成的損失來代表subword的重要性,保留loss較大或者說重要性較高的subword。ULM會傾向于保留那些以較高頻率出現在很多句子的分詞結果中的子詞,因為這些子詞如果被刪除,其損失會很大。

具體做法

  1. 輸入訓練語料和詞表大小V

  2. 準備基礎詞表:初始化一個很大的詞表,比如所有字符+高頻ngram,也可以通過BPE算法初始化

  3. 針對當前詞表,用語言模型(unigram lm)估計每個子詞在語料上的概率,比如EM算法,維特比算法尋找最優分割
    在這里插入圖片描述

  4. 計算刪除每個subword后對總loss的影響,作為該subword的loss

  5. 將子詞按照loss大小進行排序,保留前x%的子詞;注意,單字符不能被丟棄,以免OOV

  6. 重復步驟2到4,直到詞表大小減少到設定值

優點

  1. 使用的訓練算法可以利用所有可能的分詞結果,這是通過data sampling算法實現的
  2. 提出一種基于語言模型的分詞算法,這種語言模型可以給多種分詞結果賦予概率,從而可以學到其中的噪聲
  3. 使用時也可以給出帶概率的多個分詞結果

缺點

  1. 效果與初始詞表息息相關,初始的大詞表要足夠好,比如可以通過BPE來初始化
  2. 略顯復雜

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

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

相關文章

WordPress01 - 后臺常用功能

最近些日子研究Wordpress&#xff0c;做些簡單的筆記。 怎么安裝Wordpress&#xff0c;怎么進的后臺&#xff0c;這些咱就不嘮了哈&#xff0c;網上到處是教程。 目錄 1&#xff0c;Wordpress的后臺 1-1&#xff0c; Posts(投稿) 1-2&#xff0c;Media(媒體) 1-3&#xf…

R8周:RNN實現阿爾茨海默病診斷

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客 &#x1f356; 原作者&#xff1a;K同學啊 一、前期準備 1.設置GPU import numpy as np import pandas as pd import torch from torch import nn import torch.nn as nn import torch.nn.functi…

今天python練習題

目錄 一、每日一言 二、練習題 三、效果展示 四、下次題目 五、總結 一、每日一言 不要害怕失敗&#xff0c;失敗可能成為我們前進的動力&#xff01; 二、練習題 有列表lst [[1,2,3],[4,5,6],[7,8,9]],取出其中的元素1/5/9組成新的列表 # 有列表lst [[1,2,3],[4,5,6],[…

機器人強化學習入門學習筆記(二)

基于上一篇的《機器人強化學習入門學習筆記》,在基于 MuJoCo 的仿真強化學習訓練中,除了 PPO(Proximal Policy Optimization)之外,還有多個主流強化學習算法可用于訓練機器人直行或其他復雜動作。 ?? 一、常見強化學習算法對比(可用于 MuJoCo) 算法類型特點適合場景PP…

用 DuckDB 高效分析 JSON 數據:從入門到實戰

解析 JSON 文件進行分析常常充滿挑戰。無論你是在處理 API 響應、日志文件&#xff0c;還是應用數據&#xff0c;如果沒有合適的工具&#xff0c;分析 JSON 都會非常耗時。 借助 DuckDB&#xff0c;你可以直接用 SQL 查詢復雜的 JSON 文件&#xff0c;無需編寫復雜的解析代碼或…

從貼牌到品牌:出海官網如何讓中國制造“貴”起來?

在全球經濟一體化的當下&#xff0c;中美關稅戰如同一記重錘&#xff0c;給國際貿易格局帶來了巨大震蕩。自貿易摩擦爆發以來&#xff0c;雙方多次調整關稅政策&#xff0c;涉及的商品種類不斷增多&#xff0c;稅率持續攀升&#xff0c;眾多中國企業的出口業務遭受重創&#xf…

react-13react中外部css引入以及style內聯樣式(動態className與動態style)

1. 外部css文件 - 普通引入 1.1 創建一個 CSS 文件&#xff0c;MyComponent.css。 /* MyComponent.css */ .my-class {color: red;font-size: 20px; } 1.2 組件中import引入 import React from react; import ./MyComponent.css; // 引入 CSS 文件function MyComponent() {r…

n8n 與智能體構建:開發自動化 AI 作業的基礎平臺

n8n 是一款開源的自動化流程構建平臺&#xff0c;通過其模塊化節點系統&#xff0c;開發者可以快速實現跨平臺的任務編排、數據集成與智能交互。當 n8n 與大型語言模型&#xff08;LLM&#xff09;結合時&#xff0c;就能構建出具備感知、推理、執行能力的 AI 智能體&#xff0…

14.Spring Boot 3.1.5 集成 Spring Security 進行訪問控制

14.Spring Boot 3.1.5 集成 Spring Security 進行訪問控制 Spring Security 是一個強大且高度可定制的認證和訪問控制框架&#xff0c;專為基于 Spring 的應用程序設計。它為基于 Java EE 的企業應用程序提供了全面的安全解決方案&#xff0c;包括 Web 應用程序安全和方法級安…

Linux學習筆記(二):Linux權限管理

文章目錄 一、Linux下用戶的分類1. Linux下用戶分為兩類&#xff1a;2. 這兩類用戶如何進行切換呢&#xff1f;3. 短暫提權 二、何為權限1. 什么是權限2. Linux的文件后綴意義 三、修改權限1. 設置文件的訪問權限——chmod2. 修改文件擁有者——chown3. 修改文件所屬組——chgr…

學習alpha,第2個alpha

alphas (-1 * ts_corr(rank(ts_delta(log(volume), 2)), rank(((close - open) / open)), 6)) 先分析操作符從左到右 ts_corr: Pearson 相關度量兩個變量之間的線性關系。當變量呈正態分布且關系呈線性時&#xff0c;它最有效。 ts_corr(vwap, close, 20)是一個計算時間序列相…

Paddle Serving|部署一個自己的OCR識別服務器

前言 之前使用C部署了自己的OCR識別服務器&#xff0c;Socket網絡傳輸部分是自己寫的&#xff0c;回過頭來一看&#xff0c;自己犯傻了&#xff0c;PaddleOCR本來就有自己的OCR服務器項目&#xff0c;叫PaddleServing&#xff0c;這里記錄一下部署過程。 1 下載依賴環境 1.1 …

React Native【詳解】搭建開發環境,創建項目,啟動項目

下載安裝 node https://nodejs.cn/download/ 查看 npx 版本 npx -v若無 npx 則安裝 npm install -g npx創建項目 npx create-expo-applatestRN_demo 為自定義的項目名稱 下載安裝 Python 2.7 下載安裝 JAVA JDK https://www.oracle.com/java/technologies/downloads/#jdk24-…

NVIDIA Halos:智能汽車革命中的全棧式安全系統

高級輔助駕駛行業正面臨一個尷尬的"安全悖論"——傳感器數量翻倍的同時&#xff0c;事故率曲線卻遲遲不見明顯下降。究其原因&#xff0c;當前行業普遍存在三大技術困局&#xff1a; 碎片化安全方案 傳統方案就像"打補丁"&#xff0c;激光雷達廠商只管點云…

數據資產管理與AI融合:物聯網時代的新征程

一、引言 在當今數字化浪潮席卷全球的時代&#xff0c;數據資產已成為企業和組織的核心競爭力之一。隨著物聯網&#xff08;IoT&#xff09;技術的飛速發展&#xff0c;海量的數據如潮水般涌來&#xff0c;如何高效地管理和利用這些數據資產成為了亟待解決的問題。與此同時&am…

MySQL 表的內外連接

文章目錄 表的內外連接&#xff08;重點&#xff09;內連接外連接左外連接右外連接 表的內外連接&#xff08;重點&#xff09; 內連接 內連接實際上就是利用where子句對兩種表形成的笛卡兒積進行篩選&#xff0c;我們前面學習的查詢都是內連接&#xff0c;也是在開發過程中使…

VTK 交互類介紹

基本概念 交互器(Interactor): 處理用戶輸入事件的基礎類 交互樣式(InteractorStyle): 定義具體的交互行為 Widgets: 可交互的UI組件,如滑塊、按鈕等 Picker: 用于選擇場景中的對象 常用交互類 類名功能描述vtkRenderWindowInteractor渲染窗口交互器vtkInteractorStyle交互樣式…

C語言動態庫與靜態庫編譯測試示例詳細介紹終結篇

C語言動態庫與靜態庫編譯鏈接時的詳細對比與示例 下面我將提供更詳細的示例&#xff0c;并通過對比表格清晰地展示靜態庫和動態庫的特性差異以及它們之間的各種鏈接關系。 ## 1. 靜態庫與動態庫特性對比 | 特性 | 靜態庫(.a/.lib) | 動態…

神經網絡:節點、隱藏層與非線性學習

神經網絡&#xff1a;節點、隱藏層與非線性學習 摘要&#xff1a; 神經網絡是機器學習領域中一種強大的工具&#xff0c;能夠通過復雜的結構學習數據中的非線性關系。本文從基礎的線性模型出發&#xff0c;逐步深入探討神經網絡中節點和隱藏層的作用&#xff0c;以及它們如何…

POI創建Excel文件

文章目錄 1、背景2、創建表格2.1 定義表頭對象2.2 Excel生成器2.3 創建模板2.4 處理Excel表頭2.5 處理Excel內容單元格樣式2.6 處理單個表頭 3、追加sheet4、靜態工具5、單元測試6、完整代碼示例 1、背景 需求中有需要用戶自定義Excel表格表頭&#xff0c;然后生成Excel文件&a…