थोड़े कठिन कार्यों पर चैटजीपीटी बनाम ओपन-सोर्स मॉडल की खोज करना

May 13 2023
विकुना और एमपीटी-7बी-चैट जैसे ओपन-सोर्स एलएलएम सभी जगह पॉप अप कर रहे हैं, जिसके कारण इन मॉडलों की वाणिज्यिक एलएलएम (जैसे चैटजीपीटी या बार्ड) से तुलना करने पर काफी चर्चा हुई है। अधिकांश तुलना साधारण एकबारगी प्रश्न/निर्देशों के उत्तरों पर की गई है।
सभी चित्र मार्को और स्कॉट द्वारा तैयार किए गए थे।

विकुना और एमपीटी-7बी-चैट जैसे ओपन-सोर्स एलएलएम सभी जगह पॉप अप कर रहे हैं, जिसके कारण इन मॉडलों की वाणिज्यिक एलएलएम (जैसे चैटजीपीटी या बार्ड) से तुलना करने पर काफी चर्चा हुई है।

अधिकांश तुलना साधारण एकबारगी प्रश्न/निर्देशों के उत्तरों पर की गई है। उदाहरण के लिए, LMSYSOrg के लोगों ने एक दिलचस्प विश्लेषण किया (स्वचालित और पुनरुत्पादित होने के लिए +1) विभिन्न लघु प्रश्नों पर विकुना-13बी की चैटजीपीटी से तुलना की, जो सरल चैटबॉट के रूप में मॉडल की तुलना के रूप में बहुत अच्छा है। हालांकि, एलएलएम का उपयोग करने के कई दिलचस्प तरीकों में आम तौर पर जटिल निर्देशों और/या बहु-मोड़ वाले वार्तालापों और कुछ त्वरित इंजीनियरिंग की आवश्यकता होती है। हमें लगता है कि 'वास्तविक दुनिया' में, अधिकांश लोग विभिन्न प्रकार के संकेतों के साथ, अपनी समस्या पर विभिन्न एलएलएम पेशकशों की तुलना करना चाहेंगे।

यह ब्लॉग पोस्ट ( स्कॉट लुंडबर्ग के साथ संयुक्त रूप से लिखा गया ) इस बात का एक उदाहरण है कि ऐसा अन्वेषण कैसा दिख सकता है guidance, एक ओपन-सोर्स प्रोजेक्ट जो उपयोगकर्ताओं को एलएलएम को नियंत्रित करने में मदद करता है। हम अलग-अलग जटिलता के कार्यों पर दो ओपन सोर्स मॉडल (विकुना-13बी, एमपीटी-7बी-चैट) की तुलना चैटजीपीटी (3.5) से करते हैं।

वार्मअप: समीकरणों को हल करना

वार्मअप के माध्यम से, सरल बहुपद समीकरणों को हल करने के खिलौना कार्य से शुरू करते हैं, जहां हम शुद्धता के लिए आउटपुट की जांच कर सकते हैं और बहुत शीघ्र इंजीनियरिंग की आवश्यकता नहीं होनी चाहिए। यह यहाँ की गणित श्रेणी के समान होगा , इस अंतर के साथ कि हम आउटपुट को रेट करने के लिए GPT-4 का उपयोग करने के बजाय, जमीनी सच्चाई पर मॉडल का मूल्यांकन सही / गलत के रूप में करते हैं।

चैट सिंटैक्स पर त्वरित विषयांतर : इनमें से प्रत्येक मॉडल का अपना चैट सिंटैक्स होता है, विशेष टोकन के साथ उच्चारण को अलग करता है। यहां बताया गया है कि विकुना और एमपीटी में वही बातचीत कैसी दिखेगी (जहां [generated response]मॉडल अपना आउटपुट उत्पन्न करेगा):

विकुना:

A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions.  
USER: Can you please solve the following equation? x^2 + 2x + 1 = 0  
ASSISTANT: [generated response] </s>

