【知識掃盲】tokenizer.json中的vocab和merges是什么?

在自然語言處理里,tokenizer.json 文件一般是由 Hugging Face 的 Tokenizers 庫生成的,它是分詞器配置的核心文件。這里面的 vocabmerges 是子詞分詞算法(像 BPE 這種)的重要構成要素。下面為你詳細解釋它們的作用和工作原理:

1. vocab(詞匯表)

  • 功能vocab 是一個從 token(子詞)到 ID 的映射表,其作用是把文本轉換為模型能夠處理的數字表示。
  • 內容形式
    • 基礎字符:涵蓋了單個字符,例如 ["a", "b", "c", ...]
    • 常見子詞:包含常見的前綴、后綴或者詞片段,例如 ["?the", "?quick", "?brown", ...]這里的 ? 代表空格)。
    • 特殊 token:有用于填充的 [PAD]、句子開始的 [CLS]、分隔的 [SEP]、未知詞的 [UNK] 等。
  • 示例
{"vocab": {"?": 0,"a": 1,"b": 2,"c": 3,"?the": 4,"?quick": 5,"[PAD]": 100,"[CLS]": 101,"[SEP]": 102,"[UNK]": 103}
}
  • 運作機制
    在分詞時,文本會先被分解成基礎字符,接著依據 merges 規則合并成子詞,最后通過 vocab 將這些子詞轉換為對應的 ID。

