변환율 67.2~91.6%···C++·자바·파이썬 어느 쪽으로든 가능

‘기존 사용 코드→자바·C++ 언어’ 변환시 저비용에 효율적

페이스북이 다양한 컴퓨터 코딩언어를 변환해 주는 트랜스코더 AI를 개발했다.
페이스북이 다양한 컴퓨터 코딩언어를 변환해 주는 트랜스코더 AI를 개발했다.

서로 다른 컴퓨터 프로그래밍 언어를 자유자재로 변환시켜 주는 툴이 있다면 얼마나 편리할까? 페이스북이 이런 인공지능(AI)을 개발했다. 물론 아직까지 변환율이 100%에 이르지는 못한다. 코드별 변환율은 67.2%에서 91.6%까지 편차를 보인다.  

벤처비트는 8일(현지시간) 페이스북이 하나의 프로그래밍 언어(코드)를 다른 프로그래밍 언어로 자유자재로 변환시켜 주는 ‘트랜스코더AI(TransCoder AI)’를 개발했다고 전했다.

이 AI는 말 그대로 ‘코드 변환기 인공지능(Trans corder AI)’으로서 어떤 컴퓨터 언어라도 자유자재로 변환시켜 준다. 마치 더글러스 아담스의 소설 ‘은하수를 여행하는 히치하이커를 위한 안내서’에 나오는 ‘바벨피시’ 격이다. 물론 컴퓨터 프로그래밍 언어의 바벨피시랄 수 있다. 실생활에서는 40개국 언어를 통역해 주는 구글 어시스턴트 기반의 구글 픽셀버드 격이다. 
  
페이스북 연구원들은 “ C++, 자바, 파이썬과 같은 하나의 고급 프로그래밍 언어(코드)를 다른 코드로 변환해 주는 번역프로그램인 ‘뉴럴트랜스컴파일러(neural transcompiler)’라는 것을 개발했다”고 말했다. 고급언어로 쓰인 프로그램을 동등한 의미로 컴퓨터에서 즉시 실행될 수 있는 형태의 프로그램으로 바꾸어 주는 번역 프로그램인 컴파일러보다 높은 수준의 것임을 의미하는 셈이다.

◆비지도학습 접근방식으로 기존 컴파일러 문제점 해결
 
이 AI는 비지도(unsupervised) 방식을 사용했다. 즉, 라벨이 없는 데이터 세트와 최소 수준으로 사람의 지도를 받아 이전에 발견되지 않았던 패턴을 찾고 있으며, 규칙에 따른 기준을 ‘엄청난 차이’로 능가하는 것으로 알려졌다.

이 AI 사용를 사용함으로써 어떤 효과를 볼 수 있을까?

기존에 사용하고 있는 코드 베이스를 자바나 C++와 같은 현대적이거나 보다 효율적인 언어로 마이그레이션(이식)하려면 소스 언어와 옮겨가려는 대상 언어 모두에 대한 전문지식이 필요하다. 게다가 비용이 많이 드는 경우도 많다.

예를 들어 오스트레일리아 연방은행(Commonwealth Bank of Australia)은 5년 동안 약 7억 5000만 달러(약 9000억원)를 들여 코볼에서 자바로 플랫폼을 변환했다. 트랜스컴파일러는 이론적으로는 도움이 될 수 있지만, 즉 처음부터 코드를 다시 쓸 필요를 없게 해 준다. 그렇지만 이를 사용하더라도 서로 다른 언어는 다른 구문을 가질 수 있고 독특한 플랫폼 API(Application Program Interface), 표준 라이브러리 기능 및 가변 유형에 의존할 수 있기 때문에 실제 구축에 있어서는 만만치 않다.

C++,자바,파이썬을 변환해 주는 페이스북의 ‘트랜스코더(TransCoder)’는 비지도학습(unsupervised learning) 접근법으로 이 과제를 해결했다.
 
트랜스코더는 처음에는 프로그래밍 언어와 관계 없이 동일한 명령을 표현하는 코드 조각들을 동일한 표현에 매핑하는, 교차 언어를 가진 사전교육 모델로 초기화되었다. (소스 코드 시퀀스의 입력 스트림은 무작위로 감춰지며(masked out), 트랜스코더는 문맥에 기반해 감춰진 부분을 예측하는 임무를 수행한다.)

