AI-Master-Book
  • about AI-Master-Book
  • AI Master Book
    • 이상치 탐지 with Python
    • 베이지안 뉴럴네트워크 (BNN) with Python
    • 그래프 뉴럴네트워크 (GNN) with Python
    • 데이터 마케팅 분석 with Python
  • LLM MASTER BOOK
    • OpenAI API 쿡북 with Python
    • 기초부터 심화까지 RAG 쿡북 with Python
    • MCP 에이전트 쿡북 with Python
  • LLMs
    • OpenAI API
      • 1️⃣ChatCompletion
      • 2️⃣DALL-E
      • 3️⃣Text to Speech
      • 4️⃣Video to Transcripts
      • 5️⃣Assistants API
      • 6️⃣Prompt Engineering
      • 7️⃣OpenAI New GPT-4o
    • LangChain
      • LangChain Basic
        • 1️⃣Basic Modules
        • 2️⃣Model I/O
        • 3️⃣Prompts
        • 4️⃣Chains
        • 5️⃣Agents
        • 6️⃣Tools
        • 7️⃣Memory
      • LangChain Intermediate
        • 1️⃣OpenAI LLM
        • 2️⃣Prompt Template
        • 3️⃣Retrieval
        • 4️⃣RAG ChatBot
        • 5️⃣RAG with Gemini
        • 6️⃣New Huggingface-LangChain
        • 7️⃣Huggingface Hub
        • 8️⃣SQL Agent & Chain
        • 9️⃣Expression Language(LCEL)
        • 🔟Llama3-8B with LangChain
      • LangChain Advanced
        • 1️⃣LLM Evaluation
        • 2️⃣RAG Evaluation with RAGAS
        • 3️⃣LangChain with RAGAS
        • 4️⃣RAG Paradigms
        • 5️⃣LangChain: Advance Techniques
        • 6️⃣LangChain with NeMo-Guardrails
        • 7️⃣LangChain vs. LlamaIndex
        • 8️⃣LangChain LCEL vs. LangGraph
    • LlamaIndex
      • LlamaIndex Basic
        • 1️⃣Introduction
        • 2️⃣Customization
        • 3️⃣Data Connectors
        • 4️⃣Documents & Nodes
        • 5️⃣Naive RAG
        • 6️⃣Advanced RAG
        • 7️⃣Llama3-8B with LlamaIndex
        • 8️⃣LlmaPack
      • LlamaIndex Intermediate
        • 1️⃣QueryEngine
        • 2️⃣Agent
        • 3️⃣Evaluation
        • 4️⃣Evaluation-Driven Development
        • 5️⃣Fine-tuning
        • 6️⃣Prompt Compression with LLMLingua
      • LlamaIndex Advanced
        • 1️⃣Agentic RAG: Router Engine
        • 2️⃣Agentic RAG: Tool Calling
        • 3️⃣Building Agent Reasoning Loop
        • 4️⃣Building Multi-document Agent
    • Hugging Face
      • Huggingface Basic
        • 1️⃣Datasets
        • 2️⃣Tokenizer
        • 3️⃣Sentence Embeddings
        • 4️⃣Transformers
        • 5️⃣Sentence Transformers
        • 6️⃣Evaluate
        • 7️⃣Diffusers
      • Huggingface Tasks
        • NLP
          • 1️⃣Sentiment Analysis
          • 2️⃣Zero-shot Classification
          • 3️⃣Aspect-Based Sentiment Analysis
          • 4️⃣Feature Extraction
          • 5️⃣Intent Classification
          • 6️⃣Topic Modeling: BERTopic
          • 7️⃣NER: Token Classification
          • 8️⃣Summarization
          • 9️⃣Translation
          • 🔟Text Generation
        • Audio & Tabular
          • 1️⃣Text-to-Speech: TTS
          • 2️⃣Speech Recognition: Whisper
          • 3️⃣Audio Classification
          • 4️⃣Tabular Qustaion & Answering
        • Vision & Multimodal
          • 1️⃣Image-to-Text
          • 2️⃣Text to Image
          • 3️⃣Image to Image
          • 4️⃣Text or Image-to-Video
          • 5️⃣Depth Estimation
          • 6️⃣Image Classification
          • 7️⃣Object Detection
          • 8️⃣Segmentatio
      • Huggingface Optimization
        • 1️⃣Accelerator
        • 2️⃣Bitsandbytes
        • 3️⃣Flash Attention
        • 4️⃣Quantization
        • 5️⃣Safetensors
        • 6️⃣Optimum-ONNX
        • 7️⃣Optimum-NVIDIA
        • 8️⃣Optimum-Intel
      • Huggingface Fine-tuning
        • 1️⃣Transformer Fine-tuning
        • 2️⃣PEFT Fine-tuning
        • 3️⃣PEFT: Fine-tuning with QLoRA
        • 4️⃣PEFT: Fine-tuning Phi-2 with QLoRA
        • 5️⃣Axoltl Fine-tuning with QLoRA
        • 6️⃣TRL: RLHF Alignment Fine-tuning
        • 7️⃣TRL: DPO Fine-tuning with Phi-3-4k-instruct
        • 8️⃣TRL: ORPO Fine-tuning with Llama3-8B
        • 9️⃣Convert GGUF gemma-2b with llama.cpp
        • 🔟Apple Silicon Fine-tuning Gemma-2B with MLX
        • 🔢LLM Mergekit
    • Agentic LLM
      • Agentic LLM
        • 1️⃣Basic Agentic LLM
        • 2️⃣Multi-agent with CrewAI
        • 3️⃣LangGraph: Multi-agent Basic
        • 4️⃣LangGraph: Agentic RAG with LangChain
        • 5️⃣LangGraph: Agentic RAG with Llama3-8B by Groq
      • Autonomous Agent
        • 1️⃣LLM Autonomous Agent?
        • 2️⃣AutoGPT: Worldcup Winner Search with LangChain
        • 3️⃣BabyAGI: Weather Report with LangChain
        • 4️⃣AutoGen: Writing Blog Post with LangChain
        • 5️⃣LangChain: Autonomous-agent Debates with Tools
        • 6️⃣CAMEL Role-playing Autonomous Cooperative Agents
        • 7️⃣LangChain: Two-player Harry Potter D&D based CAMEL
        • 8️⃣LangChain: Multi-agent Bid for K-Pop Debate
        • 9️⃣LangChain: Multi-agent Authoritarian Speaker Selection
        • 🔟LangChain: Multi-Agent Simulated Environment with PettingZoo
    • Multimodal
      • 1️⃣PaliGemma: Open Vision LLM
      • 2️⃣FLUX.1: Generative Image
    • Building LLM
      • 1️⃣DSPy
      • 2️⃣DSPy RAG
      • 3️⃣DSPy with LangChain
      • 4️⃣Mamba
      • 5️⃣Mamba RAG with LangChain
      • 7️⃣PostgreSQL VectorDB with pgvorco.rs
