目錄
一、詞表的構造問題
二、bpe(byte pair encoding) 壓縮算法
算法步驟
示例:
步驟 1:初始化符號表和頻率統計
步驟 2:統計相鄰符號對的頻率
步驟 3:合并最高頻的符號對
步驟 4:重復合并直至終止條件
三、bpe在NLP中的使用示例
1.第一步
2.第二步
3.第三步
四、tiktoken 分詞工具
1.可視化網站
2.分詞工具 解碼序列
五、大語言模型處理中文時是分字還是分詞?
六、bbpe(Byte-Level Byte Pair Encoding)
你和生生不息的河流,生動了我人生中的美好瞬間
????????????????????????????????????????????????????????????????????????—— 25.4.11
一、詞表的構造問題
為了nlp模型訓練,詞表(字表)是必要的
統計訓練語料中的所有字符(或詞)是一種做法,但是容易出現一些問題:
????????1)測試數據中出現訓練數據中沒有的詞
????????2)詞表過大
????????3)對于不同語種,切分粒度不好確認(字 or 詞)
二、bpe(byte pair encoding) 壓縮算法
????????BPE 最初是一種數據壓縮算法,通過迭代合并數據中最頻繁出現的字節對(Byte Pair),逐步構建一個編碼表,將高頻字節對替換為一個新的符號,從而減少數據中的重復模式,達到壓縮目的。其核心邏輯是:通過統計數據中相鄰符號的頻率,不斷合并高頻符號對,生成更復雜的新符號,最終將原始數據轉換為符號序列,減少數據冗余。
算法步驟
假設輸入數據為字符串,初始符號為單個字符(或字節)
Suppose the data to be encoded is:
aaabdaaabac
The byte pair "aa" occurs most often, so it will be replaced by a byte that is not used in the data, such as "Z". Now there is??the following data and replacement table:
ZabdZabac
Z=aa
Then the process is repeated with byte pair 'ab", replacing it with "Y"?:?
ZYdZYac
Z=aa
Y=ab
The only?literal?byte pair left occurs only once, and the encoding might stop here. Alternatively, the process could continue with recursive byte pair encoding, replacing "ZY" with "X":
XdXac
Z=aa
Y=ab
X=ZY
示例:
步驟 1:初始化符號表和頻率統計
????????將輸入數據拆分為最小單元(如單個字符或字節),初始符號表為所有唯一字符的集合。
例如:
輸入數據為?
{"low", "lower", "newer", "widest"}
,初始符號為?
{"l", "o", "w", "e", "r", "n", "w", "i", "d", "s", "t"}
。
步驟 2:統計相鄰符號對的頻率
????????遍歷數據,統計所有相鄰符號對(Bigram)的出現次數。
例如:
"lo" 出現 2 次("low" 和 "lower"),
"ow" 出現 1 次("low"),
"er" 出現 2 次("lower" 和 "newer"),
其他符號對頻率依次統計。
步驟 3:合并最高頻的符號對
????????選擇頻率最高的符號對,將其作為新符號加入符號表,并在數據中替換所有該符號對為新符號。
例如:
若 "er" 是最高頻對(頻率 2),合并后新符號為 "er",
數據轉換為?
{"l ow", "l o er", "n ew er", "w i d e s t"}
(注意空格表示符號間隔)。
步驟 4:重復合并直至終止條件
????????重復步驟 2-3,直到達到預設的合并次數(如生成 1000 個符號)或無法繼續合并(所有符號對頻率為 1)。
例如:
最終符號表包含原始字符和合并生成的新符號(如 "lo", "er", "new" 等),數據被轉換為符號序列。
三、bpe在NLP中的使用示例
1.第一步
Ⅰ、假設語料內容如下:
he had a cat
the cat is sitting on the mat
Ⅱ、統計字符集合:
['a', 'c', 'd', 'e', 'g', 'h', 'i', 'm', 'n', 'o', 's', 't']
Ⅲ、統計相鄰字符同時出現的次數(字符中如有空格不算相鄰)
he:3 (he, the*2)
ha:1 (had)
ad:1 (had)
ca:2 (cat*2)
at:3 (cat*2, mat)
th:2
is:1
si:1
it:1
ti:1
in:1
ng:1
on:1
ma:1?
Ⅳ、最高頻的組合被視為一個新的字符,新的字符集合:
['a', 'c', 'd', 'e', 'g', 'h', 'i', 'm', 'n', 'o', 's', 't', 'X', 'Y'],X = he,Y = at
2.第二步
Ⅰ、假設語料內容如下:
he had a cat
the cat is sitting on the mat
Ⅱ、新詞表:
['a', 'c', 'd', 'e', 'g', 'h', 'i', 'm', 'n', 'o', 's', 't', 'X', 'Y'],X = he,Y = at
Ⅲ、統計相鄰字符同時出現的次數(字符中如有空格不算相鄰)
tX(t'he'):2(the * 2)
ha:1(had)
ad:1(had)
cY(c'at'):2(cat * 2)
is:1
si:1
it:1
ti:1
in:1
ng:1
on:1
mY(m'at'):1
Ⅳ、最高頻的組合被視為一個新的字符,新的字符集合:
['a', 'c', 'd', 'e', 'g', 'h', 'i', 'm', 'n', 'o', 's', 't', 'X', 'Y', 'Z', 'M'?],Z = tX(t'he'),M = ha
3.第三步
依次循環,重復合并直至終止條件
四、tiktoken 分詞工具
1.可視化網站
tokenization 可視化網站:https://www.aitokenizer.xyz/
2.分詞工具 解碼序列
import tiktokenencoding = tiktoken.get_encoding("cl100k_base")
print(encoding.encode("一切都會好的,我一直相信"))
五、大語言模型處理中文時是分字還是分詞?
????????答:既不是分字,也不是分詞,是介于字與詞之間的一種東西,我們稱之為 token,大語言模型可以把一個字切分為多個token,也可能把多個字當成一個token,這些token本質上是由訓練數據通過統計算法得到
六、bbpe(Byte-Level Byte Pair Encoding)
????????BBPE(Byte-Level Byte Pair Encoding,字節級字節對編碼)是一種分詞算法,是BPE(Byte Pair Encoding)的進階版本。它通過將文本分解為字節序列,并在字節級別合并高頻連續字節對來構建詞表,從而解決了BPE在多語言和特殊字符處理中的局限性。
????????通過bpe算法,就可以在同一段文本中將不同語種的句子粘合在一起;而數字問題用bpe思想做時,就會導致一定數學計算的問題