تَقْرِيرِ فَنِّيٍّ CodeShell

Rui Xie, Zhengran Zeng, Zhuohao Yu, Chang Gao, Shikun Zhang, Wei Ye
National Engineering Research Center for Software Engineering, Peking University, China
{ruixie, wye}@pku.edu.cn
https://github.com/WisdomShell/codeshell

مُلَخَّصُ

تُمَثِّل نَماذِجَ اللُغَةِ الكَبِيرَةِ لِلبَرْمَجَة نُقْطَةً تَحَوَّلَ رَئِيسِيَّةٍ فِي الذَكاء الاِصْطِناعِيِّ. تَمَّ تَصْمِيمُها خَصِيصاً لِفَهْمِ وَتَوْلِيدِ لُغات البَرْمَجَة، مِمّا يُعَزِّز بِشَكْلٍ كَبِيرٍ كَفاءَةِ سَيْرِ عَمَلٍ تَطْوِيرِ البَرْمَجِيّات. فِي هٰذا التَقْرِيرُ الفَنِّيِّ، نُقَدِّم CodeShell-Base، نَمُوذَجَ أَساسِيٌّ بِسَبْعَةِ مِلْياراتِ مَعامِلِ وَطُول سِياقِ 8K، وَالَّذِي يُظْهِر كَفاءَةِ اِسْتِثْنائِيَّةً فِي فَهُم الكود. مِن خِلالَ دَمْجِ اِنْتِباهَ الاِسْتِعْلام المَجْمَعُ وَتَضُمِّينَ المَوْضِعَ الدُوار فِي GPT-2، يُدْمَج CodeShell-Base الفَضائِل الهَيْكَلِيَّةِ لِ Starcoder وَ CodeLlama وَيُشَكِّل تَصْمِيمه الهَنْدَسِيِّ الفَرِيدِ. ثُمَّ قُمْنا بِبِناءِ عَمَلِيَّةِ مُعالَجَةِ بَياناتٍ شامِلَةٍ بِعِنايَةٍ، تَشْمَل إِزالَةِ التَكْرارِ لِلبَيانات المُتَشابِهَةَ، وَتَصْفِيَةِ البَياناتِ بِناءَ عَلَى الحَيْرَة، وَتَصْفِيَةِ البَياناتِ بِناءَ عَلَى النَمُوذَجِ. مِن خِلالَ هٰذِهِ العَمَلِيَّةِ، قُمْنا بِتَجْمِيع 100 مِلْيارِ بَيانه تَدْرِيبِ مُسْبَقٍ عالِيَةٍ الجُودَةِ مِن GitHub. وَبِفَضْلِ البَياناتِ عالِيَةٍ الجُودَةِ، يَتَفَوَّق CodeShell-Base عَلَى CodeLlama فِي Humaneval بُعْدَ التَدْرِيبِ عَلَى 500 مِلْيارِ رَمْزُ فَقَط (5 حِقْباتٍ). لَقَد أَجْرَيْنا تَجارِبِ واسِعَةً النِطاقِ عَبْرَ مَجْمُوعاتٍ بَياناتٍ لُغات مُتَعَدِّدَةِ، بِما فِي ذٰلِكَ Python، Java، وَ C++، وَتُشِير النَتائِجِ إِلَى أَنَّ نَمُوذَجنا يَمْتَلِك قُدْراتٍ أَساسِيَّةٍ قَوِيَّةٍ فِي فَهُم وَتَوْلِيدِ الكود.

مُقَدِّمَةِ

نَماذِجَ اللُغَةِ الكَبِيرَةِ لِلبَرْمَجَة مِثْلَ CodeGen (codegen)، CodeLlama (codellama)، وَ StarCoder (starcoder) قَد ثَوَّرَت فِي تَطْوِيرِ البَرْمَجِيّات مِن خِلالَ أَتَمَّتْهُ المَهامّ، تَقْلِيلِ الأَخْطاءِ، وَتَحْسِينِ الكَفاءَة (gpt4report). مِن خِلالَ الاِسْتِفادَةِ مِن التَعَلُّمِ العَمِيقِ وَمَجْمُوعاتٍ البَياناتِ الضَخْمَةُ للكود (codegen,thestack)، تُعَزِّز هٰذِهِ النَماذِجِ إِنْتاجِيَّةٍ المُطَوِّرَيْنِ وَتَجْعَل تَطْوِيرِ البَرْمَجِيّات أَكْثَرَ سُهُولَةَ لَجُمْهُور أَوْسَعِ.

