Skip to main content
QUICK REVIEW

[논문 리뷰] Latent Programmer: Discrete Latent Codes for Program Synthesis

Joey Hong, David Dohan|arXiv (Cornell University)|2020. 12. 01.
Software Engineering Research참고 문헌 48인용 수 5
한 줄 요약

잠재 프로그래머(Latent Programmer, LP)는 입력/출력 예제로부터 고수준 계획(잠재 코드)을 예측한 후, 그 계획에 조건부로 목표 프로그램을 생성함으로써 이중 수준 탐색을 이끄는 신경망 프로그램 합성 방법이다. 특히 복잡한 합성 작업에서, RobustFill과 같은 기준 모델 대비 더 긴 프로그램에서 합성 정확도를 10퍼센트 이상 향상시킨다.

ABSTRACT

In many sequence learning tasks, such as program synthesis and document summarization, a key problem is searching over a large space of possible output sequences. We propose to learn representations of the outputs that are specifically meant for search: rich enough to specify the desired output but compact enough to make search more efficient. Discrete latent codes are appealing for this purpose, as they naturally allow sophisticated combinatorial search strategies. The latent codes are learned using a self-supervised learning principle, in which first a discrete autoencoder is trained on the output sequences, and then the resulting latent codes are used as intermediate targets for the end-to-end sequence prediction task. Based on these insights, we introduce the \emph{Latent Programmer}, a program synthesis method that first predicts a discrete latent code from input/output examples, and then generates the program in the target language. We evaluate the Latent Programmer on two domains: synthesis of string transformation programs, and generation of programs from natural language descriptions. We demonstrate that the discrete latent representation significantly improves synthesis accuracy.

연구 동기 및 목표

  • 프로그램 합성에서 큰 프로그램 공간을 탐색하는 데 도전하는 문제를 해결하기 위해 인간 프로그래밍 행동을 모방한 이중 수준 탐색 전략을 도입한다.
  • 프로그램의 의미 있는 분리된 고수준 표현을 학습하여, 프로그램 생성을 이끄는 계획으로 활용할 수 있도록 한다.
  • 이산 잠재 코드를 중간 계획으로 활용하여, 특히 긴 복잡한 프로그램에서의 합성 정확도를 향상시킨다.
  • 고수준 계획과 저수준 구현 세부 사항을 분리함으로써 프로그램 공간의 더 효율적이고 다양한 탐색을 가능하게 한다.

제안 방법

  • 모델은 프로그램의 이산 잠재 코드 표현을 학습하기 위해 이산 오토인코더(특히 VQ-VAE)를 사용하며, 각 프로그램이 이산 기호의 시퀀스로 매핑된다.
  • 잠재 예측 네트워크는 입력/출력 예제를 진짜 잠재 코드로 매핑하도록 훈련되어, 사양으로부터 고수준 계획을 예측하는 데 학습된다.
  • 잠재 프로그램 디코더는 잠재 시퀀스에 대한 교차 어텐션을 사용하여, 예측된 잠재 코드에 조건부로 타겟 언어 프로그램을 토큰 단위로 생성한다.
  • 모델은 이중 수준 비트 서치를 적용한다: 먼저 L개의 최상위 잠재 코드 리스트를 생성한 후, 각 코드에 대해 B/L개의 최상위 프로그램 리스트를 생성한다.
  • 훈련 중에 변수와 인자 이름은 노이즈를 줄이고 잠재 코드 학습을 향상시키기 위해 ARG_i와 VAR_i로 정규화된다.
  • 모델은 두 도메인에서 평가된다: 입력/출력 예제를 통한 문자열 변환과 문서 주석에서의 코드 생성이며, BLEU 및 정확도 메트릭을 사용한다.

실험 결과

연구 질문

  • RQ1자기지도 학습을 통해 학습된 이산 잠재 코드가 프로그램 합성에 효과적인 고수준 계획으로 기능할 수 있는가?
  • RQ2잠재 코드를 사용한 이중 수준 탐색이 종래의 엔드 투 엔드 방법에 비해 프로그램 합성 정확도를 향상시키는가?
  • RQ3프로그램 길이에 따라 잠재 프로그래머의 성능가 어떻게 변화하는가? 특히 기준 모델과의 비교에서 어떻게 나타나는가?
  • RQ4학습된 잠재 코드는 파일 조작이나 시스템 호출과 같은 공통 프로그래밍 패턴을 식별할 수 있도록 의미적으로 해석될 수 있는가?

주요 결과

  • 잠재 프로그래머는 RobustFill과 Dual과 같은 최신 기준 모델 대비 더 긴 프로그램에서 합성 정확도를 10퍼센트 이상 향상시킨다.
  • 코드 생성 작업에서 LP는 비트 크기가 100일 때 BLEU 점수 21.3을 기록하여, 다음으로 좋은 기준 모델(17.2)을 크게 앞서며 성능을 뛰어나게 한다.
  • 특히 탐색 공간 복잡도가 가장 높은 긴 프로그램에서의 성능 향상이 두드러지며, 계획 기반 탐색의 효과성을 입증한다.
  • 해석 가능성 분석 결과, 잠재 토큰이 파일 조작이나 시스템 호출과 같은 공통 프로그래밍 패턴과 의미적으로 군집되어 있음을 확인하였으며, 이는 관련 프로그램 토큰의 TF-IDF 분석을 통해 확인되었다.
  • 변수와 인자 이름을 ARG_i와 VAR_i로 정규화함으로써, 프로그램 인코더가 의미 있는 잠재 구조를 학습하는 데 모델의 능력이 크게 향상되었다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.