Pemisahan Token

Model bahasa memiliki batasan token. Kamu sebaiknya tidak melebihi batas token tersebut. Oleh karena itu, saat membagi teks menjadi bagian, lebih baik untuk menghitung jumlah token. Ada banyak pemroses token (tokenizer) yang tersedia. Saat menghitung jumlah token dalam teks, pemroses token yang sama yang digunakan dalam model bahasa seharusnya digunakan.

Bab ini memperkenalkan bagaimana LangChain menggunakan berbagai pemisah token untuk membagi konten teks berdasarkan token.

tiktoken

tiktoken adalah tokenizer BPE cepat yang disumbangkan oleh OpenAI.

Kita dapat menggunakannya untuk memperkirakan jumlah token yang digunakan. Ini mungkin lebih akurat untuk model OpenAI.

  1. Bagaimana teks dipisah: sesuai dengan karakter input.
  2. Bagaimana ukuran potongan diukur: menggunakan 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.  
    
    Tahun lalu, COVID-19 membuat kita terpisah. Tahun ini kita akhirnya bersama lagi. 
    
    Malam ini, kita bertemu sebagai Demokrat, Republik, dan independen. Tapi yang paling penting sebagai Amerika. 
    
    Dengan kewajiban satu sama lain kepada rakyat Amerika kepada Konstitusi.

Kita juga dapat langsung memuat pemisah tiktoken.

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 adalah perpustakaan perangkat lunak sumber terbuka untuk pemrosesan bahasa alami canggih yang ditulis dalam Python dan Cython.

Salah satu alternatif penggunaan NLTK adalah menggunakan tokenizer spaCy.

  1. Bagaimana teks dipisah: menggunakan tokenizer spaCy.
  2. Bagaimana ukuran potongan diukur: dengan menghitung jumlah karakter.
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 adalah pemisah teks yang dirancang khusus untuk model sentence-transformer. Perilaku defaultnya adalah membagi teks menjadi blok ukuran jendela token yang sesuai untuk model sentence-transformer yang diinginkan.

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

Natural Language Toolkit, lebih dikenal sebagai NLTK, adalah serangkaian perpustakaan dan program untuk pemrosesan bahasa alami (NLP) simbolik dan statistik yang ditulis dalam bahasa pemrograman Python, digunakan untuk bahasa Inggris.

Daripada hanya membagi teks berdasarkan "\n\n", kita dapat menggunakan NLTK untuk membagi berdasarkan tokenizer NLTK.

  1. Metode Pemisahan Teks: menggunakan tokenizer NLTK.
  2. Pengukuran Ukuran Chunk: diukur berdasarkan jumlah karakter.
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])

Hugging Face Tokenizer

Hugging Face memiliki banyak tokenizer.

Kita menggunakan GPT2TokenizerFast dari tokenizer Hugging Face untuk menghitung jumlah token dalam teks.

  1. Cara teks dipisahkan: dipisahkan berdasarkan karakter input.
  2. Bagaimana ukuran chunk dihitung: diukur berdasarkan jumlah token yang dihitung oleh tokenizer 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])