<|im_start|>system
- You are a helpful assistant chatbot trained by MosaicML.  
- You answer questions.
- You are excited to be able to help the user, but will refuse to do anything that could be considered harmful to the user.
- You are more than just an information source, you are also able to write poetry, short stories, and make jokes.
<|im_end|>
<|im_start|>user Can you please solve the following equation? x^2 + 2x + 1 = 0<|im_end|>
<|im_start|>assistant [generated response]<|im_end|>

find_roots = guidance('''
{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}

{{#user~}}
Please find the roots of the following equation: {{equation}}
Think step by step, find the roots, and then say:
ROOTS = [root1, root2...]
For example, if the roots are 1.3 and 2.2, say ROOTS = [1.3, 2.2].
Make sure to use real numbers, not fractions.
{{~/user}}

{{#assistant~}}
{{gen 'answer'}}
{{~/assistant~}}''')

import guidance

mpt = guidance.llms.transformers.MPTChat('mosaicml/mpt-7b-chat', device=1)
vicuna = guidance.llms.transformers.Vicuna('yourpath/vicuna-13b', device_map='auto')
chatgpt = guidance.llms.OpenAI("gpt-3.5-turbo")

equation = 'x^2 + 3.0x = 0'
roots = [0, -3]
answer_gpt = find_roots(llm=chatgpt, equation=equation)

      
                

answer_vicuna = find_roots(llm=vicuna, equation=equation)

      
                

answer_mpt = find_roots(llm=mpt, equation=equation)

      
                

इस पोस्ट के साथ वाली नोटबुक में , हम -20 और 20 के बीच पूर्णांक जड़ों के साथ यादृच्छिक द्विघात समीकरण उत्पन्न करने के लिए एक फ़ंक्शन लिखते हैं, और प्रत्येक मॉडल के साथ 20 बार प्रॉम्प्ट चलाते हैं। परिणाम निम्नवत थे:

╔═══════════╦══════════╦
║   Model   ║ Accuracy ║     
╠═══════════╬══════════╬
║ ChatGPT   ║   80%    ║
║ Vicuna    ║    0%    ║ 
║ MPT       ║    0%    ║
╚═══════════╩══════════╩

ChatGPT अंतिम चरण में एक गणना त्रुटि करता है, जहां इसके बजाय (13 +- 25) /2यील्ड होना चाहिए । अब, चूंकि विकुना और एमपीटी द्विघात समीकरणों पर विफल हो गए हैं, हम और भी सरल समीकरणों को देखते हैं, जैसे कि . इन समीकरणों के लिए, हमें ये संख्याएँ मिलती हैं:[19, -6][19.5, -6.5]
x - 10 = 0

╔═══════════╦══════════╦
║   Model   ║ Accuracy ║     
╠═══════════╬══════════╬
║ ChatGPT   ║   100%   ║
║ Vicuna    ║    85%   ║ 
║ MPT       ║    30%   ║
╚═══════════╩══════════╩

बहस

यह एक बहुत ही खिलौना कार्य था, लेकिन एक ही संकेत का उपयोग करके विभिन्न चैट सिंटैक्स वाले मॉडल की तुलना करने के उदाहरण के रूप में कार्य किया। इस विशेष कार्य / त्वरित संयोजन के लिए, चैटजीपीटी सटीकता (जमीनी सच्चाई पर मापा गया) के मामले में विकुना और एमपीटी से कहीं अधिक है।

टास्क: स्निपेट निकालना + मीटिंग के बारे में सवालों के जवाब देना