يُمْكِن تَقْسِيمِ نَماذِجَ اللُغَةِ الكَبِيرَةِ لِلبَرْمَجَة الحالِيَّةِ إِلَى ثَلاثِ فِئاتِ رَئِيسِيَّةٍ: التَدْرِيبِ المُسْبَقِ مِن الصِفْرِ (starcoder)، التَدْرِيبِ المُسْبَقِ مِن نَمُوذَجَ لُغَةً كَبِيرٍ مَوْجُودٌ (codex,codellama)، وَالتَعْدِيل التَوْجِيهِيِّ (wizardcoder). النَماذِجِ الَّتِي تَتِمّ تَدْرِيبها مُسْبَقاً مِن الصِفْرِ تَتَطَلَّب حَجْماً كَبِيراً مِن البَياناتِ وَوَقْتاً كَبِيراً (starcoder,llama2). مِن ناحِيَةٍ أُخْرَى، يَسْتَفِيد التَدْرِيبِ المُسْبَقِ مِن نَمُوذَجَ لُغَةً كَبِيرٍ مَوْجُودٌ كَأَساسٍ لَهُ، مِمّا يَجْلُب فَوائِدَ تَقْلِيلِ أَوْقاتِ التَدْرِيبِ وَتَحْسِينِ الكَفاءَة مَعَ بَياناتٍ أَقَلَّ (codex,codellama). التَعْدِيلِ التَوْجِيهِيِّ، مِن ناحِيَةٍ أُخْرَى، يَتَضَمَّن تَعْدِيلِ نَمُوذَجَ كَبِيرٍ مَوْجُودٌ بِاِسْتِخْدامِ بَياناتٍ تَوْجِيهَيْهِ، بِهَدَفِ تَحْسِينِ أَداءِ النَمُوذَجِ بِشَكْلٍ كَبِيرٍ (codellama,wizardcoder). وَمَعَ ذٰلِكَ، تَظَلّ التَحَدِّي الكَبِيرِ فِي هٰذا المَجالِ هُوَ أَنَّ النَماذِجِ الكَبِيرَةِ المَوْجُودَةِ تَمَّ تَدْرِيبها عَلَى مَجْمُوعاتٍ بَياناتٍ ضَخْمَةٍ مِن الكود دُونِ حوكمه بَياناتٍ دَقِيقَةً، مِمّا قَد يُؤَدِّي إِلَى إِنْتاجِ كَوُدّ ذُو جُودَة مُنْخَفَضه. عَلَى الرَغْمِ مِن وُجُودِ بِعَضِّ إِسْتراتِيجِيّاتِ اِخْتِيارِ الكود (phi1) مِن مَنْظُورٍ نَمُوذَجَ التَدْرِيبِ، لا يَزال خَطَرِ إِنْتاجِ كَوُدّ ذُو جُودَة مُنْخَفَضه يُمَثِّل مَصْدَرٌ قَلَقٍ.

فِي هٰذا التَقْرِيرُ الفَنِّيِّ، نُقَدِّم نَمُوذَجَ كَوُدّ كَبِيرٍ يُسَمَّى CodeShell. دَمْجِ CodeShell التَضْمِين المَوْضِعِيّ الدُوار (rope) وَاِنْتِباه الاِسْتِعْلام المَجْمَعُ (gqa) فِي GPT-2 (gpt2)، بِناءَ بِنْيَةَ فَعّالَةٍ وَمُواتِيه لِتَوْسِيعِ السِياقِ. ثُمَّ طَوَّرَنا أُنْبُوبٍ عَمَلٍ لِاِخْتِيارِ الكود عالِي الجُودَةِ، مِمّا أَدَّى إِلَى الحُصُولِ عَلَى 100 مِلْيارِ رَمْزُ مِن الكود عالِي الجُودَةِ. اِسْتِناداً إِلَى هٰذا الأَساسِ مِن 100 مِلْيارِ رَمْزُ، تَمَّ تَدْرِيبِ CodeShell عَلَى مَدَى خَمْسِ فَتَراتِ. تُظْهِر تَجارِبنا أَنَّ التَدْرِيبِ فَقَط عَلَى 100 مِلْيارِ رَمْزُ فَرِيد مِن الكود يُمْكِن CodeShell مِن تَحْقِيقِ أَداءِ يُعادِل، إِن لَم يَكُن أَفْضَلَ مِن، النَماذِجِ الكَبِيرَةِ المَوْجُودَةِ. لِلمُقارَنَة، تَمَّ تَدْرِيبِ كُلِّ مِن StarCoder (starcoder) وَ CodeLlama (codellama) عَلَى 250 مِلْيارِ رَمْزُ فَرِيد. كَما هُوَ مَعْرُوفٌ، الكود عالِي الجُودَةِ مَحْدُودٍ ضِمْنَ المُسْتَوْدَعاتِ المَفْتُوحَةِ المَصْدَرُ الحالِيَّةِ، مِمّا يَجْعَل اِخْتِيارِ الكود عالِي الجُودَةِ أَمْراً بالِغٍ الأَهَمِّيَّةِ لِتَطْوِيرِ نَمُوذَجَ كَوُدّ عالِي الجُودَةِ. إِلَيكُم مُساهَماتنا الرَئِيسِيَّةِ:

قِشْرَةً الكود

البَياناتِ

لِمَزِيدٍ مِن التَفْصِيل حَوْلَ المَعْلُوماتِ المُقَدَّمَةِ فِي سِياقِ بِناءَ مَجْمُوعَةِ بَياناتٍ تَدْرِيبِ CodeShell وَعَمَلِيَّةُ التَصْفِيَةِ وَالتَحْسِينِ اللاحِقَةِ، دَعُونا نَغُوص فِي كُلِّ خَطْوَةٍ بِمَعْلُومات أَكْثَرَ تَحْدِيداً:

جَمْعِ البَياناتِ: كانَ مَصْدَرنا الأَساسِيُّ، GitHub (gharchive)، قَد تَمَّ فَحِصَّة بِعِنايَةٍ لِجَمْعِ مَجْمُوعَةِ شامِلَةٍ مِن المُسْتَوْدَعاتِ. وَقَد شَمْلِ ذٰلِكَ الزَحْف المُباشِرِ لِ 15TB مِن مُسْتَوْدَعاتٍ GitHub لِضَمانِ الحُصُولِ عَلَى مَجْمُوعَةِ بَياناتٍ واسِعَةً وَمُتَنَوِّعَةٍ. وَقَد أَثَرَيَّ تَضْمِينِ مَجْمُوعاتٍ بَياناتٍ Stack (thestack) وَ StarCoder تَنَوُّعِ المَوادِّ التَدْرِيبِيَّةِ بِمَجْمُوعَةِ غَنِيَّةٌ مِن أُمَثِّله الأَكْواد وَالمُناقَشاتُ البَرْمَجِيَّة.

