이제 인공지능과 함께 코딩하세요!


마이크로소프트의 연례 기술 컨퍼런스 Ignite 2019에서 인공지능 기반의 코딩 지원 기능인 Visual Studio IntelliCode (이하 IntelliCode)의 확장 버전이 공개되었습니다. 지난 4월에 IntelliCode의 초기 버전이 공개되었던 바 있으며, 해당 버전의 경우 코딩 시에 구문 단위로 자동완성 추천을 하는 기능이었습니다. 아래 그림에서와 같이 코딩을 하는 동안 인공지능이 다음에 쓸 구문을 별표로 추천해주는 방식입니다.


인공지능 기반의 추천이 아니더라도, 개발용 프로그램들에는 사용 가능한 구문 혹은 현재 쓰여진 알파벳이 들어간 구문을 추천하는 기능이 이미 있습니다. IntelliCode가 이러한 기존의 자동완성 기능과 차별화되는 점은, 단순히 이름을 매칭하는 것이 아니라 인공지능을 통해 현재 코딩하는 상황에 따라 쓸 확률이 높은 구문을 추천해준다는 것입니다. 여기에서 한 차원 더 나아가 이번 확장 버전에서는 코드 라인 전체 자동완성 기능 및 코드 리팩토링(refactoring) 기능이 추가되었습니다. 하나씩 차례로 살펴보도록 하겠습니다.

먼저 코드 라인 전체 자동완성 기능은 아래 그림에서와 같이 첫 구문만 입력하면 라인 전체를 자동완성하여 추천해주는 방식으로 작동합니다. 해당 기능은 자동 문장생성 인공지능 모델로 유명한 Open AI의 GPT-2를 기반으로 구현하였다고 합니다. GPT-2는 단어 혹은 문장을 입력하면 그 뒤에 올만한 문장들을 자동으로 생성하는 모델입니다. 학습을 위해서는 많은 양의 글을 모아놓은 데이터셋이 필요하며, 학습에 쓰인 글의 스타일대로 문장을 생성하게 됩니다. 즉, 소설을 학습시키면 소설에서 쓰이는 스타일의 문장을 생성하게 되며 기사를 학습시키면 기사에서 쓰이는 스타일의 문장을 생성합니다.


IntelliCode 연구개발팀에서는 이러한 특성에 착안하여 오픈소스 공유 플랫폼인 GitHub의 코드를 이용하여 GPT-2 기반의 모델을 학습시켰습니다. 코드를 입력받은 후, 그 이후의 코드를 자동으로 생성하는 인공지능을 만든 것이죠. IntelliCode가 고품질의 코드를 생성할 수 있도록, 추천수가 100개 이상인 GitHub 저장소(repository)들을 학습 데이터로 이용하였다고 합니다. 만약 에러가 있거나 품질이 좋지 않은 코드를 학습시키면 이상한 코드를 자동생성 할 수 있기 때문에, 추천수를 기준으로 하여 양질의 코드만 학습에 사용한 것입니다. 이렇게 총 3000개 이상의 저장소를 이용하여 학습을 진행한 결과 구문 추천은 물론 코드 라인 전체를 자동완성하여 추천할 수 있게 되었습니다.

이 뿐만 아니라, 사용자가 원하는 코드를 추가로 학습시켜서 자동완성에 활용할 수 있다고 합니다. GPT-2의 특성상 배운 것과 유사한 형태의 문장을 생성하기 때문에, GitHub에서 학습한 코드들이 사용자가 원하는 종류의 코드가 아니라면 당연히 IntelliCode의 활용도가 떨어질 것입니다. 이러한 상황에서는 원하는 종류의 코드를 학습시켜서 사용자 개개인에게 맞는 자동완성을 하도록 유도할 수 있습니다. 개발자마다 혹은 프로젝트 팀마다 코딩 스타일과 목적이 다르기 때문에, 추가 학습이 가능하다는 점은 IntelliCode의 활용 가치를 더욱 높여줄 것으로 보입니다.

다음은 코드 리팩토링 기능입니다. 코드 리팩토링이란 같은 기능을 수행하지만 더욱 간결하거나 이해하기 쉽도록 코드를 수정하는 일을 말합니다. 특히, 여러 명이서 개발을 진행할 경우 다른 사람이 작성한 코드를 보고 이해해야 하므로 코드 리팩토링이 중요해집니다. 이번에 공개된 코드 리팩토링 기능은 IntelliCode가 사용자의 리팩토링 예시를 몇 개 본 이후에는 자동으로 리팩토링된 코드를 추천하는 방식으로 이루어집니다. 아래 예시를 보시겠습니다.


사용자는 현재 RuleFor로 시작하는 4개의 라인에 대해서 리팩토링을 진행하는 중입니다. 위의 두 라인에 대해서 리팩토링을 진행하자 세번째 라인을 바꾸려고 할 때 왼쪽에 전구 모양이 뜨면서 리팩토링된 코드가 추천되는 것을 보실 수 있습니다. 이번 리팩토링 기능에 활용된 기술은 마이크로소프트 PROSE 팀이 개발한 PBE (Programming-By-Examples)라는 프로그램 합성(Program synthesis) 기술입니다. PBE는 반복된 작업의 규칙을 파악하는 기술로써 예시 몇가지로부터 규칙을 추출하여 자동화할 수 있도록 합니다. 해당 기술이 적용된 대표적인 예시로 엑셀의 플래시 필(Flash Fill) 기능이 있습니다.

이번에 공개된 확장 기능들은 개발자의 생산성 및 코드 품질을 향상시켜주는 획기적인 기술이 될 거라 생각합니다. 초보 개발자에게는 진입장벽을 낮춰주고, 동시에 숙련된 개발자도 더욱 빠른 속도로 코딩할 수 있도록 도와줍니다. 인공지능과 함께 인공지능을 만들어 가는 시대가 시작된 것 같습니다.

관련 자료:

댓글

이 블로그의 인기 게시물

딥마인드, 알파스타를 통해 스타크래프트2까지 정복하다.

오픈소스 음원 분리 엔진 Spleeter