1. Tokenizing

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°

Tokenizing

TokenizingλŠ” ν…μŠ€νŠΈμ™€ 같은 데이터λ₯Ό 더 μž‘κ³  관리 κ°€λŠ₯ν•œ 쑰각인 _tokens_둜 λ‚˜λˆ„λŠ” κ³Όμ •μž…λ‹ˆλ‹€. 각 토큰은 κ³ μœ ν•œ 숫자 μ‹λ³„μž(ID)κ°€ ν• λ‹Ήλ©λ‹ˆλ‹€. μ΄λŠ” 기계 ν•™μŠ΅ λͺ¨λΈ, 특히 μžμ—°μ–΄ 처리(NLP)λ₯Ό μœ„ν•œ ν…μŠ€νŠΈ μ€€λΉ„μ˜ κΈ°λ³Έ λ‹¨κ³„μž…λ‹ˆλ‹€.

Tip

이 초기 λ‹¨κ³„μ˜ λͺ©ν‘œλŠ” 맀우 κ°„λ‹¨ν•©λ‹ˆλ‹€: μž…λ ₯을 의미 μžˆλŠ” λ°©μ‹μœΌλ‘œ 토큰(ids)으둜 λ‚˜λˆ„κΈ°μž…λ‹ˆλ‹€.

How Tokenizing Works

  1. ν…μŠ€νŠΈ λΆ„ν• :
  • κΈ°λ³Έ ν† ν¬λ‚˜μ΄μ €: κ°„λ‹¨ν•œ ν† ν¬λ‚˜μ΄μ €λŠ” ν…μŠ€νŠΈλ₯Ό κ°œλ³„ 단어와 κ΅¬λ‘μ μœΌλ‘œ λ‚˜λˆ„κ³  곡백을 μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 예:
    ν…μŠ€νŠΈ: "Hello, world!"
    토큰: ["Hello", ",", "world", "!"]
  1. μ–΄νœ˜ 생성:
  • 토큰을 숫자 ID둜 λ³€ν™˜ν•˜κΈ° μœ„ν•΄ μ–΄νœ˜κ°€ μƒμ„±λ©λ‹ˆλ‹€. 이 μ–΄νœ˜λŠ” λͺ¨λ“  고유 토큰(단어 및 기호)을 λ‚˜μ—΄ν•˜κ³  각 토큰에 νŠΉμ • IDλ₯Ό ν• λ‹Ήν•©λ‹ˆλ‹€.
  • 특수 토큰: λ‹€μ–‘ν•œ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ–΄νœ˜μ— μΆ”κ°€λœ 특수 κΈ°ν˜Έμž…λ‹ˆλ‹€:
  • [BOS] (Sequence의 μ‹œμž‘): ν…μŠ€νŠΈμ˜ μ‹œμž‘μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • [EOS] (Sequence의 끝): ν…μŠ€νŠΈμ˜ 끝을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • [PAD] (νŒ¨λ”©): 배치의 λͺ¨λ“  μ‹œν€€μŠ€λ₯Ό λ™μΌν•œ 길이둜 λ§Œλ“€κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
  • [UNK] (μ•Œ 수 μ—†μŒ): μ–΄νœ˜μ— μ—†λŠ” 토큰을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • 예:
    "Hello"κ°€ ID 64에 ν• λ‹Ήλ˜κ³ , ","κ°€ 455, "world"κ°€ 78, "!"κ°€ 467이라면:
    "Hello, world!" β†’ [64, 455, 78, 467]
  • μ•Œ 수 μ—†λŠ” 단어 처리:
    "Bye"와 같은 단어가 μ–΄νœ˜μ— μ—†μœΌλ©΄ [UNK]둜 λŒ€μ²΄λ©λ‹ˆλ‹€.
    "Bye, world!" β†’ ["[UNK]", ",", "world", "!"] β†’ [987, 455, 78, 467]
    (μ—¬κΈ°μ„œ [UNK]의 IDλŠ” 987라고 κ°€μ •ν•©λ‹ˆλ‹€)

Advanced Tokenizing Methods