تَصْفِيَةٍ اللُغاتِ: كانَ قَرارِ اِسْتِبْعادِ اللُغاتِ الَّتِي تُقِلّ حَجْمِ مَجْمُوعَةِ بَياناتُها عَن 100 مِيغابايت إِسْتراتِيجِيّاً، مَعَ التَرْكِيزِ عَلَى اللُغاتِ الَّتِي لَها اِسْتِخْدامِ كافٍ وَأُمَثِّله لِلمُساهَمَةِ فِي أَنْماطُ التَعَلُّمِ المُهِمَّةِ. وَقَد هَدَفَت إِدْراجِ 7 مَجْمُوعاتٍ بَياناتٍ مُتَعَلِّقَةٍ بِالأَكْواد، مِثْلَ markdown لِلتَوْثِيق، وgit-commits لَمُمارَسات التَطْوِيرِ، وGitHub-issues لَمُناقَشات حَلٍّ المُشْكِلاتِ، إِلَى تَوْسِيعِ فَهُم النَمُوذَجِ لَنَظَّمَ البَرْمَجَة.

قَواعِدَ التَصْفِيَةِ الأَوَّلِيَّةِ: صَمَمْتَ قاعِدَةِ اِسْتِبْعادِ الأَكْواد ذاتِ الأَطْوال الزائِدَةَ لِلأَسْطُر وَالمُحْتَوَى المُنْخَفَض مِن الأَحْرُف الأَبْجَدِيَّة لِلقَضاءِ عَلَى البَياناتِ غَيْرِ النَمَطِيَّة، وَالَّتِي قَد لا تَكُون مُمَثَّلَةً، مَعَ التَرْكِيزِ عَلَى تَدْرِيبِ النَمُوذَجِ عَلَى أُمَثِّله أَكْواد أَكْثَرَ قِياسِيَّةٍ وَقابِلَيْهِ لِلقِراءَةِ.

إِزالَةِ التَكْرارِ: سَمَحَ اِسْتِخْدامِ تَجْزِئَةِ MD5 بِتَحْدِيدِ وَإِزالَةُ النُصُوصِ المُكَرَّرَةِ بِدِقَّةٍ، بَيْنَما تَمَّ اِسْتِخْدامِ تَقْنِيّاتِ MinHash (minihash) لِلكَشْفِ عَن المُحْتَوَيات المُتَشابِهَةَ لِلغايَةِ وَلٰكِن غَيْرِ المُتَطابِقَة وَتَصْفِيَتِها. كانَت هٰذِهِ الخَطْوَةِ حاسِمَةً لِتَعْزِيزِ تَنَوُّعِ وَجُودَةِ مَجْمُوعَةِ البَياناتِ.

التَصْفِيَةِ بِناءَ عَلَى الحَيْرَة: تَمَّ اِسْتِخْدامِ دَرَجاتٍ الحَيْرَة (pplf) كَمِقْياس لِلقُدْرَةِ عَلَى التَنَبُّؤ وَجُودَةِ نُصُوصُ الأَكْواد. مِن خِلالَ تَصْفِيَةٍ الأَكْواد ذاتِ دَرَجاتٍ الحَيْرَة العالِيَةِ، هَدَفَنا إِلَى اِسْتِبْعادِ أُمَثِّله الأَكْواد ذاتِ الجُودَةِ المُنْخَفِضَة أَو المُرْبِكَةِ، مِمّا يُعَزِّز جُودَة مَجْمُوعَةِ البَياناتِ أَكْثَرَ.

التَصْفِيَةِ بِناءَ عَلَى القَواعِدِ: مَكَّنَ نِظامِ التَحْلِيلِ وَالتَصْفِيَة القائِمِ عَلَى القَواعِدِ مِن التَعَرُّفُ الفَعّالَ وَاِخْتِيارَ أُمَثِّله الأَكْواد عالِيَةٍ الجُودَةِ مِن خِلالَ عَمَلِيَّةِ فَحْص مُخَصَّصَةٍ. عَلَى وَجْهِ التَحْدِيدِ، نَبْدَأ بِتَعْرِيف وَحِساب سِلْسِلَةٍ مِن المَقايِيسِ لَمِلَفّات الأَكْواد، بِما فِي ذٰلِكَ عَدَدٍ الأَسْطُر، وَوُجُودِ وَمَدَى التَعْلِيقاتِ، وَمُتَوَسِّطِ عَدَدٍ الأَحْرُف لِكُلِّ سَطَّرَ. ثُمَّ نُحَدِّد عَتَبَةِ لِعَزْلِ أُمَثِّله الأَكْواد النَمُوذَجِيَّةِ الَّتِي تُلَبِّي مَعايِيرنا. عِلاوَةً عَلَى ذٰلِكَ، يُقَدِّم النِظامِ تَحِيزا تَفْضِيلِيّا نَحْوَ الأَكْواد الَّتِي تُسْتَخْدَم مَكْتَباتِ الطَرَفِ الثالِثِ المَعْرُوفَةِ، وَهُوَ مُؤَشِّرُ عَلَى مُمارَساتٍ التَطْوِيرِ القَوِيَّةِ. بِالإِضافَةِ إِلَى ذٰلِكَ، نُؤَكِّد عَلَى اِخْتِيارِ الأَكْواد الَّتِي تُظْهِر مُسْتَوَى مُناسِبٍ مِن التَعْقِيدِ المَنْطِقِيِّ. يَتِمّ تَحْدِيدِ ذٰلِكَ مِن خِلالَ التَحْلِيلِ المتعمق لَشَجَره البِناءِ المُجَرَّدَةِ وَتَدَفُّقِ التَحَكُّمِ داخِلَ الأَكْواد، بِهَدَفِ ضَمانِ أَنَّ الأَمْثِلَة الَّتِي نَخْتارها لَيِسَت فَقَط وَظِيفِيّه وَلٰكِن أَيْضاً مُتَطَوِّرَةٍ. جانِبِ حاسِمٍ آخَرِ هُوَ اِلْتِزامِ الأَكْواد بِمَعايِيرِ البَرْمَجَة المُعْتَمَدَةِ. يُعْتَبَر الاِلْتِزامِ بِهٰذِهِ المعاييرReflection of best practices within the industry.

