টোকেন বিভক্তি
ভাষা মডেলের একটি টোকেনের সীমা আছে। আপনার টোকেন সীমা অতিক্রম করা উচিত নয়। তাই, যখন পাঠকের ভাঙ্গা টোকেন গুলি গণনা করা হয়, টোকেন এর সংখ্যা গণনা করা হলে, ভাষা মডেল এর ব্যবহৃত একই টোকেন প্রসেসর ব্যবহার করা উচিত।
এই অধ্যায়ে ল্যাংচেন কিভাবে বিভিন্ন টোকেন টোকেনাইজার ব্যবহার করে টেক্সট কন্টেন্টকে স্প্লিট করে তা নিয়ে আলোচনা করা হয়েছে।
টিকটোকেন (tiktoken)
টিকটোকেন হলো একটি জল্দবাজে বিপিইই টোকেনাইজার যা ওপেনএআই দ্বারা পাবলিশ হয়েছে।
আমরা এটি ব্যবহার করতে পারি টোকেনের ব্যবহারের জন্য। ওপেনএআই মডেলগুলির জন্য এটি আরো নির্দিষ্ট হতে পারে।
- যেভাবে টেক্সট বিভক্ত হয়: ইনপুট ক্যারেক্টারের ভিতরে অনুসারে।
- কীভাবে চাঙ্ক সাইজ মাপা হয়:
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.
আমরা টিকটোকেন স্প্লিটার ডাইরেক্টলি লোড করতে পারি।
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
স্পাসি হলো পাইথন এবং সাইথনে লেখা এডভান্সড ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং এর জন্য ওপেনসোর্স সফটওয়্যার লাইব্রেরি।
NLTK ব্যবহারের একটি বিকল্প হলো স্পাসি টোকেনাইজার ব্যবহার।
- যেভাবে টেক্সট বিভক্ত হয়:
স্পাসি
টোকেনাইজার ব্যবহার করে। - চাঙ্ক সাইজ মাপা হয়: বর্ণগুলির সংখ্যা গণনা করে।
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
হলো বাক্য-ট্রান্সফরমার মডেলের জন্য নির্দিষ্টভাবে তৈরি একটি টেক্সট বিভক্তকারী। এটির ডিফল্ট আচরণ ছিল পছন্দনীয় বাক্য-ট্রান্সফরমার মডেলের জন্য টোকেন উিন্ডো সাইজের ব্লকে টেক্সট স্প্লিট করা।
from langchain_text_splitters import SentenceTransformersTokenTextSplitter
splitter = SentenceTransformersTokenTextSplitter(chunk_overlap=0)
text = "লোরেম "
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"বিভক্ত করার টোকেন: {splitter.count_tokens(text=text_to_split)}")
বিভক্ত করার টোকেন: 514
text_chunks = splitter.split_text(text=text_to_split)
print(text_chunks[1])
লোরেম
NLTK
ন্যাচারাল ল্যাংগুয়েজ টুলকিট, যা সাধারণভাবে এনএলটিকে (NLTK) হিসেবে পরিচিত, পাইথন প্রোগ্রামিং ভাষায় লেখা সিম্বলিক এবং পরিসংখ্যানিক ন্যাচারাল ল্যাংগুয়েজ প্রসেসিং (NLP) এর জন্য লাইব্রেরি এবং প্রোগ্রামগুলি, ইংরেজি ভাষার জন্য ব্যবহৃত হয়।
আমরা মাত্র "\n\n" ভিত্তিক পাঠ্য বিভক্ত করার পরিবর্তে, NLTK টোকেনাইজার ব্যবহার করে বিভিন্নভাবে বিভক্ত করা যায়।
- পাঠ্য বিভক্তি পদ্ধতি: NLTK টোকেনাইজার ব্যবহার করে।
- চাংক মাপন পদ্ধতি: অক্ষরের সংখ্যায় মাপা হয়।
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])
হাগিং ফেস টোকেনাইজার
হাগিং ফেসে অনেক টোকেনাইজার রয়েছে।
আমরা হাগিং ফেসের টোকেনাইজার থেকে টোকেনের সংখ্যা গণনা করতে GPT2TokenizerFast ব্যবহার করি।
- পাঠ্যের কি পদ্ধতিতে বিভক্ত করা হয়: ইনপুট অক্ষরের উপর ভিত্তি করে বিভক্ত করা হয়।
- চাঙ্ক আকার কীভাবে গণনা করা হয়: হাগিং ফেস টোকেনাইজার দ্বারা গণনা করা টোকেনের সংখ্যার মাধ্যমে গণনা করা হয়।
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])