κΈ°λ³Έ ν† ν¬λ‚˜μ΄μ €λŠ” κ°„λ‹¨ν•œ ν…μŠ€νŠΈμ— 잘 μž‘λ™ν•˜μ§€λ§Œ, 특히 큰 μ–΄νœ˜μ™€ μƒˆλ‘œμš΄ λ˜λŠ” ν¬κ·€ν•œ 단어λ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 ν•œκ³„κ°€ μžˆμŠ΅λ‹ˆλ‹€. κ³ κΈ‰ ν† ν¬λ‚˜μ΄μ§• 방법은 ν…μŠ€νŠΈλ₯Ό 더 μž‘μ€ ν•˜μœ„ λ‹¨μœ„λ‘œ λ‚˜λˆ„κ±°λ‚˜ ν† ν¬λ‚˜μ΄μ§• ν”„λ‘œμ„ΈμŠ€λ₯Ό μ΅œμ ν™”ν•˜μ—¬ μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

  1. Byte Pair Encoding (BPE):
  • λͺ©μ : μ–΄νœ˜μ˜ 크기λ₯Ό 쀄이고 ν¬κ·€ν•˜κ±°λ‚˜ μ•Œ 수 μ—†λŠ” 단어λ₯Ό 자주 λ°œμƒν•˜λŠ” λ°”μ΄νŠΈ 쌍으둜 λ‚˜λˆ„μ–΄ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • μž‘λ™ 방식:
  • κ°œλ³„ 문자λ₯Ό ν† ν°μœΌλ‘œ μ‹œμž‘ν•©λ‹ˆλ‹€.
  • κ°€μž₯ 자주 λ°œμƒν•˜λŠ” 토큰 μŒμ„ 반볡적으둜 λ³‘ν•©ν•˜μ—¬ 단일 ν† ν°μœΌλ‘œ λ§Œλ“­λ‹ˆλ‹€.
  • 더 이상 병합할 수 μžˆλŠ” 자주 λ°œμƒν•˜λŠ” 쌍이 없을 λ•ŒκΉŒμ§€ κ³„μ†ν•©λ‹ˆλ‹€.
  • μž₯점:
  • λͺ¨λ“  단어가 기쑴의 ν•˜μœ„ 단어 토큰을 κ²°ν•©ν•˜μ—¬ ν‘œν˜„λ  수 μžˆμœΌλ―€λ‘œ [UNK] 토큰이 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • 더 효율적이고 μœ μ—°ν•œ μ–΄νœ˜μž…λ‹ˆλ‹€.
  • 예:
    "playing"은 "play"와 "ing"κ°€ 자주 λ°œμƒν•˜λŠ” ν•˜μœ„ 단어라면 ["play", "ing"]둜 ν† ν¬λ‚˜μ΄μ¦ˆλ  수 μžˆμŠ΅λ‹ˆλ‹€.
  1. WordPiece:
  • μ‚¬μš© λͺ¨λΈ: BERT와 같은 λͺ¨λΈ.
  • λͺ©μ : BPE와 μœ μ‚¬ν•˜κ²Œ, μ•Œ 수 μ—†λŠ” 단어λ₯Ό μ²˜λ¦¬ν•˜κ³  μ–΄νœ˜ 크기λ₯Ό 쀄이기 μœ„ν•΄ 단어λ₯Ό ν•˜μœ„ λ‹¨μœ„λ‘œ λ‚˜λˆ•λ‹ˆλ‹€.
  • μž‘λ™ 방식:
  • κ°œλ³„ 문자의 κΈ°λ³Έ μ–΄νœ˜λ‘œ μ‹œμž‘ν•©λ‹ˆλ‹€.
  • ν›ˆλ ¨ λ°μ΄ν„°μ˜ κ°€λŠ₯성을 κ·ΉλŒ€ν™”ν•˜λŠ” κ°€μž₯ 자주 λ°œμƒν•˜λŠ” ν•˜μœ„ 단어λ₯Ό 반볡적으둜 μΆ”κ°€ν•©λ‹ˆλ‹€.
  • μ–΄λ–€ ν•˜μœ„ 단어λ₯Ό 병합할지 κ²°μ •ν•˜κΈ° μœ„ν•΄ ν™•λ₯  λͺ¨λΈμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • μž₯점:
  • 관리 κ°€λŠ₯ν•œ μ–΄νœ˜ 크기와 단어λ₯Ό 효과적으둜 ν‘œν˜„ν•˜λŠ” 것 μ‚¬μ΄μ˜ κ· ν˜•μ„ μœ μ§€ν•©λ‹ˆλ‹€.
  • ν¬κ·€ν•˜κ³  볡합적인 단어λ₯Ό 효율적으둜 μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • 예:
    "unhappiness"λŠ” μ–΄νœ˜μ— 따라 ["un", "happiness"] λ˜λŠ” ["un", "happy", "ness"]둜 ν† ν¬λ‚˜μ΄μ¦ˆλ  수 μžˆμŠ΅λ‹ˆλ‹€.
  1. Unigram Language Model:
  • μ‚¬μš© λͺ¨λΈ: SentencePiece와 같은 λͺ¨λΈ.
  • λͺ©μ : κ°€μž₯ κ°€λŠ₯성이 높은 ν•˜μœ„ 단어 토큰 집합을 κ²°μ •ν•˜κΈ° μœ„ν•΄ ν™•λ₯  λͺ¨λΈμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • μž‘λ™ 방식:
  • 잠재적인 ν† ν°μ˜ 큰 μ§‘ν•©μœΌλ‘œ μ‹œμž‘ν•©λ‹ˆλ‹€.
  • ν›ˆλ ¨ λ°μ΄ν„°μ˜ λͺ¨λΈ ν™•λ₯ μ„ κ°€μž₯ 적게 κ°œμ„ ν•˜λŠ” 토큰을 반볡적으둜 μ œκ±°ν•©λ‹ˆλ‹€.
  • 각 단어가 κ°€μž₯ κ°€λŠ₯성이 높은 ν•˜μœ„ 단어 λ‹¨μœ„λ‘œ ν‘œν˜„λ˜λŠ” μ–΄νœ˜λ₯Ό μ΅œμ’…ν™”ν•©λ‹ˆλ‹€.
  • μž₯점:
  • μœ μ—°ν•˜λ©° μ–Έμ–΄λ₯Ό 더 μžμ—°μŠ€λŸ½κ²Œ λͺ¨λΈλ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ’…μ’… 더 효율적이고 κ°„κ²°ν•œ ν† ν¬λ‚˜μ΄μ§• κ²°κ³Όλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
  • 예:
    "internationalization"은 ["international", "ization"]κ³Ό 같은 더 μž‘κ³  의미 μžˆλŠ” ν•˜μœ„ λ‹¨μ–΄λ‘œ ν† ν¬λ‚˜μ΄μ¦ˆλ  수 μžˆμŠ΅λ‹ˆλ‹€.

Code Example

Let’s understand this better from a code example from https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb:

# Download a text to pre-train the model
import urllib.request
url = ("https://raw.githubusercontent.com/rasbt/LLMs-from-scratch/main/ch02/01_main-chapter-code/the-verdict.txt")
file_path = "the-verdict.txt"
urllib.request.urlretrieve(url, file_path)

with open("the-verdict.txt", "r", encoding="utf-8") as f:
raw_text = f.read()

# Tokenize the code using GPT2 tokenizer version
import tiktoken
token_ids = tiktoken.get_encoding("gpt2").encode(txt, allowed_special={"[EOS]"}) # Allow the user of the tag "[EOS]"

# Print first 50 tokens
print(token_ids[:50])
#[40, 367, 2885, 1464, 1807, 3619, 402, 271, 10899, 2138, 257, 7026, 15632, 438, 2016, 257, 922, 5891, 1576, 438, 568, 340, 373, 645, 1049, 5975, 284, 502, 284, 3285, 326, 11, 287, 262, 6001, 286, 465, 13476, 11, 339, 550, 5710, 465, 12036, 11, 6405, 257, 5527, 27075, 11]

References

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°