Token Ayırma
Dil modellerinin token sınırları bulunmaktadır. Bu sınırları aşmamalısınız. Bu nedenle metni parçalara ayırırken token sayısını hesaplamak en iyisidir. Birçok token işleyici (tokenizer) mevcuttur. Metindeki token sayısını hesaplarken, dil modelinde kullanılan aynı token işleyici kullanılmalıdır.
Bu bölüm, LangChain'in çeşitli token tokenizörlerini metin içeriğini parçalara ayırmak için nasıl kullandığını içermektedir.
tiktoken
tiktoken, OpenAI tarafından açık kaynak olarak sunulan hızlı bir BPE tokenizasyon aracıdır.
Bu aracı kullanarak kullanılan token sayısını tahmin etmek mümkündür. OpenAI modelleri için daha doğru olabilir.
- Metnin nasıl parçalandığı: giriş karakterlerine göre.
- Parça boyutu nasıl ölçülür:
tiktoken
tokenizasyon aracı kullanılarak.
%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.
Ayrıca tiktoken parçalayıcısını doğrudan yükleyebiliriz.
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, Python ve Cython ile yazılmış gelişmiş doğal dil işleme için açık kaynaklı bir yazılım kütüphanesidir.
NLTK kullanmak yerine spaCy tokenizatörü kullanmanın başka bir alternatifidir.
- Metnin nasıl parçalandığı:
spaCy
tokenizatörü kullanılarak. - Parça boyutu nasıl ölçülür: karakter sayısıyla.
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
, özel olarak sentence-transformer modeli için tasarlanmış bir metin parçalayıcıdır. Varsayılan davranışı, istenen sentence-transformer modeli için uygun bir token pencere boyutuna göre metni parçalamaktır.
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
Doğal Dil İşleme Kütüphanesi, genellikle NLTK olarak bilinen, İngilizce için kullanılan Python programlama diliyle yazılmış sembolik ve istatistiksel doğal dil işleme (NLP) kütüphaneleri ve programlarıdır.
Metni sadece "\n\n" temelinde bölmek yerine, NLTK cümle ayırıcı kullanarak bölebiliriz.
- Metin Bölme Yöntemi: NLTK cümle ayırıcı kullanarak.
- Parça Boyutu Ölçümü: karakter sayısıyla ölçülür.
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'ın birçok cümle ayırıcısı bulunmaktadır.
Metin sayısını hesaplamak için Hugging Face cümle ayırıcısı olarak GPT2TokenizerFast kullanıyoruz.
- Metnin nasıl bölündüğü: girdi karakterlerine dayalı olarak bölünmüş.
- Parça boyutu nasıl hesaplanır: Hugging Face cümle ayırıcısı tarafından hesaplanan belirteç sayısıyla ölçülür.
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])