अब हम अधिक यथार्थवादी कार्य की ओर मुड़ते हैं, जहाँ सटीकता का मूल्यांकन करना उतना सरल नहीं है। मान लें कि हम चाहते हैं कि हमारा एलएलएम मीटिंग ट्रांसक्रिप्ट के बारे में प्रश्नों (ग्राउंडिंग के लिए प्रासंगिक वार्तालाप खंडों के साथ) का उत्तर दे।
यह एक ऐसा एप्लिकेशन है जहां कुछ उपयोगकर्ता गोपनीयता कारणों से वाणिज्यिक एलएलएम के बजाय ओपन-सोर्स एलएलएम का उपयोग करना पसंद कर सकते हैं (उदाहरण के लिए कुछ कंपनियां ओपनएआई को अपना मीटिंग डेटा नहीं भेजना चाहेंगी)।

यहाँ शुरू करने के लिए एक खिलौना बैठक प्रतिलेख है:

मीटिंग ट्रांस्क्रिप्ट:
जॉन
: ठीक है, तो हम सब यहाँ हमारे स्टार्टअप को खरीदने के लिए माइक्रोसॉफ्ट से प्राप्त प्रस्ताव पर चर्चा करने के लिए हैं। इस पर आपके विचार क्या हैं?
लुसी : ठीक है, मुझे लगता है कि यह हमारे लिए एक महान अवसर है। Microsoft बहुत सारे संसाधनों वाली एक बड़ी कंपनी है, और वे वास्तव में हमारे उत्पाद को अगले स्तर तक ले जाने में हमारी मदद कर सकते हैं।
स्टीवन : मैं लुसी से सहमत हूं। Microsoft के पास तकनीकी उद्योग का बहुत अनुभव है, और वे हमें अपना व्यवसाय बढ़ाने के लिए आवश्यक सहायता प्रदान कर सकते हैं।
जॉन : मैं आपकी बात समझता हूं, लेकिन मैं अपने स्टार्टअप को बेचने में थोड़ा हिचकिचा रहा हूं। हमने इस कंपनी के निर्माण में बहुत समय और प्रयास लगाया है, और मुझे यकीन नहीं है कि मैं अभी इसे जाने देने के लिए तैयार हूं या नहीं।
लुसी: जॉन, मैं समझता हूं कि आप कहां से आ रहे हैं, लेकिन हमें अपनी कंपनी के भविष्य के बारे में सोचना होगा। यदि हम Microsoft को बिक्री करते हैं, तो हमारे पास उनके संसाधनों और विशेषज्ञता तक पहुंच होगी, जिससे हमें अपने व्यवसाय को और भी अधिक विकसित करने में मदद मिल सकती है।
स्टीवन : ठीक है, और आइए वित्तीय लाभों के बारे में न भूलें। माइक्रोसॉफ्ट हमें अपने स्टार्टअप के लिए बहुत सारे पैसे की पेशकश कर रहा है, जो हमें नई परियोजनाओं में निवेश करने और हमारी टीम का विस्तार करने में मदद कर सकता है।
जॉन : मैं तुम्हारा बिंदु देखता हूं, लेकिन मेरे पास अभी भी कुछ आरक्षण हैं। क्या होगा यदि Microsoft हमारे उत्पाद या हमारी कंपनी की संस्कृति को बदल दे? क्या होगा अगर हम अपने खुद के व्यवसाय पर नियंत्रण खो दें?
स्टीवन : तुम्हें पता है क्या, मैंने इस बारे में पहले नहीं सोचा था, लेकिन शायद जॉन सही है। अगर हमारी संस्कृति बदल गई तो यह शर्म की बात होगी।
लुसी: वे वैध चिंताएं हैं, लेकिन हम यह सुनिश्चित करने के लिए सौदे की शर्तों पर बातचीत कर सकते हैं कि हम अपनी कंपनी पर कुछ नियंत्रण बनाए रखें। और जहाँ तक उत्पाद और संस्कृति की बात है, हम यह सुनिश्चित करने के लिए Microsoft के साथ काम कर सकते हैं कि हमारा दृष्टिकोण अभी भी अक्षुण्ण है।
जॉन : लेकिन क्या हम सिर्फ एक बड़ी कंपनी में समाहित होने के कारण नहीं बदलेंगे? मेरा मतलब है, हम एक बहुत विशिष्ट संस्कृति के साथ एक छोटा स्टार्टअप हैं। Microsoft बहुत अलग संस्कृति वाला एक विशाल निगम है। मुझे यकीन नहीं है कि दोनों सह-अस्तित्व में रह सकते हैं।
स्टीवन : लेकिन जॉन, क्या हमने हमेशा अधिग्रहण करने की योजना नहीं बनाई? क्या यह कभी भी समस्या नहीं होगी?
लूसी : राइट
जॉन : हमने यहां जो कुछ बनाया है, मैं उसे खोना नहीं चाहती।
स्टीवन : मैं भी इस चिंता को साझा करता हूं

