Skip to main content
QUICK REVIEW

[논문 리뷰] SCELMo: Source Code Embeddings from Language Models

Rafael Michael Karampatsis, Charles Sutton|arXiv (Cornell University)|2020. 04. 28.
Software Engineering Research참고 문헌 29인용 수 34
한 줄 요약

SCELMo는 JavaScript 코드에서 ELMo 스타일의 맥락 임베딩을 학습하고 이를 DeepBugs의 버그 탐지 성능 향상에 사용하여 정적 임베딩과 비맥락적 baselines를 능가합니다. 또한 OOV 처리와 외부 프로젝트로의 일반화도 분석합니다.

ABSTRACT

Continuous embeddings of tokens in computer programs have been used to support a variety of software development tools, including readability, code search, and program repair. Contextual embeddings are common in natural language processing but have not been previously applied in software engineering. We introduce a new set of deep contextualized word representations for computer programs based on language models. We train a set of embeddings using the ELMo (embeddings from language models) framework of Peters et al (2018). We investigate whether these embeddings are effective when fine-tuned for the downstream task of bug detection. We show that even a low-dimensional embedding trained on a relatively small corpus of programs can improve a state-of-the-art machine learning system for bug detection.

연구 동기 및 목표

  • 소스 코드에 대해 풍부하고 맥락적인 표현을 학습하도록 동기를 부여하여 소프트웨어 엔지니어링 작업의 성능을 개선한다.
  • 소스 코드에 ELMo 프레임워크를 적용하여 맥락 인식 토큰 임베딩을 생성한다.
  • 맥락화된 코드 임베딩이 정적 임베딩보다 버그 탐지 성능을 향상시키는지 평가한다.
  • 미확인 프로젝트에 대한 일반화 및 OOV 토큰의 영향 평가를 수행한다.

제안 방법

  • JavaScript 코드 코퍼스에서 ELMo를 학습한다(150k개의 파일; 학습용 64,750개 파일 및 검증용 33,229개 파일로 필터링).
  • esprima로 코드를 토큰화하고 중복 필터링을 적용하여 팽창을 줄인다.
  • 전방/역방향 LSTM당 100 특징의 임베딩 크기를 사용(레이어당 200), 레이어 표현을 동일 가중치로 결합(s_j = 1/(L+1), γ = 1).
  • SCELMo 표현을 세 가지 버그 유형에 대한 맥락 특징으로 DeepBugs 버그 탐지기에 통합한다.
  • 향상치를 평가하기 위해 Random, Word2Vec, FastText, No-Context ELMo 베이스라인과 비교한다.
  • 두 가지 질의 변형을 탐구한다: 고정 맥락 No-Context ELMo 베이스라인과 특정 코드 구성 요소에 대한 전체 SCELMo 맥락 임베딩.

실험 결과

연구 질문

  • RQ1SCELMo 맥락 임베딩이 DeepBugs에서 정적 임베딩보다 버그 탐지 정확도를 향상시키는가?
  • RQ2SCELMo가 비맥락적 접근법에 비해 OOV 토큰 및 복잡한/중첩 표현을 어떻게 처리하는가?
  • RQ3SCELMo가 학습 코퍼스를 넘어선 미확인 프로젝트에 일반화되는가?
  • RQ4맥락 임베딩 사용이 실제 버그 마이닝 시나리오와 실제적인 거짓 양성률에 어떤 영향을 미치는가?

주요 결과

Bug TypeRandomWord2VecFastTextNo-Context ELMoSCELMo
Swapped Arguments86.18%87.38%89.55%90.02%92.11%
Wrong Binary Operator90.47%91.05%91.11%92.47%100.00%
Wrong Binary Operand75.56%77.06%79.74%81.71%84.23%
  • SCELMo는 단순한 표현과 복잡한 표현 모두에서 버그 탐지에 대해 모든 정적 베이스라인을 크게 능가한다.
  • 단일 이름 표현이 포함된 검증 세트에서, Swapped Arguments에 대해 SCELMo는 92.11%로, random 86.18% 및 Word2Vec 89.55% 대비 우수하며, Wrong Binary Operator에서는 100.00% 대 90.47% random, Wrong Binary Operand에서는 84.23% 대 75.56% random으로 나타났다.
  • 복잡한 표현을 포함해도 SCELMo는 Swapped Arguments에서 92.27% 대 86.37% random, Wrong Binary Operator에서 100.00% 대 91.12% random, Wrong Binary Operand에서 87.10% 대 72.73% random로 여전히 모든 베이스라인을 능가한다.
  • 외부 테스트 세트(500개의 JavaScript 프로젝트)에서 SCELMo는 정적 임베딩에 비해 주목할 만한 이점을 제공한다(예: Swapped Arguments에서 84.25% 대 75.79%, Wrong Binary Operator에서 99.99% 대 82.95%, Wrong Binary Operand에서 83.59% 대 67.46%).
  • 비맥락적 ELMo는 이미 정적 베이스라인을 능가하며, 사전 학습과 부분 단어 처리의 가치를 시사한다; SCELMo는 특히 OOV 토큰과 복잡한 표현에서 가장 큰 개선을 가져온다.
  • OOV 분석은 베이스라인 컴포넌트에서 OOV 토큰의 상당한 존재를 보이며, 미지의 식별자와 피연산자 처리에서 SCELMo의 우위를 강조한다.

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

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

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

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