نَظْرَةٌ عامَّةٍ عَلَى البَياناتِ
css 30.09 5292.28 2.38% 0.13 23.58 0.28%
assembly 4.21 553.85 0.33% 0.13 17.02 0.27%
powershell 2.84 586.14 0.22% 0.10 19.76 0.20%
json 15.91 8939.52 1.26% 0.07 39.84 0.15%
r 0.59 77.32 0.05% 0.06 8.38 0.13%
sql 12.69 784.41 1.01% 0.06 3.50 0.12%
dart 9.85 2210.66 0.78% 0.04 9.85 0.09%
jupyter-scripts-dedup-filtered 7.03 910.54 0.56% 0.03 4.06 0.06%
jupyter-structured-clean-dedup 5.72 652.90 0.45% 0.03 2.91 0.05%
tex 5.70 493.84 0.45% 0.03 2.20 0.05%
restructuredtext 5.43 1036.81 0.43% 0.02 4.62 0.05%
haskell 5.41 1120.82 0.43% 0.02 4.99 0.05%
ada 0.53 56.26 0.04% 0.02 2.35 0.05%
yaml 3.25 2295.73 0.26% 0.01 10.23 0.03%
common-lisp 3.25 202.43 0.26% 0.01 0.90 0.03%
pascal 3.18 202.85 0.25% 0.01 0.90 0.03%
makefile 2.86 914.46 0.23% 0.01 4.08 0.03%
java-server-pages 2.79 519.49 0.22% 0.01 2.32 0.03%
ocaml 2.27 289.99 0.18% 0.01 1.29 0.02%
fortran 2.26 184.09 0.18% 0.01 0.82 0.02%
visual-basic 2.24 231.06 0.18% 0.01 1.03 0.02%
mathematica 2.10 46.81 0.17% 0.01 0.21 0.02%
erlang 1.99 253.50 0.16% 0.01 1.13 0.02%
vhdl 1.82 124.92 0.14% 0.01 0.56 0.02%
elixir 1.70 511.67 0.13% 0.01 2.28 0.02%
groovy 1.69 401.75 0.13% 0.01 1.79 0.02%
smalltalk 1.48 482.43 0.12% 0.01 2.15 0.01%

[tab:data_overview_1]

النَمُوذَجِ

مُحَلِّل الرُمُوزَ

لِتَعْزِيزِ القُدْرَةِ عَلَى التَكَيُّفِ مَعَ سِياقِ البَرْمَجَة الصِينِيَّةِ، قُمْنا بِإِثْراء مُفْرَداتٍ StarCoder بِإِضافَة كَبِيرَةٍ مِن المُفْرَداتِ الصِينِيَّةِ. عَلَى وَجْهِ التَحْدِيدِ، جَمَعَنا مِلْيُونِ مِلَفِّ بَرْمَجَةِ صِينِيٌّ وَبَياناتِ الأَسْئِلَةِ وَالأَجْوِبَة البَرْمَجِيَّة بِاللُغَةِ الصِينِيَّةِ. بِاِسْتِخْدامِ مَكْتَبَةِ Tokenizer مِن Hugging Face، حَدَّدْنا (40,000) مُفْرَده صِينِيَّةٌ عالِيَةٍ التَكْرارِ. تَمَّ دَمْجِ هٰذِهِ مَعَ (30,000) مُفْرَده إِنْجلِيزِيّه عالِيَةٍ التَكْرارِ مِن مُفْرَداتٍ StarCoder، مِمّا أَسْفَرَ عَن مُفْرَداتٍ CodeShell الشامِلَةِ. تُشِير النَتائِجِ التَجْرِيبِيَّة إِلَى أَنَّ مُفْرَداتٍ CodeShell تُظْهِر مِيزَةً كَبِيرَةٍ فِي كَفاءَةِ تَحْلِيلِ الأَسْئِلَةِ وَالأَجْوِبَة البَرْمَجِيَّة الصِينِيَّةِ مُقارَنَةً بِمُفْرَدات StarCoder.

الهَنْدَسَةِ المِعْمارِيَّةِ

يَسْتَفِيد CodeShell مِن GPT-2 (gpt2) كَهَنْدَسَة أَساسِيَّةٍ لَهُ، مُسْتَخْدَماً تَقْنِيّاتِ مُتَقَدِّمَةٍ مِثْلَ اِنْتِباهَ الاِسْتِعْلام المَجْمَعُ (gqa) وترميز المَواقِعِ الدُوار (rope). يَعْمَل آلِيَّةِ اِنْتِباهَ الاِسْتِعْلام المَجْمَعُ عَلَى تَحْسِينِ عَمَلِيّاتِ الاِنْتِباهِ مِن خِلالَ تَجْمِيعِ الاِسْتِعْلامات المُتَشابِهَةَ، مِمّا يُحَسِّن الكَفاءَة الحِسابِيَّة وَيَقْلِل مِن التَكْرارِ. فِي الوَقْتِ نَفْسِهِ، يُقَدِّم ترميز المَواقِعِ الدُوار طَرِيقَةِ أَكْثَرَ دِينامِيكِيَّةٌ لِتَمْثِيلِ مَواقِعِ العَناصِرِ فِي التَسَلْسُلات، مِمّا يُوَفِّر لِلنَمُوذَج فَهُما أَفْضَلَ لِلتَرْتِيب وَالهَيْكَل داخِلَ شَفَرات البَرْمَجَة.