자동 ‘인코딩 노이즈제거(denoising auto-encoding)’로 불리는 프로세스는 노이즈 많은 입력 데이터를 공급받았을 때에도 유효한 시퀀스를 생성하도록 시스템을 훈련시켜 주며, 역변환은 트랜스코더가 교육에 사용할 수 있는 병렬 데이터를 생성할 수 있게 한다.

트랜스코더의 교차 언어 특성은 프로그래밍 언어 전반에 존재하는 여러 개의 공통 토큰(앵커 포인트)에서 발생하며, 이는 ‘for’, ‘while’, ‘if’, ‘try’와 같은 공통 키워드와 소스 코드에 나타나는 숫자·수학적 연산자·영어 문자열에서  나온다. (앵커포인트는 해싱(hashing), 즉 디지털 숫자열을 원래의 것을 상징하는 더 짧은 길이의 값이나 키로 변환했을 때 충돌이 발생한 레코드들이나 페이지들을 연결한 포인터 체인의 헤드를 말한다.) 

역변환(Back-translation)은 ‘소스언어를 타깃 언어로 변환하는(source-to-target)’ 모델의 변환 방향을 바꾼 병렬 훈련시킨 ‘타깃 언어를 소스언어로 변환하는(targer-to-source)’ 모델과 연결시킴으로써 시스템의 변환 품질을 향상시키는 역할을 한다.

‘타깃언어를 소스언어로 변환하는’ 모델은 타깃언어 시퀀스를 소스 언어로 변환해 노이즈 많은 소스 시퀀스를 생성하는 데 사용된다. ‘소스언어를 타깃언어로 변환하는’ 모델은 두 모델이 융합할 때까지 많은 노이즈를 가진 소스언어로부터 타깃 시퀀스를 재구성하는 데 도움을 준다.

페이스북 연구원들은 함수(functions·기능) 수준의 변환을 목표로 280만 개 이상의 오픈 소스 저장소이자 프로그래머를 위한 소셜 코딩 공간인 깃허브(GitHub)의 코퍼스(말뭉치)로 트랜스코더를 훈련시켰다. (프로그래밍에서 함수는 단일, 관련 작업을 수행하는 데 쓰이는 재사용 가능한 코드 블록을 의미한다.)

이들은 트랜스코더를 사용 가능한 모든 소스 코드에 대해 사전 교육한 후, 자동인코딩노이즈제거 및 역변환 구성요소들은 약 6000개의 토큰 구성요소들을 바꿔가면서 함수에 대해서만 교육했다.

연구진은 트랜스코더의 성능을 평가하기 위해 코딩 문제를 수집하고 여러 프로그래밍 언어로 솔루션을 제시하는 온라인 플랫폼인 긱스포긱스(GeeksforGeeks)에서 C++, 자바, 파이썬 등의  852개 병렬 함수(기능)을 추출했다. 그들은 이를 사용해 가설 함수가 동일한 입력을 부여했을 때 레퍼런스와 동일한 출력을 생성하는지 여부를 검증하는 새로운 (컴퓨팅 정확도)측정지표를 개발했다.

◆자바를 C++로 변환할 때 91.6%가 기대하던 결과 내놔

페이스북은 가장 뛰어난 트랜스코더 버전이 레퍼런스 자료와 완전히 동일한 많은 함수를 생성하지는 못했지만, 변환시에는 높은 연산 정확도를 가지고 있다고 지적했다. 그들은 이것이 빔 검색(beam search)을 사용한 데 따른 것이라고 말했다. 이는 부분적으로 디코딩된 시퀀스 집합을 유지하면서 시퀀스를 형성한 후 이들의 점수를 매겨 최고 값을 취하는 방식이다.

그 결과는 다음과  같았다.

C++를 자바로 변환할 때 트랜스코더의 산출물 중 74.8%가 기대하던 결과를 내놓았다.

C++를 파이썬으로 변환할 때 트랜스코더의 산출물 중 67.2%가 기대하던 결과를 내놓았다.

자바를 C++로 변환할 때 트랜스코더 산출물 중 91.6%가 기대하던 결과를 내놓았다.

파이썬을 자바로 변환할 때 트랜스코더 산출물 중 56.1%가 기대하던 결과를 내놓았다.

