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

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

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

  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"

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

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

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

FIM टास्क के लिए फ़ॉर्मैट

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

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

संदर्भटोकन
FIM प्रीफ़िक्स <|fim_prefix|>
FIM सफ़िक्स <|fim_suffix|>
FIM middle <|fim_middle|>
फ़ाइल सेपरेटर <|file_separator|>

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

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

इस सेक्शन में, Keras CodeGemma के शुरू करने के तरीके में दिए गए उदाहरण का फिर से इस्तेमाल किया गया है. इससे आपको एफ़आईएम टास्क के लिए प्रॉम्प्ट बनाने का तरीका पता चलेगा.

यहां दिया गया कोड देखें:

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

|, कर्सर की उस जगह की जानकारी देता है जहां कोड को पूरा करना है. ध्यान दें कि कर्सर से पहले एक स्पेस है और पहली और दूसरी पंक्ति के आखिर में कैरिज रिटर्न है.

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

import

के आखिर में एक स्पेस होना चाहिए.

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


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

शुरू में एक नई लाइन के साथ.

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

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

ध्यान दें कि:

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

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

ऊपर दिए गए उदाहरण के लिए, मॉडल का जवाब यह होगा:

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

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

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