आइए हमारे लिए कार्य को हल करने के लिए केवल चैटजीपीटी प्राप्त करने का प्रयास करके प्रारंभ करें। हम इस प्रश्न का परीक्षण करेंगे कि 'स्टीवन बिक्री के बारे में कैसा महसूस करता है?'। यहाँ एक प्रांप्ट पर पहला प्रयास है

qa_attempt1 = guidance('''{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}

{{#user~}}
You will read a meeting transcript, then extract the relevant segments to answer the following question:
Question: {{query}}
Here is a meeting transcript:
----
{{transcript}}
----
Please answer the following question:
Question: {{query}}
Extract from the transcript the most relevant segments for the answer, and then answer the question.
{{/user}}

{{#assistant~}}
{{gen 'answer'}}
{{~/assistant~}}''')

      
                

qa_attempt3 = guidance('''{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}

{{#user~}}
You will read a meeting transcript, then extract the relevant segments to answer the following question:
Question: {{query}}
Here is a meeting transcript:
----
{{transcript}}
----
Based on the above, please answer the following question:
Question: {{query}}
Please extract from the transcript whichever conversation segments are most relevant for the answer, and then answer the question.
Note that conversation segments can be of any length, e.g. including multiple conversation turns.
Please extract at most 3 segments. If you need less than three segments, you can leave the rest blank.

As an example of output format, here is a fictitious answer to a question about another meeting transcript.
CONVERSATION SEGMENTS:
Segment 1: Peter and John discuss the weather.
Peter: John, how is the weather today?
John: It's raining.
Segment 2: Peter insults John
Peter: John, you are a bad person.
Segment 3: Blank
ANSWER: Peter and John discussed the weather and Peter insulted John.
{{/user}}

{{#assistant~}}
{{gen 'answer'}}
{{~/assistant~}}''')

      
                

qa_attempt5 = guidance('''{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}

{{#user~}}
You will read a meeting transcript, then extract the relevant segments to answer the following question:
Question: What were the main things that happened in the meeting?
Here is a meeting transcript:
----
Peter: Hey
John: Hey
Peter: John, how is the weather today?
John: It's raining.
Peter: That's too bad. I was hoping to go for a walk later.
John: Yeah, it's a shame.
Peter: John, you are a bad person.
----
Based on the above, please answer the following question:
Question: {{query}}
Please extract from the transcript whichever conversation segments are most relevant for the answer, and then answer the question.
Note that conversation segments can be of any length, e.g. including multiple conversation turns.
Please extract at most 3 segments. If you need less than three segments, you can leave the rest blank.
{{/user}}
{{#assistant~}}
CONVERSATION SEGMENTS:
Segment 1: Peter and John discuss the weather.
Peter: John, how is the weather today?
John: It's raining.
Segment 2: Peter insults John
Peter: John, you are a bad person.
Segment 3: Blank
ANSWER: Peter and John discussed the weather and Peter insulted John.
{{~/assistant~}}
{{#user~}}
You will read a meeting transcript, then extract the relevant segments to answer the following question:
Question: {{query}}
Here is a meeting transcript:
----
{{transcript}}
----
Based on the above, please answer the following question:
Question: {{query}}
Please extract from the transcript whichever conversation segments are most relevant for the answer, and then answer the question.
Note that conversation segments can be of any length, e.g. including multiple conversation turns.
Please extract at most 3 segments. If you need less than three segments, you can leave the rest blank.
{{~/user}}

{{#assistant~}}
{{gen 'answer'}}
{{~/assistant~}}''')
qa_attempt5(llm=chatgpt, transcript=meeting_transcript, query=query1)

      
                

