>기술 주변기기 >일체 포함 >딥러닝의 코드 데이터 증강: 5년간의 89개 연구 검토

딥러닝의 코드 데이터 증강: 5년간의 89개 연구 검토

王林
王林앞으로
2023-11-23 14:33:441208검색

딥러닝과 대규모 모델의 급속한 발전으로 혁신적인 기술에 대한 추구가 계속 높아지고 있습니다. 이 과정에서 데이터 증강 기술은 무시할 수 없는 가치를 보여주었습니다

최근 모나쉬 대학교, 싱가포르 경영 대학교, 화웨이 노아의 방주 연구소, 베이항 대학교, 호주 국립 대학교가 공동으로 진행한 연구 89건의 관련 연구 조사를 바탕으로 지난 5년 동안 딥러닝에서 코드 데이터 향상 적용에 대한 종합적인 리뷰가 발표되었습니다.

딥러닝의 코드 데이터 증강: 5년간의 89개 연구 검토

  • 논문 주소: https://arxiv.org/abs/2305.19915
  • 프로젝트 주소: https://github.com/terryyz/DataAug4Code
이것 이번 리뷰에서는 딥러닝 분야에서 코드 데이터 향상 기술의 적용에 대해 심도있게 논의할 뿐만 아니라, 향후 개발 가능성도 기대해 봅니다. 새로운 데이터를 수집하지 않고 훈련 샘플의 다양성을 높이는 기술로서 코드 데이터 증대는 기계 학습 연구에서 널리 응용되고 있습니다. 이러한 기술은 자원이 부족한 지역에서 데이터 기반 모델의 성능을 향상시키는 데 매우 중요합니다.

딥러닝의 코드 데이터 증강: 5년간의 89개 연구 검토

그러나 코드 모델링 분야에서는 이 접근 방식의 잠재력이 아직 완전히 활용되지 않았습니다. 코드 모델링은 기계 학습과 소프트웨어 엔지니어링의 교차점에서 떠오르는 분야로, 코드 완성, 코드 요약, 결함 감지 등 다양한 코딩 작업을 해결하기 위해 기계 학습 기술을 적용하는 분야입니다. 코드 데이터는 다중 모드 특성(프로그래밍 언어 및 자연어)을 갖고 있어 데이터 증대 방법을 사용자 정의하는 데 고유한 과제를 제기합니다

이 검토 보고서는 여러 최고의 학술 및 산업 기관에서 공동으로 발행합니다. 코드 데이터 향상 기술을 심층적으로 밝힐 뿐만 아니라 향후 연구 및 응용에 대한 지침도 제공합니다. 우리는 이 리뷰가 더 많은 연구자들이 딥 러닝에서 코드 데이터 증강의 적용에 관심을 갖게 하고 이 분야의 추가 탐구와 개발을 촉진할 것이라고 믿습니다.

배경 소개

코드 모델의 부상 Development: 코드 모델은 대규모 소스 코드 코퍼스를 기반으로 학습되었으며 코드 조각의 컨텍스트를 정확하게 시뮬레이션할 수 있습니다. LSTM 및 Seq2Seq와 같은 딥 러닝 아키텍처의 초기 채택부터 나중에 사전 학습된 언어 모델의 통합에 이르기까지 이러한 모델은 여러 소스의 다운스트림 작업에서 탁월한 성능을 보여주었습니다. 예를 들어 일부 모델은 사전 학습 단계에서 프로그램의 데이터 흐름을 고려합니다. 이는 코드의 의미 수준 구조이며 변수 간의 관계를 캡처하는 데 사용됩니다.

데이터 증강 기술의 중요성: 데이터 증강 기술은 데이터 합성을 통해 훈련 샘플의 다양성을 높여 다양한 측면(정확도, 견고성 등)에서 모델의 성능을 향상시킵니다. 예를 들어 컴퓨터 비전 분야에서 일반적으로 사용되는 데이터 증대 방법에는 이미지 자르기, 뒤집기 및 색상 조정이 포함됩니다. 자연어 처리에서 데이터 증대는 단어를 바꾸거나 문장을 다시 작성하여 컨텍스트를 다시 작성할 수 있는 언어 모델에 크게 의존합니다.

