Kotlin
A concise multiplatform language developed by JetBrains
AI 친화적인 프로그래밍 언어: Kotlin 이야기
프로그래밍 언어가 오늘날의 AI 혁명에서 뒤처지지 않으려면 ML 커뮤니티 및 언어 모델에서 명확히 표현되어야 합니다. 언어가 잘 표현되지 않는다면, 생성된 코드의 품질도 떨어지고, 그러면 언어의 사용 빈도가 떨어지며 표현성이 더욱 나빠지는 악순환이 발생합니다. 그런데 ‘표현성’이 정확히 무슨 의미인지 궁금하실 수 있습니다. 계속 읽어보세요!
Kotlin의 인기가 미래에도 지속되도록 지원하고 차세대 개발 도구에서 잘 표현될 수 있도록 하기 위해 💜Kotlin ML Pack을 추가합니다. 이 팩은 Kotlin 언어를 위한 코드 모델링 작업에 필요한 도구, 데이터 및 모델로 구성되어 있습니다. JetBrains 연구조사 팀에서 수행한 광범위한 연구를 기반으로 만들어졌으며 ML 연구자들에게 다른 프로그래밍 언어에도 적용할 수 있는 추가 도구와 아이디어를 제공합니다.
Kotlin 데이터/데이터세트
좋은 데이터는 프로그래밍 언어를 포함해 분야를 막론하고 머신러닝의 중추입니다. 이미 Python 언어 모델링의 다양한 측면을 훈련시키고 측정할 수 있는 고품질의 인기 데이터세트는 이미 있지만, Kotlin에는 이러한 데이터세트가 거의 없었습니다. 이 격차를 좁히고자 저희는 2개의 주요 데이터세트인 Kotlin 생성용 지침의 데이터세트와 Kotlin 언어 코퍼스를 수집하고 오픈 소스화했습니다.
언어 코퍼스 데이터세트
다음의 두 데이터세트는 언어 코퍼스와 관련된 JetBrains의 연구 결과입니다.
- KStack – Kotlin 대규모 언어 코퍼스. 가장 완벽한 최신 오픈 소스 Kotlin 코드 컬렉션으로, 라이선스도 자유롭게 허용됩니다.
- KStack-clean – 더 나은 모델 훈련을 위해 선별된 데이터세트. 25,000개의 고품질 예시가 포함된 엄선된 KStack입니다.
아래의 표는 두 데이터세트와 The Stack v2의 Kotlin 하위 세트의 통계를 비교합니다.
파일 | 저장소 | 행 개수 | 토큰 | |
The Stack v2 | 200만 | 109,547 | 1억 6,200만 | 17억 |
KStack | 400만 | 163,310 | 2억 9,300만 | 31억 |
KStack-clean | 25,000 | 3,366 | 200만 | 2,200만 |
KExercises: Kotlin 지침 데이터세트
데이터세트를 개발할 때 초점을 두었던 또 다른 부분은 지침을 조정하기 위한 Kotlin 데이터세트를 만드는 것이었습니다. 일반적으로 이러한 데이터세트는 솔루션과 더불어 지침 또는 작업으로 구성됩니다. 이 데이터로 훈련하게 되면 모델이 자연어와 프로그래밍 언어 간의 관계를 이해하는 데 도움이 됩니다.
이러한 데이터세트는 무수히 많으며, 일부는 Python 프로그래밍 언어에 사용되고 일부는 여러 언어 표현에 사용됩니다. 그러나 이러한 데이터세트에서 Kotlin의 표현은 비교적 별로 많지 않거나 아예 포함되어 있지 않습니다.
JetBrains는 전체 데이터세트를 처음부터 새로 만들기 보다는 기존의 데이터세트를 Python에서 Kotlin으로 번역하기로 결정하였습니다. 이를 위해 기능성과 효율성이 뛰어난 Python 연습용 데이터세트를 선택했습니다. 그런 다음 GPT-3.5-turbo를 사용하여 데이터를 Python에서 Kotlin으로 번역했습니다. 번역을 한 후 번역의 정확도를 검증하기 위해 데이터의 하위 샘플을 수동으로 검토했습니다. 최종적으로 15,000개의 Kotlin 작업으로 구성된 지침 데이터세트를 만들었습니다(약 350만 개의 토큰과 33만 5,000줄의 코드).
평가
정확하고 효율적인 평가 과정 또한 머신러닝에서 매우 중요합니다. 다행히도 코드 LLM 분야에서 HumanEval이 이러한 평가의 표준이 되었습니다. HumanEval은 원래 Python용으로 설계되었으나 다양한 프로그래밍 언어로 번역되었습니다. 또한, 컴파일링된 언어와 함께 사용될 수 있도록 변경되었으며 새로운 작업이 추가되며 확장되었습니다.
Kotlin용 HumanEval
안타깝게도 기존의 Kotlin용 HumanEval을 사용하려면 큰 개선이 필요했습니다. 따라서, 전문가들과 함께 다른 방식으로 HumanEval을 처음부터 다시 만들기로 결정했습니다.
모든 JetBrains HumanEval 솔루션과 테스트는 Kotlin 경력 6년을 보유한 전문 프로그래머가 작성하였으며, Kotlin 경력 4년을 보유한 프로그래머가 독립적으로 검수하였습니다. 저희가 구현한 테스트는 원본 Python용 HumanEval 테스트와 동일하며, 위에 서술된 제네릭 변수 시그니처를 처리하기 위해 프롬프트 시그니처를 수정했습니다.
새로운 HumanEval 벤치마크는 Hugging Face에서 이용할 수 있으며, 사용 방법에 관한 지침 및 여러 언어 모델에 대한 벤치마크 평가 결과도 포함되어 있습니다.
Kotlin용 훈련 모델
데이터세트를 선보이기 위해 다양한 환경에서 몇 가지 모델을 훈련시켰습니다.
- Code Llama 7B는 최적화된 트랜스포머 아키텍처를 사용하는 자동 회귀 언어 모델입니다. 코드 생성 채우기를 지원하며, 최대 16,000개의 토큰으로 정교하게 조정되었고, 추론 타임에서 최대 10만 개의 토큰을 지원합니다.
- DeepSeek가 구현한 DeepSeek-coder-6.7B 베이스 모델은 67억 개의 매개변수를 모델로, 영어 및 중국어로 작성된 2조 개의 자연어 텍스트 토큰으로 훈련된 Multi-Head Attention을 포함합니다. 또한 프로젝트 수준의 코드 완성 및 채우기를 지원하기 위해 1만 6,000개 토큰과 추가적인 빈 칸 채우기 작업을 사용하여 프로젝트 수준의 코드 코퍼스로 사전 훈련되었습니다.
- DeepSeek-coder-1.3B는 같은 아키텍처와 훈련 절차를 공유하지만 매개변수 수가 더 적습니다.
위에 언급된 세 개의 데이터세트를 훈련 환경에 포함시켰습니다. NVIDIA A100 GPU 에서 AdamW 옵티마이저를 사용하여 bf16 정밀도로 세부 조정이 진행되었습니다. 추가적으로 훈련 과정을 안정화하기 위해 Z-loss, 가중치 감쇠, 그래디언트 클리핑 등의 다양한 기법을 사용했습니다.
그 결과 저희가 사용한 방식 모두에서 개선이 확인되었습니다. DeepSeek-coder-6.7B를 KExercises 데이터세트로 세부 조정했을 때 가장 크게 개선되었으며, 통과율이 55.28%를 기록했습니다. 다른 두 베이스 모델에서도 지침 세부 조정이 성공적인 결과를 나타냈습니다. 한편, 전체 데이터세트에서 세부 조정을 진행했을 때는 결과가 미미하였으며, CodeLlama의 통과율이 3% 증가하는 데 그쳤습니다. KStack의 클린 버전은 세부 조정 시 결과가 더 좋았으나 여전히 KExercises 데이터세트보다는 통과율이 낮았습니다.
저희는 여기서 멈추지 않습니다. 저희의 목표는 Kotlin 코드 생성 품질 향상에서 그치지 않습니다. 계속해서 연구자들에게 더 많은 도구와 아이디어를 제공하여, 전반적인 코드 생성 및 소프트웨어 개발에 대한 ML 적용 부분에서 개발자 도구가 더 발전할 수 있도록 노력하고 있습니다.
이러한 작업과 저희가 게시한 Kotlin ML Pack에는 데이터 및 평가와 같은 Kotlin 학습 파이프라인에 필수적인 요소들이 포함되어 있습니다. 그러나 Kotlin 및 JetBrains 에코시스템은 언어 모델링 및 ML 커뮤니티에 더 많은 것을 제공할 수 있습니다. 예를 들어 컴파일러 또는 린터와 같은 도구, 데이터세트의 추가적인 코드, 일상적 프로덕션 개발 작업에 더 적합한 새로운 벤치마크를 통한 학습 등 다양합니다.
더 자세히 알아보고 싶거나 JetBrains 연구조사 팀의 연구에 관한 자세한 설명이 필요한 경우 Kotlin ML Pack: 기술 보고서를 참조하세요.
또는 KotlinConf’24 기조 연설에서 관련 부분(한국어 자막 제공)을 시청하세요.
게시물 원문 작성자