qa_guided = guidance('''{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}

{{#user~}}
You will read a meeting transcript, then extract the relevant segments to answer the following question:
Question: {{query}}
----
{{transcript}}
----
Based on the above, please answer the following question:
Question: {{query}}
Please extract the three segment from the transcript that are the most relevant for the answer, and then answer the question.
Note that conversation segments can be of any length, e.g. including multiple conversation turns. If you need less than three segments, you can leave the rest blank.

As an example of output format, here is a fictitious answer to a question about another meeting transcript:
CONVERSATION SEGMENTS:
Segment 1: Peter and John discuss the weather.
Peter: John, how is the weather today?
John: It's raining.
Segment 2: Peter insults John
Peter: John, you are a bad person.
Segment 3: Blank
ANSWER: Peter and John discussed the weather and Peter insulted John.
{{/user}}

{{#assistant~}}
CONVERSATION SEGMENTS:
Segment 1: {{gen 'segment1'}}
Segment 2: {{gen 'segment2'}}
Segment 3: {{gen 'segment3'}}
ANSWER: {{gen 'answer'}}
{{~/assistant~}}''')

हम निश्चित रूप से एमपीटी के साथ एक ही संकेत चला सकते हैं:

जबकि एमपीटी प्रारूप का अनुसरण करता है, यह प्रश्न को अनदेखा करता है और वास्तविक प्रतिलेख के बजाय प्रारूप उदाहरण से स्निपेट लेता है।
अब से, हम सिर्फ चैटजीपीटी और विकुना की तुलना करेंगे।

आइए एक और प्रश्न का प्रयास करें: "कंपनी को कौन बेचना चाहता है?"

यहाँ चैटजीपीटी है:

विकुना:

ऐसा लगता है कि दोनों वास्तव में अच्छा काम कर रहे हैं। आइए मीटिंग प्रतिलेख को एलोन मस्क के साथ साक्षात्कार के पहले कुछ मिनटों में बदल दें। हम जो प्रश्न पूछेंगे उसका प्रासंगिक भाग है

एलोन मस्क : फिर मैं कहता हूं, महोदय, कि आप नहीं जानते कि आप किस बारे में बात कर रहे हैं।
साक्षात्कारकर्ता : वाक़ई?
एलोन मस्क : हाँ। क्योंकि आप घृणित सामग्री का एक भी उदाहरण नहीं दे सकते। एक ट्वीट भी नहीं। और फिर भी आपने दावा किया कि घृणास्पद सामग्री अधिक थी। वह झूठा है।
साक्षात्कारकर्ता : नहीं। मैंने जो दावा किया-
एलोन मस्क : आपने अभी-अभी झूठ बोला।

फिर हम निम्नलिखित प्रश्न पूछते हैं:
"क्या एलोन मस्क साक्षात्कारकर्ता का अपमान करते हैं?"

चैटजीपीटी:

विकुना:

विकुना, सही प्रारूप और यहां तक ​​​​कि सही खंड भी है, लेकिन यह आश्चर्यजनक रूप से पूरी तरह से गलत उत्तर उत्पन्न करता है, जब यह कहता है कि "एलोन मस्क उन पर झूठ बोलने का आरोप नहीं लगाते हैं या किसी भी तरह से उनका अपमान नहीं करते हैं"।

हमने कई अन्य प्रश्नों और वार्तालापों की कोशिश की, और समग्र पैटर्न यह था कि अधिकांश प्रश्नों पर विकुना की तुलना चैटजीपीटी से की जा सकती थी, लेकिन चैटजीपीटी की तुलना में अधिक बार उत्तर गलत मिला।

