Python में टोकनाइज़ेशन: शब्दावली, one-hot और byte pair encoding
न्यूरल नेटवर्क सिर्फ़ संख्याएँ समझते हैं, इसलिए टेक्स्ट को पहले टोकन में बाँटा जाता है और हर टोकन को एक id मिलती है। GPT जैसे भाषा मॉडल byte pair encoding इस्तेमाल करते हैं, जो शब्दों के बार-बार आने वाले टुकड़ों से टोकन बनाता है।
आसान शब्दों में अवधारणा
न्यूरल नेटवर्क सिर्फ़ संख्याएँ समझते हैं, इसलिए टेक्स्ट को पहले टोकन में बाँटा जाता है और हर टोकन को एक id मिलती है। GPT जैसे भाषा मॉडल byte pair encoding इस्तेमाल करते हैं, जो शब्दों के बार-बार आने वाले टुकड़ों से टोकन बनाता है।
भाषा मॉडल की तरह टेक्स्ट को संख्याओं में बदलें: शब्दावली बनाएँ, शब्दों को one-hot में एन्कोड करें और BPE से सबवर्ड टोकन सीखें।
मुख्य बातें
- टोकन टेक्स्ट की एक इकाई है, जैसे शब्द, शब्द का हिस्सा या अक्षर।
- one-hot वेक्टर सरल हैं, पर बड़ी शब्दावली में बहुत लंबे हो जाते हैं।
- BPE दुर्लभ और नए शब्दों को जाने-पहचाने टुकड़ों में बाँटकर संभालता है।
- इसके बाद मॉडल हर टोकन id को एक सीखे हुए वेक्टर में बदलते हैं, जिसे एम्बेडिंग कहते हैं।
इसका उपयोग कब करें?
- समझें कि न्यूरल नेटवर्क और AI लाइब्रेरी के अंदर क्या होता है।
- संबंधित चुनौतियों में खुद लागू करने से पहले विचार को समझें।
- मशीन लर्निंग कोर्स, इंटरव्यू और प्रोजेक्ट की तैयारी करें।
इसे काम करते देखें
शब्दावली बनाने के लिए अपना वाक्य लिखें, फिर अगला चरण दबाकर देखें कि byte pair encoding सबसे ज़्यादा आने वाले जोड़े को कैसे मिलाता है।
उदाहरण कोड
from collections import Counter
text = "the cat sat on the mat"
# 1. Build a vocabulary: every distinct word gets an id.
words = text.split()
vocab = {word: i for i, word in enumerate(sorted(set(words)))}
print("vocab:", vocab)
print("ids:", [vocab[w] for w in words])
# 2. One-hot encoding: a vector with a single 1 at the word's id.
def one_hot(word):
return [1 if vocab[word] == i else 0 for i in range(len(vocab))]
print("one-hot 'cat':", one_hot("cat"))
# 3. Byte pair encoding: repeatedly merge the most frequent pair of symbols.
tokens = list("banana")
for _ in range(2):
pairs = Counter(zip(tokens, tokens[1:]))
best = max(pairs, key=pairs.get)
merged, i = [], 0
while i < len(tokens):
if i + 1 < len(tokens) and (tokens[i], tokens[i + 1]) == best:
merged.append(tokens[i] + tokens[i + 1])
i += 2
else:
merged.append(tokens[i])
i += 1
tokens = merged
print("merge", best, "->", tokens)
अपेक्षित आउटपुट
vocab: {'cat': 0, 'mat': 1, 'on': 2, 'sat': 3, 'the': 4}
ids: [4, 0, 3, 2, 4, 1]
one-hot 'cat': [1, 0, 0, 0, 0]
merge ('a', 'n') -> ['b', 'an', 'an', 'a']
merge ('b', 'an') -> ['ban', 'an', 'a']
यह कैसे काम करता है
शब्दावली हर अलग शब्द को एक id देती है, और वाक्य id की सूची बन जाता है। one-hot वेक्टर में सिर्फ़ शब्द की id वाली जगह पर 1 होता है। BPE पास-पास के चिह्नों के जोड़े गिनता है और सबसे ज़्यादा आने वाले जोड़े को मिलाता है, पहले ('a', 'n') और फिर ('b', 'an')।
मान बदलें और Python इंस्टॉल किए बिना CodeUtility ऑनलाइन Python कंपाइलर में प्रोग्राम चलाएँ।
अभ्यास के कार्य
बड़े dataset पर जाने से पहले input बदलें और edge cases की जाँच करें।
- इनपुट या वेट बदलें और रन करने से पहले आउटपुट का अनुमान लगाएँ।
- हर गणना चरण को देखने के लिए बीच के मान प्रिंट करें।
- नीचे दी गई चुनौतियाँ हल करके विचार को खुद लागू करें।
चैलेंज से अभ्यास करें
इस पाठ में सीखी बात से एक असली समस्या हल करें। हर चैलेंज ब्राउज़र में चलता है, तुरंत टेस्ट और AI रिव्यू के साथ।
- वर्ड टोकनाइज़र और शब्दावली टेक्स्ट को छोटे अक्षरों वाले शब्दों में बाँटें और आवृत्ति के क्रम में शब्दावली बनाएँ, जो हर भाषा मॉडल का पहला कदम है। आसान
- वन-हॉट एन्कोडिंग श्रेणियों को केवल एक 1 वाले वेक्टर में बदलें, जो क्लासिफ़ायर और एम्बेडिंग का इनपुट फ़ॉर्मेट है। आसान
- बाइट पेयर एन्कोडिंग (BPE) मर्ज GPT टोकनाइज़र की तरह सबवर्ड मर्ज सीखें: पड़ोसी प्रतीकों की सबसे आम जोड़ी को बार-बार मिलाएँ। मध्यम