大模型詞表注入

大模型詞表注入(Vocabulary Injection)

大模型詞表注入(Vocabulary Injection)是指在預訓練語言模型(如GPT、LLAMA等)的基礎上,動態擴展其詞表(Vocabulary)的技術,以適應特定任務或領域的需求。

一、詞表注入的「原理」

  1. 詞表結構與嵌入層調整
    • 大模型的詞表通常由子詞(subword)或詞片(token)組成(如BPE、WordPiece算法生成),每個詞對應一個嵌入向量(Embedding Vector)。
    • 注入新詞時,需要擴展模型的嵌入矩陣(Embedding Matrix),新增詞對應的向量,并調整模型輸入層(Embedding Layer)和輸出層(如LM Head)的維度。
  2. 新詞向量的初始化
    • 直接隨機初始化新詞的嵌入向量可能導致訓練不穩定。常見策略是:
      • 復用相似詞向量:例如,將新詞"LLM"初始化為"language"和"model"的平均向量。
      • 對齊預訓練語義空間:通過外部詞向量(如Word2Vec)映射到模型的嵌入空間。
  3. 參數適配與微調
    • 注入新詞后,通常需要在小規模領域數據上對模型進行微調(Fine-tuning),使新詞的嵌入向量與原有參數協同工作。
    • 某些方法(如[《Extending Pre-trained Models with Domain-Specific Vocabulary》](https://arxiv.org/abs/2104.08646))會凍結部分參數,僅訓練新詞相關部分以減少計算量。

二、詞表注入的「原因」

  1. 解決未登錄詞(OOV)問題
    • 預訓練模型的詞表固定,無法覆蓋領域專有名詞(如醫學術語“EGFR”)、新造詞(如網絡流行語“栓Q”)或多語言詞匯。
  2. 提升領域任務性能
    • 在特定領域(法律、醫療、金融)中,直接使用原始詞表可能導致文本被過度切分為子詞,丟失語義信息。注入領域詞表可保留關鍵術語的完整性。
  3. 多語言擴展需求
    • 為支持新語言,需注入該語言的詞匯(如中文字符、俄文字母),同時調整模型處理多語言的能力。
  4. 避免全模型重訓練
    • 從頭預訓練大模型成本極高,詞表注入允許在原有模型基礎上低成本擴展,節省計算資源和時間。

三、技術挑戰與解決方案

  1. 嵌入空間對齊
    • 問題:新詞向量可能破壞原有語義空間的一致性。
    • 方案:使用對比學習(Contrastive Learning)或跨詞注意力(Cross-token Attention)對齊新舊詞向量。
  2. 模型結構限制
    • 問題:Transformer的參數量與詞表大小相關,盲目擴展詞表會顯著增加模型體積。
    • 方案:動態詞表(Dynamic Vocabulary)、參數共享(如ALBERT的跨層參數共享)。
  3. 訓練數據偏差
    • 問題:注入新詞后,若微調數據不足,模型可能過擬合或遺忘原有知識。
    • 方案:漸進式訓練(Progressive Training)或知識蒸餾(Knowledge Distillation)。

四、典型應用場景

  1. 領域適配
    • 例如,向BERT注入法律術語后,在合同解析任務中表現更佳。
  2. 多語言模型擴展
    • 如為英文訓練的GPT-2注入中文詞表,支持中英混合生成。
  3. 實時更新
    • 快速響應新事件(如疫情術語“奧密克戎”)或網絡熱詞。

五、代碼及微調實驗

有兩種方法:1.詞表注入;2.詞表訓練–>添加詞表

  • 導入原始大模型及tokenier
tokenizer = AutoTokenizer.from_pretrained(model_path,trust_remote_code=True,use_fast=False if model_arch == 'llama' else True
)model = AutoModel.from_pretrained(model_path,trust_remote_code=True,torch_dtype=torch_dtype
)
  • 詞表注入
all_words = []
with open(file, 'r', encoding='utf-8') as f:lines = f.readlines()
words = [line.strip() for line in lines]
all_words.extend(words)
tokenizer.add_tokens(all_words)
tokenizer.save_pretrained(save_path)
  • 詞表訓練

使用sentencepiece==4.1.0 訓練詞表

sp.SentencePieceTrainer.train(# 只支持 txt 和 tsv 格式input=corpus,# 保存的模型前綴名model_prefix='bpe_expand',# 詞表大小vocab_size=vocab_size,# 指定模型的字符覆蓋率, 中文日文等推薦為 0.9995, 其余可以嘗試 1.0character_coverage=character_coverage,# 分詞算法model_type='bpe',# 是否將數字劃分為單個 token, 在 llama 中是這么做的split_digits=True if model_arch == 'llama' else False,# 指定在遇到未知或很少的字符時將其分解為 UTF-8 字節, 開啟后等效于 bbpebyte_fallback=True,# 指定輸入句子的最大長度,以字節為單位max_sentence_length=max_sentence_length

參數說明:

參數重要性推薦場景
input必填所有場景
model_prefix必填所有場景
model_type根據需求選擇 unigrambpe
vocab_size通常設為 3200050000 或更高
character_coverage多語言數據設為 0.9995,單語言數據默認 1.0
byte_fallback處理未知字符時設為 True
max_sentence_length處理長文本時需調大(如 16384
split_digits需區分數字時設為 True
  • 添加詞表

    詞表訓練之后需要添加詞表,并保存:

    #1.加載bpe model
    sp_bpe = sp.SentencePieceProcessor()
    sp_bpe.load(bpe_model)
    #2.處理詞匯
    raw_vocab = [sp_bpe.id_to_piece(id) for id in range(sp_bpe.get_piece_size())]
    clean_vocab = list(set(filter(is_chinese, raw_vocab)))
    #添加詞匯并保存zz
    tokenizer.add_tokens(clean_vocab)
    tokenizer.save_pretrained(save_path)
    
  • 維度更新

經過詞表注入或者詞表訓練,兩種方法其中之一之后,更新模型的維度參數:

model.resize_token_embeddings(new_length)#new_length 為新詞表的詞匯量
model.save_pretrained(save_path)
微調對比實驗(待補充)

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

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

相關文章

在Cesium中使用ThreeJs材質(不是場景融合哦)

在Cesium中使用ThreeJs材質(不是場景融合哦)_嗶哩嗶哩_bilibili

初教六雙機一飛沖天動作要領

初教六雙機一飛沖天動作要領 初教六雙機“一飛沖天”是典型的垂直爬升特技動作,要求雙機以近乎垂直的姿態同步高速爬升,展現飛機的動力性能與編隊協同能力。以下是該動作的詳細技術解析與執行要點: 一、動作定義與特點 基本形態 雙機以相同速…

給Web開發者的HarmonyOS指南02-布局樣式

給Web開發者的HarmonyOS指南02-布局樣式 本系列教程適合鴻蒙 HarmonyOS 初學者,為那些熟悉用 HTML 與 CSS 語法的 Web 前端開發者準備的。 本系列教程會將 HTML/CSS 代碼片段替換為等價的 HarmonyOS/ArkUI 代碼。 布局基礎對比 在Web開發中,我們使用CS…

京東軟件測試崗位經典面試題(附答案)

1、黑盒測試的測試用例常見設計方法都有哪些?請分別以具體的例子來說明這些方法在測試用例設計工作中的應用。 1)等價類劃分:等價類是指某個輸入域的子集合.在該子集合中,各個輸入數據對于揭露程序中的錯誤都是等效的.并合理地假…

3.26[a]paracompute homework

5555 負載不平衡指多個線程的計算量差異顯著,導致部分線程空轉或等待,降低并行效率。其核心矛盾在于任務劃分的靜態性與計算動態性不匹配,尤其在處理不規則數據或動態任務時尤為突出。以稀疏矩陣的向量乘法為例,假設其非零元素分…

網站安全專欄-------淺談CC攻擊和DDoS攻擊的區別

CC攻擊和DDoS攻擊都是網絡攻擊的類型,但它們在攻擊方式、目標和效果上有所不同。以下是它們之間的一些主要區別: ### 1. 定義 - **DDoS攻擊(分布式拒絕服務攻擊)**: DDoS攻擊是指攻擊者通過大量的分布式計算機&#x…

帕金森患者的生活重塑:從 “嘴” 開啟康復之旅

當提到帕金森病,許多人會聯想到震顫、僵硬和行動遲緩等癥狀。這種神經系統退行性疾病,給患者的生活帶來了巨大的挑戰。然而,你可知道,帕金森患者恢復正常生活,可以從 “嘴” 開始管理? 帕金森病在全球影響著…

Android14 Settings應用添加有線網開關條目實現

Android14 Settings應用添加有線網開關條目 文章目錄 Android14 Settings應用添加有線網開關條目一、前言二、適配修改1、network_provider_settings.xml2、NetworkProviderSettings.java3、TurnOnOffEthernetNetworkController.java4、去除有線網提示條目。5、效果UI&#xff…

Axure RP設計軟件中的各種函數:包括數字、數學、字符串、時間及中繼器函數,詳細解釋了各函數的用途、參數及其應用場景。

文章目錄 引言函數分類數字函數數學函數字符串函數時間函數函數中繼器函數引言 在axure交互設計時,函數可以用在條件公式和需要賦值的地方,其基本語法是用雙方括號包含,變量值和函數用英文句號連接。 在交互事件編輯器中通過fx按鈕插入函數表達式,例如設置文本內容為: …

c#難點整理3

1.靜態類的說明 a.靜態類里不能定義實例方法,實例屬性,所以說非靜態類是無法繼承靜態類的。父類無法擁有實例化的方法和屬性,子類可以,這從邏輯上是矛盾的,不符合繼承的邏輯。 b.那么靜態類與靜態類之間能否繼承能呢…

AIP-191 文件和目錄結構

編號191原文鏈接https://google.aip.dev/191狀態批準創建日期2019-07-25更新日期2019-07-25 統一的文件和目錄結構,雖然在技術上差別不大,但可以讓用戶和審查者更容易閱讀API界面定義。 指南 注意 以下指南適合于使用protobuf定義的API,例如…

Win11+VS2022+CGAL5.6配置

1. CGAL庫簡介 CGAL(Computational Geometry Algorithms Library)是一個開源的計算幾何算法庫,主要用于處理幾何問題和相關算法的實現。它提供了豐富的幾何數據結構和高效算法,覆蓋點、線、多邊形、曲面等基本幾何對象的表示與操…

手搓全自動文章多平臺發布系統:5、跨頁面接入playwright類,修改ui_components.py,整合到main.py

昨天已經要多上下文,單上下文的模塊中測試成功了,今天要想法接入。 整理完成的所有代碼如下: 結構如圖: main.py import sys from PyQt6 import QtWidgets from modules.ui_components import TableManager # 導入界面類 import asyncio# 在主函數中使用 qasync 整合事…

漲薪技術|使用Dockerfile創建鏡像

上次的推文內容中介紹了如何使用docker commit的方法來構建鏡像,相反推薦使用被稱為Dockerfile的定義文件和docker build命令來構建鏡像。Dockerfile使用基本的基于DSL語法的指令來構建一個Docker鏡像,之后使用docker build命令基于該Dockerfile中的指令…

rkipc的h265設置

資料的位置 源代碼在luckfox-pico/project/app/rkipc/rkipc/src/rv1106_ipc/video/video.c中,使用了rkmpi庫,參考資料為"doc/zh/media/Rockchip_Developer_Guide_MPI.pdf" 通道設置設置 H265的通道設置主要由rkipc_pipe_0_init完成&#xf…

成都國際數字影像產業園:打造數字影像產業新高地

成都國際數字影像產業園:打造數字影像產業新高地 成都國際數字影像產業園正致力于構筑數字影像產業的新高地,成為推動區域數字經濟發展的重要引擎。 核心定位與目標 該園區精準定位于數字影像文創產業,旨在打造集內容創作、技術研發、人才…

各類神經網絡學習:(三)RNN 循環神經網絡(中集),同步多對多結構的詳細解釋

上一篇下一篇RNN(上集)RNN(下集) 同步多對多結構 1)結構詳解 ①圖解: ②參數含義: x t x_t xt? :表示每一個時刻的輸入; o t o_t ot? :表示每一個時刻的輸…

Perl 環境安裝指南

Perl 環境安裝指南 引言 Perl是一種廣泛使用的解釋型、動態編程語言,以其強大的文本處理能力和靈活性著稱。本文將為您詳細介紹Perl環境的安裝過程,包括系統要求、安裝步驟以及注意事項。 系統要求 在安裝Perl之前,請確保您的計算機滿足以下基本要求: 操作系統:Window…

【嵌入式學習2】C語言 - VScode環境搭建

目錄 ## 語言分類 ## c語言編譯器 ## VScode相關配置 ## 語言分類 編譯型語言:C,C解釋型語言:python,JS ## c語言編譯器 分類GCC 系列MinGWCygwinMSVC系列一套編程語言編譯器將GCC編譯器和GNU Binutils移植到Win32平臺下的產物…

qt+opengl 加載三維obj文件

1前面我們已經熟悉了opengl自定義頂點生成一個立方體,并且我們實現了立方體的旋轉,光照等功能。下面我們來用opengl來加載一個obj文件。準備我們首先準備一個簡單的obj文件(head.obj)。資源在本頁下載 2 在obj文件里面&#xff0c…