코드 데이터 증대의 특수성: 이미지 및 일반 텍스트와 달리 소스 코드는 프로그래밍 언어의 엄격한 구문 규칙에 의해 제한되므로 개선의 유연성이 떨어집니다. 코드에 대한 대부분의 데이터 증대 방법은 원본 코드 조각의 기능과 구문을 유지하기 위해 특정 변환 규칙을 준수해야 합니다. 일반적인 관행은 파서를 사용하여 소스 코드의 구체적인 구문 트리를 구축한 다음 이를 추상 구문 트리로 변환하여 식별자 및 제어 흐름 문과 같은 주요 정보를 유지하면서 표현을 단순화하는 것입니다. 이러한 변환은 규칙 기반 데이터 증대 방법의 기초이며, 실제 세계에서 더욱 다양한 코드 표현을 시뮬레이션하는 데 도움이 되어 증강 데이터로 훈련된 코드 모델의 견고성을 향상시킵니다.

코드 데이터 증대 방법에 대한 심층 탐구

코드 데이터 증대의 세계를 깊이 탐구하면서 저자는 이러한 기술을 규칙 기반 기술, 모델 기반 기술, 보간 기술의 예. 이러한 다양한 분기는 아래에 간략하게 설명되어 있습니다.

규칙 기반 기술: 많은 데이터 증대 방법은 문법 규칙과 의미 체계를 위반하지 않는 동시에 프로그램을 변환하기 위해 미리 결정된 규칙을 활용합니다. 이러한 변환에는 변수 이름 바꾸기, 메서드 이름 이름 바꾸기, 잘못된 코드 삽입 등의 작업이 포함됩니다. 기본 프로그램 구문 외에도 일부 변환에서는 제어 흐름 그래프 및 사용 정의 체인과 같은 더 깊은 구조적 정보도 고려합니다. 독스트링 및 주석을 포함하여 코드 조각의 자연어 컨텍스트를 향상시키는 데 초점을 맞춘 규칙 기반 데이터 향상 기술의 하위 집합이 있습니다.

딥러닝의 코드 데이터 증강: 5년간의 89개 연구 검토

모델 기반 기술 : 데이터를 향상시키기 위해 다양한 모델을 교육하도록 설계된 코드 모델을 위한 일련의 데이터 증대 기술입니다. 예를 들어, 일부 연구에서는 ACGAN(Auxiliary Classification Generative Adversarial Networks)을 활용하여 증강을 생성합니다. 다른 연구에서는 생성적 적대 네트워크를 훈련하여 코드 생성과 코드 검색 기능을 동시에 향상시켰습니다. 이러한 방법은 주로 코드 모델을 위해 특별히 설계되었으며 다양한 방식으로 코드의 표현과 컨텍스트 이해를 향상시키는 것을 목표로 합니다.

보간 기법의 예: 이 유형의 데이터 증대 기법은 두 개 이상의 실제 샘플의 입력과 레이블을 보간하여 작동하는 Mixup에서 유래합니다. 예를 들어, 컴퓨터 비전의 이진 분류 작업과 개와 고양이의 두 이미지가 주어지면 이러한 데이터 증대 방법은 무작위로 선택된 가중치에 따라 두 이미지의 입력과 해당 레이블을 함께 혼합할 수 있습니다. 그러나 코드 세계에서 이러한 방법의 적용은 고유한 프로그램 구문과 기능으로 인해 제한됩니다. 표면 수준 보간과 비교하여 대부분의 예제 보간 데이터 증대 방법은 모델 임베딩을 통해 여러 실제 예제를 단일 입력으로 융합합니다. 예를 들어, 원본 코드 조각과 변환된 표현을 혼합하기 위해 규칙 기반 기술을 Mixup과 결합하는 연구가 있습니다.

딥러닝의 코드 데이터 증강: 5년간의 89개 연구 검토


딥러닝의 코드 데이터 증강: 5년간의 89개 연구 검토

전략 및 기술

실제 응용 분야에서 코드 모델에 대한 데이터 증대 기술의 설계 및 효율성은 계산 비용, 샘플 다양성 및 모델과 같은 여러 요소의 영향을 받습니다. 견고성. 이 섹션에서는 이러한 요소를 강조하여 적절한 데이터 증대 방법을 설계하고 최적화하기 위한 통찰력과 팁을 제공합니다.