التَدْرِيبِ

التَحْسِين

فِي إِعْدادِ التَدْرِيبِ الخاصِّ بِنا، اِخْتَرْنا AdamW كَمُحْسِن لَنا، مَعَ تَهْيِئَته بِمُعامَلات \(\beta 1\) وَ \(\beta 2\) المُعَدَّةِ عَلَى 0.9 وَ 0.95 عَلَى التَوالِي. يَتَضَمَّن عَمَلِيَّةِ التَدْرِيبِ لَدَينا جَدْوَلِ زَمَنِيٍّ لَتَبْرِيد التَعَلُّمِ يَبْدَأ ب 1000 خَطْوَةٍ تَسْخَِينَ، بُعْدَها يَنْخَفِض مُعَدَّلِ التَعَلُّمِ مِن 3e-4 إِلَى 3e-5 فِي 127k تَكْرارِ. بِالنِسْبَةِ لَدُفْعات التَدْرِيبِ الخاصَّةِ بِنا، نُعالَج 4 مِلْيُونِ رَمْزُ فِي دَفْعَةً واحِدَةٍ، مُقَسَّمَيْنِ إِيّاها إِلَى تَسَلْسُلات مِن 2048 أَو 8192 رَمْزاً لِكُلِّ مِنها.

مَرْحَلَةِ التَدْرِيبِ المُسْبَقِ

لِتَحْقِيقِ التَوازُنِ بَيِّنَ الكَفاءَة وَالحاجَةُ إِلَى سِياقِ أَطْوَلِ، اِخْتَرْنا فِي البِدايَةِ طُولِ سِياقِ يَبْلُغ 2048 لِلمَراحِل الأُولَى مِن التَدْرِيبِ المُسْبَقِ، وَبُعْدَ التَدْرِيبِ عَلَى ما يَقْرُب مِن 450 مِلْيارِ رَمْزُ، قُمْنا بِزِيادَةٍ طُولِ السِياقِ إِلَى 8192. عُقْبَ هٰذا التَعْدِيلِ، اِنْخَفَضَ مُعَدَّلِ مُعالَجَةِ الوَحْدَةِ الرسوميه مِن 3200 رَمْزُ لِكُلِّ وَحْدَةِ رسوميه فِي الثانِيَةِ إِلَى 2600 رَمْزُ لِكُلِّ وَحْدَةِ رسوميه فِي الثانِيَةِ. فِي الوَقْتِ نَفْسِهِ، أَجْرَيْنا تَجارِبِ لَمُقارَنَة أَداءِ النَمُوذَجِ قِبَلَ وَبُعْدَ تَغْيِيرٍ طُولِ السِياقِ. أَظْهَرَت النَتائِجِ أَنَّ أَداءِ النَمُوذَجِ ظِلِّ ثابِتاً إِلَى حَدٍّ كَبِيرٍ، إِن لَم يَتَحَسَّن. لُوحِظَ اِنْخِفاضِ مَلْحُوظٍ فِي الخَسارَةِ عِنْدَما تَمَّ تَوْسِيعِ طُولِ السِياقِ مِن 2048 إِلَى 8192. قَد يَنْبَع هٰذا الاِنْخِفاضِ مِن كَوْنَ السِياقِ الأَطْوَل يُوَفِّر مَعْلُوماتٍ أَكْثَرَ، مِمّا يَبْسُط عَمَلِيَّةِ التَنَبُّؤ. وَمَعَ ذٰلِكَ، مِن الضَرُورِيِّ التَأْكِيدُ عَلَى أَنَّهُ عَلَى الرَغْمِ مِن اِنْخِفاضِ الخَسارَةِ، لَم تُظْهِر مَقايِيسِ تَقْيِيمِ النَمُوذَجِ أَيّ تَحَسُّنِ.

النَتائِجِ

تَسْتَكْشِف هٰذِهِ الفَقْرَةِ أَداءِ CodeShell. يَتِمّ تَقْيِيمِ CodeShell مُقابِلَ أَحْدَثِ النَماذِجِ اللُغَوِيَّةُ الكَبِيرَةِ المُتَقَدِّمَةِ:

تَوْلِيدِ الشيفره

تَوْلِيدِ كَوُدّ بايثون

فِي هٰذا القِسْمِ، نَقُوم بِتَقْيِيم أَداءِ CodeShell عَلَى بايثون، مُقارَنَةً بِالنَماذِج المَفْتُوحَةِ وَالمُغْلَقَة الوُصُولِ. نَبْدَأ بِالإِبْلاغ عَن النَتائِجِ لَتَوْلِيد كَوُدّ بايثون بِاِسْتِخْدامِ مَعايِيرِ HumanEval (codex) وَ MBPP (mbpp). تُلَخِّص النَتائِجِ فِي الجَداوِل [table:humaneval_mbpp]. يَتَأَلَّف مَجْمُوعَةِ بَياناتٍ HumanEval مِن 164 مُهِمَّةً بايثون مُصَمِّمَةً يَدَوِيّاً، تَمَّ التَحَقُّقِ مِنها مِن خِلالَ حالاتِ اِخْتِبارِ لَتَقْيِيم أَداءِ نَمُوذَجَ تَعْلَم الآلَةِ للكود فِي تَوْلِيدِ الحُلُولِ دُونِ أُمَثِّله سابِقَةٍ (إِعْدادِ الصِفْرِ). بِالمُقابِلِ، يَشْمَل مِعْيار MBPP 500 تَحَدِّي بايثون مُصَمِّمٌ لِاِخْتِبارِ قُدْرَةِ النَمُوذَجِ فِي سِياقِ يَتِمّ فِيهِ تَوْفِيرِ عَدَدٍ صَغِيرٍ مِن الأَمْثِلَة مُسْبَقاً (إِعْدادِ القَلِيلُ مِن الأَمْثِلَة).

