그림 1: 한국어와 프랑스어로 어휘 트리밍을 보여주는 그림.
Vocabulary Trimming(VT)은 어휘에서 관련 없는 토큰을 삭제하여 다국어 LM 어휘를 대상 언어로 줄이는 모델 압축 기술입니다(그림 1 참조). 이 저장소에는 대상 언어의 다국어 LM 어휘에서 관련 없는 토큰을 제거하는 python-library vocabtrimmer
포함되어 있습니다.
그림 2: 각 다국어 LM에 대한 전체 모델 매개변수 수에 대한 임베딩 매트릭스의 비율과 상위 60개의 어휘가 포함된 VT 이후의 임베딩 매트릭스입니다.
VT의 동기는 다국어 LM이 모든 언어를 포괄할 수 있는 엄청난 어휘력을 갖고 있어 모델 크기가 커진다는 것입니다(그림 2 참조). 그러나 실제로 단일 언어 작업에 대해 다국어 LM을 미세 조정할 때는 이러한 어휘가 많이 필요하지 않습니다. 따라서 사용하지 않는 어휘를 삭제하여 모델 크기를 줄일 수 있습니다.
이론적으로 VT는 기존 다국어 LM을 압축하여 다국어 LM이 지원하는 모든 언어로 단일어 LM을 구축할 수 있습니다. 우리의 실험에서 우리는 VT가 다국어 LM의 원래 성능을 유지하면서 원래 다국어 LM보다 크기가 더 작다는 것을 보여줍니다(일반적으로 원래 어휘 크기의 약 50%이면 충분함). 평가는 7개 언어로 널리 사용되는 4개의 다국어 LM 중 4개의 NLP 작업(2개의 생성 작업과 2개의 분류 작업)에 대해 수행됩니다. 마지막으로, 우리는 이 방법론이 특별히 재교육할 필요 없이 단일 언어 모델로 작은 크기를 유지하고 잠재적으로 해로운 사회적 편견을 제한함으로써 단일 언어 및 다중 언어 세계의 장점을 모두 유지할 수 있음을 보여줍니다. 이러한 실험 결과와 기술적인 세부 사항은 "어휘 다듬기를 통한 효율적인 다국어 언어 모델 압축, 2023" 논문에서 확인하시기 바랍니다. 우리 논문에서 결과를 재현하려면 여기를 확인하세요.
뉴스: 우리 논문 "2023년 어휘 다듬기를 통한 효율적인 다국어 언어 모델 압축"이 EMNLP 2023의 결과로 승인되었습니다.
먼저 pip를 통해 lmqg
설치해 보겠습니다.
pip install vocabtrimmer
vocabtrimmer
를 사용한 어휘 다듬기
그림 3: 프랑스어로 작업을 미세 조정하는 예에서 Pre-FT와 Post-FT를 비교합니다.
기본적으로 VT는 mC4를 사용하여 언어별 토큰 집합과 각 토큰의 빈도를 찾습니다. VT의 실제 사용법은 미세 조정 전(pre-FT VT) 또는 미세 조정 후(post-FT VT) 다국어 LM에 적용하는 것입니다. 둘 다 일반적으로 잘 작동하지만 VT 이후가 더 강력하고 추가 교육이 필요하지 않으므로 이미 모델이 있는 경우 적합합니다. 그렇지 않은 경우 모델을 미세 조정하는 데 소요되는 시간을 줄일 수 있는 FT 이전 VT가 옵션이 될 수 있습니다. 우리 논문에서 FT 이전/이후 VT 비교를 참조하세요.
vocabtrimmer
다국어 LM 어휘를 다듬기 위해 다음과 같은 명령줄 인터페이스를 제공합니다.
vocabtrimmer-trimming -m MODEL -l LANGUAGE -p PATH_TO_SAVE [-v TARGET_VOCAB_SIZE] [--repo-id REPO_ID]
arguments:
-m, --model, model name on huggingface or path to local model
-l, --language, language code of tokens to keep
-p, --path-to-save, directly to save model
-v, --target-vocab-size, [optinoal] vocab size after mining
--repo-id, [optinoal] huggingface repo id to push after trimming
다음 명령은 google/mt5-small
의 어휘를 상위 60,000개의 어휘가 포함된 프랑스어로 자릅니다.
vocabtrimmer-trimming -m " google/mt5-small " -l " fr " -v 60000 -p " ckpts/mt5-small-trimmed-fr-60000 "
다국어 LM의 어휘 크기는 일반적으로 250k(XLM-R, mBART, mT5)이며, 목표 어휘 크기를 유효 어휘 크기인 60k로 설정하는 것이 좋습니다. 60k보다 적은 어휘 크기는 성능 저하를 일으킬 수 있지만 어떤 경우에는 원래 성능을 유지할 수 있습니다(논문 확인). 대상 어휘 크기를 지정하지 않으면 mC4 데이터 세트 또는 지정된 대상 코퍼스에 나타나는 전체 어휘를 사용합니다.
vocabtrimmer
Python을 통해 다국어 LM을 다듬는 API를 제공합니다. 다음 명령은 google/mt5-small
의 어휘를 상위 60,000개의 어휘가 포함된 프랑스어로 자릅니다.
import vocabtrimmer
trimmer = vocabtrimmer . VocabTrimmer ( "google/mt5-small" )
trimmer . trim_vocab (
path_to_save = "ckpts/mt5-small-trimmed-fr-60000" ,
language = "fr" ,
target_vocab_size = 60000 )
리소스를 사용하는 경우 다음 문서를 인용하고 필요한 경우 모델을 재현하는 코드를 확인하세요.
@inproceedings{ushio2023efficient,
title = "An Efficient Multilingual Language Model Compression through Vocabulary Trimming",
author = "Ushio, Asahi and
Zhou, Yi and
Camacho-Collados, Jose",
booktitle = "Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing (EMNLP): Findings",
month = Dec,
year = "2023",
address = "",
publisher = "Association for Computational Linguistics",
}