নো-কোড/লো-কোড এনভায়রনমেন্টের বর্ধিত প্রাপ্যতা এবং প্রোগ্রামিং-এ প্রয়োগ করা AI এর আবির্ভাবের সাথে, এমন অনেক নিবন্ধ পোস্ট করা হয়েছে যে প্রোগ্রামারদের জন্য শেষ কাছাকাছি কারণ হয় শেষ ব্যবহারকারীরা তাদের নিজস্ব অ্যাপ তৈরি করবে বা AI করবে। বিবরণ থেকে অ্যাপ্লিকেশন লিখুন। সম্ভবত ... কিন্তু এখনও না.
এই নিবন্ধে, আমি ওপেনএআই চ্যাটজিপিটি এবং কোডেক্সের মাইক্রোসফ্ট কপিলট থেকে হাতে লেখা কোডের সাথে তুলনা করে এআই-সহায়ক কোডিংয়ের বর্তমান অবস্থা অন্বেষণ করি। AIs হয় গড় বা ত্রুটিপূর্ণ কোড তৈরি করে।
যেহেতু আজকে অনেক বেশি ফোকাস করা হয়েছে প্রচুর পরিমাণে ডেটা প্রক্রিয়াকরণের উপর (চ্যাটজিপিটি এবং কপিলটের জন্য ব্যবহৃত বৃহৎ ভাষার মডেল সহ), তাই আমি অ্যালগরিদমগুলিতে ফোকাস করি যেগুলি দক্ষতার সাথে ডেটা প্রক্রিয়াকরণের চাবিকাঠি। আশা করি, এআইগুলি সাধারণভাবে কোডের চেয়ে তাদের নিজস্ব প্রকৃতি "বোঝে"!
এই অ্যালগরিদমগুলি হল:
ছেদ
ক্রস পণ্য
memoizing
আমি ফর্মের জন্য দিকনির্দেশ সহ ChatGPT প্রদান করেছি:
আমাকে <কিছু ফাংশন বিবরণ> দেখান
আমি ইনপুট সহ কোডেক্স প্রদান করেছি:
<কিছু ফাংশন বিবরণ>
আমি একটি WebStorm IDE-তে মন্তব্য সহ Copilot প্রদান করেছি
// <কিছু ফাংশন বিবরণ>
ফাংশন বিবরণ প্রতিটি জন্য একই ছিল.
স্পীড প্লাস মেমরি এবং সিপিইউ ব্যবহার পেতে বেঞ্চটেস্টে পাওয়া কোডের অনুরূপ কোড দ্বারা পরিপূরক ইউনিট পরীক্ষার জোতা হিসাবে আমি জেসমিন ব্যবহার করেছি।
আমাকে একটি জাভাস্ক্রিপ্ট ফাংশন দেখান যা একটি পরিবর্তনশীল সংখ্যক অ্যারে নেয় এবং তাদের ছেদ প্রদান করে।
function intersection(...arrays) { if (arrays.length < 2) { throw new Error("At least 2 arrays are required!"); } let result = new Set(arrays.shift()); for (let arr of arrays) { result = new Set([...result].filter(x => arr.includes(x))); } return [...result]; }
function intersection(arrays) { var result = []; var args = Array.prototype.slice.call(arguments); var arrays = args.slice(0, args.length - 1); var callback = args[args.length - 1]; var minLength = Math.min.apply(null, arrays.map(function(arr) { return arr.length; })); for (var i = 0; i < minLength; i++) { var item = arrays[0][i]; var isInAll = arrays.every(function(arr) { return arr.indexOf(item) !== -1; }); if (isInAll) { result.push(item); } } return callback(result); }
const intersection = (...arrays) => { const [first, ...rest] = arrays; return first.filter(x => rest.every(y => y.includes(x))); }
ChatGPT অনুমান করেছে যে একের কম অ্যারে প্রদান করা বৈধ নয়। আমি এমন পরিস্থিতিতে কল্পনা করতে পারি যেখানে একটি যুক্তি প্রদান করা বৈধ হতে পারে।
একটি সেট ব্যবহার করে, ChatGPT নিশ্চিত করে যে ফলাফলে কোনো সদৃশ উপস্থিত নেই। ছেদ একটি সেট অপারেশন হতে অনুমিত হয়, এবং সদৃশ অপসারণ করা উচিত. কপিলট কোড একটি অ্যারে ফেরত দেবে যাতে ডুপ্লিকেট থাকতে পারে।
ChatGPT বা Copilot উভয়ই মূল আর্গুমেন্টগুলিকে দৈর্ঘ্য অনুসারে বাছাই করে না। এটি একটি তুচ্ছ অপ্টিমাইজেশান যা একটি বড় পার্থক্য করতে পারে!
কোনো যুক্তির দৈর্ঘ্য শূন্য থাকলে, কোনো ছেদ নেই; নির্বিশেষে, এটি লুপগুলিকে ছোট করে কারণ সর্বাধিক ছেদটি সংক্ষিপ্ত অ্যারে আর্গুমেন্টের সমান।
কোডেক্স জটিল কোড প্রদান করেছে যা, আমার জ্ঞানের উপর ভিত্তি করে, বেশ দক্ষ লাগছিল। যাইহোক, এর আর্গুমেন্টের ব্যবহার অস্পষ্ট এবং এতে কিছুটা প্রাচীন প্রোগ্রামিং শৈলী জড়িত।
দ্রষ্টব্য, কলিং কোডে ছেদ ফেরানোর জন্য একটি কলব্যাক অবশ্যই শেষ আর্গুমেন্ট হিসাবে প্রদান করতে হবে, কিন্তু আর্গুমেন্ট দেখানো হয় না।
আমি তখন ChatGPT এবং Copilot কে আমাকে একটি দক্ষ ফাংশন দিতে বলেছিলাম।
আমাকে একটি দক্ষ জাভাস্ক্রিপ্ট ফাংশন দেখান যা একটি পরিবর্তনশীল সংখ্যক অ্যারে নেয় এবং তাদের ছেদ প্রদান করে।
function intersection(...arrays) { if (arrays.length < 2) { throw new Error("At least 2 arrays are required!"); } let result = new Set(); for (let item of arrays[0]) { let include = true; for (let i = 1; i < arrays.length; i++) { if(!arrays[i].includes(item)){ include = false; break; } } if(include){ result.add(item); } } return [...result]; }
কপিলট প্রথম অনুরোধের মতো একই কোড তৈরি করেছে।
ChatGPT ভাষ্য যোগ করেছে যে ফাংশনটি বস্তুর জন্য প্রত্যাশিত হিসাবে কাজ করবে না, যদিও যুক্তিযুক্তভাবে এটি হবে। সুতরাং, আমি এমন একটি ফাংশন চেয়েছি যা বস্তুকে সমর্থন করবে:
আমাকে একটি দক্ষ জাভাস্ক্রিপ্ট ফাংশন দেখান যা বস্তু বা আদিম সমন্বিত অ্যারেগুলির একটি পরিবর্তনশীল সংখ্যা নেয় এবং তাদের ছেদ প্রদান করে।
function intersection(...arrays) { if (arrays.length < 2) { throw new Error("At least 2 arrays are required!"); } let result = new Set(); for (let item of arrays[0]) { let include = true; for (let i = 1; i < arrays.length; i++) { if(!arrays[i].find(x => JSON.stringify(x) === JSON.stringify(item))){ include = false; break; } } if(include){ result.add(item); } } return [...result]; } This function takes an arbitrary number of arrays as arguments and first checks if at least 2 arrays are passed. Then it uses a nested loop. The outer loop iterates over the first array and the inner loop iterates over the remaining arrays. It compares each item of the first array with each item of the remaining arrays using Array.prototype.find() method and JSON.stringify() to check if the objects are the same. If an item is found in all arrays, it is added to
ChatGPT বস্তুগুলিকে তুলনা করার জন্য স্ট্রিংফাই করে। এর সাথে বেশ কয়েকটি সমস্যা রয়েছে:
একই স্ট্রিং উপস্থাপনা আছে যে দুটি বস্তু বৈধভাবে পৃথক বস্তু হতে পারে.
এমনকি স্ট্রিংফাইং বৈধ হলেও, বিভিন্ন সম্পত্তি আদেশের ফলে বিভিন্ন স্ট্রিং হবে এবং বস্তুগুলি একই সত্তাকে প্রতিনিধিত্ব করতে পারে।
JSON.stringify এর পরে একটি স্ট্রিং তুলনা একটি ধীর অপারেশন।
এবং এখন, আসল পরীক্ষা! নিচে, ChatGPT, Codex, Copilot, এবং NPM, fastArrayIntersect এবং intersector এর মাধ্যমে উপলব্ধ দুটি দ্রুততম ইন্টারসেকশন লাইব্রেরি দ্বারা তৈরি কোড ব্যবহার করে গতি এবং মেমরির জন্য বেঞ্চমার্ক ফলাফল রয়েছে।
বেঞ্চমার্ক 10,000 পূর্ণসংখ্যার 3টি অভিন্ন অ্যারেকে ছেদ করেছে এবং 100-এর নমুনা আকারের সঙ্গে 5,000 পূর্ণসংখ্যার একটি চূড়ান্ত অ্যারে। উৎস অ্যারেগুলিতে সদৃশ এন্ট্রি থাকাকালীন ফাংশনগুলি ফেরত দেওয়া সেটগুলি নিশ্চিত করার জন্য একটি পরীক্ষাও চালানো হয়েছিল।
উৎস | ডুপ্লিকেট | গাদা ব্যবহৃত | অপস সেক | ব্যবহারকারীর সিপিইউ | সিস্টেম সিপিইউ |
---|---|---|---|---|---|
চ্যাটজিপিটি | না | 39768 | ৬.৬৫ | 152170 | 780 |
কোডেক্স | না | 5475888 | 16.00 | 69070 | 160 |
কপিলট | হ্যাঁ | 30768 | 4.16 | 345190 | 940 |
ইন্টারসেক্টর | না | 37304 | 73.02 | 21020 | 160 |
ফাস্ট অ্যারে ইন্টারসেকশন | না | 42064 | 20.33 | 18990 | 630 |
কপিলট সর্বনিম্ন হিপ ব্যবহার করে তবে এটি সবচেয়ে ধীর এবং সর্বাধিক CPU-নিবিড়।
ChatGPT সর্বনিম্ন CPU-নিবিড় কিন্তু ধীরগতির।
ফাস্ট অ্যারে ইন্টারসেক্ট কপিলট এবং চ্যাট জিপিটি-র থেকে 3 থেকে 5 গুণ দ্রুত এবং কম CPU-নিবিড় হওয়া সত্ত্বেও কোডেক্সের চেয়ে 20% দ্রুত।
ইন্টারসেক্টর ChatGPT এবং Copilot এর চেয়ে 15x দ্রুত, কোডেক্সের চেয়ে 4x দ্রুত এবং ফাস্ট অ্যারে ইন্টারসেক্টের চেয়ে 3x বেশি দ্রুত এবং সর্বনিম্ন CPU ব্যবহারও রয়েছে।
সংক্ষেপে:
চ্যাটজিপিটি বা কপিলট উভয়ই দক্ষ কোড তৈরি করে না।
ChatGPT অনুমান করে যা বৈধ নাও হতে পারে।
Copilot কোড তৈরি করে যা একটি সেট তৈরি করে না যখন এর আর্গুমেন্টে ডুপ্লিকেট মান থাকে।
কোডেক্স যুক্তিসঙ্গত কার্যকারিতা তৈরি করে, যদিও অস্পষ্ট কোড।
প্রোগ্রামাররা জয়ী হয়।
ChatGPT এবং Copilot উভয়ই তাদের "বুদ্ধিমত্তা" প্রয়োগ করে ব্যবহারকারীকে কয়েকটি স্পষ্ট প্রশ্ন জিজ্ঞাসা করে উন্নত করা যেতে পারে, যেমন, আপনি কি গতি বা মেমরির দক্ষতা খুঁজছেন, আপনি কি অন্তত দুটি আর্গুমেন্টের প্রয়োজন চান?
এই বিভাগের উদ্দেশ্য সম্পর্কে পরিষ্কার হওয়ার জন্য, আমি অ্যারেতে আইটেমগুলির সমস্ত সম্ভাব্য সংমিশ্রণ খুঁজছিলাম, ভেক্টরগুলির একটি গাণিতিক ক্রস-পণ্য নয়।
কার্টেসিয়ান ক্রস-প্রোডাক্টের জন্য আমাকে একটি জাভাস্ক্রিপ্ট ফাংশন দেখান।
function cartesianCrossProduct(v1, v2) { var x = v1.y*v2.z - v1.z*v2.y; var y = v1.z*v2.x - v1.x*v2.z; var z = v1.x*v2.y - v1.y*v2.x; return {x: x, y: y, z: z}; }
function crossProduct(arrays) { var result = []; var args = Array.prototype.slice.call(arguments); var arrays = args.slice(0, args.length - 1); var callback = args[args.length - 1]; var maxLength = Math.max.apply(null, arrays.map(function(arr) { return arr.length; })); for (var i = 0; i < maxLength; i++) { var item = arrays[0][i]; var isInAll = arrays.every(function(arr) { return arr.indexOf(item) !== -1; }); if (isInAll) { result.push(item); } } return callback(result); }
const crossProduct = (...arrays) => { const [first, ...rest] = arrays; return first.flatMap(x => rest.map(y => [x, y])); }
দুর্ভাগ্যবশত, ChatGPT পাটিগণিত ক্রস-পণ্যের জন্য একটি ফাংশন প্রদান করেছে। আমার মতে, এটি উভয় ধরনের ফাংশন প্রদান করা উচিত ছিল বা স্পষ্টীকরণের জন্য জিজ্ঞাসা করা উচিত ছিল।
বিভিন্ন প্রশ্নে একাধিক প্রচেষ্টার পর, আমি নীচের তিনটি তৈরি করতে ChatGPT পেতে সক্ষম হয়েছি:
function crossProduct(...arrays) { if (arrays.length < 2) { throw new Error("At least 2 arrays are required!"); } let result = arrays[0].reduce((acc, x) => { return acc.concat(arrays.slice(1).reduce((acc, y) => { return acc.concat(y.map(z => [x].concat(z))); }, [])) }, []); return result; }
function allCombinations(...args) { var result = []; var f = function(prefix, arr) { for (var i = 0; i < arr.length; i++) { var newPrefix = prefix.concat(arr[i]); result.push(newPrefix); if (args.length > 0) { f(newPrefix, args.shift()); } } } f([], args[0]); return result; }
function crossProduct(...args) { var result = []; for(let i = 0; i < args.length; i++){ for(let j = i + 1; j < args.length; j++){ for(let ii = 0; ii < args[i].length; ii++){ for(let jj = 0; jj < args[j].length; jj++){ result.push([args[i][ii], args[j][jj]]); } } } } return result; }
const crossProduct = (...arrays) => { const [first, ...rest] = arrays; return first.flatMap(x => rest.map(y => [x, y])); }
ইন্টারসেকশনের মতো, কোডেক্স অস্পষ্ট আর্গুমেন্ট হ্যান্ডলিং সহ একটি পুরানো প্রোগ্রামিং শৈলী ব্যবহার করে একটি ফাংশন প্রদান করে।
যারা কার্টেসিয়ান পণ্যের সাথে পরিচিত তারা জানবে যে তারা মেমরি ব্যবহার এবং কর্মক্ষমতা উভয় দৃষ্টিকোণ থেকে বিস্ফোরক হতে পারে।
নিষ্পাপ প্রয়োগগুলি সমস্ত পারমিউটেশন সঞ্চয় করার জন্য পর্যাপ্ত RAM ব্যবহার করবে এবং সমস্ত পারমিউটেশন তৈরি না হওয়া পর্যন্ত ফলাফল দেবে না (যা দীর্ঘ সময় হতে পারে)। চ্যাটজিপিটি এবং কপিলট ফাংশন উভয়ই এই ত্রুটিগুলি থেকে ভুগছে।
তাই, আমি পরবর্তীতে কার্টেসিয়ান পণ্যের জন্য একটি মেমরি দক্ষ জাভাস্ক্রিপ্ট ফাংশন চেয়েছিলাম।
function cartesianProduct(...args) { const iterators = args.map(arg => arg[Symbol.iterator]()); const next = () => { const values = iterators.map(iterator => iterator.next().value); return values.length > 1 ? values : null; }; return { [Symbol.iterator]: () => ({ next }) }; }
কপিলট আগের মতো একই ফলাফল প্রদান করেছে।
আমি ধরে নিলাম ChatGPT-এর "মেমরি কার্যকরী" সংস্করণটি প্রথমটির তুলনায় কম RAM ব্যবহার করেছে। যাইহোক, আমি জানতাম এটি সর্বোত্তম নয়। অনেক চেষ্টা করার পর, আমি একটি জেনারেটর ব্যবহার করে কার্টেসিয়ান পণ্যের জন্য একটি মেমরি দক্ষ জাভাস্ক্রিপ্ট ফাংশন নিয়ে এসেছি।
function* cartesianProduct(...args) { const recursion = (arrays, i = 0) => { if (i === arrays.length - 1) { yield* arrays[i]; } else { for (let item of arrays[i]) { for (let result of recursion(arrays, i + 1)) { yield [item, ...result]; } } } } yield* recursion(args); }
সত্যি কথা বলতে, আমি ChatGPT এর এই প্রতিক্রিয়ায় আনন্দদায়কভাবে অবাক হয়েছি। যাইহোক, এই কোডটি চালানোর প্রচেষ্টা ব্যর্থ হয়েছে কারণ yield [item,...result]
একটি জেনারেটরের ভিতরে নয়, এটি একটি নেস্টেড ফাংশনের ভিতরে রয়েছে যাকে recursion
বলা হয়।
আমি একটি সামান্য ভিন্নতাও পেয়েছি যাতে আমি প্রশ্নটি হারিয়ে ফেলেছি:
function* crossProduct(...arrays) { if (arrays.length < 2) { throw new Error("At least 2 arrays are required!"); } function* recurse(depth, current) { if (depth === arrays.length) { yield current; } else { for (let item of arrays[depth]) { yield* recurse(depth + 1, current.concat(item)); } } } yield* recurse(1, [arrays[0]]); }
আবারও, ChatGPT যুক্তি সম্পর্কে কিছু অনুমান করছে বলে মনে হচ্ছে।
কপাইলট আগের মতো একই কোড ফেরত দিয়েছে। এটি একটি জেনারেটরের জন্য আমার অনুরোধকে সম্পূর্ণরূপে উপেক্ষা করেছে।
এবং এখন, আসল পরীক্ষা! নিচে ChatGPT, Copilot দ্বারা জেনারেট করা কোড ব্যবহার করে গতি এবং মেমরির জন্য বেঞ্চমার্ক ফলাফল এবং দ্রুততম, সবচেয়ে মেমরি দক্ষ কার্টেসিয়ান পণ্য রয়েছে যার সম্পর্কে আমি সচেতন CXProduct এবং Lazy Cartesian Product ।
এছাড়াও একটি এক-লাইন ফাংশন অন্তর্ভুক্ত যা সম্ভবত ChatGPT বা Copilot ফিরে আসা উচিত ছিল (আপনি ফলাফল পর্যালোচনা করার সময় আমি কেন এটি অন্তর্ভুক্ত করেছি তা আপনি দেখতে পাবেন)।
//https://stackoverflow.com/questions/12303989/cartesian-product-of-multiple-arrays-in-javascript const cartesian = (...a) => a.reduce((a, b) => a.flatMap(d => b.map(e => [d, e].flat())));
পরীক্ষাটি 10টি আইটেম সহ 4টি অ্যারের কার্টেসিয়ান পণ্য নেয়। সুতরাং, ফাংশনগুলি 10 * 10 * 10 * 10 আইটেমের একটি কার্টেসিয়ান পণ্য তৈরি করবে, অর্থাৎ 10,000।
উৎস | # ফলাফল | গাদা ব্যবহৃত | অপস সেক | ব্যবহারকারীর সিপিইউ | সিস্টেম সিপিইউ |
---|---|---|---|---|---|
ChatGPT1 | 300 | N/A | N/A | N/A | N/A |
চ্যাটGPT2 | 50 | N/A | N/A | N/A | N/A |
ChatGPT3 | 600 | N/A | N/A | N/A | N/A |
চ্যাটজিপিটি মেমরি দক্ষ | N/A | N/A | N/A | N/A | N/A |
চ্যাটজিপিটি জেনারেটর | 1000 | N/A | N/A | N/A | N/A |
কোডেক্স | 4 | N/A | N/A | N/A | N/A |
কপিলট | 30 | N/A | N/A | N/A | N/A |
এক লাইন | 10000 | 0 | 78.46 | 18150 | 0 |
সিএক্স প্রোডাক্ট | 10000 | 0 | 291.50 | 7330 | 0 |
অলস পণ্য | 10000 | 17824 | 266.65 | 11560 | 150 |
সংক্ষেপে:
ChatGPT, Codex, এবং Copilot এমন কোড তৈরি করতে অক্ষম যা একটি কার্টেসিয়ান পণ্যের জন্য সঠিক ফলাফল তৈরি করে।
ChatGPT কখনও কখনও এমন অনুমান করে যা বৈধ নাও হতে পারে, যেমন, 2টি আর্গুমেন্টের প্রয়োজন৷
চ্যাটজিপিটি কোড জেনারেট করেছে যা বলেছিল যে এটি আরও মেমরি দক্ষ কিন্তু এটি চালানোও হবে না।
প্রোগ্রামারদের জয়!
আবারও, ChatGPT এর "বুদ্ধিমত্তা" প্রয়োগ করে ব্যবহারকারীকে কয়েকটি স্পষ্ট প্রশ্ন জিজ্ঞাসা করে উন্নত করা যেতে পারে, যেমন, আপনি কি গতি বা মেমরির দক্ষতা খুঁজছেন, আপনি কি অন্তত দুটি আর্গুমেন্টের প্রয়োজন চান? তবে এর আগে অবশ্যই সঠিক কোড জেনারেট করতে হবে!
ছেদ এবং কার্টেসিয়ান পণ্যগুলির সাথে আমার পাঠ শেখার পরে, আমি অবিলম্বে স্মরণ করার জন্য একটি পরিমার্জিত প্রশ্ন জিজ্ঞাসা করেছি।
আমাকে একটি দক্ষ জাভাস্ক্রিপ্ট ফাংশন দেখান যা অবজেক্ট এবং আদিম আর্গুমেন্ট মেমোাইজ করে।
function memoize(fn) { let cache = new WeakMap(); return function(obj, ...args) { let key; if (obj) { if (!cache.has(obj)) { cache.set(obj, {}); } key = JSON.stringify([obj, ...args]); } else { key = JSON.stringify(args); } if (cache.has(key)) { return cache.get(key); } let result = fn.apply(this, [obj, ...args]); cache.set(key, result); return result; } }
ChatCPT অবৈধ কোড তৈরি করেছে; একটি WeakMap
একটি কী হিসাবে একটি বস্তু ব্যবহার করা আবশ্যক. কোডটি পরীক্ষার জন্য নিম্নরূপ সংশোধন করা হয়েছে।
function memoize(fn) { let cache = new Map(); return function(obj, ...args) { let key; if (obj!=null) { if (!cache.has(obj)) { cache.set(obj, {}); } key = JSON.stringify([obj, ...args]); } else { key = JSON.stringify(args); } if (cache.has(key)) { return cache.get(key); } let result = fn.apply(this, [obj, ...args]); cache.set(key, result); return result; } }
function memoize(func) { var cache = {}; return function() { var args = Array.prototype.slice.call(arguments); var key = JSON.stringify(args); if (cache[key]) { return cache[key]; } else { var result = func.apply(null, args); cache[key] = result; return result; } } }
const memoize = (fn, cache = new Map()) => { return (...args) => { const key = JSON.stringify(args); if (cache.has(key)) { return cache.get(key); } else { const result = fn(...args); cache.set(key, result); return result; } } }
কোডেক্স এবং কপিলট একই ফাংশন তৈরি করেছে যা কোডেক্সের উপর ভিত্তি করে কপিলট দেওয়া বিস্ময়কর হওয়া উচিত নয়। যদিও, আগের উদাহরণগুলিতে, তারা ভিন্ন ছিল।
ChatGPT, Codex, এবং Copilot জেনারেট করা অদক্ষ ফাংশন, JSON.stringify, তারপরে একটি স্ট্রিং তুলনা স্কেলে ধীর এবং মেমরি-ব্যবহারযোগ্য।
এছাড়াও জাভাস্ক্রিপ্ট মান আছে যেগুলো স্ট্রিংফাই করে না, যেমন, ইনফিনিটি এবং NaN। (দুর্ভাগ্যবশত, জাভাস্ক্রিপ্ট JSON স্পেকটি ডেটা সায়েন্স এবং মাইক্রো-সার্ভিসের বয়সের আগে সংজ্ঞায়িত করা হয়েছিল, এবং এটি ধরে নেওয়া হয়েছিল যে ইনফিনিটি এবং NaN কোডে ত্রুটিগুলি নিহিত ছিল যেগুলি হয় বৈধ নয় বা এক জায়গা থেকে অন্য জায়গায় পরিবহন করার প্রয়োজন নেই। .)
তাই এখন, এই কোড ব্যবহার করে 12 তম ফিবোনাচি নম্বর তৈরি করে ন্যানো-মেমোইজ এবং মাইক্রো-মেমোইজের সাথে ChatGPT এবং Copilot কোড তুলনা করে দক্ষতার প্রমাণের জন্য:
const fibonacci = (number) => { return number < 2 ? number : fibonacci(number - 1) + fibonacci(number - 2); };
উৎস | গাদা ব্যবহৃত | অপস সেক | ব্যবহারকারীর সিপিইউ | সিস্টেম সিপিইউ |
---|---|---|---|---|
ChatGPT (সংশোধিত) | 102552 | 45801 | 620 | 0 |
কোডেক্স | 17888 | 52238 | 320 | 0 |
কপিলট | 17888 | 51301 | 320 | 0 |
ন্যানো-স্মরণ করা | 17576 | 93699 | 470 | 160 |
micro-memoize | 18872 | 82833 | 620 | 0 |
ন্যানো-মেমোইজ হল সবচেয়ে দ্রুত এবং চ্যাটজিপিটি, কোডেক্স এবং কপিলট কোডের তুলনায় প্রায় দ্বিগুণ দ্রুত। এটিও কম মেমরি ব্যবহার করে। মাইক্রো-মেমোইজ এর হিলের কাছাকাছি।
যদিও nano-memoize
এবং micro-memoize
জন্য সিপিইউ ব্যবহার কোড এবং কপিলট থেকে কিছুটা বেশি, পারফরম্যান্সটি মূল্যবান এবং প্রোগ্রামাররা আবারও জয়ী হয়!
যদিও কোড জেনারেশনের জন্য কপিলট এবং চ্যাটজিপিটি উভয়ের ব্যবহারে অবশ্যই মূল্য রয়েছে, তবে এটি যত্ন সহকারে করা উচিত। কোনটিই সর্বোত্তম কোড তৈরি করবে না এবং কিছু ক্ষেত্রে, এটি কেবল অবৈধ বা খারাপ, ভুল হবে। উপরন্তু, ChatGPT ব্যবহার করার সময়, প্রশ্নগুলি বেশ নির্দিষ্ট হওয়া উচিত।
ChatGPT এবং Copilot উভয়ই একটি বৈশিষ্ট্য যুক্ত করার মাধ্যমে উন্নত করা যেতে পারে যা স্পষ্ট প্রশ্ন জিজ্ঞাসা করবে।
ChatGPT, যদি এটি সত্যিই বুদ্ধিমান হয়, হয় ব্যবহারকারীদের বলবে তার ভাইবোন কোডেক্সকে কোড জেনারেশনের জন্য নিয়োগ করতে অথবা ব্যাকগ্রাউন্ডে কোডেক্স ব্যবহার করবে।
যদি এটি ব্যাকগ্রাউন্ডে কোডেক্স ব্যবহার করে, তাহলে আমি নিশ্চিত নই যে যখন আমি উভয়কে একই ফাংশন বিবরণ প্রদান করি এবং ভিন্ন ফলাফল পাই তখন কী ঘটছে।
যদিও আমি যেকোনও টুলের অভ্যন্তরীণ কাজের সাথে পরিচিত নই, তবে সেগুলি ভাষা মডেল ভিত্তিক তা জানা ছাড়া, আমি অনুমান করি যে তারা এই ঘাটতি কাটিয়ে উঠতে না পেরে সর্বোত্তম কোড তৈরি করতে পারে এমন একটি বিন্দুতে পৌঁছানোর সম্ভাবনা কম:
পাবলিকলি আনভেটেড কোডের বৃহৎ ভলিউমের উপর প্রশিক্ষিত একটি সিস্টেম কোডের জন্য গড় ফলাফল তৈরি করতে চলেছে, অর্থাৎ গড় কার্যক্ষমতার কোড এবং গড় সংখ্যক বাগ সহ কোড।
ধারাবাহিকভাবে সঠিক ফলাফল প্রদান করতে, সিস্টেমের প্রয়োজন হবে:
"কাউন্টার স্যাম্পল" ডেটা, যেমন, JSON.stringify- এর টুকরো ব্যবহার এবং ব্যবহার করার ক্ষমতা অদক্ষ হতে পারে। সিস্টেমটি পরীক্ষার ফলাফলের পাশাপাশি কোড বিশ্লেষণ করে বা কিছু ধরণের ওজন সহ পরিচিত সর্বোত্তম কোড খাওয়ানোর মাধ্যমে বা পরিচিত বিশেষজ্ঞদের দ্বারা ফলাফলের সমালোচনার মাধ্যমে এই ক্ষমতা অর্জন করতে পারে। দুর্ভাগ্যবশত, সর্বোত্তম কোড প্রায়শই সর্বাধিক প্রচলিত বা সর্বাধিক ব্যবহৃত হয় না, এবং কেবলমাত্র মডেলগুলিকে আরও উদাহরণ খাওয়ানো সাহায্য করবে না। আদর্শ ক্ষেত্রে, একটি সত্যিই বুদ্ধিমান সিস্টেম তার নিজস্ব পরীক্ষার কেস তৈরি করতে সক্ষম হবে।
প্রোগ্রামিং এর একটি গভীরতর, আরো প্রথম নীতি "বোঝার" দক্ষতার ত্রুটির জন্য এটি যে কোড তৈরি করে তা বিশ্লেষণ করার জন্য, যেমন, সাধারণত রানটাইম দক্ষতার জন্য পুনরাবৃত্তির উপর পুনরাবৃত্তির পক্ষে, সাধারণত কোডের আকার এবং পাঠযোগ্যতার জন্য পুনরাবৃত্তির পক্ষে।
সর্বনিম্নভাবে, একটি কোড-উৎপাদনকারী AI-এর উচিৎ সেটি তৈরি করা কোড পার্স করার চেষ্টা করা এবং এর সিনট্যাকটিক বৈধতা মূল্যায়ন করা। এটি ChatGPT-এর একটি সহজ বর্ধন হওয়া উচিত।
আদর্শভাবে, এআই টাইপ বৈধতা নিশ্চিত করতে কমপক্ষে এক বা দুটি সাধারণ পরীক্ষার ক্ষেত্রেও চালাবে। আমি যখন ইউনিট পরীক্ষা তৈরি করছিলাম, তখন কপাইলট বেশ কয়েকটি দরকারী বর্ধিত কোড সমাপ্তির প্রস্তাব করেছিল যা এই উদ্দেশ্যে ব্যবহার করা যেতে পারে, যেমন, ফাংশন কলের আর্গুমেন্ট এবং অ্যারে লুকআপ। আমি অনুমান করি চ্যাটজিপিটি এবং কোডেক্স এমন একটি জিনিস করার জন্য উন্নত করা যেতে পারে।
আমি আশা করি আপনি এই নিবন্ধটি উপভোগ করেছেন. আপনার দিনটি দুর্দান্ত কাটুক, এবং গতকাল আপনি যা শিখেছেন তার প্রতি ঈর্ষান্বিত করুন (এখানে বা অন্য কোথাও)!
এছাড়াও এখানে প্রকাশিত