تَكْشِف النَتائِجِ التَجْرِيبِيَّة أَنَّ CodeShell-7B قَد وَضْعِ مِعْياراً جَدِيداً فِي الأَداءِ بَيِّنَ مَجْمُوعَتَهُ، مُسَجَّلاً دِقَّةٍ مُتَوَسِّطَةِ مُثِيرَةٍ لِلإِعْجاب بِنِسْبَةِ 34.3% عَلَى مَجْمُوعَةِ بَياناتٍ HumanEval وَ 38.7% عَلَى مِعْيار MBPP. هٰذا الأَداءِ لا يُؤَسِّس فَقَط CodeShell-7B كَالرائِد فِي فِئَته، بَل يُؤَكِّد أَيْضاً تَفَوُّقُهُ عَلَى Code-LLaMA-7B وَ StarCoder-Base 7B، نَمُوذَجَ مَفْتُوحٍ المَصْدَرُ مُماثِلٍ الحَجْمِ. عَلَى وَجْهِ التَحْدِيدِ، يُظْهِر CodeShell-7B مِيزَةً تَنافُسِيَّةٌ قَوِيَّةٍ، حَتَّى عِنْدَ مُقارَنَته بِنَماذِج الترميز الأَكْبَرُ وَالأَكْثَرُ تَعْقِيداً الَّتِي تَتَمَيَّز بِزِيادَةٍ كَبِيرَةٍ فِي عَدَدٍ المُعَلِّماتُ.

يُرْجَى مُلاحَظَةُ أَنَّهُ، مِن خِلالَ تَطْبِيقِ مَعايِيرِ صارِمَةٍ لِاِخْتِيارِ البَياناتِ عالِيَةٍ الجُودَةِ وَإِجْراءِ التَدْرِيبِ المُتَكَرِّرَ عَلَى مَدَى عِدَّةٍ عُصُورِ، حَقَّقَ CodeShell أَداءِ اِسْتِثْنائِيّاً فِي المَهامّ الأَساسِيَّةِ مِثْلَ HumanEval. وَمَعَ ذٰلِكَ، قَد تَكُون إِسْتراتِيجِيَّةِ اِخْتِيارِ البَياناتِ الحالِيَّةِ وَإِسْتراتِيجِيّه التَدْرِيبِ غَيْرِ كافِيَةٍ لِلتَحَدِّيات الأَكْثَرَ تَعْقِيداً مِثْلَ CoderUJB بِسَبَبِ تَعْقِيدِها الهَيْكَلِيّ وَالمَنْطِقِيّ المُتَزايِدِ. عَلَى الرَغْمِ مِن ذٰلِكَ، مِن خِلالَ تَحْسِينِ عَمَلِيَّةِ اِخْتِيارِ البَياناتِ لَدَينا لِتَتَماشَى بِشَكْلٍ أَفْضَلَ مَعَ مُتَطَلَّباتِ مِثْلَ هٰذِهِ المَهامّ المُعَقَّدَةِ، يُمْكِننا تَحْسِينِ أَداءِ CodeShell عَلَى المَهامّ الصَعْبَةِ مِثْلَ CoderUJB.

تَوْلِيدِ الكود مُتَعَدِّدِ اللُغاتِ

بُعْدَ ذٰلِكَ، نُجْرِي تَقْيِيمات لَنَماذِجنا عَبْرَ طَيْفِ أَوْسَعِ مِن لُغات البَرْمَجَة، بِاِسْتِخْدامِ مِعْيار (multiple) الَّذِي طَوَّرَهُ كاسانو وَآخَرُونَ فِي عامَ 2022 لِهٰذا الغَرَضِ. تَفاصِيلَ النَتائِجِ لِمَجْمُوعَةِ مُتَنَوِّعَةٍ مِن اللُغاتِ، بِما فِي ذٰلِكَ جافّا سكريبت، جافّا، سويفت، بِي اتش بِي، وَغَيْرِها مُوَضِّحَةً فِي الجَدْوَلُ [tb:results_multiple].

لَقَد لاحَظْنا أَنَّ كودشيل حَقَّقَ نَتائِجِ أَفْضَلَ فِي عِدَّةٍ لُغات رَئِيسِيَّةٍ، بِما فِي ذٰلِكَ جافّا سكريبت، جافّا، وَسِي بِي بِي، مُقارَنَةً بكودلاما-7ب، ستاركودر-7ب وستاركودر-15ب. وَمَعَ ذٰلِكَ، كانَ أَداؤه أَدَّنِي فِي لُغات أَصْغَرِ مِثْلَ دِي، جُولِيا، وَلَّوْا. نَحْنُ نَعْتَقِد أَنَّ هٰذا يَرْجِع إِلَى سُهُولَةَ الوُصُولِ إِلَى مَجْمُوعاتٍ بَياناتٍ عالِيَةٍ الجُودَةِ لَلُغات الرَئِيسِيَّةِ، مِمّا يَسْمَح لِلنَمُوذَج بِتَحْقِيقِ نَتائِجِ أَفْضَلَ مَعَ تَدْرِيبِ بَياناتٍ كافٍ. بِالإِضافَةِ إِلَى ذٰلِكَ، مِن الجَدِيرِ بِالذَكَر أَنَّ نَمُوذَجنا أَظْهَرَ أَداءِ تَنافُسِيّا مَعَ ستاركودر-15ب، مِمّا يُشِير إِلَى أَنَّ التَدْرِيبِ المُسْبَقِ لَنَماذِج الكود الكَبِيرَةِ عَلَى نَماذِجَ أَصْغَرِ يَحْمِل إِمْكاناتِ.

