수도 권한으로 프로그램을 써줘: 코드 분야의 이미지넷을 공개한 GitHub
소스 코드를 하나의 언어로 다루기 위한 대규모 데이터셋, 도구, 벤치마크
이 글은 AI 번역본입니다. 오역이 있으면 댓글로 알려주세요.
Created on September 15|Last edited on September 15
Comment
요약 GitHub의 CodeSearchNet 소스 코드를 하나의 언어로 다루기 위한 대규모 데이터셋, 도구, 벤치마크를 Weights & Biases를 통해 제공하여(의미 기반 검색, 이해, 번역 등) 더 넓은 커뮤니티 연구를 촉진하고 지원합니다 — 여러분은 여기에서 협업에 참여하세요.
표현이 아니라 의미로 검색하세요
검색 엔진 덕분에 우리는 원하는 것을 어떻게 묻는지 배웠습니다. “내 근처 점심”, “미션 샐러드 지금 영업”, 심지어 “오늘 점심 먹으러 갈 만한 근처 장소?” 혹은 그냥 “음식”이라고만 쳐도, 영어권이 아닌 도시에서도 가장 좋은 인근 식당을 보여줍니다. 하지만 소스 코드—예를 들어 “파일 복사 코드”처럼 프로그램에서 무언가를 올바르게 하는 방법—를 간단히 검색해 보세요. 그러면 여러 페이지를 오가며 계속해서 스크롤하고, 훑어보고, 후보를 평가해야 합니다. 함수 문법, 새로 배우는 언어에서의 올바른 패턴, 일반적인 문제 해결 알고리즘—이런 검색은 효율적인 협업에 필수적이며 소프트웨어 개발자에게는 매일, 아니면 매시간 반복되는 작업이지만, 단어 선택에서 성가실 정도의 정확성(혹은 수많은 재검색)이 요구됩니다. 컴퓨터는 아직 충분한 라벨된 예시를 보지 못해, 가능한 모든 문자 시퀀스(“cp file1 file2”, “def copy(src, dest):…”, “private static void copyFile(File src, File dest) {...”)로부터 단순한 공통 목표(파일 복사)로 일반화하지 못합니다. 1,400만 개의 주석 달린 예제가 있다면,[[TRANSLATION_FAILED]][[TRANSLATION_FAILED]]
[[TRANSLATION_FAILED]]
[[TRANSLATION_FAILED]][[TRANSLATION_FAILED]][[TRANSLATION_FAILED]][[TRANSLATION_FAILED]][[TRANSLATION_FAILED]]BERT-류 자기 어텐션(자세한 내용은 연구 논문 자세한 내용). 이러한 자료가 유용한 출발점이자 영감이 되어, 최신 언어 학습의 발전—예를 들어 최신의 트랜스포머 아키텍처.
코드 검색을 위한 공동 벤치마크
대규모 데이터셋과 시작용 스크립트만으로는 연구를 촉진하기에 충분하지 않습니다. ImageNet 사례에서 보았듯이, 이를 위해서는 학회 워크숍, 엄선된 벤치마크, 도구 개발과 유지보수, 연례 평가 대회 등 폭넓은 커뮤니티 구축이 필요합니다. 앞으로의 연구를 지원하고 체계화하기 위해 GitHub은 출시합니다 CodeSearchNet Challenge, Weights & Biases(W&B)에서 주최한이 벤치마크는 전 세계 머신러닝 연구 커뮤니티가 CodeSearchNet 데이터셋으로 학습한 모델을 추적하고 비교합니다. 리더보드는 전문가가 라벨링한 자연어 질의 집합과 해당하는 코드 스니펫 결과를 사용해 코드 검색 성능을 평가합니다(예: “파일 복사” 같은 질의를 주었을 때, 어느 함수가 0점(전혀 무관)에서 3점(완전 일치)까지 얼마나 관련 있는가). W&B는 공유 워크스페이스에서 실험과 노트를 체계화하고, 모든 코드와 하이퍼파라미터를 추적하며, 결과를 시각화하여 팀의 협업형 딥러닝을 쉽게 만듭니다. Benchmarks 기능은 공개 오픈 프로젝트에서 이러한 협업을 가능하게 하며, CodeSearchNet 참가자들이 한곳에서 노력을 조율하고 워크플로와 인사이트를 손쉽게 공유·논의할 수 있기를 기대합니다.
개발자 역량 강화
소프트웨어 개발은 본질적으로 자기 자동화적입니다. 개발자는 스스로가 중복되는 수작업을 하고 있음을 깨달으면 이를 위한 알고리즘을 만들고, 점차 더 높은 추상화 수준으로 적용해 함수, 클래스, 패키지, API, 통합 기능 등을 구축합니다. 찾기/바꾸기와 자동 완성 같은 작업 가속화 도구는 사용자 지정 매크로나 단축키에서 출발해 현대 개발 환경의 편리한 버튼으로 발전해 왔습니다. 덕분에 우리는 정신적 노력을 대규모로 확장하고, 비슷한 문제에 이를 재적용하여 매번 처음부터 다시 풀지 않아도 됩니다. 그렇다면 올바른 문법을 찾거나 알 수 없는 오류 메시지를 설명하는 지루한 작업뿐 아니라, 새로운 대규모 리포지토리에서 관련 키워드를 전혀 모르거나 심지어 원 개발자와 같은 언어를 쓰지 않더라도 원하는 함수를 찾아내는 일까지 자동화할 수 있다면 어떨까요? 더 나아가 “�� 파일들을 타임스탬프 기준으로 정렬하고 최신 파일을 새 디렉터리로 복사해 주세요”, “친구들이 읽을거리를 서로 추천할 수 있는 작은 웹사이트가 필요해요”, “이 데이터셋에서 파라미터 수가 가장 적으면서 성능이 가장 좋은 모델을 보여줘요”, “각 주요 합성곱 블록 뒤에 잔차 레이어를 하나씩 추가해 이 기본 아키텍처를 재학습하고 최적의 학습률을 찾아줘요” 같은 대화형 방식으로 프로그램 사양을 전달할 수 있다면 어떨까요?
CodeSearchNet 챌린지에 참가하세요
이것은 이제 막 시작일 뿐이지만, 의미 기반 코드 이해의 잠재적 활용 범위는 매우 넓습니다. 당장의 확장 방향으로는 인코더에서 코드의 의미 분석을 수행하고, 코드의 품질이나 명료성을 정량화하며, 리포지토리에서 구조나 제어 흐름을 추론하고, 중복을 제거하거나 더 나은 추상화를 프로그래머에게 추천하는 작업 등이 있습니다. 여러분이 이 개발자 도구의 새로운 프런티어에 기여해 주시기를 바랍니다 여기에서 CodeSearchNet 챌린지에 참가하기리포지토리를 클론하고, 데이터를 내려받아, 몇 가지 명령만으로 베이스라인을 학습하는 간단한 안내를 보실 수 있습니다. 벤치마크를 활용해 다른 사람들이 시도한 방법을 확인하고, 아이디어를 논의하며, 서로 다른 접근을 결합해 볼 수 있습니다. GitHub은 CodeSearchNet 데이터셋과 도구를 계속 확장할 계획입니다. GitHub 게시글 자세한 내용은 게시물을 참고하세요. 이 커뮤니티가 함께 만들어 갈 성과가 기대됩니다.
Add a comment