Generative AI

NVIDIA NeMo를 활용한 현지화된 다국어 LLM 트레이닝, 1부

Reading Time: 8 minutes

오늘날과 같이 글로벌화된 세계에서 다양한 언어를 이해하고 소통하는 AI 시스템의 능력은 점점 더 중요해지고 있습니다. 거대 언어 모델(LLM)은 자연어 처리 분야에 혁명을 일으켜 AI가 인간과 유사한 텍스트를 생성하고, 질문에 답하고, 다양한 언어 작업을 수행할 수 있도록 지원합니다. 그러나 대부분의 주류 LLM은 주로 영어로 구성된 데이터 말뭉치에 대해 트레이닝되었으므로 다른 언어 및 문화적 맥락에 대한 적용 가능성이 제한됩니다. 

이때 다국어 LLM을 활용하면 언어 격차를 해소하고 더 많은 사용자를 위해 AI의 잠재력을 실현할 수 있습니다.

특히 현재의 최첨단 LLM은 제한된 트레이닝 데이터와 언어의 고유한 언어 특성으로 인해 동남아시아(SEA) 언어를 처리하는 데 어려움을 겪는 경우가 많습니다. 그 결과 영어와 같이 리소스가 많은 언어에 비해 성능이 저하됩니다. 일부 LLM은 특정 SEA 언어를 어느 정도 처리할 수 있지만 여전히 일관성이 없거나, 오해의 소지가 있거나, 안전 문제가 있습니다. 

한편, SEA에서는 현지화된 다국어 LLM을 개발하는 데 높은 관심과 의지를 보이고 있습니다. 한 가지 주목할 만한 사례로, 싱가포르는 국가 멀티모달 거대 언어 모델 프로그램(NMLP)을 개발하기 위해 7,000만 싱가포르 달러 규모의 이니셔티브에 착수했습니다. 

이는 국가 차원에서 진행하는 2개년 이니셔티브로, 동남아시아 최초의 지역 LLM을 구축하는 것을 목표로 지역의 고유한 언어 및 문화적 뉘앙스를 이해하는 데 초점을 맞추고 있습니다. 동남아시아에서 AI 솔루션에 대한 수요가 증가함에 따라 현지화된 다국어 LLM의 개발은 전략적으로 필요하게 되었습니다. 

현재의 최첨단 LLM이 지역 언어의 복잡성을 충분히 지원하지 못하는 추세는 다른 지역에서도 유사하게 나타납니다. 이러한 모델은 기업과 조직이 고객에게 더 나은 서비스를 제공하고, 프로세스를 자동화하고, 지역의 다양한 사람들이 공감할 수 있는 보다 매력적인 콘텐츠를 만드는 데 도움이 될 수 있습니다. 

NVIDIA NeMo는 어디서든 맞춤화된 생성형 AI를 개발할 수 있는 엔드 투 엔드 플랫폼입니다. 여기에는 트레이닝용 도구, 검색 증강 생성(RAG), 가드레일 및 툴킷, 데이터 큐레이션 도구, 사전 트레이닝된 모델이 포함되어 기업이 생성형 AI를 쉽고 비용 효율적이며 빠르게 채택할 수 있게 합니다.

이 시리즈에서는 NeMo를 사용하여 기본 LLM에 새로운 언어 지원을 추가하는 모범 사례를 살펴봅니다. 이 튜토리얼에서는 토크나이저 트레이닝 및 병합, 모델 아키텍처 수정, 모델 연속 사전 트레이닝 등의 단계를 안내합니다. 

이 게시물에서는 태국어 위키백과 데이터를 사용하여 GPT-1.3B 모델을 연속적으로 사전 트레이닝합니다. 1부에서는 다국어 토크나이저 트레이닝 및 병합에 중점을 두고, 2부에서는 NeMo 모델에서 맞춤형 토크나이저를 채택하고 연속 사전 트레이닝을 수행하는 것에 대해 논의합니다.

이러한 지침을 따르면 다국어 AI의 성장에 기여하고 더 많은 전 세계 사용자가 LLM의 이점을 누릴 수 있습니다. 

현지화된 다국어 LLM 트레이닝 개요

다국어 LLM의 중요한 문제 중 하나는 대상 언어를 이해하는 사전 트레이닝된 파운데이션 LLM이 부족하다는 것입니다. 다국어 LLM을 구성하는 방법은 다음과 같습니다.

  • 다국어 데이터 세트를 사용하여 LLM을 처음부터 사전 트레이닝합니다.
  • 대상 언어의 데이터 세트를 사용하여 영어 기반 모델에 대한 연속 사전 트레이닝을 채택합니다. 

