Porting fairseq WMT19 translation system to 🤗 Transformers

TL;DR

허깅 페이스는 fairseq WMT19 번역 시스템을 Transformers 라이브러리로 이식하여, AutoTokenizer와 AutoModelForSeq2SeqLM으로 로드할 수 있는 영어‑러시아어 및 영어‑독일어 번역용 사용 가능한 모델을 제공했습니다.

준비 및 파일 구조

이식 작업은 작업 디렉토리를 설정하고 필요한 저장소들을 설치함으로써 시작되었습니다: fairseq, mosesdecoder, fastBPE, 그리고 dev extras가 포함된 transformers 라이브러리. 저자는 ~/porting 폴더를 만들고 각 저장소를 클론한 후 편집 가능한 모드로 설치했습니다. fairseq WMT19 모델은 네 개의 체크포인트(model1.pt–model4.pt), 소스 및 대상 사전(dict.en.txt, dict.ru.txt), 그리고 BPE 코드 파일(bpecodes)을 제공합니다. 이러한 파일들을 검토하여 모델의 체크포인트, 어휘, 토큰화 아티팩트를 이해했습니다.

토크나이저 이식

토크나이저 인코더는 기존 tokenization_xlm.py 파일을 적응시켜 이식되었습니다. 저자는 tokenization_xlm.py를 복사하여 tokenization_fsmt.py로 만들고, 클래스 이름을 XLM에서 FSMT로 바꾸며 사용하지 않는 코드를 제거했습니다. WMT19 모델은 별도의 소스 및 대상 어휘를 사용하므로, 토크나이저의 get_vocab과 vocab_size 속성을 소스 어휘를 반환하도록 오버라이드했습니다. BPE 처리는 fastBPE 스타일(@@이 비최종 서브워드에 사용)에서 Transformers 스타일(이 최종 서브워드에 사용)으로 변경되었고, 어휘 매핑은 fairseq.data.dictionary.Dictionary.load를 사용하여 올바른 ID 매핑을 얻기 위해 수행되었습니다. 디코더는 나중에 출력 ID를 문자열로 변환하고, BPE 마커를 제거하고, Moses 디토큰화를 적용하여 완성되었습니다.

모델 변환 및 아키텍처

변환 스크립트 convert_fsmt_original_pytorch_checkpoint_to_pytorch.py는 BART 변환 스크립트에서 시작하여 필요한 부분을 점진적으로 추가하여 만들어졌습니다. 모델 가중치는 fairseq 허브 API를 사용하여 fairseq 체크포인트에서 추출되었으며, 이는 이전의 결합된 in_proj 가중치를 별도의 k/q/v 투영으로 변환하는 작업도 처리합니다. 구성 인수는 fairseq 인수에서 Transformers FSMTConfig로 매핑되었으며, 여기에는 activation_dropout, attention_dropout, d_model, dropout, max_position_embeddings, num_hidden_layers, src_vocab_size, tgt_vocab_size, 그리고 bos, pad, eos 토큰 ID가 포함됩니다. 모델 아키텍처는 modeling_bart.py에서 파생되었으며, fairseq의 TransformerEncoder와 TransformerDecoder에 맞게 레이어를 조정했습니다(예: 사용하지 않는 레이어 제거, 누락된 레이어 추가, 소스 및 대상 어휘 크기의 올바른 사용 보장). 사인usoidal 위치 임베딩은 TorchScript 요구 사항을 충족시키면서 결정적 가중치가 저장되지 않도록 일반 nn.Embedding 서브클래스로 재구현되었습니다.

테스트 및 평가

토크나이저와 모델링 구성 요소에 대한 단위 테스트가 추가되었으며, 기존 BART 테스트 스위트를 기반으로 하지만 듀얼 어휘 설정에 맞게 조정되었습니다. 빠른 CI 테스트를 위해 무작위 가중치를 가진 작은 모델이 생성되었습니다. 수동 검증 스크립트는 디버거를 사용하여 중간 결과를 정렬하면서 fairseq와 Transformers 구현의 출력을 토큰별 및 문장별로 비교했습니다. 빔 탐색 동작이 조정되었습니다: 이식된 모델은 early_stopping=False를 사용하며, 빔 크기 5를 사용할 때 fairseq의 기본값인 early_stopping=True보다 높은 BLEU 점수를 제공하는 것으로 밝혀졌습니다. WMT19 테스트 세트에서 sacrebleu를 사용한 평가에서 빔 크기 5와 길이 패널티 1.1을 적용한 ru‑en 방향에 대해 BLEU 점수 39.0498을 얻었습니다. 저자는 원래 fairseq 논문이 네 개의 체크포인트 앙상블과 재순위 지정 단계를 사용하기 때문에 더 높은 점수를 보고한다고 언급했는데, 이는 이식에서 재현되지 않았습니다.

업로드, 통합 및 자동화

변환 후 모델 파일은 저자의 계정 하에 Hugging Face S3에 업로드되었고, posteriormente facebook 및 allenai 조직으로 이동되었습니다. 모델은 표준 API를 사용하여 로드할 수 있으며, 예를 들어 FSMTTokenizer.from_pretrained("facebook/wmt19-en-ru))와 같이 사용할 수 있습니다. AutoConfig, AutoTokenizer, 및 AutoModelWithLMHead는 fsmt 모델 유형을 인식하도록 업데이트되어 파이프라인 스타일 사용이 가능해졌습니다. 각 변형에 대한 모델 카드가 작성되어 언어 쌍, 라이선스, 데이터셋, 평가 메트릭을 상세히 설명했습니다. 문서는 기존 BART 문서를 FSMT에 맞게 적응시켜 추가되었으며, make docs를 사용하여 빌드 프로세스가 검증되었습니다.

시사점 및 마무리 생각

WMT19 시스템을 Transformers로 이식함으로써 다운로드 크기가 약 13 GB(옵티마이저 상태 포함)에서 모델당 약 1.1 GB로 줄어들어, 다운스트림 사용을 위한 번역기의 접근성이 높아졌습니다. 이식은 원래의 네 개 체크포인트 앙상블을 지원하지 않지만, 단일 체크포인트 모델은 여전히 강력한 번역 품질을 달성합니다. 이 작업은 기존 Transformers 구성 요소(BART 기반 모델링, XLM 기반 토큰화, 변환 유틸리티)를 재사용하고 적응시켜 고품질 fairseq 모델을 라이브러리에 가져올 수 있음을 보여주며, 저자는 PR 검토 과정에서 Sam Shleifer의 멘토링과 Lysandre Debut 및 Sylvain Gugger의 기여에 감사를 표했습니다.}

{"summary": "허깅 페이스는 fairseq WMT19 번역 모델(en‑ru, ru‑en, de‑en, en‑de)를 🤗 Transformers 라이브러리로 이식하여, 사용자가 표준 Transformers API를 통해 이러한 고품질 번역기를 로드하고 실행할 수 있도록 했습니다."}

{"title": "fairseq WMT19 번역 시스템을 🤗 Transformers로 이식"}]}null){

Sources

관련

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch