Phân chia Token

Các mô hình ngôn ngữ có giới hạn về số lượng token. Bạn không nên vượt quá giới hạn số token. Vì vậy, khi chia văn bản thành các đoạn, tốt nhất là tính toán số lượng token. Có rất nhiều token processors (tokenizer) có sẵn. Khi tính toán số lượng token trong văn bản, cần sử dụng cùng token processor được sử dụng trong mô hình ngôn ngữ.

Chương này giới thiệu cách LangChain sử dụng các token tokenizer khác nhau để phân chia nội dung văn bản dựa trên token.

tiktoken

tiktoken là một BPE tokenizer nhanh được OpenAI phát hành mã nguồn mở.

Chúng ta có thể sử dụng nó để ước tính số lượng token được sử dụng. Nó có thể chính xác hơn cho các mô hình OpenAI.

  1. Cách chia văn bản: dựa trên ký tự đầu vào.
  2. Cách đo kích thước chunk: sử dụng tokenizer tiktoken.
%pip install --upgrade --quiet langchain-text-splitters tiktoken
with open("../../../state_of_the_union.txt") as f:
    state_of_the_union = f.read()
	
from langchain_text_splitters import CharacterTextSplitter
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(
    chunk_size=100, chunk_overlap=0
)
texts = text_splitter.split_text(state_of_the_union)
print(texts[0])
Madam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans.  
    
    Last year COVID-19 kept us apart. This year we are finally together again. 
    
    Tonight, we meet as Democrats Republicans and Independents. But most importantly as Americans. 
    
    With a duty to one another to the American people to the Constitution.

Chúng ta cũng có thể trực tiếp tải tiktoken splitter.

from langchain_text_splitters import TokenTextSplitter

text_splitter = TokenTextSplitter(chunk_size=10, chunk_overlap=0)

texts = text_splitter.split_text(state_of_the_union)
print(texts[0])

spaCy

spaCy là một thư viện phần mềm mã nguồn mở cho xử lý ngôn ngữ tự nhiên tiên tiến được viết bằng Python và Cython.

Một lựa chọn khác thay vì sử dụng NLTK là sử dụng spaCy tokenizer.

  1. Cách chia văn bản: sử dụng spaCy tokenizer.
  2. Cách đo kích thước chunk: bằng cách đếm số ký tự.
with open("../../../state_of_the_union.txt") as f:
    state_of_the_union = f.read()
from langchain_text_splitters import SpacyTextSplitter

text_splitter = SpacyTextSplitter(chunk_size=1000)
texts = text_splitter.split_text(state_of_the_union)
print(texts[0])

SentenceTransformers

SentenceTransformersTokenTextSplitter là một phần chia văn bản được thiết kế đặc biệt cho mô hình sentence-transformer. Hành vi mặc định của nó là chia văn bản thành các khối kích thước cửa sổ token phù hợp cho mô hình sentence-transformer mong muốn.

from langchain_text_splitters import SentenceTransformersTokenTextSplitter
splitter = SentenceTransformersTokenTextSplitter(chunk_overlap=0)
text = "Lorem "
count_start_and_stop_tokens = 2
text_token_count = splitter.count_tokens(text=text) - count_start_and_stop_tokens
print(text_token_count)
2
token_multiplier = splitter.maximum_tokens_per_chunk // text_token_count + 1

text_to_split = text * token_multiplier

print(f"tokens in text to split: {splitter.count_tokens(text=text_to_split)}")
tokens in text to split: 514
text_chunks = splitter.split_text(text=text_to_split)

print(text_chunks[1])
lorem

NLTK

Bộ công cụ xử lý ngôn ngữ tự nhiên, được gọi là NLTK phổ biến hơn, là một bộ thư viện và chương trình dùng cho xử lý ngôn ngữ tự nhiên (NLP) theo phương pháp ký hiệu học và thống kê, được viết bằng ngôn ngữ lập trình Python, dùng cho tiếng Anh.

Thay vì đơn giản chỉ chia văn bản dựa trên "\n\n", chúng ta có thể sử dụng NLTK để chia dựa trên bộ tách từ của NLTK.

  1. Phương pháp Chia văn bản: sử dụng bộ tách từ của NLTK.
  2. Phương pháp Đo kích thước Fragment: được đo bằng số ký tự.
with open("../../../state_of_the_union.txt") as f:
    state_of_the_union = f.read()
from langchain_text_splitters import NLTKTextSplitter

text_splitter = NLTKTextSplitter(chunk_size=1000)
texts = text_splitter.split_text(state_of_the_union)
print(texts[0])

Bộ Tách Từ Hugging Face

Hugging Face có rất nhiều bộ tách từ.

Chúng ta sử dụng GPT2TokenizerFast từ Hugging Face tokenizers để tính toán số lượng token trong văn bản.

  1. Cách phân đoạn văn bản: phân đoạn dựa trên các ký tự đầu vào.
  2. Cách tính Kích thước Fragment: được đo bằng số lượng token tính toán bởi bộ tách từ Hugging Face.
from transformers import GPT2TokenizerFast

tokenizer = GPT2TokenizerFast.from_pretrained("gpt2")
with open("../../../state_of_the_union.txt") as f:
    state_of_the_union = f.read()

from langchain_text_splitters import CharacterTextSplitter
text_splitter = CharacterTextSplitter.from_huggingface_tokenizer(
    tokenizer, chunk_size=100, chunk_overlap=0
)
texts = text_splitter.split_text(state_of_the_union)
print(texts[0])