Method stacking: 이전 논의에서는 모델의 성능 향상을 목적으로 단일 작업에서 많은 데이터 증대 전략이 동시에 제안되었습니다. 일반적으로 이 조합에는 동일한 유형의 데이터 증대 또는 서로 다른 데이터 증대 방법의 혼합이라는 두 가지 유형이 포함됩니다. 전자는 일반적으로 규칙 기반 데이터 증대 기술에 적용됩니다. 여기서 출발점은 단일 코드 변환이 현실 세계의 다양한 코딩 스타일과 구현을 완전히 나타낼 수 없다는 것입니다. 여러 연구에서 여러 유형의 데이터 증대 기술을 융합하면 코드 모델의 성능을 향상시킬 수 있음이 입증되었습니다. 예를 들어, 규칙 기반 트랜스코딩 방식과 모델 기반 데이터 증대를 결합하여 모델 훈련을 위한 향상된 코퍼스를 생성합니다. 프로그래밍 언어에 대한 다른 연구는 두 가지 데이터 향상 기술인 규칙 기반 비키워드 추출과 모델 기반 비키워드 대체를 포함하여 강화되었습니다.

Optimization: 견고성 향상 및 계산 비용 최소화와 같은 일부 시나리오에서는 특정 향상 예제 후보를 선택하는 것이 중요합니다. 저자는 이러한 목표 지향적 후보 선택을 데이터 증대의 최적화라고 부릅니다. 이 기사에서는 주로 확률적 선택, 모델 기반 선택, 규칙 기반 선택이라는 세 가지 전략을 소개합니다. 확률적 선택은 확률 분포에서 샘플링하여 최적화하는 반면, 모델 기반 선택은 모델에 따라 가장 적절한 예를 선택합니다. 규칙 기반 선택에서는 미리 결정된 특정한 규칙이나 경험적 방법을 사용하여 가장 적합한 예를 선택합니다.

Probabilistic Selection: 저자는 구체적으로 MHM, QMDP, BUGLAB-Aug를 포함한 세 가지 대표적인 확률적 선택 전략을 선택했습니다. MHM은 식별자 교체를 통해 적대적 사례를 선택하기 위해 Markov Chain Monte Carlo 기술인 Metropolis-Hastings 확률적 샘플링 방법을 사용합니다. QMDP는 Q-learning 방법을 사용하여 규칙 기반 구조 변환을 전략적으로 선택하고 실행합니다.

모델 기반 선택: 이 전략을 채택하는 일부 데이터 증대 기술은 모델의 그라데이션 정보를 활용하여 개선 사례 선택을 안내합니다. 대표적인 방법은 모델 손실을 기반으로 최적화하고 변수 이름 변경을 통해 적대적 예제를 선택하고 생성하는 데이터 증대 MP 방법입니다. SPACE는 프로그래밍 언어의 의미론적 및 구문론적 정확성을 유지하면서 모델의 성능 영향을 최대화한다는 목표로 경사 상승을 통해 코드 식별자의 임베딩을 선택하고 교란합니다.

규칙 기반 선택 : 규칙 기반 선택은 미리 결정된 적합성 함수 또는 규칙을 사용하는 강력한 방법입니다. 이 접근 방식은 의사 결정 지표에 의존하는 경우가 많습니다. 예를 들어 IRGen은 유전 알고리즘 기반의 최적화 기법과 IR 유사성을 기반으로 한 적합성 함수를 사용합니다. ACCENT 및 RA 데이터 증강 R은 각각 BLEU 및 CodeBLEU와 같은 평가 지표를 사용하여 선택 및 교체 프로세스를 안내하여 적대적 영향을 최대화합니다.

애플리케이션 시나리오

데이터 증대 방법은 여러 일반적인 코드 시나리오에 직접 적용될 수 있습니다.

강건성에 대한 반대 사례: 견고성은 복잡성의 핵심이자 차원입니다. 코드 모델의 취약점을 식별하고 완화하기 위해 적대적인 예제를 생성하는 효과적인 데이터 증대 기술을 설계하는 것이 최근 몇 년 동안 연구의 핫스팟이 되었습니다. 여러 연구에서 다양한 데이터 증대 방법을 사용하여 모델의 견고성을 테스트하고 강화함으로써 코드 모델의 견고성을 더욱 강화했습니다.