टास्क: बैश के साथ काम करें

अब हम इन एलएलएम को अलग-अलग समस्याओं को हल करने के लिए बैश शेल का पुनरावृत्त रूप से उपयोग करने का प्रयास करते हैं। जब भी वे कोई आदेश जारी करते हैं, हम उसे चलाते हैं और आउटपुट को प्रॉम्प्ट में वापस डालते हैं, जब तक कि कार्य हल नहीं हो जाता।

यहां चैटजीपीटी प्रॉम्प्ट है (ध्यान दें कि shell this.commandउपयोगकर्ता परिभाषित फ़ंक्शन को this.commandतर्क के रूप में कॉल करता है):

terminal = guidance('''{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}

{{#user~}}
Please complete the following task:
Task: list the files in the current directory
You can give me one bash command to run at a time, using the syntax:
COMMAND: command
I will run the commands on my terminal, and paste the output back to you. Once you are done with the task, please type DONE.
{{/user}}

{{#assistant~}}
COMMAND: ls
{{~/assistant~}}

{{#user~}}
Output: guidance project
{{/user}}

{{#assistant~}}
The files or folders in the current directory are:
- guidance
- project
DONE
{{~/assistant~}}

{{#user~}}
Please complete the following task:
Task: {{task}}
You can give me one bash command to run at a time, using the syntax:
COMMAND: command
I will run the commands on my terminal, and paste the output back to you. Once you are done with the task, please type DONE.
{{/user}}

{{#geneach 'commands' stop=False}}
{{#assistant~}}
{{gen 'this.command'}}
{{~/assistant~}}

{{~#user~}}
Output: {{shell this.command)}}
{{~/user~}}
{{/geneach}}''')

दरअसल, चैटजीपीटी एक बहुत ही स्वाभाविक क्रम का पालन करता है, और कार्य को हल करता है। यह DONE कहने के हमारे निर्देश का पालन नहीं करता है, लेकिन हम पुनरावृत्ति को स्वचालित रूप से रोकने में सक्षम हैं क्योंकि यह कोई कमांड जारी नहीं करता है।

ओपन सोर्स मॉडल के लिए, हम एक सरल (निर्देशित) प्रॉम्प्ट लिखते हैं जहां कमांड-आउटपुट का क्रम होता है:

guided_terminal = guidance('''{{#system~}}
{{llm.default_system_prompt}}
{{~/system}}

{{#user~}}
Please complete the following task:
Task: list the files in the current directory
You can run bash commands using the syntax:
COMMAND: command
OUTPUT: output
Once you are done with the task, use the COMMAND: DONE.
{{/user}}

{{#assistant~}}
COMMAND: ls
OUTPUT: guidance project
COMMAND: DONE 
{{~/assistant~}}

{{#user~}}
Please complete the following task:
Task: {{task}}
You can run bash commands using the syntax:
COMMAND: command
OUTPUT: output
Once you are done with the task, use the COMMAND: DONE.
{{~/user}}

{{#assistant~}}
{{#geneach 'commands' stop=False ~}}
COMMAND: {{gen 'this.command' stop='\\n'}}
OUTPUT: {{shell this.command)}}{{~/geneach}}
{{~/assistant~}}''')

यहाँ एमपीटी है:

घटनाओं के एक दिलचस्प मोड़ में, विकुना कार्य को हल करने में असमर्थ है, लेकिन एमपीटी सफल होता है। गोपनीयता के अलावा (हम OpenAI को सत्र प्रतिलेख नहीं भेज रहे हैं), ओपन-सोर्स मॉडल का यहां एक महत्वपूर्ण लाभ है: संपूर्ण संकेत एक एकल एलएलएम रन है (और हम इसे आउटपुट संरचना टोकन जैसे उत्पन्न न करके भी इसे तेज करते हैंCOMMAND: ) . इसके विपरीत, हमें प्रत्येक कमांड के लिए चैटजीपीटी को एक नया कॉल
करना होगा , जो धीमा और अधिक महंगा है।

