OpenSourceTokenizer
. Bài viết sẽ giúp bạn hiểu rõ hơn về cấu trúc, các hàm chính và cách triển khai của lớp này trong code nguồn mở, từ đó hiểu được cách token được mã hóa và đếm một cách chính xác.OpenSourceTokenizer
trong dự án Tiktokenizer, tìm hiểu cách hoạt động của constructor, phương thức tĩnh load
cũng như cách phương thức tokenize
tạo ra kết quả đếm token. Nội dung sẽ đi kèm ví dụ và giải thích chi tiết để bạn dễ dàng áp dụng hoặc tham khảo trong các dự án của mình.OpenSourceTokenizer
thực thi giao diện <u>Tokenizer</u>
, trong đó yêu cầu định nghĩa thuộc tính name
và phương thức tokenize
:export interface Tokenizer { name: string; tokenize(text: string): TokenizerResult; free?(): void;}
Điểm quan trọng: Lớp này đóng vai trò bọc (wrapper) choPreTrainedTokenizer
do thư viện@xenova/transformers
cung cấp, giúp chuẩn hóa các hàm tương tác với tokenizer.
constructor(private tokenizer: PreTrainedTokenizer, name?: string) { this.name = name ?? tokenizer.name;}
this.name
dựa trên tên được truyền vào hoặc lấy từ thuộc tính của tokenizer
.tokenizer
là instance của lớp PreTrainedTokenizer
, đại diện cho mô hình tokenizer đã được huấn luyện sẵn.static async load(model: z.infer<typeof openSourceModels>): Promise<PreTrainedTokenizer> { if (typeof window !== "undefined") { env.remoteHost = window.location.origin; } env.remotePathTemplate = "/hf/{model}"; // env.useBrowserCache = false; // Dùng để bật/tắt cache trên trình duyệt const t = await PreTrainedTokenizer.from_pretrained(model, { progress_callback: (progress: any) => console.log(`loading "${model}"`, progress), }); console.log("loaded tokenizer", model, t.name); return t;}
PreTrainedTokenizer
tương ứng với mô hình được chỉ định.from_pretrained
của PreTrainedTokenizer
để tải tokenizer, đồng thời thiết lập một số biến môi trường cho việc truy cập dữ liệu tokenization.Hàmload
rất hữu ích khi bạn cần sử dụng các mô hình tokenizer từ bộ OpenSource của Hugging Face hoặc tương tự, giúp tích hợp dễ dàng trong ứng dụng của bạn.
tokenize
trong lớp này được định nghĩa như sau:tokenize(text: string): TokenizerResult { const tokens = this.tokenizer.encode(text); const removeFirstToken = (hackModelsRemoveFirstToken.options as string[]).includes(this.name); return { name: this.name, tokens, segments: getHuggingfaceSegments(this.tokenizer, text, removeFirstToken), count: tokens.length, };}
this.tokenizer.encode(text)
phân tách chuỗi đầu vào thành dãy token số.removeFirstToken
, token đầu tiên có thể bị loại bỏ (đây là cơ chế hack dành cho vài trường hợp mô hình đặc biệt).TiktokenTokenizer
ở dòng 26 của cùng file, đảm bảo tính đồng nhất giữa các loại tokenizer.Nắm rõ phương thức này giúp bạn hiểu quá trình từ văn bản thuần thành mã token, đồng thời hiểu được cách tokenizer tính và trả về số lượng token.
async function example() { const tokenizerInstance = await OpenSourceTokenizer.load("gpt2"); const tokenizer = new OpenSourceTokenizer(tokenizerInstance); const result = tokenizer.tokenize("Hello, this is a sample text!"); console.log(result.count); // Số lượng token console.log(result.tokens); // Mảng token dưới dạng số nguyên}
gpt2
là tên mô hình tokenizer.load
được gọi để tải tokenizer.OpenSourceTokenizer
và gọi tokenize
để lấy kết quả.Thuộc tính | Ý nghĩa |
---|---|
name | Tên tokenizer đang sử dụng |
tokens | Mảng các token đã được mã hóa (dạng số) |
segments | Các phân đoạn văn bản tương ứng (theo chuẩn Huggingface) |
count | Tổng số token trong văn bản |
OpenSourceTokenizer
đóng vai trò như một cầu nối giữa thư viện transformer mở của Xenova và hệ thống Tiktokenizer của OpenAI.load
giúp tải tokenizer từ mô hình pretrained một cách thuận tiện và cập nhật theo thời gian thực.tokenize
sử dụng tokenizer đã tải để mã hóa văn bản thành token số, đồng thời cung cấp thông tin chi tiết về số lượng cũng như phân đoạn token.OpenSourceTokenizer
giữ nguyên cấu trúc trả về giống TiktokenTokenizer
nhằm duy trì tính đồng bộ cho những hệ thống sử dụng đa dạng tokenizer.OpenSourceTokenizer
hoạt động cho phép bạn dễ dàng tùy biến, mở rộng và sử dụng hiệu quả các công cụ token hóa trong dự án liên quan đến AI và xử lý ngôn ngữ tự nhiên.