जेम्मा फ़ॉर्मैटिंग और सिस्टम से जुड़े निर्देश

निर्देश ट्यूनिंग के लिए फ़ॉर्मैटिंग

निर्देशों पर आधारित (आईटी) मॉडल एक खास फ़ॉर्मैटर की मदद से तैयार किए जाते हैं, जो निर्देश ट्यूनिंग के सभी उदाहरणों को अतिरिक्त जानकारी के साथ एनोटेट करता है, दोनों ट्रेनिंग और अनुमान का समय. फ़ॉर्मैटर के दो मकसद हैं:

  1. बातचीत में भूमिकाओं के बारे में बताना, जैसे कि सिस्टम, उपयोगकर्ता या असिस्टेंट की भूमिकाएं.
  2. बातचीत के दौरान मोड़ों की जानकारी देना, खास तौर पर ऐसे मोड़ पर बातचीत.

नीचे, हम उन कंट्रोल टोकन के बारे में बताते हैं जिनका इस्तेमाल Gemma करता है. साथ ही, हम उनके इस्तेमाल के उदाहरण भी बताते हैं. नोट जोड़ें यह कि कंट्रोल टोकन हमारे टोकनाइज़र में रिज़र्व हैं और खास तौर पर उसके लिए हैं.

  • उपयोगकर्ता टर्न दिखाने के लिए टोकन: user
  • मॉडल मुड़ने की जानकारी देने वाला टोकन: model
  • बातचीत शुरू होने की शुरुआत दिखाने वाला टोकन: <start_of_turn>
  • डायलॉग की अवधि खत्म होने के बारे में बताने वाला टोकन: <end_of_turn>

यहां डायलॉग का एक उदाहरण दिया गया है:

<start_of_turn>user
knock knock<end_of_turn>
<start_of_turn>model
who is there<end_of_turn>
<start_of_turn>user
Gemma<end_of_turn>
<start_of_turn>model
Gemma who?<end_of_turn>

टोकन "<end_of_turn>\n", टर्न सेपरेटर है और प्रॉम्प्ट का प्रीफ़िक्स यह है "<start_of_turn>model\n". इसका मतलब है कि अगर आपको "क्रैमर का नियम क्या है?" जैसे सवाल की मदद से, आपको सबसे पहले मॉडल की जानकारी देखें:

"<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model"

ध्यान दें कि अगर आपको पहले से ट्रेन किए गए जेमा मॉडल को अपने हिसाब से बेहतर बनाना है, तो डेटा है, तो आप कंट्रोल टोकन के लिए ऐसे किसी भी स्कीमा का इस्तेमाल कर सकते हैं, जब तक कि वह के बीच फ़र्क़ करें.

सिस्टम के लिए निर्देश

निगरानी में रखे गए फ़ाइन ट्यूनिंग (SFT) और लोगों से रीइन्फ़ोर्समेंट लर्निंग, दोनों के लिए फ़ीडबैक (RLHF), मॉडल को सिस्टम निर्देशों के ज़रिए ट्रेनिंग नहीं दी गई थी. बतौर नतीजा, Gemma के लिए सिर्फ़ <start_of_turn> फ़ॉर्मैट टोकन ही काम के हैं, <end_of_turn>, user, और model. उदाहरण के लिए:

<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model
Cramer's Rule is ...<end_of_turn>

एफ़आईएम टास्क के लिए फ़ॉर्मैट करना

CodeGemma 2B और 7B के वैरिएंट इन्हें खास तौर पर, कोड डालने वाले टास्क के लिए तैयार किया जाता है.

खास तौर पर, उन्हें चार फ़ॉर्मैटिंग कंट्रोल टोकन के ज़रिए ट्रेनिंग दी जाती है. इसका इस्तेमाल, फ़िल इन द मिडल (एफ़आईएम) से जुड़े कोडिंग टास्क के लिए, मॉडल प्रॉम्प्ट बनाने में किया जाता है.

संदर्भटोकन
FIM प्रीफ़िक्स <|fim_prefix|>
एफ़आईएम सफ़िक्स <|fim_suffix|>
FIM मध्य <|fim_middle|>
फ़ाइल सेपरेटर <|file_separator|>

कर्सर की जगह और उसके आस-पास के कॉन्टेक्स्ट के बारे में बताने के लिए, एफ़आईएम टोकन का इस्तेमाल करें ताकि कोडजीमा में कोड डालने के लिए इसका इस्तेमाल किया जा सके. इसके लिए फ़ाइल सेपरेटर टोकन का इस्तेमाल करें एक से ज़्यादा फ़ाइल फ़ॉर्मैट में डेटा एक्सपोर्ट कर सकते हैं.

उदाहरण - एफ़आईएम प्रॉम्प्ट बनाना

यह सेक्शन, Keras CodeGemma के उदाहरण का फिर से इस्तेमाल करता है क्विकस्टार्ट लिखें एफ़आईएम टास्क के लिए प्रॉम्प्ट कैसे बनाया जाए.

नीचे दिया गया कोड इस्तेमाल करें:

import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
   sys.exit(0) # Line 3

|, कर्सर की जगह के बारे में बताता है, जहां कोड डाला जाना चाहिए पूरा हुआ. ध्यान दें कि कर्सर के पहले और लाइन 1 और 2 में एक खाली जगह है के आखिर में नई लाइन हों.

इसके बाद, प्रीफ़िक्स है,

import

टेक्स्ट के आखिर में सिर्फ़ एक खाली जगह हो.

सफ़िक्स यह है:

⏎
if __name__ == '__main__':⏎
   sys.exit(0)

पर क्लिक करें.

प्रॉम्प्ट इस तरह बनाया जाना चाहिए:

<|fim_prefix|>import <|fim_suffix|>⏎
if __name == '__main__':⏎
   sys.exit(0)<|fim_middle|>

ध्यान दें कि:

  • किसी भी एफ़आईएम टोकन और प्रीफ़िक्स के बीच में कोई और खाली जगह नहीं होनी चाहिए और प्रत्यय
  • एफ़आईएम मिडल टोकन के आखिर में होना चाहिए, ताकि मॉडल को जारी रखा जा सके भरना
  • प्रीफ़िक्स या सफ़िक्स खाली हो सकता है. यह इस बात पर निर्भर करता है कि कर्सर कहां पर है वर्तमान में फ़ाइल में है या आप मॉडल को कितना संदर्भ देना चाहते हैं के साथ

मॉडल के आउटपुट को समझना

ऊपर दिए गए उदाहरण के लिए मॉडल रिस्पॉन्स यह होगा:

<|fim_prefix|>import <|fim_suffix|>⏎
if __name__ == "__main__":\n    sys.exit(0)<|fim_middle|>sys\n<|file_separator|>

मॉडल, इनपुट प्रॉम्प्ट को दोहराता है और कोड पूरा होने के तौर पर sys देता है.

एफ़आईएम टास्क के लिए CodeGemma मॉडल का इस्तेमाल करते समय, रिस्पॉन्स टोकन स्ट्रीम करें और इस्तेमाल करें एफ़आईएम या फ़ाइल सेपरेटर टोकन को डीलिमिटर के तौर पर इस्तेमाल करते हैं, ताकि स्ट्रीमिंग रोकने और नतीजे के तौर पर, कोड को पूरा किया गया है.