اِكْتِمالُ الكود

خِلالَ مَرْحَلَةِ التَدْرِيبِ المُسْبَقِ، تَمَّ تَدْرِيبِ نَماذِجَ CodeShell-7B بِمُعَدَّلِ 0.5 لَتَقْنِيّه Fill-In-the-Middle (fim)، وَهِيَ تَقْنِيَّةٍ تُعَزِّز قُدْرَتِها عَلَى تَوْلِيدِ الكود مِن خِلالَ مِلْءِ الفَجَوات بِناءَ عَلَى السِياقِ المُحِيطِ بِجُزْء الكود. تُظْهِر هٰذِهِ الطَرِيقَةِ فائِدَتُها بِشَكْلٍ خاصٍّ لِتَطْبِيقاتِ اِكْتِمالُ الكود. تَرِي قُدْراتٍ مُماثِلَةٍ فِي النَماذِجِ المَفْتُوحَةِ المَصْدَرُ مِثْلَ StarCoder-15B وَ CodeLlama-7B. تَبَعاً لِ (santacoder)، نَقُوم بِإِخْفاء سَطَّرَ نَصَّيَّ واحِدٍ مِن جِسْمَ الوَظِيفَةِ، وَنَطْلُب مِن النَمُوذَجِ مِلْءِ ذٰلِكَ السَطْرِ مِن الكود. نَقُوم بِالتَقْيِيم عَلَى مِعْيار MultiPLE (multiple) عَبْرَ ثَلاثِ لُغات بَرْمَجَةِ، وَنَسْتَخْدِم مُطابَقَة السَطْرِ الواحِدِ بِالضَبْطِ (incoder) كَمِقْياس.

النَتائِجِ، المُفَصَّلَة بِعِنايَةٍ فِي الجَدْوَلُ [tab:results_code_completion]، تُوَضِّح أَنَّ CodeShell-7B تَتَفَوَّق عَلَى كُلِّ مِن StarCoder وَ CodeLlama فِي هٰذِهِ المَعايِيرِ، مِمّا يَبْرُز الدَوْرِ الحاسِمِ لَبَيانات التَدْرِيبِ المُسْبَقِ عالِيَةٍ الجُودَةِ. مُشابِها لِ CodeLlama، يَسْتَخْدِم CodeShell طُولِ سِياقِ يَبْلُغ 2048 خِلالَ المَراحِلِ الأَوَّلِيَّةِ مِن التَدْرِيبِ المُسْبَقِ لِتَعْزِيزِ كَفاءَةِ التَدْرِيبِ. فِي المَراحِلِ النِهائِيَّةِ مِن التَدْرِيبِ، وَتَحْدِيداً خِلالَ آخَرِ 50 مِلْيارِ رَمْزُ، يَمْدُد CodeShell طُولِ السِياقِ مِن 2048 إِلَى 8192. تَكْشِف النَتائِجِ التَجْرِيبِيَّة أَنَّ القُدْرَةِ عَلَى التَعامُلِ مَعَ تَسَلْسُلات الكود الأَطْوَل يُمْكِن تَحْقِيقِها بِكَمِّيَّةِ ضَئِيلَةً فَقَط مِن بَياناتٍ التَدْرِيبِ. وَبِالتالِي، خِلالَ عَمَلِيَّةِ التَدْرِيبِ المُسْبَقِ، يُمْكِننا اِسْتِخْدامِ طُولِ سِياقِ أَصْغَرِ فِي البِدايَةِ لِتَعْزِيزِ الكَفاءَة دُونِ التَضْحِيَةِ بِكَفاءَة النَمُوذَجِ النِهائِيَّةِ فِي التَعامُلِ مَعَ تَسَلْسُلات الكود الواسِعَةِ.

الاِنْتِباهِ المُتَعَدِّدِ الاِسْتِعْلامات مُقابِلَ الاِنْتِباهِ المَجْمَعُ لِلاِسْتِعْلامات

لَتَقْيِيم تَأْثِيرِ الاِنْتِباهِ المُتَعَدِّدِ الاِسْتِعْلامات وَالاِنْتِباه المَجْمَعُ لِلاِسْتِعْلامات عَلَى أَداءِ النَمُوذَجِ، أَجْرَيْنا تَجارِبِ ضِمْنَ إِطارَيْ العَمَلِ الاِنْتِباهِ المُتَعَدِّدِ الاِسْتِعْلامات وَالاِنْتِباه المَجْمَعُ لِلاِسْتِعْلامات. عَلَى وَجْهِ التَحْدِيدِ، لِتَسْرِيعِ التَحَقُّقِ مِن صِحَّةِ الهَياكِل المُخْتَلِفَةِ عَلَى أَداءِ النَمُوذَجِ، طَوَّرَنا نُسْخَةً “codeshell-small” ب 24 طَبَقَةٌ، حَجْمِ خَفِيٍّ 2048، وَمَجْمُوع 1 مِلْيارِ مَعامِلِ. فِي هٰذِهِ النُسْخَةَ، نَفَّذَنا الاِنْتِباهِ المُتَعَدِّدِ الاِسْتِعْلامات وَالاِنْتِباه المَجْمَعُ لِلاِسْتِعْلامات كَوَحَدات اِنْتِباهَ لَها، وَأُطْلِقَ عَلَيها عَلَى التَوالِي codeshell-small-mqa وcodeshell-small-gqa. تُشِير النَتائِجِ التَجْرِيبِيَّة إِلَى أَنَّهُ، فِي ظِلِّ ظُرُوفٍ أَقَلَّ مِن رُمُوزِ التَدْرِيبِ، يُظْهِر كُلِّ مِن codeshell-small-mqa وcodeshell-small-gqa أَداءِ مُماثِلا. وَمَعَ ذٰلِكَ، مَعَ زِيادَةِ عَدَدٍ رُمُوزِ التَدْرِيبِ تَدْرِيجِيّاً، يَتَفَوَّق codeshell-small-gqa عَلَى codeshell-small-mqa فِي أَداءِ الاِخْتِبارُ@1.

