```html Mualliflar: Mayank Mishra⋆, IBM Matt Stallone⋆, IBM Gaoyuan Zhang⋆, IBM Yikang Shen, IBM Aditya Prasad, IBM Adriana Meza Soria, IBM Michele Merler, IBM Parameswaran Selvam, IBM Saptha Surendran, IBM Shivdeep Singh, IBM Manish Sethi, IBM Xuan-Hong Dang, IBM Pengyuan Li, IBM Kun-Lung Wu, IBM Syed Zawad, IBM Andrew Coleman, IBM Matthew White, IBM Mark Lewis, IBM Raju Pavuluri, IBM Yan Koyfman, IBM Boris Lublinsky, IBM Maximilien de Bayser, IBM Ibrahim Abdelaziz, IBM Kinjal Basu, IBM Mayank Agarwal, IBM Yi Zhou, IBM Chris Johnson, IBM Aanchal Goyal, IBM Hima Patel, IBM Yousaf Shah, IBM Petros Zerfos, IBM Heiko Ludwig, IBM Asim Munawar, IBM Maxwell Crouse, IBM Pavan Kapanipathi, IBM Shweta Salaria, IBM Bob Calio, IBM Sophia Wen, IBM Seetharami Seelam, IBM Brian Belgodere, IBM Carlos Fonseca, IBM Amith Singhee, IBM Nirmit Desai, IBM David D. Cox, IBM Ruchir Puri†, IBM Rameswar Panda†, IBM Abstrakt Kod bilan oʻrgatilgan katta til modellari (KTM) dasturiy taʼminotni ishlab chiqish jarayonini inqilob qilmoqda. Tobora koʻproq, kod KTMlari inson dasturchilarining mahsuldorligini oshirish uchun dasturiy taʼminotni ishlab chiqish muhitlariga integratsiya qilinmoqda va KTMga asoslangan agentlar murakkab vazifalarni avtonom ravishda bajarish uchun vaʼda bermoqda. Kod KTMlarining toʻliq potentsialini amalga oshirish kodni yaratish, xatolarni tuzatish, kodni tushuntirish va hujjatlashtirish, omborlarni qoʻllab-quvvatlash va boshqalarni oʻz ichiga olgan keng qamrovli qobiliyatlarni talab qiladi. Ushbu ishda biz 116 dasturlash tilida yozilgan kod bilan oʻrgatilgan kodni yaratish vazifalari uchun moʻljallangan Granite turkumidagi dekoder-faol kod modellarini taqdim etamiz. Granite kod modellarining oilasi 3 dan 34 milliardgacha parametrlarga ega modellar oilasini oʻz ichiga oladi, ular murakkab dasturiy taʼminotni modernizatsiya qilish vazifalaridan tortib, qurilma ichidagi xotira cheklangan foydalanish holatlarigacha boʻlgan ilovalar uchun mos keladi. Keng qamrovli vazifalar toʻplamida baholash Granite kod modellarining mavjud ochiq kodli kod KTMlari orasida doimiy ravishda eng yuqori koʻrsatkichlarga erishganligini koʻrsatadi. Granite kod modeli oilasi korporativ dasturiy taʼminotni ishlab chiqish ish jarayonlari uchun optimallashtirilgan va turli xil kodlash vazifalari (masalan, kodni yaratish, tuzatish va tushuntirish) boʻyicha yaxshi natijalar koʻrsatadi, bu esa uni koʻp qirrali "hamma uchun" kod modeli sifatida namoyon etadi. Biz barcha Granite kod modellarimizni tadqiqot va tijoriy maqsadlarda foydalanish uchun Apache 2.0 litsenziyasi boʻyicha chiqarmoqdamiz. https://github.com/ibm-granite/granite-code-models 1 Kirish Soʻnggi bir necha oʻn yilliklarda dasturiy taʼminot jamiyatimizning har bir jabhasida toʻqilgan. Dasturiy taʼminotni ishlab chiqishga boʻlgan talab ortib borayotganligi sababli, dasturiy taʼminot ishlab chiqish mahsuldorligini oshirish har qachongidan ham muhimroqdir va KTMlar inson dasturchilarini kengaytirish uchun istiqbolli yoʻlni taqdim etadi. Dasturiy taʼminotni ishlab chiqish mahsuldorligida KTMlardan korporativ foydalanishning muhim holatlari kod yaratish, kodni tushuntirish, kodni tuzatish, birlik sinovlari va hujjatlar yaratish, dasturiy taʼminotni modernizatsiya qilish, zaiflikni aniqlash, kodni tarjima qilish va boshqalarni oʻz ichiga oladi. Soʻnggi yillarda KTMlarning kodni yaratish va manipulyatsiya qilish qobiliyati jadal rivojlandi va bugungi kunda taʼsirchan kodlash qobiliyatiga ega modellar mavjud. Modellar bitta raqamli milliardlab parametrlardan (masalan, Llama-7B (Touvron va boshq., 2023), Gemma-7B (Gemma-Team va boshq., 2024), va hokazo) yuzlab milliardlargacha (DBRX (Databricks), Arctic (Snowflake), Grok, Mixtral 8x22B (MistralAI), Command R+ (Cohere)) oʻlchamlarda farqlanadi va moʻljallangan foydalanishning umumiy jihatlarida farqlanadi, baʼzi modellar koddan tashqari turli maqsadlarda foydalanishni maqsad qiladi, boshqalari esa asosan kod bilan bogʻliq vazifalarga qaratilgan (masalan, StarCoder (Li va boshq., 2023a; Lozhkov va boshq., 2024), CodeGen (Nijkamp va boshq., 2023), CodeLlama (Rozie`re va boshq., 2023), va CodeGemma (CodeGemma Team va boshq., 2024)). Biroq, kod KTMlari sohasida, ayniqsa, korporativ dasturiy taʼminotni ishlab chiqish kontekstida muhim boʻshliqlar mavjud. Birinchidan, juda katta, umumiy KTMlar ajoyib kodlash koʻrsatkichlariga erishsa ham, ularning kattaligi ularni joylashtirishni qimmatga tushiradi. Kichikroq kodga yoʻnaltirilgan modellar ( , ; , ; , ; , ; , ) kichikroq va moslashuvchan paketda ajoyib kod yaratish koʻrsatkichlariga erishishi mumkin, ammo yaratishdan tashqari kodlash vazifalarida (masalan, tuzatish va tushuntirish) koʻrsatkichlar kod yaratish koʻrsatkichlaridan past boʻlishi mumkin. Li va boshq. 2023a Lozhkov va boshq. 2024 Nijkamp va boshq. 2023 Rozie`re va boshq. 2023 CodeGemma Team va boshq. 2024 Koʻpgina korporativ kontekstlarda kod KTMlarini qabul qilish modellar koʻrsatkichlaridan tashqari omillar bilan yanada murakkablashishi mumkin. Masalan, hatto ochiq modellar ham baʼzan modellar ishlab chiqishda ishlatilgan maʼlumot manbalari va maʼlumotlarni qayta ishlash usullari haqidagi shaffoflikning yoʻqligi bilan aziyat chekadi, bu esa missiya uchun muhim va tartibga solingan kontekstlarda modellarga ishonchni susaytirishi mumkin. Bundan tashqari, bugungi kunda ochiq KTMlardagi litsenziya shartlari korporatsiyaning modeldan foydalanish qobiliyatini cheklashi va murakkablashtirishi mumkin. Bu yerda biz Granite kod modellarini, turli xil kodlash vazifalari boʻyicha korporativ dasturiy taʼminotni ishlab chiqishni qoʻllab-quvvatlash uchun moʻljallangan juda qodir kod KTMlari turkumini taqdim etamiz. Granite kod modellari toʻrtta turli oʻlchamdagi (3B, 8B, 20B va 34B) ikkita asosiy variantga ega: kod bilan bogʻliq vazifalar uchun asosiy fond modellar; Granite Code Base: Git oʻzgarishlari va inson koʻrsatmalarining kombinatsiyasi hamda ochiq kodli sintetik ravishda yaratilgan kod koʻrsatmalarining maʼlumotlar toʻplamlari bilan moslashtirilgan koʻrsatma boshqaruvchi modellar. Granite Code Instruct: Seriyadagi asosiy modellar ikki bosqichli oʻqitish strategiyasi bilan dastlabdan oʻrgatilgan. 1-bosqichda bizning modelimiz 116 dasturlash tilidan olingan 3 dan 4 trillion tokenlarda oʻrgatilgan, bu dasturlash tillari va sintaksisini keng qamrovli tushunishni taʼminlaydi. 2-bosqichda bizning modelimiz 500 milliard token bilan qoʻshimcha ravishda kod va tabiiy til domenlaridan olingan yuqori sifatli maʼlumotlarning ehtiyotkorlik bilan ishlab chiqilgan aralashmasi bilan oʻrgatilgan boʻlib, modelning mulohaza yuritish qobiliyatini yaxshilaydi. Biz oʻqitishning ikkala bosqichida ham asosiy modellarni oʻqitish uchun nazoratsiz til modellashtirish maqsadidan foydalanamiz. Koʻrsatma modellarining ochiq kodli matematik maʼlumotlar toʻplamlari (MathInstruct ( , ) va MetaMathQA ( , )), shuningdek, koʻrsatma boshqaruvchi va mulohaza yuritish qobiliyatini yaxshilash uchun sintetik ravishda yaratilgan kod maʼlumotlar toʻplamlarining kombinatsiyasi bilan oʻrgatilgan CommitPack ( , ) ning filtrlangan variantini hamda tabiiy til koʻrsatmalari maʼlumotlar toʻplamlarini (OASST ( , ), HelpSteer ( , )) oʻrgatilgan asosiy modellarni oʻrgatishdan olingan koʻrsatma modellarining hosilalari hisoblanadi. Yue va boshq. 2023 Yu va boshq. 2023 Muennighoff va boshq. 2023 Ko¨ pf va boshq. 2023 Wang va boshq. 2023 Biz kod KTMlarimizni HumanEvalPack ( , ), MBPP(+) ( , ; , ), RepoBench ( , ), ReCode ( , ) va boshqa koʻplab benchmarklarni oʻz ichiga olgan keng qamrovli vazifalar toʻplamida keng qamrovli baholaymiz. Bu benchmarklar toʻplami Python'dagi kod sintezidan tashqari koʻplab turli xil kodlash vazifalarini (masalan, kodni tuzatish, kodni tushuntirish, kodni tahrirlash, kodni tarjima qilish va hokazo) koʻpgina asosiy dasturlash tillari (Python, JavaScript, Java, Go, C++, Rust va hokazo) boʻyicha qamrab oladi. Muennighoff va boshq. 2023 Austin va boshq. 2021 Liu va boshq. 2023a Liu va boshq. 2023b Wang va boshq. 2022 Bizning topilmalarimiz shuni koʻrsatadiki, ochiq kodli modellar orasida Granite kod modellarining umumiy koʻrsatkichlari barcha model oʻlchamlari va benchmarklar boʻyicha juda kuchli (koʻpincha Granite'dan ikki baravar katta boʻlgan boshqa ochiq kodli kod modellaridan ustun). Misol tariqasida, 1-rasm (yuqori qism) Granite-8B-Code-Base modelining ochiq kodli asosiy kod KTMlari, shu jumladan Mistral ( , ) va LLama-3 ( , ) kabi yaqinda chiqarilgan yuqori samarali umumiy maqsadli asosiy KTMlar bilan HumanEvalPack ( , ) da taqqoslanishini koʻrsatadi. CodeGemma va StarCoder2 kod yaratishda yaxshi natijalar koʻrsatgan boʻlsa-da, ular HumanEvalPack ning kodni tuzatish va tushuntirish variantlarida sezilarli darajada yomonroq natijalar koʻrsatadi. Oʻrtacha hisobda, Granite-8B-Code-Base eng raqobatbardosh CodeGemma-8B modelidan HumanEvalPack da deyarli 12 ballga ustun (33,2% ga nisbatan 21,3%), garchi sezilarli darajada kamroq tokenlarda (4,5T ga nisbatan 7,5T token) oʻrgatilgan boʻlsa ham. Asosiy modellar tashqari, bizning Granite kod modellarining koʻrsatma bilan moslashtirilgan variantlari ham HumanEvalPack da kuchli natijalar koʻrsatadi, boshqa ochiq kodli (kod) koʻrsatma modellaridan ustunlik qiladi, bu esa tabiiy til koʻrsatmalari bilan kodlash vazifalarining kengroq toʻplamiga foyda keltirishini koʻrsatadi (1-rasm (pastki qism) qarang). Jiang va boshq. 2023b AI@Meta 2024 Muennighoff va boshq. 2023 Bundan tashqari, mulohaza yuritish murakkab savollar va vazifalarni hal qilish uchun muhim boʻlganligi sababli, biz Granite-8B-Code-Base modelimizni oltita matematik benchmarkda, shu jumladan MATH ( , ), GSM8K ( , ) va hisoblash vositalaridan foydalanish imkoniyati bilan muammolarni hal qilish boʻyicha ham sinovdan oʻtkazamiz, bu yerda bizning Granite 8B modelimiz eng yaxshi 7B yoki 8B KTMlarining koʻpchiligidan yaxshiroq natijalarga erishadi. Masalan, Granite-8B-Code-Base GSM8K da Llama-3-8B-Base dan ∼12 ballga va MATH da ∼6 ballga ustun (15-jadvalga qarang). Cobbe va boshq. 2021 Cobbe va boshq. 2021 Granite kod modellarining asosiy afzalliklari quyidagilarni oʻz ichiga oladi: Granite kod modellarining kod yaratish, tushuntirish, tuzatish, tahrirlash, tarjima qilish va hokazo kabi turli kodlash vazifalari boʻyicha raqobatbardosh yoki eng yaxshi natijalarga erishishi, ularning turli kodlash vazifalarini hal qilish qobiliyatini koʻrsatadi; Hamma uchun kod KTM: Barcha modellarimiz IBMning AI Etika tamoyillariga amal qilgan holda toʻplangan va IBMning Korporativ Yuridik jamoasi tomonidan ishonchli korporativ foydalanish uchun yoʻnaltirilgan litsenziyaga ruxsat berilgan maʼlumotlar asosida oʻrgatilgan. Barcha Granite kod modellar Apache 2.0 litsenziyasi boʻyicha chiqarilgan. Ishonchli korporativ darajadagi KTM: 1 Bizning toʻliq maʼlumotlarimizni toʻplash, filtrlash va qayta ishlash quvur liniyamizni 2-boʻlimda tasvirlaymiz. 3-boʻlim model arxitekturasi tafsilotlarini, keyin esa 4-boʻlimda oʻqitish tafsilotlarini tasvirlaydi. 5-boʻlim koʻrsatma moslashuvi tafsilotlarini, 6-boʻlim esa Granite kod modellarini boshqa ochiq kodli KTMlar bilan taqqoslaydigan tajribalar va natijalarni tasvirlaydi. 2 Maʼlumotlarni toʻplash Ushbu boʻlimda biz modelni oʻqitish uchun kod maʼlumotlarini tayyorlash uchun ishlatilgan koʻchirish va filtrlash (2.1-boʻlim), takrorlanishni bartaraf etish (2.2-boʻlim), HAP/PII filtrlash (2.3-boʻlim) jarayonlarini tasvirlaymiz. Shuningdek, biz modelning tildan foydalanish va matematik mulohaza yuritish koʻnikmalarini oshirish uchun ishlatiladigan yuqori sifatli tabiiy til maʼlumotlari haqida umumiy maʼlumot beramiz. 2.1 Maʼlumotlarni koʻchirish va filtrlash Dastlabki kod maʼlumotlari Github Code Clean , StarCoderdata kabi jamoatchilikka ochiq maʼlumotlar toʻplamlarining kombinatsiyasidan va GitHubdan qoʻshimcha ochiq kod omborlari va muammolaridan olindi. Biz 300 dan ortiq tillardan 116 dasturlash tilini saqlab qolish uchun xom maʼlumotlarni filtrlashimiz kerak, bu A ilovasida keltirilgan. Maʼlumotlarni dasturlash tillariga taqsimlash StarCoder ( , ) ga oʻxshash holda, faqat fayl kengaytmasiga asoslanadi. Tilni filtrlashdan soʻng, biz past sifatli kodni filtrlash uchun toʻrtta asosiy filtrlash qoidasini qoʻllaymiz ( , ): (1) alifbo harflari kamida 25% boʻlgan fayllarni olib tashlash, (2) XSLT tilidan tashqari, " <?xml version=”" satri dastlabki 100 ta belgida joylashgan fayllarni filtrlash, (3) HTML fayllari uchun faqat koʻrinadigan matn HTML kodining kamida 20% ni tashkil qiladigan va minimal uzunligi 100 belgiga teng boʻlgan fayllarni saqlash, (4) JSON va YAML fayllari uchun faqat 50 dan 5000 belgiga qadar belgi soniga ega boʻlgan fayllarni saqlash. Shuningdek, biz GitHub muammolarini bir qator sifat metrikalari yordamida filtrlashdan oʻtkazamiz, jumladan, avtomatik yaratilgan matnlarni olib tashlash, ingliz tilida boʻlmagan muammolarni filtrlash, botlardagi sharhlarni chiqarib tashlash va sifat koʻrsatkichi sifatida suhbatda ishtirok etgan foydalanuvchilar sonidan foydalanish. Shuningdek, biz har bir kod faylini GitHub APIlari orqali topilgan tegishli omborga bogʻliq boʻlgan litsenziya haqidagi maʼlumotlar bilan etiketlaymiz va faqat modelni oʻqitish uchun ruxsat berilgan litsenziyalarga ega fayllarni saqlaymiz. 2 3 Li va boshq. 2023a Li va boshq. 2023a 2.2 Aniqlash va noaniq takrorlanishni bartaraf etish Biz oʻquv toʻplamidagi (deyarli) bir xil kod tarkibiga ega hujjatlarni olib tashlash uchun aniq va noaniq takrorlanishni oʻz ichiga olgan agressiv takrorlanishni bartaraf etish strategiyasini qabul qilamiz. Aniqlashni takrorlash uchun biz avval hujjat tarkibida SHA256 hashini hisoblaymiz va bir xil hashli yozuvlarni olib tashlaymiz. Aniqlashni takrorlashdan soʻng, biz biroz farqlar boʻlishi mumkin boʻlgan kod fayllarini olib tashlash va shu bilan maʼlumotlarni yanada qisqartirish maqsadida noaniq takrorlanishni bartaraf etishni qoʻllaymiz. Buning uchun biz ikki bosqichli usuldan foydalanamiz: (1) barcha hujjatlarning MinHashlarini hisoblash va keyin MinHash barmoq izlari boʻyicha hujjatlarni guruhlash uchun Lokal sezgir hashing (LSH) dan foydalanish, (2) bir xil guruhdagi har bir hujjat juftligi orasidagi Jaccard oʻxshashligini oʻlchash va 0,7 oʻxshashlik chegarasiga asoslanib, takrorlanuvchilar sifatida biridan boshqa hujjatlarni belgilash. Biz oʻquv toʻplamining boyligi va xilma-xilligini oshirish uchun GitHub muammolari, shu jumladan barcha dasturlash tillariga ushbu yaqin takrorlanishni bartaraf etish jarayonini qoʻllaymiz. 2.3 HAP, PII, Zararli dasturiy taʼminotni filtrlash Modellardan nafratli, haqoratomuz yoki haqoratomuz (HAP) tilni yaratish ehtimolini kamaytirish uchun biz HAP tarkibini oʻquv toʻplamidan filtrlashga jiddiy harakat qilamiz. Biz avval HAP kalit soʻzlarining lugʻatini yaratamiz va keyin har bir kod hujjatini kontentdagi, shu jumladan sharhlardagi bunday kalit soʻzlar soni bilan etiketlaymiz. Biz HAP chegarasidan oshib ketgan hujjatlarni filtrlashdan oʻtkazamiz, bu esa taqsimot tahlili, shuningdek, kod fayllarini qoʻlda tekshirish asosida hisoblanadi. Bundan tashqari, maxfiy-likni himoya qilish uchun biz shaxsiy aniqlanadigan maʼlumotlarni (PII) oʻquv toʻplamidan qisqartirishga jiddiy harakat qilamiz va StarCoder ( , ) ga amal qilamiz. Xususan, biz IP manzillarini, kalitlarini, elektron pochta manzil-larini, nomlarni, foydalanuvchi nomlarini va kontentda topilgan parollarni aniqlash uchun StarPII modelidan foydalanamiz. PII qisqartirish bosqichi PII matnini tegishli tokenlar NAME, EMAIL, KEY, PASSWORD bilan almashtiradi va IP manzilini Li va boshq. (2023a) kabi sintetik ravishda yaratilgan IP manzili bilan oʻzgartiradi. Shuningdek, biz zaxiradagi zararli dasturiy taʼminot namunalarini aniqlash va olib tashlash uchun bizning maʼlumotlar toʻplamlarimizni skanerlaymiz. Li va boshq. 2023a 4 2.4 Tabiiy til maʼlumotlar toʻplamlari Modelni oʻqitish uchun kod maʼlumotlarini toʻplashdan tashqari, biz modelning tildan foydalanish va matematik mulohaza yuritish koʻnikmalarini yaxshilash uchun bir nechta jamoatchilikka ochiq yuqori sifatli tabiiy til maʼlumotlar toʻplamlarini tuzamiz. Ushbu toifadagi vakillik maʼlumotlar toʻplamlariga veb hujjatlar (Stackexchange, CommonCrawl), matematik veb matn (OpenWeb-Math; ( ), StackMathQA; ( )), ilmiy matn (Arxiv, Wikipedia) va koʻrsatma moslashuvi maʼlumotlar toʻplamlari (FLAN; ( ), HelpSteer ( , )) kiradi. Biz ushbu allaqachon qayta ishlanmagan tabiiy til maʼlumotlarini takrorlanishini bartaraf etmaymiz. Paster va boshq. 2023 Zhang 2024 Longpre va boshq. 2023 Wang va boshq. 2023 3 Model arxitekturasi Biz transformer dekoder arxitekturasiga ( , ) asoslangan turli oʻlchamdagi kod modellarini oʻrgatamiz. Ushbu modellar uchun model giperparametrlar 10-jadvolda keltirilgan. Barcha model arxitekturalari uchun biz oldindan normalizatsiyadan ( , ) foydalanamiz: diqqat va MLP bloklarining kirishiga qoʻllaniladigan normalizatsiya. Vaswani va boshq. 2017 Xiong va boshq. 2020 : Granite-code model oilasidagi eng kichik model RoPE embedding ( , ) va Koʻp boshli Diqqat (Multi-Head Attention) ( , ) bilan oʻrgatilgan. Ushbu model MLP uchun GLU ( , ) bilan swish aktivatsiya funksiyasidan ( , ) foydalanadi, shuningdek, swiglu deb ham ataladi. Normalizatsiya uchun biz RMSNormdan ( , ) foydalanamiz, chunki u LayerNorm ( , ) dan hisoblash jihatidan samaraliroqdir. 3B modeli 2048 tokenli kontekst uzunligi bilan oʻrgatilgan. 3B Su va boshq. 2023 Vaswani va boshq. 2017 Shazeer 2020 Ramachandran va boshq. 2017 Zhang & Sennrich 2019 Ba va boshq. 2016 : 8B modeli 3B modeliga oʻxshash arxitekturaga ega, lekin Koʻp boshli Diqqat (Grouped-Query Attention) (GQA) ( , ) dan foydalanishdan farq qiladi. GQA dan foydalanish ushbu oʻlchamdagi model koʻrsatkichlari va inferensiya samaradorligi oʻrtasida yaxshi muvozanatni taʼminlaydi. Biz 8B modelini 4096 tokenli kontekst uzunligi bilan oʻrgatamiz. 8B Ainslie va boshq. 2023 : 20B kod modeli oʻrganilgan mutlaq pozitsiya embeddinglari bilan oʻrgatiladi. Quyi oqim inferensiyasini samarali amalga oshirish uchun biz oʻqitish jarayonida Koʻp boshli Diqqatdan (Multi-Query Attention) ( , ) foydalanamiz. MLP bloki uchun biz GELU aktivatsiya funksiyasidan ( , ) foydalanamiz. Faollashuvlarni normalizatsiya qilish uchun biz LayerNorm ( , ) dan foydalanamiz. Ushbu model 8192 tokenli kontekst uzunligi bilan oʻrgatilgan. 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba va boshq. 2016 : 34B modelini oʻqitish uchun biz 20B modelini chuqurlikni kengaytirish boʻyicha tomonidan ishlab chiqilgan yondashuvga amal qilamiz. Xususan, biz avval 20B kod modelini 52 ta qatlam bilan takrorlaymiz, keyin esa original modeldan oxirgi 8 ta qatlamni va uning takrorlanganidan dastlabki 8 ta qatlamni olib tashlaymiz va ikkita modelni hosil qilamiz. 34B Kim va boshq.