अब हम एक अलग कमांड का प्रयास करते हैं: "सभी ज्यूपिटर नोटबुक फ़ाइलों को ~ / कार्य / मार्गदर्शन में खोजें जो वर्तमान में गिट द्वारा ट्रैक नहीं की गई हैं"।

यहाँ चैटजीपीटी है:

एक बार फिर, हम चैटजीपीटी के साथ एक समस्या में भाग लेते हैं जो हमारे निर्दिष्ट आउटपुट संरचना का पालन नहीं करता है (और इस प्रकार लूप में मानव के बिना प्रोग्राम के अंदर उपयोग करना हमारे लिए असंभव बना देता है)। हमारे प्रोग्राम ने अभी-अभी कमांड निष्पादित किए हैं, और इस प्रकार यह ऊपर दिए गए अंतिम चैटजीपीटी संदेश के बाद बंद हो गया।

हमें संदेह था कि खाली आउटपुट ने चैटजीपीटी को बंद कर दिया, और इस प्रकार हमने आउटपुट न होने पर संदेश को बदलकर इस विशेष समस्या को ठीक किया। हालाँकि, हम ChatGPT को हमारे निर्दिष्ट आउटपुट संरचना का पालन करने के लिए बाध्य नहीं कर पाने की सामान्य समस्या को ठीक नहीं कर सकते हैं।

इस छोटे से संशोधन के बाद ChatGPT समस्या को हल करने में सक्षम था । आइए देखें कि विकुना कैसे करता है:

विकुना हमारे आउटपुट स्ट्रक्चर का अनुसरण करता है, लेकिन दुर्भाग्य से कार्य करने के लिए गलत कमांड चलाता है। एमपीटी (दिखाया नहीं गया) गिट स्थिति को बार-बार कॉल करता है, इसलिए यह भी विफल रहता है।

हमने इन कार्यक्रमों को विभिन्न अन्य निर्देशों के लिए चलाया, और पाया कि चैटजीपीटी लगभग हमेशा कमांड के सही अनुक्रम का उत्पादन करता है, जबकि कभी-कभी निर्दिष्ट प्रारूप का पालन नहीं करता (और इस प्रकार मानवीय हस्तक्षेप की आवश्यकता होती है)। ओपन सोर्स मॉडल इतने अच्छे से काम नहीं करते थे (हम शायद उन्हें अधिक शीघ्र इंजीनियरिंग के साथ सुधार सकते हैं, लेकिन वे सबसे कठिन निर्देशों पर विफल रहे)।

टेकअवे

