LLM 中 token 簡介與 bert 實操解讀

一、什么是 LLM?

LLM,全稱為 Large Language Model(大語言模型),是一種基于神經網絡(主要是 Transformer 結構)的大規模自然語言處理(NLP)模型。其核心能力在于理解、生成、翻譯和總結自然語言,已廣泛應用于問答系統、機器翻譯、對話機器人、代碼生成、文本創作等場景中。

LLM 的基本任務:給定一段文本,預測接下來的 token(語言片段),也可以理解為:LLM 是一種基于上下文預測下一個 token 的概率分布的模型。

一個典型的 LLM“7B 模型”表示擁有 70 億參數(billion),使用 float32 存儲時,模型大小約為 28GB(7B × 4 字節)。模型規模常見有 0.5B、1B、7B、13B、33B、65B,甚至超過 100B。

二、LLM 模型結構

總體看,LLM 結構有以下幾種:

  • Decoder-only 架構(主流 LLM,如 GPT-4、LLaMA、PaLM):骨干結構由多個 Decoder 層堆疊而成,且每個 Decoder 層包含自注意力機制和前饋網絡,用于從左到右生成文本。
  • Encoder-only 架構(如 BERT):這類模型僅使用 Transformer 的 Encoder,用于理解文本而非生成。
  • Encoder-Decoder 架構(如 T5、BART):這類 LLM 同時使用了 Transformer 的 Encoder 和 Decoder,Encoder 處理輸入(如源文本),Decoder 生成輸出(如翻譯結果)

當前 GPT、LLaMA 等主流模型采用 Decoder-only 架構堆疊組成,通過自回歸方式生成文本。一個典型的 Transformer Decoder 層包括以下組件:

  • Self-Attention(自注意力層):對輸入序列進行全局信息建模,使模型捕捉上下文關系。
  • Feed Forward Network(前饋網絡,FFN):通過兩層全連接神經網絡實現非線性變換。
  • Layer Normalization + 殘差連接:保證訓練穩定性與深層信息流通。
  • 多層堆疊:一個 LLM 通常包含幾十甚至上百層的 Decoder。每一層都會基于當前輸入和之前的 token 信息進行信息融合與加工,形成更深層次的語言理解能力。

Description

傳統 Transformer:每個解碼器塊使用固定的前饋網絡 MoE 架構:通過 Router 動態選擇部分專家網絡,提升模型容量同時減少計算量。

圖片來源:https://blog.csdn.net/LLM88888888/article/details/147580799

三、Token 與 Tokenizer 理論

token 是指文本中的一個詞或者子詞,經過 Tokenizer(分詞器)將原始文本拆解為子詞、單詞或字符,同時保留語義和結構信息。

tokenizer 將字符串分為一些 sub-word token string,再將 token string 映射到 id,并保留來回映射的 mapping。

embeddings 將 token id 編碼成向量,例如下面 bert 示例中:ID=101 → 向量 [0.1, 0.2, …, 0.5] (bert 768 維)

Description

四、bert 實操解讀

代碼如下:

# 注意,需要 pip install transformers 安裝 transformers 庫
from transformers import BertTokenizer, BertModel   sentence = "Hello, my son is cuting."# 問題1:'bert-base-uncased'從哪來,有哪些內容?
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
# 問題2:return_tensors='pt'有什么作用?
encoded_input = tokenizer(sentence, return_tensors='pt')
print("encoded_input: ", encoded_input)
# encoded_input:  {'input_ids': tensor([[ 101, 7592, 1010, 2026, 2365, 2003, 3013, 2075, 1012,  102]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}# 問題3:分詞encoded_input表示什么?
model = BertModel.from_pretrained("bert-base-uncased")
output = model(**encoded_input)
print("output: ", output)
print(output.last_hidden_state.shape)  # torch.Size([1, 10, 768]),輸出形狀為 [1, seq_len, hidden_size]
print(output.pooler_output.shape)      # torch.Size([1, 768])
# 問題4:bertmodel輸出是什么?怎么理解?

問題 1:'bert-base-uncased’從哪來,有哪些內容?

運行目錄:

.
├── 1_code_run.py
└── bert-base-uncased├── config.json├── pytorch_model.bin├── tokenizer_config.json├── tokenizer.json└── vocab.txt