파이썬을 C++로 변환할 때 트랜스코더 산출물 중 57.8%가 기대하던 결과를 내놓았다.

자바를 파이썬으로 변환할 때 트랜스코더 산출물 중 68.7%가 기대하던 결과를 내놓았다.

페이스북만이 변환 코드 생성 AI 시스템을 개발하고 있는 유일한 조직은 아니다. 올해 초 마이크로소프트(MS) 빌드 컨퍼런스 때 오픈AI(OpenAI)는 영어 코멘트를 활용해 전체 기능을 생성하는 깃허브에서 훈련받은 모델을 시연했다. 사진=오픈AI
페이스북만이 변환 코드 생성 AI 시스템을 개발하고 있는 유일한 조직은 아니다. 올해 초 마이크로소프트(MS) 빌드 컨퍼런스 때 오픈AI(OpenAI)는 영어 코멘트를 활용해 전체 기능을 생성하는 깃허브에서 훈련받은 모델을 시연했다. 사진=오픈AI

연구원들에 따르면, 트랜스코더는 실험하는 동안 각 언어에 특화된 구문뿐만 아니라 언어의 데이터 구조와 그 방법들에 대해 이해하고 있음을 보여주었고, 작은 수정(입력 내 변수 이름이 바뀐 경우 같은)에 적응하면서 여러 프로그래밍 언어들에 걸쳐 라이브러리를 올바르게 정렬시켰다. 트랜스코더는 완벽하지는 않았지만(예를 들어 생성과정에서 특정 변수 유형을 설명하지 못했지만) 전문가 지식을 사용, 수동으로 규칙을 재작성하는 프레임워크를 앞질렀다. 

공저자들은 “트랜스코더는 어떤 프로그래밍 언어에도 쉽게 일반화될 수 있고 전문적인 지식이 필요하지 않으며 상업적 솔루션에 크게 앞선다”고 쓰고 있다. 이들은 “우리의 결과에 따르면 모델에 의해 만들어진 많은 실수들은 발생된 기능이 구문론적으로 정확하다는 것을 보장하기 위해 디코더에 단순한 제약을 가하거나, 전용 아키텍처를 사용함으로써 쉽게 고쳐질 수 있을 것이다”라고 덧붙였다.

◆오픈AI도 영어코멘트 활용해 전체 기능 생성하는 깃허브 훈련 모델 시연

페이스북만이 변환 코드 생성 AI 시스템을 개발하고 있는 유일한 조직은 아니다. 올해 초 마이크로소프트(MS) 빌드 컨퍼런스 때 오픈AI(OpenAI)는 영어 코멘트를 활용해 전체 기능을 생성하는 깃허브에서 훈련받은 모델을 시연했다.

그리고 2년 전, 라이스 대학교의 연구원들은 베이유(Bayou)라는 시스템을 만들었는데, 이는 공개적으로 이용 가능한 코드 뒤에 있는 ‘의도(intents)’를 연관시킴으로써 그들만의 소프트웨어(SW) 프로그램을 작성할 수 있게 한 것이다.
저스틴 고트슐리히 인텔랩스의 수석 과학자 겸 소장은 “(이런 프로그램들은) SW를 만드는 데 있어서 사소한 문제들을 제거하기 위해 애쓰고 있다”며 “그들은 버그문제에 신경씀으로써 생산성 가속화를 도울 수 있다”고 설명했다. 그는 이어 “(그리고 그들은) 프로그램 지식이 없는 사람들도 이러한 의도적인 인터페이스를 이용해 창의적 직관을 가져다가 기계로 포착해 낼 수 있기 때문에 (기술분야)의 일자리를 늘릴 수 있을 것이다”이라고 내다봤다.  

 

[관련기사] 우버, 뉴로팟 오픈소싱...멀티 딥러닝 프레임워크 환경 통합

[관련기사] “더 강력한 AI 강화학습”...딥마인드, 분산 프레임워크 ‘애크미’ 출시

키워드 관련기사
  • [기고]인공지능시대, 청년 문제 어떻게 해결할 것인가?
  • ['라떼' 한 잔] 인공지능 교육, 무상 교육을 허하라
  • 오픈AI, 자연어 처리(NLP) 모델용 API 출시