리소스가 적은 언어의 경우에는 후자의 경우가 더 실현 가능합니다. 리소스가 적은 언어는 정의에 따라 사용 가능한 트레이닝 데이터가 제한되어 있습니다. 연속 사전 트레이닝은 모델이 원래 트레이닝된 리소스가 많은 언어에서 전이 트레이닝을 활용하여 비교적 적은 양의 데이터로도 모델을 새로운 언어에 효과적으로 적응시킬 수 있습니다. 

처음부터 사전 트레이닝하는 경우 동일한 성능 수준에 도달하려면 리소스가 적은 언어로 된 훨씬 더 많은 양의 데이터가 필요합니다. 

연속 사전 트레이닝을 위해 리소스가 적은 데이터를 사용하려고 할 때 제기되는 한 가지 문제는 최적의 토크나이저를 사용하지 못하는 것입니다. 대부분의 파운데이션 모델은 바이트 페어 인코딩(BPE) 토크나이저를 채택합니다. 기존 토크나이저는 리소스가 적은 언어의 고유한 문자, 보조 단어, 형태론을 충분히 다루고 있지 않습니다. 

표현력이 풍부한 토크나이저가 없으면 모델이 리소스가 적은 언어를 효율적으로 표현하기 어려워 최적의 성능을 발휘하지 못합니다. 모델이 연속 사전 트레이닝 중에 리소스가 적은 언어 데이터를 더 효과적으로 처리하고 트레이닝할 수 있도록 하는 맞춤형 토크나이저를 구축해야 합니다.

이러한 문제의 해결을 위해 NVIDIA는 LLM에 대한 새로운 언어 지원을 추가하는 다음 워크플로우를 제안합니다. 

그림 1. 현지화된 다국어 LLM 트레이닝 워크플로우

이 워크플로우는 태국어 위키백과 데이터를 다음 단계의 예시 입력으로 사용합니다.

  1. GPT 모델을 다운로드하고 추출하여 모델 가중치와 모델 토크나이저를 얻습니다.
  2. 토크나이저 트레이닝을 맞춤화하고 병합하여 이중 언어 토크나이저를 출력합니다.
  3. 이중 언어 토크나이저를 수용하도록 GPT 모델 아키텍처를 수정합니다.
  4. 태국어 위키백과 데이터를 사용해 연속 사전 트레이닝을 수행합니다. 

이 워크플로우는 포괄적이며 다양한 언어 데이터 세트에 적용할 수 있습니다. 1단계와 2단계는 이 게시물에서 다룹니다. 3단계와 4단계는 2부를 참조하세요.

튜토리얼 사전 요건

GPT-1.3B 모델의 연속 사전 트레이닝을 위해 다음 하드웨어 설정을 추천합니다.

NGC 카탈로그는 성능 최적화된 컨테이너, 사전 트레이닝된 AI 모델, 온프레미스나 클라우드 또는 엣지에 배포할 수 있는 산업별 SDK를 통해 엔드 투 엔드 워크플로우를 가속화하는 GPU 가속 소프트웨어에 대한 액세스를 제공합니다.

첫 번째 단계로, NGC 카탈로그에서 NeMo 프레임워크 컨테이너를 다운로드하고 컨테이너 이미지에서 JupyterLab을 실행합니다.

docker pull nvcr.io/nvidia/nemo:24.01.01.framework
 
docker run -it --gpus all -v <your working directory>:<your working directory in container> --workdir <your working directory> -p 8888:8888/ nvcr.io/nvidia/nemo:24.01.01.framework bash -c "jupyter lab"

데이터 수집 및 정리

이 튜토리얼에서는 GitHub의 NVIDIA NeMo 큐레이터 리포지토리를 사용하여 태국어 위키백과의 고품질 데이터를 다운로드하고 큐레이팅합니다. NVIDIA NeMo 큐레이터는 LLM 트레이닝을 위해 NLP 데이터를 큐레이팅하기 위한 확장 가능한 데이터 마이닝 모듈 컬렉션으로 구성됩니다. NLP 연구원은 NeMo 큐레이터 내의 모듈을 통해 큐레이팅되지 않은 방대한 웹 말뭉치에서 고품질 텍스트를 대규모로 마이닝할 수 있습니다.

