• Turing Post Korea
  • Posts
  • LLM이 더 좋은 코드를 생성하게 도와주는 기법 7選

LLM이 더 좋은 코드를 생성하게 도와주는 기법 7選

코딩을 해 주는 LLM이 계속 등장하고 있지만, 코드 생성 과정의 효율성, 정확성을 높일 수 있는 방법을 찾아내고 정리하는 건 여전히 중요합니다. 나름의 엄격한 규칙, 그리고 대규모 코드베이스의 종속성을 고려해야 하는 코드 구조 때문에 코드 생성은 쉬운 일이 아니죠. 또 문법 상 정확한 코드라 하더라도, 원래 의도대로 작동하는지, 테스트를 통과할지 확인하는 것도 여전히 복잡하구요.

그래서 많은 연구자들이 ‘생성되는 코드의 품질’을 높이기 위한 여러 가지 방법을 계속해서 개발하고 있는데요. 아래에 LLM이 생성하는 코드의 품질을 개선하도록 도와주는 7가지 기법을 정리해 봤습니다:

  1. PlanSearch는 ‘코딩 프로세스를 가이드’하는데 쓸, ‘자연어로 된 다양한 계획을 생성’하는데 사용됩니다. 이 알고리즘은 LiveCodeBench에서 77%의 합격률을 보여주는데, 반복 샘플링에서 60.6%, 검색을 사용하지 않은 경우 41.4%의 합격률인 걸 감안하면 ‘다양성이 코드 생성의 성능 향상에 도움이 된다’는 걸 보여준다고 하겠습니다. —> [논문 보기]

    이 논문에는 두 가지 기법이 언급되어 있는데요:

    • IdeaSearch는, 코드를 구현하기 전에 문제의 해결을 위한 자연어로 된 아이디어 또는 스케치 (계획이 아닌)를 만드는 것을 포함합니다.

    • 반복 샘플링 기법에서는 추론 시점에 LLM이 여러 개의 해결책 후보들을 만들게끔 합니다. 모델의 출력을 여러 차례 샘플링하면, 다양한 출력값 중에서 정확한 - 최적의 - 해결책을 얻을 확률이 높아집니다.

  2. Comment Augmentation (‘주석 보완’ 정도 되겠네요)은 생성된 자연어 주석을 추가하고, 품질이 낮은 코드를 필터링해서 LLM의 코드를 개선하는데, 사전 학습 데이터에 포함되어 있는 주석을 활용해서 코딩 벤치마크에서 더 나은 성능을 보여주도록 할 수 있습니다. 이 기법을 활용하면, 전반적인 코드의 정확도, 코드 생성의 효율성을 높여줍니다. —> [논문 보기]

  3. CodePlan은 ‘코드 생성을 위한 계획’에 대한 또 다른 기법입니다. 리포지토리 레벨 코딩의 복잡성을 해결하기 위해서 CodePlan 프레임웍은 단계별로 계획을 생성하고, 각 단계에서 전체 리포지토리 및 이전 변경 사항의 컨텍스트를 사용, 편집을 수행하는데 LLM을 활용합니다. 이 방식은 패키지 마이그레이션이나 오류 수정 등의 작업 성능을 높여줍니다. —> [논문 보기]

  4. Self-infilling Code Generation은, 모델이 컨텍스트와 함께 누락된 코드를 생성할 수 있도록 합니다. 이 방식은 ‘Interruption’ 메커니즘을 도입해서, 문맥이 명확해질 때까지 코드 생성을 지연시키고 루핑 메커니즘을 사용하여 출력값을 구체화합니다. 주어진 접두사와 접미사를 기반으로 코드 중간에서 누락된 부분을 완성하는 ‘Fill-in-the-Middle (FIM)’ 방식과 비교하면, Self-infilling Code Generation은 주변의 컨텍스트까지 함께 생성할 수 있고, 다양한 벤치마크에서 코드의 품질과 일관성을 향상시킵니다. —> [논문 보기]

  5. 더 깨끗한 고품질 데이터 세트를 사용하면 코딩 작업에서 더 적은 학습 데이터로도 모델의 성능을 개선하면서 데이터 유출 같은 문제를 방지할 수 있습니다. 이 기법은 명령어의 복잡성, 응답의 품질, 그리고 다양성이라는 세 가지 주요 차원에서 데이터의 품질을 제어하도록 제안합니다.
    —> [논문 보기]

  6. RepoMasterEval은 실제 Python 및 TypeScript 리포지토리를 사용해서 실제 시나리오를 반영하는 벤치마크입니다. 코드 스니펫을 마스킹하고, 향상된 테스트 도구로 테스트, 모델을 평가하기 때문에, 실제 개발 환경에서 모델을 훈련하는 데 유용한 피드백을 제공합니다.
    —> [논문 보기]

  7. RLCoder는 리포지토리에서 코드를 완성을 하는데 적용하는 강화 학습 프레임웍으로, 레이블링된 데이터 없이도 관련된 코드 스니펫을 검색해서 가져옵니다. RLCoder는 검색된 컨텐츠의 유용성을 평가하고 불필요한 경우에 검색을 중지하는 메커니즘을 사용하는데, 이런 방식으로 정확도를 12.2% 향상시킬 수 있고, 여러 가지 프로그래밍 언어에서 잘 작동합니다. —> [논문 보기]

읽어주셔서 감사합니다. 재미있게 보셨다면 친구와 동료 분들에게도 뉴스레터를 추천해 주세요.

Reply

or to participate.