DomSense / tokenization_domsense.py
LIJINGHAI111's picture
Upload folder using huggingface_hub
f73f9b3 verified
Raw History Blame Contribute Delete
2.17 kB
from transformers import PreTrainedTokenizer
from .configuration_domsense import SystemOneConfig
MAX_LEN = 128
_VOCAB = None
def _byte_map(max_len: int = MAX_LEN, pad_id: int = 0):
"""构造与 LightweightTextEncoder.tokenize_texts 一致的字节 id 序列。"""
return max_len, pad_id
class DomSenseTokenizer(PreTrainedTokenizer):
"""DomSense 字节级 Tokenizer。
与内置轻量编码器 ``LightweightTextEncoder.tokenize_texts`` 的映射完全一致:
每个 UTF-8 字节映射到 ``[0, 255]``,超过 ``max_len`` 截断,不足用 0(pad)补齐。
因此该 tokenizer 的输出可直接喂给仓库自带的 lightweight 编码器。
"""
vocab_files_names = {}
def __init__(
self,
max_len: int = MAX_LEN,
pad_token: str = "[PAD]",
unk_token: str = "[UNK]",
cls_token: str = "[CLS]",
sep_token: str = "[SEP]",
**kwargs,
):
self.max_len = max_len
super().__init__(
max_len=max_len,
pad_token=pad_token,
unk_token=unk_token,
cls_token=cls_token,
sep_token=sep_token,
**kwargs,
)
# 若 pad 与 unk 相同会造成冲突,这里 unk 也用 [UNK],保持分离
if self.pad_token is None:
self.pad_token = self.unk_token
def _tokenize(self, text):
"""把文本切成 UTF-8 字节 id 列表(与轻量编码器一致)。"""
if isinstance(text, str) is False:
text = str(text)
byte_ids = [
min(b, 255)
for b in text.encode("utf-8", errors="ignore")[: self.max_len]
]
return byte_ids
def _convert_token_to_id(self, token) -> int:
return int(token)
def _convert_id_to_token(self, index) -> str:
return str(int(index))
def get_vocab(self):
return {}
@property
def vocab_size(self) -> int:
return 256
def build_inputs_with_special_tokens(self, token_ids_0, token_ids_1=None):
return list(token_ids_0)
def save_vocabulary(self, save_directory, filename_prefix=None):
return ()