큐레이션 파이프라인의 경우 다음 단계를 따르세요. 

  1. 언어를 구분하여 태국어가 아닌 콘텐츠를 필터링합니다.
  2. 문서를 다시 포맷하여 유니코드를 수정합니다.
  3. 문서 수준의 완전 중복 제거 및 퍼지 중복 제거를 수행하여 중복된 데이터 포인트를 제거합니다.
  4. 문서 수준의 휴리스틱 필터링을 수행하여 품질이 낮은 문서를 제거합니다.

추가 언어에 대한 큐레이션 프로세스는 NVIDIA NeMo 큐레이터에서 시연된 것과 동일한 플로우를 사용하여 복제할 수 있습니다. 

모델 다운로드 및 추출

이 게시물에서는 nemo-megatron-gpt-1.3B 모델을 사용합니다. 이 모델은 Pile 데이터 세트(단일 언어 영어 데이터 세트)에서 트레이닝되었습니다. HuggingFace에서 직접 모델을 다운로드할 수 있어야 합니다. 또는 다음 명령을 실행하여 모델을 다운로드할 수 있습니다.

!wget -P './model/nemo_gpt_megatron_1pt3b_fb16/' https://huggingface.co/nvidia/nemo-megatron-gpt-1.3B/resolve/main/nemo_gpt1.3B_fp16.nemo

다운로드한 파일의 MD5 검사합을 확인하여 무결성을 확인합니다.

!md5sum nemo_gpt1.3B_fp16.nemo

출력은 다음과 같아야 합니다.

38f7afe7af0551c9c5838dcea4224f8a  nemo_gpt1.3B_fp16.nemo

모델을 다운로드한 후 모델에서 vocab.json 및 merge.txt 파일을 추출합니다.

!tar -xvf ./model/nemo_gpt_megatron_1pt3b_fb16/nemo_gpt1.3B_fp16.nemo -C ./model/nemo_gpt_megatron_1pt3b_fb16/

이 명령은 다음 출력을 생성합니다. 이제 vocab.json 및 merge.txt 파일에 액세스할 수 있으며, 이는 나중에 토크나이저 병합에 사용됩니다.

./ 
./50284f68eefe440e850c4fb42c4d13e7_merges.txt ./c4aec99015da48ba8cbcba41b48feb2c_vocab.json ./model_config.yaml ./model_weights.ckpt

토크나이저 트레이닝 

다른 언어와 영어를 토큰화할 수 있는 토크나이저를 트레이닝하기 위해 다음 두 가지 접근 방식 중 하나를 채택할 수 있습니다.

  • 다국어 데이터 세트: 영어가 포함된 다국어 데이터 세트를 사용하여 처음부터 토크나이저를 트레이닝합니다. 장점은 다국어 데이터 세트의 실제 분포를 얻을 수 있다는 것입니다.
  • 단일 언어 데이터 세트: 단일 언어 토크나이저를 트레이닝한 다음, 기존 영어 토크나이저와 병합합니다. 장점은 영어 토큰의 기존 토큰 매핑을 유지하고 파운데이션 모델의 임베딩 레이어를 재사용할 수 있다는 것입니다. 토크나이저 트레이닝에 소요되는 시간이 훨씬 짧습니다.

이 튜토리얼에서는 단일 언어 데이터 세트 접근 방식을 사용하여 사전 트레이닝된 GPT Megatron 모델의 임베딩 레이어를 유지합니다.

이 방법의 자세한 단계는 다음과 같습니다.

  1. 토크나이저 트레이닝 데이터 수집: 연속 사전 트레이닝을 위해 준비된 데이터 세트의 하위 샘플을 만듭니다. 이 튜토리얼에서는 트레이닝 데이터의 30%가 토크나이저 트레이닝을 위해 무작위로 샘플링됩니다.
  2. 맞춤형 GPT2 토크나이저 트레이닝: 사전 트레이닝된 HuggingFace GPT2 토크나이저를 시작점으로 사용하고 자체 데이터 말뭉치를 사용하여 TH GPT2 토크나이저를 트레이닝합니다.
  3. 두 토크나이저 병합: 두 토크나이저 모두에 대해 merges.txt 및 vocab.json을 수동으로 병합합니다. 

이 튜토리얼에서는 태국어를 대상 언어로 사용합니다.

필요한 라이브러리 가져오기 

시작하기 전에 다음 라이브러리를 가져오세요.

import os 
from transformers import GPT2Tokenizer, AutoTokenizer 
import random import json

