mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 21:14:17 +00:00
40 lines
1.9 KiB
Python
40 lines
1.9 KiB
Python
|
|
from abc import ABC, abstractmethod
|
|||
|
|
from typing import List, Dict
|
|||
|
|
|
|||
|
|
class BPE(ABC):
|
|||
|
|
"""
|
|||
|
|
Реализация алгоритма токенизации Byte Pair Encoding (BPE).
|
|||
|
|
|
|||
|
|
BPE — это итеративный алгоритм, последовательно объединяющий наиболее частые пары символов/токенов,
|
|||
|
|
чтобы построить эффективный словарь для работы с текстом: токенизации, обучения языковой модели и т.п.
|
|||
|
|
|
|||
|
|
Аргументы конструктора:
|
|||
|
|
vocab_size (int): Желаемый размер итогового словаря токенов (включая отдельные символы и составные токены).
|
|||
|
|
|
|||
|
|
Атрибуты:
|
|||
|
|
vocab (List[str]): Список токенов в порядке их получения (сначала символы, затем новые пары).
|
|||
|
|
token2id (Dict[str, int]): Словарь преобразования токена в его индекс.
|
|||
|
|
id2token (Dict[int, str]): Обратный словарь преобразования индекса в токен.
|
|||
|
|
"""
|
|||
|
|
def __init__(self, vocab_size: int):
|
|||
|
|
"""
|
|||
|
|
Инициализация BPE токенизатора.
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
vocab_size (int): Размер словаря, к которому будет расширяться BPE.
|
|||
|
|
"""
|
|||
|
|
self.vocab_size = vocab_size
|
|||
|
|
self.vocab: List[str] = []
|
|||
|
|
self.token2id: Dict[str, int] = {}
|
|||
|
|
self.id2token: Dict[int, str] = {}
|
|||
|
|
|
|||
|
|
@abstractmethod
|
|||
|
|
def fit(self, text: str):
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
def encode(self, text: str):
|
|||
|
|
raise NotImplementedError("Implement in subclass if needed.")
|
|||
|
|
|
|||
|
|
def decode(self, ids: list[int]):
|
|||
|
|
raise NotImplementedError("Implement in subclass if needed.")
|