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

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

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

  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"

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

सिस्टम से जुड़े निर्देश

निगरानी में रखे गए फ़ाइन-ट्यूनिंग (एसएफ़टी) और ह्यूमन फ़ीडबैक (आरएलएचएफ़) के रीइन्फ़ोर्समेंट लर्निंग, दोनों के लिए, मॉडल को सिस्टम के निर्देशों के हिसाब से ट्रेनिंग नहीं दी गई थी. इस वजह से, जेम्मा के लिए सिर्फ़ <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 वैरिएंट को खास तौर पर कोड डालने के टास्क मिलते हैं.

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

संदर्भ टोकन
एफ़आईएम प्रीफ़िक्स `<
एफ़आईएम सफ़िक्स `<
एफ़आईएम मिडल `<
फ़ाइल सेपरेटर `<

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

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

इस सेक्शन में, 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 मॉडल का इस्तेमाल करते समय, रिस्पॉन्स टोकन स्ट्रीम करें. साथ ही, स्ट्रीमिंग बंद करने और उससे मिलने वाले कोड को पूरा करने के लिए, FIM या फ़ाइल सेपरेटर टोकन का इस्तेमाल डीलिमिटर के तौर पर करें.