트레이닝용 말뭉치 준비

트레이닝용 문서 데이터에서 샘플링하여 .txt 형식의 출력 파일에 작성하는 함수 convert_jsonl_to_txt를 정의합니다. 이 튜토리얼에서는 ‘text’를 JSON 키로 사용하여 트레이닝용 문서 데이터에 액세스합니다. 필요에 따라 키를 변경합니다.

def convert_jsonl_to_txt(input_file, output_file, percentage, key='text'):
  with open(input_file, 'r', encoding='utf-8') as in_file, open(output_file, 'a', encoding='utf-8') as out_file:
    for line in in_file:
      if random.random() < percentage:
          data = json.loads(line)
          out_file.write(f"{data[key].strip()}\n")

이제 입력 파일을 읽고 토크나이저 트레이닝용 말뭉치를 구성할 수 있습니다.

for file in os.listdir('./training_data'):
    if 'jsonl' not in file:
        continue
    input_file = os.path.join('./training_data',file)
    convert_jsonl_to_txt(input_file,'training_corpus.txt', 0.3)
 
with open('training_corpus.txt', 'r') as file:
    training_corpus = file.readlines()

트레이닝용 말뭉치가 너무 커서 하나의 목표에 로드할 수 없는 경우 반복자 메서드를 사용하여 트레이닝용 말뭉치를 로드합니다. 자세한 내용은 이전 토크나이저에서 새 토크나이저 트레이닝하기를 참조하세요.

단일 언어 토크나이저 트레이닝

사전 트레이닝된 GPT2 토크나이저를 시작점으로 로드한 다음, tokenizer.train_new_from_iterator 메서드를 호출하여 새 토크나이저를 트레이닝합니다.

Vocab_size는 tokenizer.train_new_from_iterator의 중요한 매개 변수입니다. 이는 어휘에서 고유한 토큰의 최대 수를 결정합니다. 값이 클수록 더 세분화된 토큰화가 가능하지만 모델 복잡성이 증가하는 한편, 값이 작을수록 고유한 토큰 수는 적지만 모델은 더 단순해져 더 대략적인 토큰화가 가능합니다.

old_tokenizer = AutoTokenizer.from_pretrained("gpt2")
new_tokenizer = old_tokenizer.train_new_from_iterator(training_corpus, vocab_size=8000)
new_tokenizer.save_pretrained('./new_monolingual_tokenizer/')

새로운 단일 언어 토크나이저 트레이닝을 완료했으므로 이제 대상 언어에서 새 토크나이저의 효과를 검사합니다. 사전 트레이닝된 GPT2 토크나이저와 TH 토크나이저를 모두 사용하여 각각 태국어 문장과 영어 문장을 토큰화합니다.

  • 태국어 문장: “เมืองหลวงของประเทศไทยคือกรุงเทพฯ”(“태국의 수도는 방콕입니다.”라는 뜻)
  • 영어 문장:  “The capital of Thailand is Bangkok.”(“태국의 수도는 방콕입니다.”라는 뜻)
Thai_text='เมืองหลวงของประเทศไทยคือกรุงเทพฯ'
print(f"Sentence:{Thai_text}")
print("Output of TH tokenizer: ",new_tokenizer.tokenize(Thai_text,return_tensors='pt'))
print("Output of pretrained tokenizer: ", old_tokenizer.tokenize(Thai_text,return_tensors='pt'))
Eng_text="The capital of Thailand is Bangkok."
print(f"Sentence:{Eng_text}")
print("Output of TH tokenizer: ",new_tokenizer.tokenize(Eng_text,return_tensors='pt'))
print("Output of pretrained tokenizer: ", old_tokenizer.tokenize(Eng_text,return_tensors='pt'))

다음 줄이 출력될 것으로 예상됩니다.