اِسْتِبْعادات البَياناتِ

لِلتَحَقُّقِ مِن فَعّالِيَّةِ آلِيَّةِ تَصْفِيَةٍ بَياناتٍ الشَفْرَة عالِيَةٍ الجُودَةِ، قُمْنا بِتَكْوِين مَجْمُوعَتَيْنِ مِن البَياناتِ: مَجْمُوعَةِ عَشْوائِيَّةٍ، تَمَّ إِنْشاؤها عَن طَرِيقِ أَخَذَ عَيِّناتٍ عَشْوائِيَّةٍ مِن 2 مِلْيارِ رَمْزُ مِن مَجْمُوعَةِ البَياناتِ الأَصْلِيَّةِ غَيْرِ المُكَرَّرَةِ، وَمَجْمُوعَةِ مِصْفاةِ، تَمَّ تَجْمِيعها بِأَخْذِ عَيِّناتٍ مِن 2 مِلْيارِ رَمْزُ مِن العالِي إِلَى الدُنْيا بِناءَ عَلَى دَرَجاتٍ مِن مُقِيمٍ عالِي الجُودَةِ. عَلَى وَجْهِ التَحْدِيدِ، لِتَسْرِيعِ التَحَقُّقِ مِن فَعّالِيَّةِ الهَياكِل المُخْتَلِفَةِ عَلَى أَداءِ النَمُوذَجِ، طَوَّرَنا نُسْخَةً “صَغِيرَةٌ مِن قِشْرَةً الشَفْرَة” ب 24 طَبَقَةٌ، وَحَجْمُ خَفِيٍّ 2048، وَإِجْمالِيّ 1 مِلْيارِ مَعامِلِ. أَجْرَيْنا تَجارِبِ عَلَى هاتَيْنِ المَجْمُوعَتَيْنِ بِاِسْتِخْدامِ نَمُوذَجَ “صَغِيرٍ مِن قِشْرَةً الشَفْرَة”، وَتُظْهِر النَتائِجِ فِي الشَكْلِ أَدَنّاهُ. تُظْهِر النَتائِجِ أَنَّ النَمُوذَجِ المُدَرِّبِ عَلَى المَجْمُوعَةِ المِصْفاةِ تَفُوق بِاِسْتِمْرارٍ عَلَى النَمُوذَجِ المُدَرِّبِ عَلَى المَجْمُوعَةِ العَشْوائِيَّةِ مِن حَيْثُ الأَداءِ. عِلاوَةً عَلَى ذٰلِكَ، أَظْهَرَ الأَداءِ النِهائِيِّ لِلنَمُوذَج المَصْفَى تَحَسُّناً بِنِسْبَةِ تَقْرِيباً 100% مُقارَنَةً بِالنَمُوذَج العَشْوائِيِّ. تُؤَكِّد هٰذِهِ النَتائِجِ أَيْضاً الدَوْرِ الحاسِمِ لَجُودَة البَياناتِ فِي تَدْرِيبِ النَماذِجِ الكَبِيرَةِ وَتُحَقِّق أَيْضاً مِن فَعّالِيَّةِ نَهْجٍ تَصْفِيَةٍ البَياناتِ لَدَينا.

الخُلاصَةِ

لَقَد قَدَّمْنا نَمُوذَجَ الشَفْرَة الكَبِيرِ الحَجْمِ CodeShell. فِي هٰذِهِ الوَرَقَةَ، اِسْتَكْشَفَنا تَأْثِيرِ مُخْتَلِفِ هَياكِلِ النَمُوذَجِ وَإِسْتراتِيجِيّات تَصْفِيَةٍ البَياناتِ عَلَى أَداءِ النَمُوذَجِ. تُشِير النَتائِجِ التَجْرِيبِيَّة إِلَى أَنَّ البَياناتِ عالِيَةٍ الجُودَةِ تَظَلّ العامِلِ الأَكْثَرَ أَهَمِّيَّةً الَّذِي يُؤَثِّر عَلَى أَداءِ النَماذِجِ الكَبِيرَةِ. مِن خِلالَ اِخْتِيارِ البَياناتِ عالِيَةٍ الجُودَةِ، حَقَّقَ CodeShell أَداءِ مِثالِيّا عَبْرَ مَجْمُوعَةِ مُتَنَوِّعَةٍ مِن لُغات البَرْمَجَة بِمِقْياسِ مُماثِلٍ. عِلاوَةً عَلَى ذٰلِكَ، فِي التَجارِبِ الَّتِي تَمَّت بِاِسْتِخْدامِ بَياناتٍ عالِيَةٍ الجُودَةِ، حَقَّقَت طَرِيقَةِ تَصْفِيَةٍ البَياناتِ الَّتِي اِقْتَرَحْناها تَحْسِينا فِي الأَداءِ بِنِسْبَةِ 100% مُقارَنَةً بِالاِخْتِيار العَشْوائِيِّ لِلبَيانات.