Powered by GitBook
On this page
  • About Tokenizer
  • Huggingface Tokenizer 설명
  • Huggingface Tokenizer Tutorial
  • 토크나이저 불러오기
  • 텍스트 토큰화
  • 토큰 인코딩
  • 패딩과 어텐션 마스크 적용
  • 디코딩
  • 모든 과정 종합
  1. LLMs
  2. Hugging Face
  3. Huggingface Basic

Tokenizer

About Tokenizer

Tokenizer는 NLP 파이프라인의 핵심 구성 요소 중 하나입니다. 토크나이저는 단지 1가지 목적을 가지고 있습니다. 즉, 입력된 텍스트를 모델에서 처리할 수 있는 데이터로 변환하는 것입니다. 모델은 숫자만 처리할 수 있으므로, 토크나이저는 텍스트 입력을 숫자 데이터로 변환해야 합니다.

1. Word-based Tokenization

토큰화(tokenization) 형태는 단어기반 (word-based) 입니다. 일반적으로 몇 가지 규칙만 가지고도 설정 및 사용이 매우 쉽고, 종종 괜찮은 결과를 얻을 수 있습니다. 예를 들어, 아래 그림에서의 토큰화 과정은 원시 텍스트를 단어로 나누고 각각에 대한 숫자 표현을 찾는 것입니다:

2. Character-based Tokenization

문자기반 토크나이저는 텍스트를 단어(words)가 아닌 문자(characters)로 나눕니다. 이러한 방법은 두가지 장점이 있습니다:

  • 어휘집(vocabulary)의 크기가 매우 작습니다.

  • 모든 단어들이 문자를 가지고 만들어질 수 있기 때문에, out-of-vocabulary (OOV, unknown) 토큰이 훨씬 적습니다.

3. Subword Tokenization

하위 단어 토큰화(subword tokenization) 알고리즘은 빈번하게 사용하는 단어(frequently used words)는 더 작은 하위단어(subword)로 분할하지 않고, 희귀 단어(rare words)를 의미있는 하위 단어(meaningful subwords)로 분할해야 한다는 원칙에 기반합니다. 하위 단어 토큰과화의 종류는 아래와 같습니다:

  • Byte-level BPE (GPT-2에 사용됨)

  • WordPiece (BERT에 사용됨)

  • SentencePiece, Unigram (몇몇 다국어 모델에 사용됨)