Sentence:เมืองหลวงของประเทศไทยคือกรุงเทพฯ
Output of TH tokenizer:  ['à¹Ģม', 'ื', 'à¸Ńà¸ĩหลวà¸ĩ', 'à¸Ĥà¸Ńà¸ĩà¸Ľà¸£à¸°à¹Ģà¸Ĺศà¹Ħà¸Ĺย', 'à¸Ħ', 'ื', 'à¸Ńà¸ģร', 'ุ', 'à¸ĩà¹Ģà¸Ĺà¸ŀฯ']
Output of pretrained tokenizer:  ['à¹', 'Ģ', 'à¸', '¡', 'à¸', '·', 'à¸', 'Ń', 'à¸', 'ĩ', 'à¸', '«', 'à¸', '¥', 'à¸', '§', 'à¸', 'ĩ', 'à¸', 'Ĥ', 'à¸', 'Ń', 'à¸', 'ĩ', 'à¸', 'Ľ', 'à¸', '£', 'à¸', '°', 'à¹', 'Ģ', 'à¸', 'Ĺ', 'à¸', '¨', 'à¹', 'Ħ', 'à¸', 'Ĺ', 'à¸', '¢', 'à¸', 'Ħ', 'à¸', '·', 'à¸', 'Ń', 'à¸', 'ģ', 'à¸', '£', 'à¸', '¸', 'à¸', 'ĩ', 'à¹', 'Ģ', 'à¸', 'Ĺ', 'à¸', 'ŀ', 'à¸', '¯']
Sentence:The capital of Thailand is Bangkok.
Output of TH tokenizer:  ['The', 'Ġc', 'ap', 'ital', 'Ġof', 'ĠThailand', 'Ġis', 'ĠB', 'ang', 'k', 'ok', '.']
Output of pretrained tokenizer:  ['The', 'Ġcapital', 'Ġof', 'ĠThailand', 'Ġis', 'ĠBangkok', '.']

출력에서 TH 토크나이저는 태국어 문장의 경우 영어 토크나이저에 비해 훨씬 짧은 토큰 리스트를 생성하고 영어 문장의 경우 그 반대인 것을 볼 수 있습니다. 

그 이유는 많은 태국어 문자, 특히 모음과 성조 표시를 나타내는 문자가 영어 토크나이저에서 어휘로 간주되지 않을 가능성이 높기 때문입니다. 토크나이저는 이를 개별 바이트로 분할하거나 UNK 토큰으로 대체하여 토큰 수를 늘릴 수 있습니다.

토크나이저 병합

두 토크나이저를 병합하려면 vocab.json merges.txt 파일을 처리해야 합니다. 파일을 병합하는 방법은 다음과 같습니다.

vocab.json 파일의 경우:

  1. 사전 트레이닝된 토크나이저의 vocab.json ID-토큰 매핑을 유지합니다.
  2. 새 토큰을 발견하면 맞춤형 단일 언어 토크나이저의 vocab.json 파일을 반복합니다.
  3. 이를 누적 토큰 ID와 함께 기존 vocab.json 파일에 추가합니다.

merges.txt 파일의 경우:

  1. 사전 트레이닝된 토크나이저의 merges.txt 파일은 변경되지 않은 상태로 유지됩니다.
  2. 맞춤형 단일 언어 토크나이저의 merges.txt 파일을 반복합니다. 
  3. 새로운 병합 규칙이 발견되면 이를 기존 merges.txt에 추가합니다. 

규칙은 병합할 때 원래 순서에 관계없이 vocab.json 파일 또는 merges.txt 파일의 합집합을 취할 수 없다는 것입니다. 

vocab.json의 경우 사전 트레이닝된 임베딩 레이어를 재사용하려면 기존 ID-토큰 매핑을 동일하게 유지해야 합니다. 새로 병합된 토크나이저를 사전 트레이닝된 모델에 로드하고‘dog’ 토큰의 임베딩을 가져오려고 할 때 매핑이 방해를 받는 경우 모델은 병합 중에 ‘dog’ 토큰의 토큰 ID가 변경되므로 ‘cat’과 같은 다른 토큰의 사전 트레이닝된 임베딩을 출력할 수 있습니다.

merges.txt의 경우 merge.txt의 병합 규칙 순서는 새 텍스트를 토큰화할 때 BPE 토크나이저가 최적으로 작동하는 데 중요합니다. 토크나이저는 이러한 규칙을 첫 번째 규칙에서 시작하여 더 이상 적용할 규칙이 없을 때까지 리스트를 따라 순차적으로 적용합니다. 병합 규칙의 순서를 변경하면 토크나이저의 성능에 상당한 영향을 미쳐 최적의 토큰화가 이루어지지 않을 수 있습니다. 

예를 들면 다음과 같습니다. 토큰 리스트 ['N', 'VI', 'D', 'IA']와 다음과 같은 두 가지 병합 규칙 세트가 있다고 가정해 보겠습니다.

Set A: 
 
     N VI 
 
     D IA 
 
     NVI DIA
 
Set B: 
 
     D IA 
 
     NVI DIA 
 
     N VI

