커밋 메시지 생성부터 히스토리 인식 커밋 메시지 완성까지
요약
본 자료는 'From Commit Message Generation to History-Aware Commit Message Completion' 논문의 재현 패키지를 제공합니다. 커밋 메시지 생성부터 히스토리까지 고려하는 완성도 높은 커밋 메시지 작성 방법을 다루며, 관련 데이터셋과 모델 체크포인트도 함께 공개했습니다.
핵심 포인트
- 커밋 메시지 생성을 넘어 히스토리를 인식하여 완성도를 높임
- ASE 2023 논문의 CMG 및 LLM 실험 재현 패키지를 제공
- 관련 데이터셋과 모델 체크포인트를 Hugging Face/Zenodo에서 이용 가능
From Commit Message Generation to History-Aware Commit Message Completion
이 저장소는 저희 논문 :scroll: From Commit Message Generation to History-Aware Commit Message Completion, ASE 2023의 재현 패키지를 제공합니다.
- 코드
- 모델 실험 – 이 저장소
- 가장 최신 버전 –
main브랜치 - 저희 ASE 2023 논문의 CMG 실험을 위한 정확한 재현 패키지 –
appendix_cmg태그 - 저희 ASE 2023 논문의 LLM 실험을 위한 정확한 재현 패키지 –
appendix_llm태그
- 가장 최신 버전 –
- 데이터 수집 및 처리 – 별도 저장소
- 모델 실험 – 이 저장소
- 데이터셋: Zenodo에서도 이용 가능
- 모델 체크포인트: Zenodo에서도 이용 가능
- 기타
- 다음 내용을 확인하려면
appendix폴더를 확인하세요:- 모델 예측치;
- 모든 실험에 대한 포괄적인 지표;
- CMG 연구에서 나온 빈번한 필터 구현체;
- 그리고 논문에서 언급된 기타 세부 사항!</p>
- 다음 내용을 확인하려면
사용 방법
요구 사항
- :snake: Python
- :floppy_disk: 의존성
- 이 프로젝트는 두 가지 Python 의존성 관리자를 위한 의존성을 제공합니다:
- Poetry:
poetry.lock,pyproject.toml(권장) - pip:
requirements.txt(poetry export --with dev,retrieval --output requirements.txt를 통해 얻음)
- Poetry:
- 이 프로젝트는 두 가지 Python 의존성 관리자를 위한 의존성을 제공합니다:
사용법
1단계: 원본 데이터 준비
<details> <summary>:yellow_heart: 필요한 데이터 형식에 대한 자세한 정보 보기</summary>
이 프로젝트는 각 데이터셋 부분이 별도의 JSONLines 파일로 저장되기를 기대합니다:
├── ... # 데이터 디렉토리
│ ├── train.jsonl
│ ├── val.jsonl
...
저희의 경우, 각 입력 예시는 커밋입니다. 또한, 각 작성자의 커밋은 시간 순서대로 되어 있어야 합니다. 구체적으로, 각 행에는 다음 키들이 예상됩니다:
author: 커밋 작성자의 고유 식별자.message: 커밋 메시지.mods: 커밋에서 이루어진 수정 목록. 각 수정 사항은 다음 키들을 포함해야 합니다:change_type: 수정 유형 (문자열,MODIFY,ADD,DELETE,RENAME,COPY,UNKNOWN중 하나).old_path: 커밋 전 파일 경로 (change_type이ADD일 때None).new_path: 커밋 후 파일 경로 (change_type이DELETE일 때None).diff: 해당 특정 파일을 위한git diff명령어의 출력.
Step 2: 설정 선택
모델 아키텍처
이 프로젝트는 다음 모델들을 지원합니다:
자세한 내용은 src/model/configurations에 제공된 클래스나 conf/model/base_configs.py에서 제공되는 기본 설정을 참조하세요.
다음 모델들에 대한 특정 설정은 conf/model/configs.py에서 찾을 수 있습니다:
- distilGPT-2
- 무작위로 초기화된 Transformer
- CodeT5 (:scroll: CodeT5: 코드 이해 및 생성을 위한 식별자 인식 통합 사전 학습 인코더-디코더 모델)
- CodeReviewer (:scroll: 대규모 사전 학습을 통한 코드 검토 활동 자동화)
- RACE + T5 (:scroll: RACE: 검색 증강 커밋 메시지 생성)
입력 유형
이 프로젝트는 커밋 메시지 완성 작업을 위해 두 가지 종류의 입력을 탐구합니다: diff와 커밋 메시지 히스토리.
-
디코더(decoder)의 경우, 지원되는 옵션은 하나뿐입니다: 커밋 메시지 히스토리와 현재 커밋 메시지를 연결하여 컨텍스트로 전달합니다.
-
seq2seq 모델의 경우, 세 가지 지원 옵션이 있습니다:
- Diff-only: 인코더(encoder)에 diff를 전달하고, 디코더에는 현재 메시지를 전달합니다.
- History-only: 인코더에 히스토리를 전달하고, 디코더에는 현재 메시지를 전달합니다.
- Diff + history: 인코더에 diff를 전달하고, 커밋 메시지 히스토리를 현재 메시지와 연결하여 디코더에 전달합니다.
Step 3: 학습(Train)
conf/train_config.py에서 학습 설정을 정의합니다.- 사용 가능한 모델 설정 중 하나를 선택하거나 직접 추가합니다.
InputConfig에서 누락된 매개변수를 정의해야 한다는 점에 유의하십시오. CLI를 통해 하거나 단순히 재작성할 수 있습니다. 아래는 CLI를 통해 매개변수를 정의하는 예시입니다.
XXXModelConfig로 정의되고 `ConfigStore.store(name=
RACE를 파인튜닝된 CodeT5 가중치로 초기화하고 검색된 예시(retrieved examples)를 사용하여 모델을 훈련합니다.
체크포인트(checkpoint)의 경우, [hugs: Transformers 형식으로 name_or_path를 지정하여 RACEConfig에 제공하거나, 트레인 설정(train config)에서 logger.checkpoint을 올바르게 정의하여 W&B Artifacts에서 다운로드해야 합니다.
검색된 예시의 경우, 로컬로 제공하거나 트레인 설정(train config)에서 logger.retrieval을 올바르게 정의하여 W&B Artifacts에서 다운로드해야 합니다.
검색된 예시를 로컬로 제공하려면, 루트 데이터셋 디렉토리 내에 retrieval_with_history 또는 retrieval_without_history 폴더(검색에 사용된 인코더가 히스토리를 가지고 훈련되었는지 여부에 따라 다름)에 배치합니다.
├── ... # data directory
│ ├── retrieval_with_history
│ │ ├── train_predictions.jsonl
...
단계 4: 평가(Evaluate)
단계 4.1: 예측 생성(Generating predictions)
-
conf/eval_config.py에서 평가 설정을 정의합니다. -
ckpt_path에 로컬 경로를 제공하거나 W&B artifact를 사용해야 한다는 점에 유의하십시오.
후자의 경우, 아티팩트 이름은 모델 구성(model configuration)으로부터 추론됩니다. 사용 가능한 모델 구성 중 하나를 선택하거나 직접 추가할 수 있습니다.
InputConfig에서 모든 매개변수를 정의해야 한다는 점에 유의하십시오. CLI를 통해 하거나 단순히 재작성할 수 있습니다. 아래는 CLI를 통해 매개변수를 정의하는 예시입니다.
XXXModelConfig로 정의되고 ConfigStore.store(name="XXX", group="model", node=XXXModelConfig)을 통해 등록된 모델의 평가를 시작하려면 다음 명령어를 실행합니다:
python eval.py +model=XXX ++input.train_with_history=X ++input.encoder_input_type=X ++input.generate_with_history=X ++input.context_ratio=X
단계 4.2: 지표 계산(Compute metrics)
-
conf/metrics_config.py에서 지표 계산 설정을 정의합니다. -
preds_path에 모델 예측의 로컬 경로를 제공하거나 W&B 아티팩트를 사용하고 다음 매개변수들(name,version)을ArtifactMetricsConfig에서 정의해야 합니다. 이는 CLI(Command Line Interface)를 통해 하거나 직접 재작성할 수 있습니다. 아래는 CLI를 통해 매개변수를 정의하는 예시입니다.
로컬 예측에 대한 메트릭 계산을 시작하려면:
python compute_metrics.py ++preds_path=XXX
예측이 포함된 W&B 아티팩트에 대한 메트릭 계산을 시작하려면:
python compute_metrics.py ++logger.artifact_config.name=XXX ++logger.artifact_config.version=XXX
AI 자동 생성 콘텐츠
본 콘텐츠는 개발 자료 GitHub · d10ae64d의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기