저자원 분야: 소프트웨어 엔지니어링 분야에서는 프로그래밍 언어 자원의 불균형이 심각합니다. Python 및 Java와 같은 인기 있는 프로그래밍 언어는 오픈 소스 리포지토리에서 중요한 역할을 하는 반면, Rust와 같은 많은 언어는 리소스가 매우 부족합니다. 코드 모델은 오픈 소스 리포지토리 및 포럼을 기반으로 훈련되는 경우가 많으며 프로그래밍 언어 리소스의 불균형은 리소스가 부족한 프로그래밍 언어의 성능에 부정적인 영향을 미칠 수 있습니다. 리소스가 부족한 도메인에 데이터 증대 방법을 적용하는 것은 반복되는 주제입니다.

검색 향상: 자연어 처리 및 코딩 분야에서 검색 향상 데이터 향상 애플리케이션이 점점 더 주목받고 있습니다. 코드 모델을 위한 이러한 검색 향상 프레임워크는 코드 모델을 사전 훈련하거나 미세 조정할 때 훈련 세트의 검색 향상 예제를 통합합니다. 이 향상 방법은 모델의 매개변수 효율성을 향상시킵니다.

대조 학습: 대조 학습은 데이터 증대 방법이 코드 시나리오에 배포되는 또 다른 응용 분야입니다. 이를 통해 모델은 유사한 샘플이 서로 가깝고 서로 다른 샘플이 더 멀리 떨어져 있는 임베딩 공간을 학습할 수 있습니다. 데이터 증대 방법은 결함 탐지, 복제 탐지, 코드 검색과 같은 작업에서 모델 성능을 향상시키기 위해 양성 샘플과 유사한 샘플을 구성하는 데 사용됩니다.

다음 기사에서는 복제 감지, 결함 감지 및 복구, 코드 요약, 코드 검색, 코드 생성 및 코드 번역을 포함하여 평가 데이터 세트에 대한 몇 가지 일반적인 코딩 작업과 데이터 증대 노력의 적용에 대해 논의합니다

도전과 기회

코드 데이터 향상 측면에서 저자는 큰 과제가 많다고 생각합니다. 그러나 현장에 새로운 가능성과 흥미로운 기회를 가져오는 것은 이러한 과제입니다.

이론적 토론: 현재 코드의 데이터 증대 방법에 대한 심층적인 탐색과 이론적 이해에는 분명한 격차가 있습니다. 대부분의 기존 연구는 이미지 처리 및 자연어 분야에 중점을 두고 있으며, 데이터 증대를 데이터 또는 작업 불변성에 대한 기존 지식을 적용하는 방법으로 보고 있습니다. 코드로 전환할 때 이전 연구에서는 새로운 방법을 도입하거나 데이터 증대 기술이 어떻게 효과적일 수 있는지 시연했지만 특히 수학적 관점에서 그 이유와 방법을 간과하는 경우가 많았습니다. 코드의 개별적인 특성으로 인해 이론적 논의가 더욱 중요해졌습니다. 이론적 논의를 통해 모든 사람은 단지 실험 결과의 관점이 아닌 더 넓은 관점에서 데이터 증대를 이해할 수 있습니다.

사전 학습된 모델에 대한 추가 연구: 최근에는 사전 학습된 코드 모델이 코딩 분야에서 널리 사용되고 있으며, 대규모 말뭉치의 자체 감독을 통해 풍부한 지식이 축적되었습니다. 많은 연구에서 데이터 증대를 위해 사전 훈련된 코드 모델을 활용했지만 대부분의 시도는 여전히 마스크 토큰 교체 또는 미세 조정 후 직접 생성으로 제한됩니다. 대규모 언어 모델의 데이터 증대 잠재력을 활용하는 것은 코딩 세계에서 새로운 연구 기회입니다.

데이터 향상에 사전 훈련된 모델을 사용했던 이전 방식과 달리, 이 작업은 "힌트 기반 데이터 향상" 시대를 열었습니다. 그러나 힌트 기반 데이터 증강 탐색은 코드 세계에서 상대적으로 손길이 닿지 않은 연구 영역으로 남아 있습니다. 재작성된 콘텐츠: 데이터 향상에 사전 훈련된 모델을 사용하는 이전 방식과 달리 이 작업은 "힌트 기반 데이터 향상" 시대를 엽니다. 그러나 코드 도메인의 힌트 기반 데이터 증대에 대한 연구는 여전히 상대적으로 적습니다.