세트 A를 토큰 리스트에 적용할 때 토크나이저는 주어진 순서로 병합 규칙을 따릅니다.

  1. ['N', 'VI', 'D', 'IA'] -> ['NVI', 'D', 'IA'](규칙 1 적용됨.)
  2. ['NVI', 'D', 'IA'] -> ['NVI', 'DIA'](규칙 2 적용됨.)
  3. ['NVI', 'DIA'] -> ['NVIDIA'](규칙 3 적용됨.)

토큰화된 최종 출력은 원하는 결과인 ['NVIDIA']입니다.

그러나 세트 B를 동일한 토큰 리스트에 적용하면 토크나이저에 문제가 발생합니다.

  1. ['N', 'VI', 'D', 'IA'] -> ['N', 'VI', 'DIA'](규칙 1 적용됨.)
  2. ['N', 'VI', 'DIA'](다음 병합 규칙 ‘NVI‘의 첫 번째 토큰을 찾을 수 없으므로 추가 규칙을 적용할 수 없음.)

이 경우 병합 규칙 'N VI' 'NVI DIA' 뒤에 나타나므로 토크나이저가  'N' 'VI' 병합에 실패합니다. 결과적으로 토크나이저는 원하는 ['NVIDIA'] 대신 차선의 출력  ['N', 'VI', 'DIA']를 생성합니다.

규칙의 순서를 변경하면 토크나이저의 동작이 변경되어 잠재적으로 성능이 저하됩니다.

토크나이저 병합을 위해 다음 코드를 실행합니다.

output_dir = './path_to_merged_tokenizer'
 
# Make the directory if necessary
if not os.path.exists(output_dir ):
  os.makedirs(output_dir)
 
#Read vocab files
old_vocab = json.load(open(os.path.join('./path_to_pretrained_tokenizer', 'vocab.json')))
new_vocab = json.load(open(os.path.join('./path_to_cusotmized_tokenizer', 'vocab.json')))
next_id = old_vocab[max(old_vocab, key=lambda x: int(old_vocab[x]))] + 1
# Add words from new tokenizer
for word in new_vocab.keys():
  if word not in old_vocab.keys():
    old_vocab[word] = next_id 
 
    next_id += 1
 
# Save vocab
with open(os.path.join(output_dir , 'vocab.json'), 'w') as fp:
  json.dump(old_vocab, fp, ensure_ascii=False)
old_merge_path = os.path.join('./path_to_pretrained_tokenizer', 'merges.txt')
new_merge_path = os.path.join('./path_to_cusotmized_tokenizer', 'merges.txt')
#Read merge files
with open(old_merge_path, 'r') as file:
  old_merge = file.readlines()
with open(new_merge_path, 'r') as file:
  new_merge = file.readlines()[1:] 
 
#Add new merge rules, the order of merge rule has to be maintained
old_merge_set = set(old_merge)
combined_merge = old_merge + [merge_rule for merge_rule in new_merge if merge_rule not in old_merge_set] 
 
# Save merge.txt
with open(os.path.join(output_dir , 'merges.txt'), 'w') as file:
  for line in combined_merge:
    file.write(line)

이제 결합된 토크나이저를 로드 및 테스트하여 토큰화 출력을 사전 트레이닝된 토크나이저 및 맞춤형 단일 언어 토크나이저와 비교할 수 있습니다. 결합된 토크나이저가 대상 언어와 영어 모두를 토큰화하는 데 잘 작동하는 것을 확인할 수 있습니다. 

결론

지금까지 영어와 대상 언어를 토큰화할 수 있는 BPE 토크나이저를 성공적으로 사용자 정의했습니다. 

다음 게시물에서는 사전 트레이닝된 모델의 임베딩 레이어를 변경하여 맞춤형 토크나이저를 채택하고 NeMo에서 연속 사전 트레이닝을 위해 맞춤형 토크나이저와 함께 수정된 모델을 사용하기 시작합니다. 

다국어 토크나이저 트레이닝을 시작하려면 GitHub에서 오픈 소스 NeMo 큐레이터를 다운로드 및 설정하여 트레이닝을 위한 리소스가 적은 언어 데이터 세트를 큐레이팅하세요. 또는 NeMo 마이크로 서비스 얼리 액세스 프로그램의 일환으로 NVIDIA NeMo 큐레이터에 대한 액세스를 요청하여 데이터 큐레이션 파이프라인을 가속화하고 단순화할 수도 있습니다.

관련 리소스

Discuss (0)

Tags