शीघ्र डिजाइन की कला: शीघ्र सीमाएं और टोकन हीलिंग
यह ( मार्को ट्यूलियो रिबेरो के साथ संयुक्त रूप से लिखा गया) शीघ्र डिजाइन की कला पर एक श्रृंखला का भाग 2 है (भाग 1 यहां ), जहां हम बड़े भाषा मॉडल (एलएलएम) को नियंत्रित करने के बारे में बात करते हैं guidance
।
इस पोस्ट में, हम चर्चा करेंगे कि कैसे भाषा मॉडल द्वारा उपयोग किए जाने वाले लालची टोकनकरण तरीके आपके संकेतों में एक सूक्ष्म और शक्तिशाली पूर्वाग्रह का परिचय दे सकते हैं, जिससे पीढ़ियों को परेशान किया जा सकता है।
भाषा मॉडल कच्चे पाठ पर प्रशिक्षित नहीं होते हैं, बल्कि टोकन पर होते हैं, जो पाठ के टुकड़े होते हैं जो अक्सर शब्दों के समान एक साथ होते हैं। यह प्रभावित करता है कि कैसे भाषा मॉडल पाठ को 'देखते' हैं, जिसमें संकेत भी शामिल हैं (चूंकि संकेत केवल टोकन के सेट हैं)। जीपीटी-शैली के मॉडल बाइट पेयर एनकोडिंग (बीपीई) जैसी टोकननाइजेशन विधियों का उपयोग करते हैं , जो सभी इनपुट बाइट्स को लालची तरीके से टोकन आईडी में मैप करते हैं। यह प्रशिक्षण के लिए ठीक है, लेकिन यह अनुमान के दौरान सूक्ष्म मुद्दों को जन्म दे सकता है, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है।
शीघ्र सीमा समस्या का एक उदाहरण
निम्नलिखित उदाहरण पर विचार करें, जहाँ हम एक HTTP URL स्ट्रिंग उत्पन्न करने का प्रयास कर रहे हैं:
import guidance
# we use StableLM as an example, but these issues impact all models to varying degrees
guidance.llm = guidance.llms.Transformers("stabilityai/stablelm-base-alpha-3b", device=0)
# we turn token healing off so that guidance acts like a normal prompting library
program = guidance('The link is <a href="http:{{gen max_tokens=10 token_healing=False}}')
program()
Notebook output.
guidance('The link is <a href="http{{gen max_tokens=10 token_healing=False}}')()
print_tokens(guidance.llm.encode('The link is <a href="http:'))
print_tokens(guidance.llm.encode('The link is <a href="http://www.google.com/search?q'))
जबकि प्रशिक्षण में यूआरएल टोकन 1358 ( ://
) के साथ एन्कोड किए गए हैं, हमारा संकेत एलएलएम को इसके बजाय टोकन 27
( :
) दिखाता है, जो कृत्रिम रूप से विभाजित करके पूर्णता को फेंक देता है ://
।
वास्तव में, मॉडल को पूरा यकीन हो सकता है कि टोकन 27
( :
) को देखने का मतलब है कि आगे जो आता है वह कुछ भी होने की संभावना नहीं है जिसे "लंबे टोकन" जैसे कोलन के साथ एक साथ एन्कोड किया जा सकता है ://
, क्योंकि मॉडल के प्रशिक्षण डेटा में वे वर्ण होंगे कोलन के साथ एक साथ एन्कोड किया गया है (इसका एक अपवाद जिसके बारे में हम बाद में चर्चा करेंगे वह प्रशिक्षण के दौरान सबवर्ड नियमितीकरण है)। तथ्य यह है कि एक टोकन को देखने का अर्थ है कि उस टोकन के एम्बेडिंग को देखना और यह भी कि जो कुछ भी आता है वह लालची टोकननाइज़र द्वारा संकुचित नहीं किया गया था, भूलना आसान है, लेकिन शीघ्र सीमाओं में यह महत्वपूर्ण है।
आइए मॉडल की शब्दावली में सभी टोकन के स्ट्रिंग प्रतिनिधित्व पर खोज करें, यह देखने के लिए कि कौन से कोलन से शुरू होते हैं:
print_tokens(guidance.llm.prefix_matches(":"))
print_tokens(guidance.llm.prefix_matches("http"))
# Accidentally adding a space, will lead to weird generation
guidance('I read a book about {{gen max_tokens=5 token_healing=False temperature=0}}')()
# No space, works as expected
guidance('I read a book about{{gen max_tokens=5 token_healing=False temperature=0}}')()
guidance('An example ["like this"] and another example [{{gen max_tokens=10 token_healing=False}}')()
print_tokens(guidance.llm.prefix_matches(" ["))
"टोकन हीलिंग" के साथ अनपेक्षित पूर्वाग्रह को ठीक करना
इन अनपेक्षित पूर्वाग्रहों से बचने के लिए हम क्या कर सकते हैं? एक विकल्प हमेशा हमारे संकेतों को टोकन के साथ समाप्त करना है जिसे लंबे टोकन में विस्तारित नहीं किया जा सकता है (उदाहरण के लिए चैट-आधारित मॉडल के लिए एक रोल टैग), लेकिन यह एक गंभीर सीमा है।
इसके बजाय, guidance
"टोकन हीलिंग" नामक एक सुविधा है, जो संकेत के अंत से पहले एक टोकन द्वारा स्वचालित रूप से पीढ़ी की प्रक्रिया का बैकअप लेती है, फिर पहले टोकन को एक उपसर्ग के लिए विवश करती है जो संकेत में अंतिम टोकन से मेल खाता है। हमारे URL उदाहरण में, इसका अर्थ होगा :
, को हटाना और पहले टोकन को एक :
उपसर्ग के लिए बाध्य करना। टोकन हीलिंग उपयोगकर्ताओं को टोकन सीमाओं के बारे में चिंता किए बिना संकेत व्यक्त करने की अनुमति देता है।
उदाहरण के लिए, ऊपर दिए गए कुछ URL उदाहरणों को टोकन हीलिंग चालू करके फिर से चलाते हैं (यह ट्रांसफार्मर मॉडल के लिए डिफ़ॉल्ट रूप से चालू है, इसलिए हम हटा देते हैं) token_healing=False
:
# With token healing we generate valid URLs,
# even when the prompt ends with a colon:
guidance('The link is <a href="http:{{gen max_tokens=10}}')()
# With token healing, we will sometimes generate https URLs,
# even when the prompt ends with "http":
program = guidance('''The link is <a href="http{{gen 'completions' max_tokens=10 n=10 temperature=1}}''')
program()["completions"]
# Accidentally adding a space will not impact generation
program = guidance('''I read a book about {{gen max_tokens=5 temperature=0}}''')
program()
# This will generate the same text as above
program = guidance('''I read a book about{{gen max_tokens=6 temperature=0}}''')
program()
guidance('An example ["like this"] and another example [{{gen max_tokens=10}}')()
यदि आप इस बात से परिचित हैं कि भाषा मॉडल को कैसे प्रशिक्षित किया जाता है, तो आप सोच रहे होंगे कि सबवर्ड नियमितीकरण इस सब में कैसे फिट बैठता है। सबवर्ड नियमितीकरण एक ऐसी तकनीक है जहां प्रशिक्षण के दौरान मॉडल की मजबूती बढ़ाने के लिए उप-इष्टतम टोकनकरण बेतरतीब ढंग से शुरू किए जाते हैं। इसका मतलब यह है कि मॉडल हमेशा सबसे अच्छा लालची टोकन नहीं देखता है। मॉडल को टोकन सीमाओं के लिए अधिक मजबूत बनाने में मदद करने के लिए सबवर्ड नियमितीकरण बहुत अच्छा है, लेकिन यह उस पूर्वाग्रह को पूरी तरह से दूर नहीं करता है जो मॉडल के मानक लालची टोकन के प्रति है। इसका मतलब यह है कि प्रशिक्षण मॉडल के दौरान सबवर्ड नियमितीकरण की मात्रा के आधार पर कम या ज्यादा टोकन सीमा पूर्वाग्रह प्रदर्शित हो सकते हैं, फिर भी सभी मॉडलों में यह पूर्वाग्रह है। और जैसा कि ऊपर दिखाया गया है, यह अभी भी मॉडल आउटपुट पर एक शक्तिशाली और अप्रत्याशित प्रभाव डाल सकता है।
निष्कर्ष
जब आप संकेत लिखते हैं, तो याद रखें कि लालची टोकनकरण का इस बात पर महत्वपूर्ण प्रभाव पड़ सकता है कि भाषा मॉडल आपके संकेतों की व्याख्या कैसे करते हैं, विशेष रूप से जब संकेत एक टोकन के साथ समाप्त होता है जिसे एक लंबे टोकन में बढ़ाया जा सकता है। पूर्वाग्रह का यह आसानी से याद किया जाने वाला स्रोत आपके परिणामों को आश्चर्यजनक और अनपेक्षित तरीकों से प्रभावित कर सकता है।
इसे संबोधित करने के लिए, या तो अपने संकेत को एक गैर-विस्तार योग्य टोकन के साथ समाप्त करें, या guidance
"टोकन हीलिंग" सुविधा जैसी किसी चीज़ का उपयोग करें ताकि आप टोकन सीमा कलाकृतियों के बारे में चिंता किए बिना अपने संकेतों को व्यक्त कर सकें।
इस आलेख में परिणामों को पुन: उत्पन्न करने के लिए स्वयं नोटबुक संस्करण देखें ।