Huggingface는 NLP Task 뿐만아니라 Transformer 기반의 알고리즘을 위한 최적화 된 Tokenizer 패키지를 제공합니다.

Huggingface Tokenizer 설명

Huggingface의 Tokenizer는 텍스트 데이터를 숫자 데이터로 변환하여 자연어 처리 모델에 입력할 수 있도록 하는 도구입니다. 토크나이저는 주어진 텍스트를 토큰(token)으로 분할하고, 각 토큰을 고유한 정수로 매핑합니다. 이를 통해 모델이 텍스트 데이터를 이해하고 처리할 수 있게 됩니다.

토크나이저는 다양한 방법으로 텍스트를 토큰화할 수 있습니다. 예를 들어, 단어 단위로, 부분 단어 단위로, 또는 문자 단위로 토큰화할 수 있습니다. Huggingface는 BERT, GPT, RoBERTa 등 다양한 모델에 최적화된 토크나이저를 제공합니다.

주요 기능

  • 토큰화(Tokenization): 텍스트를 토큰으로 분할합니다.

  • 인코딩(Encoding): 토큰을 정수로 변환합니다.

  • 디코딩(Decoding): 정수를 다시 텍스트로 변환합니다.

  • 특수 토큰 처리: 패딩, 시작, 끝 토큰 등의 특수 토큰을 처리합니다.

Huggingface Tokenizer Tutorial

이 튜토리얼에서는 Huggingface의 transformers 라이브러리를 사용하여 텍스트 데이터를 토큰화하고 인코딩 및 디코딩하는 방법을 설명합니다. 예시로 BERT 모델의 토크나이저를 사용합니다.

%pip install transformers

토크나이저 불러오기

from transformers import BertTokenizer

# BERT-base-uncased 토크나이저 불러오기
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

텍스트 토큰화

text = "Huggingface's Transformers library is amazing!"
tokens = tokenizer.tokenize(text)

print("Tokens:", tokens)

토큰 인코딩

토큰을 정수 인덱스로 변환합니다.

input_ids = tokenizer.encode(text)

print("Input IDs:", input_ids)

패딩과 어텐션 마스크 적용

모델에 입력하기 위해 패딩을 추가하고 어텐션 마스크를 생성합니다.

# 여러 문장을 예제로 사용
texts = ["Huggingface's Transformers library is amazing!", "Tokenizers are essential for NLP tasks."]

# 인코딩, 패딩 및 어텐션 마스크 생성
encodings = tokenizer(texts, padding=True, truncation=True, return_tensors="pt")

print("Input IDs:", encodings["input_ids"])
print("Attention Mask:", encodings["attention_mask"])

디코딩

인코딩된 정수 인덱스를 다시 텍스트로 변환합니다. 토큰화 도구에는 입력 텍스트를 인코딩하는 것 외에도 모델에서 생성된 ID를 텍스트로 다시 변환하는 디코딩을 위한 API도 있습니다. 이 작업은 Tokenizer.decode(하나의 예측 텍스트에 대해) 및 Tokenizer.decode_batch(예측 일괄 처리에 대해) 메서드를 통해 수행됩니다.디코더는 먼저 토큰라이저의 어휘를 사용하여 ID를 토큰으로 다시 변환하고 모든 특수 토큰을 제거한 다음 공백으로 토큰을 결합합니다:

decoded_text = tokenizer.decode(input_ids)

print("Decoded Text:", decoded_text)

모든 과정 종합

위의 단계를 하나로 종합하여 전체 과정을 수행하는 예제입니다.

def tokenize_and_encode(texts):
    # 텍스트를 토큰화 및 인코딩
    encodings = tokenizer(texts, padding=True, truncation=True, return_tensors="pt")
    
    # 결과 출력
    print("Tokens:", [tokenizer.tokenize(text) for text in texts])
    print("Input IDs:", encodings["input_ids"])
    print("Attention Mask:", encodings["attention_mask"])
    
    # 첫 번째 문장 디코딩
    decoded_text = tokenizer.decode(encodings["input_ids"][0])
    print("Decoded Text:", decoded_text)

# 예제 문장
texts = ["Huggingface's Transformers library is amazing!", "Tokenizers are essential for NLP tasks."]
tokenize_and_encode(texts)
PreviousDatasetsNextSentence Embeddings

Last updated 1 year ago

2️⃣