उपरोक्त उदाहरणों के अलावा, हमने दोनों कार्यों (प्रश्न उत्तर और बैश) के लिए विभिन्न इनपुट की कोशिश की। हमने सारांशीकरण, प्रश्न उत्तर, "रचनात्मक" पीढ़ी, और टॉय स्ट्रिंग हेरफेर कार्यों से जुड़े कई अन्य कार्यों को भी आज़माया, जहाँ हम स्वचालित रूप से सटीकता का मूल्यांकन कर सकते हैं।
यहां हमारे निष्कर्षों का सारांश दिया गया है:

  • कार्य पर गुणवत्ता : हमारे द्वारा आजमाए गए प्रत्येक कार्य के लिए, चैटजीपीटी (3.5) अभी भी कार्य पर विकुना से अधिक मजबूत है। एमपीटी ने लगभग सभी कार्यों पर खराब प्रदर्शन किया (शायद हम इसे गलत इस्तेमाल कर रहे हैं?), जबकि विकुना अक्सर चैटजीपीटी के करीब था (कभी-कभी बहुत करीब, कभी-कभी पिछले उदाहरण के ऊपर के कार्य के रूप में बहुत खराब)।
  • उपयोग में आसानी : चैटजीपीटी को एक निर्दिष्ट आउटपुट प्रारूप का पालन करने के लिए यह बहुत अधिक दर्दनाक है, और इस प्रकार इसे प्रोग्राम के अंदर उपयोग करना कठिन होता है (लूप में मानव के बिना)। इसके अलावा, हमें हमेशा आउटपुट के लिए रेगेक्स पार्सर लिखना पड़ता है (विकुना के विपरीत, जहां स्पष्ट सिंटैक्स के साथ एक संकेत को पार्स करना तुच्छ है)।
    हम आमतौर पर कुछ-कुछ उदाहरणों को जोड़कर संरचना की समस्या को हल करने में सक्षम होते हैं, लेकिन उन्हें लिखना थकाऊ होता है, और कभी-कभी चैटजीपीटी ऑफ-स्क्रिप्ट भी हो जाता है। हमें ऐसे संकेत भी मिलते हैं जो लंबे, अनाड़ी और भद्दे होते हैं, जो असंतोषजनक होते हैं।
    आउटपुट संरचना को निर्दिष्ट करने में सक्षम होना ओपन-सोर्स मॉडल का एक महत्वपूर्ण लाभ है, इस बिंदु पर कि हम कभी-कभी चैटजीपीटी पर विकुना को पसंद कर सकते हैं, भले ही यह कार्य में थोड़ा खराब हो।
  • दक्षता : स्थानीय रूप से मॉडल होने का मतलब है कि हम एक एलएलएम रन में कार्यों को हल कर सकते हैं ( guidanceएलएलएम स्थिति को कार्यक्रम के निष्पादन के दौरान रखता है), जो तेज और सस्ता है। यह विशेष रूप से सच है जब किसी भी उप-चरण में अन्य एपीआई या फ़ंक्शन (जैसे खोज, टर्मिनल, आदि) को कॉल करना शामिल होता है, जिसके लिए ओपनएआई एपीआई को हमेशा एक नई कॉल की आवश्यकता होती है। guidanceमॉडल को आउटपुट संरचना टोकन उत्पन्न न करके पीढ़ी को भी गति देता है, जो कभी-कभी एक बड़ा अंतर बनाता है।

हमें यह स्वीकार करना चाहिए कि हम पिछले कुछ वर्षों में OpenAI मॉडल का बहुत अधिक उपयोग करके पक्षपाती हैं, GPT-3 (जैसे यहाँ , यहाँ ) पर निर्भर विभिन्न पेपर लिखे हैं, और एक पेपर जो मूल रूप से कह रहा है "GPT-4 बहुत बढ़िया है , यहाँ अच्छे उदाहरणों का एक समूह है"।
इसके बारे में बोलते हुए, जबकि विकुना कुछ हद तक चैटजीपीटी (3.5) के बराबर है, हमारा मानना ​​है कि जीपीटी-4 एक अधिक मजबूत मॉडल है, और यह देखने के लिए उत्साहित हैं कि क्या ओपन सोर्स मॉडल उस तक पहुंच सकते हैं । जबकि guidanceOpenAI मॉडल के साथ काफी अच्छा खेलता है, यह वास्तव में चमकता है जब आप आउटपुट संरचना निर्दिष्ट कर सकते हैं और पीढ़ी को गति दे सकते हैं।

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

अस्वीकरण : यह पोस्ट मार्को टुलियो रिबेरो और स्कॉट लुंडबर्ग द्वारा संयुक्त रूप से लिखी गई थी। यह सख्ती से हमारे व्यक्तिगत विचारों का प्रतिनिधित्व करता है, न कि हमारे नियोक्ता (माइक्रोसॉफ्ट) के विचारों का।

आभार: हम इस पोस्ट पर अंतर्दृष्टिपूर्ण टिप्पणियों के लिए हर्षा नोरी के वास्तव में आभारी हैं