2. merges(合并規則)

  • 功能merges 是一系列的合并規則,其目的是把基礎字符組合成子詞。這體現了 BPE(字節對編碼)算法的核心思想。
  • 內容形式
    • 它是一個按照合并優先級排序的二元組列表,格式為 ["ab", "?t", "he", ...]
    • 排序越靠前的規則,應用的優先級越高。
  • 示例
{"merges": ["a b",    // 先將 "a" 和 "b" 合并為 "ab""? t",    // 再將 "?" 和 "t" 合并為 "?t""?t h",   // 接著將 "?t" 和 "h" 合并為 "?th""?th e"   // 最后將 "?th" 和 "e" 合并為 "?the"]
}
  • 運作機制

    1. 初始狀態:文本被拆分成單個字符,比如 "The dog" 會變成 ["?", "T", "h", "e", "?", "d", "o", "g"]
    2. 應用合并規則:按照 merges 中的順序依次進行合并。
      • 首先合并 "?""T",得到 ["?T", "h", "e", "?", "d", "o", "g"]
      • 然后合并 "h""e",得到 ["?T", "he", "?", "d", "o", "g"]
      • 繼續合并 "d""o",得到 ["?T", "he", "?", "do", "g"]
      • 最后合并 "do""g",得到 ["?T", "he", "?", "dog"]
    3. 映射到 ID:利用 vocab 將這些子詞轉換為 ID,例如 [103, 4, 0, 500](假設 "?T" 是未知詞,對應 [UNK] 的 ID 為 103)。

    這些id就是token id,可參考文章:大模型推理過程中的tokenazier,tokenid,詞向量之間的關系

3. 二者的協同工作方式

  • 訓練流程
    1. 從所有出現的字符構成初始詞匯表。
    2. 統計訓練數據中字符對的出現頻率。
    3. 不斷合并最常出現的字符對,每合并一次就更新一次詞匯表。
    4. 重復上述合并過程,直到達到預設的詞匯表大小或者合并次數。
  • 分詞流程
    1. 把輸入文本拆分成字符序列。
    2. 按照 merges 規則進行合并,直到無法再合并或者達到最大子詞長度。
    3. 查找 vocab,將子詞轉換為 ID。

4. 實際應用案例

假設 vocabmerges 已經訓練好,對句子 "Hello world!" 進行分詞:

  1. 初始字符["?", "H", "e", "l", "l", "o", "?", "w", "o", "r", "l", "d", "!"]
  2. 應用合并規則
    • 合并 "H""e",得到 ["?", "He", "l", "l", "o", "?", "w", "o", "r", "l", "d", "!"]
    • 合并 "l""l",得到 ["?", "He", "ll", "o", "?", "w", "o", "r", "l", "d", "!"]
    • 合并 "He""ll",得到 ["?", "Hell", "o", "?", "w", "o", "r", "l", "d", "!"]
    • 合并 "Hell""o",得到 ["?", "Hello", "?", "w", "o", "r", "l", "d", "!"]
    • 合并 "?""Hello",得到 ["?Hello", "?", "w", "o", "r", "l", "d", "!"]
    • 合并 "w""o",得到 ["?Hello", "?", "wo", "r", "l", "d", "!"]
    • 合并 "wo""r",得到 ["?Hello", "?", "wor", "l", "d", "!"]
    • 合并 "wor""l",得到 ["?Hello", "?", "worl", "d", "!"]
    • 合并 "worl""d",得到 ["?Hello", "?", "world", "!"]
    • 合并 "?""world",得到 ["?Hello", "?world", "!"]
  3. 轉換為 ID:假設 vocab 中有對應的項,那么結果就是 [1000, 1001, 1002]

總結

  • vocab:是子詞到 ID 的映射表,它能將文本轉換為模型可以處理的數字形式。
  • merges:是子詞合并規則,它決定了如何從基礎字符構建出子詞。
  • 相互關系merges 規則生成子詞,而 vocab 負責存儲這些子詞并為它們分配 ID。

通過這種方式,子詞分詞器能夠在處理常見詞時保持完整性,同時將罕見詞拆分成有意義的片段,有效平衡了詞匯表的大小和表達能力。

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

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

相關文章

【安卓筆記】RxJava的Hook機制,整體攔截器

0. 環境: 電腦:Windows10 Android Studio: 2024.3.2 編程語言: Java Gradle version:8.11.1 Compile Sdk Version:35 Java 版本:Java11 1. 使用場景 整個項目都是用了RxJava,需要對 整個/部分 項目…

NX二次開發常用函數——從一個坐標系到另一個坐標系的轉換(UF_MTX4_csys_to_csys )相同體坐標轉化

再做項目時相信大家都會用到坐標轉化,例如,我之前寫的案例分享中的博客都用到過,之前總是找借口進行if else判斷,雖然可以實現,但是比起坐標變換無論代碼復雜程度還是運行速度都比較差,之前參加過曹大師的教學訓練營,但是明顯感覺到大佬寫代碼的邏輯性以及模塊化能力都比…

數據庫防止數組字符串序列化

請求接到數組["aa","bb"]后,后端需要轉換成字符串Java 8 使用 String.join()String[] arr {"aa", "bb"}; String str String.join(",", arr); // "aa,bb"如果采用其他轉換,在字段存入數據庫后會["\"a…

若依框架文件上傳返回路徑端口錯誤 - Nginx代理環境下serverConfig.getUrl()獲取端口異常

目錄一 、問題描述二、問題現象三、問題根本原因3.1 代碼分析3.2 問題核心四、解決方案五、總結一 、問題描述 在使用若依框架進行項目開發時,遇到了一個令人困擾的問題:文件上傳功能在本地開發環境運行正常,但部署到服務器后,上…

使用PyInstaller打包 Python 工程

引言:大模型是個好工具,盡管好多內容都是拼湊的,但是整理學到的就是自己的。因工作需要隱藏python源代碼,方法有PyInstaller 、Cpython等多種方法,PyInstaller更為常用,PyInstaller打包 Python 工程步驟整理如下: 一、確保系統環境準備就緒 安裝 Python 和 pip 確認版本…

Python 程序設計講義(1):PyCharm 安裝教程

Python 程序設計講義(1):PyCharm 安裝教程 一、安裝 Python 解釋器 1、下載 Python 安裝文件 點擊如下鏈接進入 Python 官網: https://www.python.org/ 在彈出的頁面中單擊【Downloads】,然后單擊下面的【Download Pyt…

uniapp云打包安卓

1、基礎云打包 2、修改logo3、怎么實現下拉菜單4、修改啟動頁啟動頁默認這樣 5、URL Scheme頁面跳轉

Python----NLP自然語言處理(英文分詞器--NLTK)

一、NLTK_介紹NLTK(Natural Language Toolkit,自然語言處理工具包),一個主要用于清洗和處理英文文本的Python工具包。它有很多的功能,我們主要使用的是它的分詞功能,之前講過中文分詞是比較復雜的&#xff…

傳統瀏覽器過時了?Dia如何用AI重新定義上網體驗

歡迎來到我的博客,代碼的世界里,每一行都是一個故事🎏:你只管努力,剩下的交給時間 🏠 :小破站 傳統瀏覽器過時了?Dia如何用AI重新定義上網體驗它是什么核心功能搜索編程左右互動感謝…

基于DTLC-AEC與DTLN的輕量級實時語音增強系統設計與實現

基于DTLC-AEC與DTLN的輕量級實時語音增強系統設計與實現 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。 1. 引言 在當今的互聯網通信時代,實時語音通信已成為人們日常生活中不可或缺的一部分。然而,語音通信質量常…

Attu-Milvus向量數據庫可視化工具

本文介紹了如何安裝可視化工具Attu,包括使用Docker鏡像啟動并訪問Attu服務。 目錄 前言 一、Attu安裝 1. Docker容器安裝 2. 桌面程序安裝 二、使用 Milvus Web U 前言 Attu是一款專為Milvus向量數據庫打造的開源數據庫管理工具,提供了便捷的圖形化…

高效檢測數據突變的MDAM算法詳解

在數據分析領域,我們經常需要檢測數據序列中的異常變化。今天給大家介紹一種簡單但非常有效的算法——MDAM (Mean Drift Accumulation Monitor),它能幫你輕松發現數據中的均值突變現象!1. 🔍 算法原理累計數均值突變檢測算法(MDAM…

記錄一道sql面試題3

題目:有一張表a,和一張表ba:id age name1 18 kethy2 32 kavin3 22 tonyb:id dept description2 sale today2 dev sunday提問:將a和b兩張表左連接查詢,條件是a.id b.id會得到什么結果。查詢的字段為a.*,b.* 。說明:左表 a 中 id1 …

linux系統------LVS+KeepAlived+Nginx高可用方案

目錄 一、環境搭建 1.環境準備 2.安裝ipvsadm 和 安裝 keepalived(Lvs服務器) 3.為兩臺RS配置虛擬ip(nginx服務器) 1.配置虛擬網絡子接口(回環接口) 2.修改內容如下: 3.配置ARP 二、KeepalivedLvsN…

【MySQL】性能優化實戰指南:釋放數據庫潛能的藝術

文章目錄MySQL性能優化實戰指南:釋放數據庫潛能的藝術🚀 引言為什么需要MySQL性能優化?📋 性能優化基礎知識MySQL性能瓶頸分析1. 硬件資源瓶頸2. MySQL內部瓶頸🏆 優化配置策略大全💾 內存配置優化InnoDB緩…

Unity 3D碰撞器

在Unity中,碰撞器(Collider)是用于檢測物體之間碰撞的組件,它們定義了物體的物理邊界。碰撞器與剛體(Rigidbody)配合使用,實現物理模擬。下面我將按您的要求,從碰撞器的種類、常用參…

Windows批處理實現帶時間戳ping

windows環境 , 將以下代碼保存為 .bat文件 echo off echo.---------------------------------------------------------- echo.----------------------------------------------------------- echo off set /p hostplease input your destination ip : set logfi…

GeoPandas 城市規劃:Python 空間數據初學者指南

安裝和設置 在深入研究數據之前,我們需要準備好工具。設置 GeoPandas 及其必要的依賴項是第一步。 我們將在 Google Colab 中完成此操作。 !pip install geopandas contextily matplotlib 空間數據有多種格式,但 GeoJSON 是常見且易于訪問的格式。Ge…

力扣面試150題--環形子數組的最大和

Day 80 題目描述思路 初次做法:在昨天代碼的基礎上修改 計算普通子數組的最大和 使用動態規劃計算以每個位置為起點的最大子數組和(存儲在 val 中),并更新全局最大值 rightmax。計算后綴和與前綴和 sum[i]:從位置 i 到…

python類Keys

類Keys的定義:Elass Keys (object): 程軒開Set of special keys codes.#n# 第 15 章 網絡爬蟲 合情些準出照地限公軹 esms0 pro 瘀 Δ器代芻奄燉慧 圖 15-39 工件肉業魚光得 國有上子 理人場營,有司;可有B 相關圍書 圖 15-40 頁源代碼 ython". 名可能不鞋 NUL…