所需文件到:https://huggingface.co/google-bert/bert-base-uncased/tree/main 中獲取。

  • tokenizer.json:存儲分詞器的核心映射規則(token 與 ID 對應關系等 ),用于文本轉 token ID。
  • tokenizer_config.json:配置分詞器的參數(如詞表路徑、模型類型等 ),讓 BertTokenizer 能正確初始化。
  • vocab.txt:詞表文件,記錄模型可識別的所有基礎 token,是分詞和編碼的基礎。
  • config.json:存儲模型的架構配置(層數、隱藏層維度、注意力頭數等 ),用于構建 BertModel 的網絡結構。
  • pytorch_model.bin:PyTorch 格式的模型權重文件,加載后為模型提供推理 / 訓練所需參數。

使用 from_pretrained 時,只要本地路徑(或緩存路徑)包含這些文件,transformers 庫會自動加載,無需手動逐個指定,把這些文件放在本地對應模型名的文件夾(如 bert-base-uncased 命名的文件夾),然后 from_pretrained 傳入該文件夾路徑即可。

問題 2:return_tensors='pt’有什么作用?

BertTokenizer 默認返回的是 Python 列表,而 PyTorch 模型需要 torch.Tensor 類型的輸入,在調用分詞器時,添加 return_tensors=‘pt’ 參數,可以強制返回 PyTorch 張量。

問題 3:分詞 encoded_input 表示什么?

  • input_ids:token 對應的編號
  • token_type_ids:句子類型(如問句/答句)
  • attention_mask:是否為有效 token 的掩碼

問題 4:bertmodel 輸出是什么?怎么理解?

output:  BaseModelOutputWithPoolingAndCrossAttentions(last_hidden_state=tensor([[[ 0.1343,  0.2069, -0.1056,  ..., -0.3678,  0.3318,  0.4747],[ 0.7642,  0.0530,  0.3679,  ..., -0.0856,  0.6686, -0.0110],...,[ 0.6652,  0.3903, -0.0479,  ...,  0.0236, -0.5730, -0.3705]]],grad_fn=<NativeLayerNormBackward0>), pooler_output=tensor([[-8.4724e-01, -3.6394e-01, -7.2207e-01,  6.6477e-01,  4.1991e-01,2.4143e-02,  8.3331e-01,  2.9624e-01, -5.0529e-01, -9.9998e-01,...,8.8765e-01,  8.4602e-01, -3.0099e-01,  4.3198e-01,  5.7014e-01,-4.6997e-01, -6.4236e-01,  9.0241e-01]], grad_fn=<TanhBackward0>), hidden_states=None, past_key_values=None, attentions=None, cross_attentions=None)

前面有介紹到:BERT 是 Encoder-only 架構,僅使用 Transformer 的 Encoder,用于理解文本而非生成。

  1. last_hidden_state
  • 維度一般是 [batch_size, sequence_length, hidden_size](示例里 batch_size=1 ,因單條輸入;sequence_length 是句子分詞后 token 數量;hidden_size 是模型隱藏層維度,BERT-base 通常為 768 )。
  • 含義:模型對輸入序列中每個 token 編碼后的向量表示。比如句子分詞后有 5 個 token,就對應 5 個向量,每個向量維度是 hidden_size,可用于細粒度的 token 級任務(例如,文本分類時可取特定位置的 token 向量做分類依據)。
  • 示例里的 tensor([[[ 0.1343, 0.2069, -0.1056, …, -0.3678, 0.3318, 0.4747], … ]]) ,就是每個 token 經 BERT 編碼后的高維語義向量。
  1. pooler_output:維度是 [batch_size, hidden_size] (示例里 batch_size=1 ),表示對整個輸入序列的全局語義總結,可用于句子級任務(如文本分類、情感分析,輸入分類器判斷類別)。
  2. hidden_states:值為 None ,默認 BERT 不會輸出各層(如 embedding 層、各 Transformer 層 )的隱藏狀態。若初始化模型時設 output_hidden_states=True ,會輸出從輸入到各層的隱藏狀態列表,可用于分析模型各層對語義的加工過程。
  3. past_key_values:值為 None ,用于增量解碼(如文本生成場景 ),默認不輸出。若開啟相關配置,會保存前一步注意力鍵值對,加速后續 token 生成。
  4. attentions:值為 None ,默認不輸出注意力權重。若設 output_attentions=True ,會輸出各層注意力頭的權重,可分析模型關注輸入序列的哪些部分,輔助調試和理解模型聚焦點。
  5. cross_attentions:值為 None ,BERT 是 Encoder 結構,無交叉注意力(一般 Decoder 或 Encoder-Decoder 結構有 ),所以這兒無輸出。