Processing domain-Specific data: 저자는 코드 처리의 일반적인 다운스트림 작업에 대한 데이터 증대 기술을 조사하는 데 중점을 둡니다. 그러나 저자들은 코딩 영역에서 다른 작업별 데이터에 대한 연구가 여전히 적다는 것을 알고 있습니다. 예를 들어 API 추천 및 API 시퀀스 생성은 코딩 작업의 일부로 간주될 수 있습니다. 저자는 이 두 가지 수준 사이의 데이터 증대 기술의 격차를 관찰하여 향후 작업을 탐색할 수 있는 기회를 제공했습니다.

프로젝트 수준 코드 및 저자원 프로그래밍 언어에 대한 추가 탐색: 기존 방법은 함수 수준 코드 조각 및 일반 프로그래밍 언어에서 충분한 진전을 이루었습니다. 동시에, 자원이 적은 언어에 대한 개선 방법은 수요가 높음에도 불구하고 상대적으로 부족합니다. 이 두 가지 방향에 대한 탐구는 여전히 제한적이며 저자는 이것이 유망한 방향이 될 수 있다고 믿습니다.

사회적 편견 완화 : 소프트웨어 개발에서 코드 모델이 발전함에 따라 코드 모델은 인적 자원 및 교육과 같은 인간 중심 애플리케이션을 개발하는 데 사용될 수 있으며, 여기서 편향된 절차는 표현에 대한 우려로 이어질 수 있습니다. 그리고 비윤리적인 결정. NLP의 사회적 편견은 잘 연구되어 데이터 증강을 통해 완화될 수 있지만 코드의 사회적 편견은 아직 주목을 받지 못했습니다.

소형 샘플 학습: 소규모 샘플 시나리오에서 모델은 기존 기계 학습 모델과 비슷한 성능을 달성해야 하지만 훈련 데이터는 극히 제한적입니다. 데이터 증대 방법은 이 문제에 대한 간단한 솔루션을 제공합니다. 그러나 소규모 샘플 시나리오에서 데이터 증대 방법을 사용하는 작업은 제한적입니다. 몇 가지 샘플 시나리오에서 저자는 고품질 증강 데이터를 생성하여 모델에 신속한 일반화 및 문제 해결 기능을 제공하는 방법에 대한 흥미로운 질문이라고 생각합니다.

다중 모드 애플리케이션: 함수 수준 코드 조각에만 초점을 맞추는 것은 실제 프로그래밍 상황의 복잡성과 뉘앙스를 정확하게 나타내지 않는다는 점에 유의하는 것이 중요합니다. 이 경우 개발자는 일반적으로 동시에 여러 파일과 폴더에 대해 작업합니다. 이러한 다중 모드 애플리케이션이 점차 인기를 얻고 있지만 데이터 증대 방법을 여기에 적용한 연구는 없습니다. 과제 중 하나는 시각적 언어 다중 모달 작업에서 연구된 코드 모델의 각 양식의 임베딩 표현을 효과적으로 연결하는 것입니다.

균일성 부족 : 현재의 코드 데이터 증강 문헌은 가장 인기 있는 접근 방식이 종종 보조적인 접근 방식으로 특징지어지는 도전적인 환경을 제시합니다. 일부 경험적 연구에서는 코드 모델에 대한 데이터 증대 방법을 비교하려고 시도했습니다. 그러나 이러한 작업은 대부분의 기존 고급 데이터 증대 방법을 활용하지 않습니다. 컴퓨터 비전(예: PyTorch의 기본 증대 라이브러리) 및 NLP(예: NL-Augmenter)에 대해 잘 확립된 데이터 증대 프레임워크가 존재하지만, 코드 모델을 위한 범용 데이터 증대 기술에 해당하는 라이브러리는 눈에 띄게 누락되어 있습니다. 또한, 기존의 데이터 증강 방법은 다양한 데이터 세트를 사용하여 평가되는 경우가 많기 때문에 그 효과를 판단하기가 어렵습니다. 따라서, 저자들은 표준화되고 통일된 벤치마크 작업과 다양한 증강 방법의 효율성을 비교하고 평가하기 위한 데이터 세트를 구축함으로써 데이터 증강 연구의 발전이 크게 촉진될 것이라고 믿습니다. 이는 이러한 방법의 강점과 한계를 보다 체계적이고 비교적으로 이해할 수 있는 길을 열어줄 것입니다.

위 내용은 딥러닝의 코드 데이터 증강: 5년간의 89개 연구 검토의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제