型關注輸入序列的哪些部分,輔助調試和理解模型聚焦點。
5. cross_attentions:值為 None ,BERT 是 Encoder 結構,無交叉注意力(一般 Decoder 或 Encoder-Decoder 結構有 ),所以這兒無輸出。

后續會對 LLM 推理具體過程進行介紹~

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

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

相關文章

【運維心得】三步更換HP筆記本電腦外殼

目錄 準備工作 第一步&#xff1a;拆卸電池與后蓋 第二步&#xff1a;處理隱藏螺絲 第三步&#xff1a;斷開內部排線 總結一下 今天又碰到了兩臺HP的筆記本&#xff0c;一臺外殼完好&#xff0c;但是無法開機&#xff0c;判斷是主板問題。另外一臺外殼有損壞&#xff0c;但…

深入 Linux 網絡(一) -- 網卡隊列

文章目錄網卡網卡的核心功能網卡的關鍵技術單隊列網卡多隊列網卡查看網卡信息ifconfigethtool查看網卡隊列Linux 查看中斷綁定網卡中斷查詢查看中斷綁定的 cpu總結1. 默認情況&#xff08;單隊列網卡&#xff09;2. 多隊列網卡3. 如何查看和配置綁定關系&#xff1f;4. 性能優化…

HTTP 1.0, 2.0 和 3.0 有什么區別?

HTTP/1.0 就像是“一問一答”的電話&#xff0c;每次打電話&#xff08;請求&#xff09;都得先撥號&#xff08;建立連接&#xff09;&#xff0c;說完一句話&#xff08;發送數據&#xff09;就掛斷&#xff08;關閉連接&#xff09;&#xff0c;再打下一通電話。效率比較低。…

無畏契約手游上線!手機遠控模擬器暢玩、搶先注冊稀有ID!

終于來了&#xff01;《無畏契約》手游今天已經全平臺上線&#xff01;保留了端游經典的英雄技能與射擊體驗&#x1f3ae;&#xff3b;新服開啟&#xff0c;ID爭奪戰一觸即發&#xff3d;《無畏契約》手游備受FPS玩家期待&#xff0c;累計獲得超6000萬線上預約&#xff01;每次…

《WINDOWS 環境下32位匯編語言程序設計》第4章 第一個窗口程序

4.1 開始了解窗口4.1.1 窗口是什么窗口是什么&#xff1f;大家每天在使用Windows&#xff0c;屏幕上的一個個方塊就是一個個窗口&#xff01;那么&#xff0c;窗口為什么是這個樣子呢&#xff1f;窗口就是程序嗎&#xff1f;1.使用窗口的原因回想一下DOS時代的計算機屏幕&#…

Mybatis執行sql流程(二)之加載Mapper

Mybatis加載Mapper注冊方式注冊時機特點MapperScanBean定義階段注冊接口定義批量注冊&#xff0c;推薦方式Mapper (接口注解)同 MapperScan需每個接口單獨標注XML 配置 <mapper>MyBatis 初始化時傳統方式&#xff0c;不依賴 Spring 容器SqlSessionTemplate 直接獲取調用時…

基于 JSP+Mysql實現MVC房屋租賃系統

基于 MVC 的房屋租賃系統的設計與實現摘 要&#xff1a;房屋租賃管理系統與網絡相結合&#xff0c;給用戶提供更加周到和人性化的服務。網站模式為 MVC 模式&#xff0c;基于 MySQL 數據庫,采用 JSP&#xff0c;Session 繪畫跟蹤、JavaScript 等技術,實現了普通用戶可以瀏覽、查…

第六天~提取Arxml中CAN采樣點信息Creat_ECU--Standard

?? ARXML探秘:解碼CAN采樣點的精準藝術 在汽車電子的交響樂中,CAN采樣點(Sample Point) 如同指揮家揮棒的關鍵時刻——它決定了何時"聆聽"總線上的信號。這個看似微小的百分比數值,卻是保障整車通信可靠性的核心密碼。本文將帶您深入ARXML中的采樣點配置世界…

Windows Git安裝配置

進入git官網Git - Downloading Package 點擊下載&#xff08;可復制鏈接到迅雷&#xff09; 雙擊運行exe安裝包 選擇安裝目錄 下一步 選擇 Git 默認編輯器&#xff0c;下一步設置初始化新項目(倉庫)的主干名字 讓Git決定&#xff08;Let Git decide&#xff09;使用默認的…

面試經驗分享-某電影廠

java會嗎&#xff1f;不會。。。。。hdfs讀文件寫文件的流程 數據寫入 1-客戶端向NameNode發起請求 2-NameNode審核權限和剩余空間&#xff0c;滿足條件即允許寫入&#xff0c;并告知客戶端寫入的DataNode地址 3-客戶端向指定的DataNode發送數據包 4-被寫入數據的DataNode同時完…

數據清理后續

前篇&#xff1a;Python 項目里的數據清理工作&#xff08;數據清洗步驟應用&#xff09; 一&#xff0c;先接上文添加兩種數據填充的方法 1、線性回歸填充 def lr_train_fill(train_data,train_label):train_data_all pd.concat([train_data, train_label], axis1)train_d…

nuc設置腳本開機自啟動

在終端執行gnome-session-properties這個是帶有圖型化頁面的設置開機自啟動的軟件沒有這個軟件的可以直接下載sudo apt update sudo apt install gnome-startup-applications一般都有&#xff0c;ubunutu自帶的右邊有添加&#xff0c;名稱和注釋隨便寫&#xff0c;只需要把命令…

JavaScript 性能優化實戰大綱

JavaScript 性能優化實戰大綱 核心優化方向 減少主線程阻塞 避免長任務&#xff08;Long Tasks&#xff09;拆分計算密集型操作使用 Web Workers 處理后臺任務優先使用 requestIdleCallback 或 requestAnimationFrame 內存管理 避免內存泄漏&#xff08;如未清理的定時器、閉包…

openssl生成自簽名證書的方法

因為開發中查詢過各種命令&#xff0c;失敗過很多次&#xff0c;所以記錄一下正確的命令&#xff1a; 生成私鑰-不要密碼 openssl genpkey -algorithm RSA -out ssl/key.pem 生成自簽名證書 openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -…

電影購票+票房預測系統 - 后端項目介紹(附源碼)

電影購票預測系統 - 后端項目介紹 項目概述 本項目是一個基于Spring BootVue的前后端分離電影購票系統&#xff0c;包含完整的前臺用戶功能和后臺管理功能&#xff0c;并提供數據可視化和電影預測功能。本文檔將詳細介紹后端項目的架構、功能模塊、技術棧和使用方法。 項目源…

專利服務系統平臺|個人專利服務系統|基于java和小程序的專利服務系統設計與實現(源碼+數據庫+文檔)

專利服務系統平臺 目錄 基于java和小程序的專利服務系統設計與實現 一、前言 二、系統設計 三、系統功能設計 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取&#xff1a; 博主介紹&#xff1a;??大廠碼農|畢設布道師&#x…

【HTML】3D動態凱旋門

目錄 版本1.0&#xff1a;簡易版本 版本2.0&#xff1a;建筑渲染 版本3.0&#xff1a;優化建筑群 版本4.0&#xff1a;增加公路和車流 版本5.0&#xff1a;去除壓在公路上的建筑 版本6.0&#xff1a;優化車流群 版本7.0&#xff1a;添加煙花效果 版本8.0&#xff1a;添…

(論文閱讀)FedViT:邊緣視覺轉換器的聯邦持續學習

FedViT&#xff1a;邊緣視覺轉換器的聯邦持續學習 FedViT: Federated continual learning of vision transformer at edge (北京理工大學-2023年發表于《Future Generation Computer Systems》中科院二區) highlight&#xff1a; ?提出一種輕量級的客戶端聯合持續學習方法。 ?…

微算法科技(NASDAQ: MLGO)研究利用PBFT中的動態視圖變換機制,實現區塊鏈系統高效運轉

隨著區塊鏈技術的飛速發展&#xff0c;其去中心化、透明性、不可篡改等特性使得它在金融、供應鏈管理、物聯網等多個領域得到了廣泛應用。然而&#xff0c;區塊鏈系統在高并發場景下的性能瓶頸問題一直是制約其大規模應用的關鍵因素。傳統的共識算法如PoW&#xff08;工作量證明…

從數據匯總到高級分析,SQL 查詢進階實戰(下篇)—— 分組、子查詢與窗口函數全攻略

引言&#xff1a;從 “提取數據” 到 “洞察價值”&#xff0c;SQL 進階之路 在掌握了基礎查詢與多表關聯后&#xff0c;你是否曾遇到這樣的挑戰&#xff1a;如何按部門統計平均薪資&#xff1f;怎樣找出每個崗位薪資最高的員工&#xff1f;或者如何計算銷售額的月度環比增長率…