처음부터 BERT 모델을 훈련시키는 방법

소스 노드 : 1013329

처음부터 BERT 모델을 훈련시키는 방법

BERT의 이탈리아 사촌인 FiliBERTo를 만나보세요.


By 제임스 브릭스, 데이터 과학자



BERT, 그러나 이탈리아에서는 — 작성자의 이미지

 

내 기사의 대부분은 자연어 처리(NLP)의 세계를 지배하고 언어 모델의 새로운 시대를 열었던 모델인 BERT에 초점을 맞추었습니다.

이전에 변환기 모델(예: BERT)을 사용해 본 적이 없는 분들을 위해 프로세스는 다음과 같습니다.

  • pip install transformers
  • 사전 훈련된 변환기 모델 초기화 — from_pretrained.
  • 일부 데이터에서 테스트해 보세요.
  • 아마도 모델을 미세 조정합니다(좀 더 훈련시킵니다).

이것은 훌륭한 접근 방식이지만, 이 방법만 사용한다면 자체 변압기 모델을 만드는 데 대한 이해가 부족합니다.

그리고 자체 변환기 모델을 만들 수 없는 경우 문제에 맞는 사전 훈련된 모델이 있어야 하지만 항상 그런 것은 아닙니다.



영어가 아닌 BERT 모델에 대해 묻는 몇 가지 의견

 

따라서 이 기사에서는 자체 변환기 모델, 특히 RoBERTa라고 하는 BERT의 추가 개발 버전을 구축하기 위해 취해야 하는 단계를 살펴보겠습니다.

개요

 
 
프로세스에는 몇 가지 단계가 있으므로 시작하기 전에 먼저 수행해야 할 작업을 요약해 보겠습니다. 전체적으로 네 가지 주요 부분이 있습니다.

  • 데이터 가져 오기
  • 토크나이저 구축
  • 입력 파이프라인 만들기
  • 모델 훈련

이러한 각 섹션을 완료한 후에는 우리가 구축한 토크나이저와 모델을 가져와서 둘 다 저장하여 평소와 같은 방식으로 사용할 수 있습니다. from_pretrained.

데이터 가져오기

 
 
모든 기계 학습 프로젝트와 마찬가지로 데이터가 필요합니다. 변환기 모델 훈련을 위한 데이터 측면에서 선택의 폭이 매우 넓습니다. 거의 모든 텍스트 데이터를 사용할 수 있습니다.



HuggingFace의 데이터 세트 라이브러리를 사용하여 OSCAR 데이터 세트를 다운로드하기 위한 비디오 연습

 

그리고 인터넷에 많이 있는 것이 하나 있다면 그것은 바로 구조화되지 않은 텍스트 데이터입니다.

인터넷에서 스크랩한 텍스트 영역에서 가장 큰 데이터 세트 중 하나는 OSCAR 데이터 세트입니다.

OSCAR 데이터세트는 수많은 언어를 자랑합니다. 처음부터 훈련하는 가장 명확한 사용 사례 중 하나는 Telugu 또는 Navajo와 같이 덜 일반적으로 사용되는 언어에 BERT를 적용할 수 있다는 것입니다.

불행하게도 제가 어느 정도 유능하게 말할 수 있는 유일한 언어는 영어입니다. 하지만 제 여자친구는 이탈리아어이므로 Laura는 이탈리아어를 사용하는 BERT 모델인 FiliBERTo의 결과를 평가할 것입니다.

따라서 OSCAR 데이터세트의 이탈리아어 세그먼트를 다운로드하기 위해 HuggingFace의 datasets 라이브러리 — 함께 설치할 수 있음 pip install datasets. 그런 다음 다음을 사용하여 OSCAR_IT를 다운로드합니다.

살펴 보자 dataset 목적.

좋습니다. 이제 토크나이저를 구축할 때 사용할 수 있는 형식으로 데이터를 저장해 보겠습니다. 우리는 다음 내용만 포함하는 일반 텍스트 파일 세트를 만들어야 합니다. text 데이터세트의 기능을 사용하고 각 기능을 분할할 것입니다. 견본 개행 사용 n.

우리의 이상 data/text/oscar_it 우리가 찾을 디렉토리는 다음과 같습니다:


일반 텍스트 OSCAR 데이터를 나타내는 .txt 파일로 가득 찬 Windows 탐색기 창을 표시하는 스크린샷
일반 텍스트 OSCAR 파일이 포함된 디렉토리

 

토크나이저 구축

 
 
다음은 토크나이저입니다! 변환기를 사용할 때 일반적으로 해당 변환기 모델과 함께 토크나이저를 로드합니다. 토크나이저는 프로세스의 핵심 구성 요소입니다.



맞춤형 토크나이저 구축을 위한 비디오 연습

 

토크나이저를 구축할 때 모든 OSCAR 데이터를 제공하고 어휘 크기(토큰나이저의 토큰 수) 및 특수 토큰을 지정합니다.

이제 RoBERTa 특수 토큰은 다음과 같습니다.

따라서 우리는 이를 special_tokens 토크나이저의 매개변수 train 메서드 호출.

이제 토크나이저가 준비되었으며 나중에 사용할 수 있도록 파일을 저장할 수 있습니다.

이제 우리는 새로운 것을 정의하는 두 개의 파일을 갖게 되었습니다. FiliBERTo 토크나이저:

  • 병합.txt — 텍스트와 토큰의 초기 매핑을 수행합니다.
  • 어휘.json — 토큰을 토큰 ID에 매핑합니다.

그리고 이를 통해 다른 토큰을 사용하는 것처럼 사용할 수 있도록 토크나이저를 초기화하는 단계로 넘어갈 수 있습니다. from_pretrained 토크나이저.

토크나이저 초기화

 
 
먼저 이전에 구축한 두 개의 파일을 사용하여 토크나이저를 초기화합니다. from_pretrained:

이제 토크나이저가 준비되었습니다. 이를 사용하여 일부 텍스트를 인코딩해 볼 수 있습니다. 인코딩할 때 일반적으로 사용하는 것과 동일한 두 가지 방법을 사용합니다. encode 및 encode_batch.

인코딩 객체에서 tokens 우리는 input_ids 및 attention_mask FiliBERTo와 함께 사용하기 위한 텐서.

입력 파이프라인 생성

 
 
훈련 프로세스의 입력 파이프라인은 전체 프로세스에서 더 복잡한 부분입니다. 이는 원시 OSCAR 교육 데이터를 가져와 변환하고 이를 DataLoader 훈련 준비.



MLM 입력 파이프라인의 비디오 둘러보기

 

데이터 준비

 
 
단일 샘플로 시작하여 준비 논리를 살펴보겠습니다.

먼저 파일을 열어야 합니다. 이 .txt 이전에 파일. 개행 문자를 기준으로 각각을 분할합니다. n 이는 개별 샘플을 나타내기 때문입니다.

그런 다음 다음을 사용하여 데이터를 인코딩합니다. tokenizer — 다음과 같은 주요 매개변수를 포함하는지 확인하세요. max_lengthpadding및 truncation.

이제 텐서 생성으로 넘어갈 수 있습니다. MLM(Masked-Language Modeling)을 통해 모델을 훈련할 것입니다. 따라서 세 개의 텐서가 필요합니다.

  • 입력 ID - 우리의 토큰_ID 마스크 토큰을 사용하여 마스킹된 토큰의 ~15% <mask>.
  • 주의_마스크 — 텐서 1s와 0s, '실제' 토큰/패딩 토큰의 위치를 ​​표시합니다. 주의 계산에 사용됩니다.
  • 라벨 - 우리의 토큰_ID 과 아니 마스킹.

MLM에 대해 잘 모르시는 분들을 위해 설명을 드렸는데요 여기에서 지금 확인해 보세요..

당사의 attention_mask 및 labels 텐서는 단순히 우리의 batch. 그만큼 input_ids 텐서는 더 많은 주의가 필요합니다. 그러나 이 텐서의 경우 토큰의 ~15%를 마스킹하여 토큰 ID를 할당합니다. 3.

최종 출력에서 ​​인코딩된 내용의 일부를 볼 수 있습니다. input_ids 텐서. 첫 번째 토큰 ID는 다음과 같습니다. 1 - [CLS] 토큰. 텐서 주변에는 여러 개의 점들이 있습니다. 3 토큰 ID - 새로 추가된 것입니다. [MASK] 토큰.

DataLoader 구축

 
 
다음으로 우리는 Dataset 클래스 — PyTorch로 인코딩된 XNUMX개의 텐서를 초기화하는 데 사용합니다. torch.utils.data.Dataset 사물.

마지막으로 우리의 dataset PyTorch에 로드됩니다. DataLoader 객체 - 훈련 중에 데이터를 모델에 로드하는 데 사용합니다.

모델 훈련

 
 
훈련을 위해서는 두 가지가 필요합니다. DataLoader 그리고 모델. 그만큼 DataLoader 우리는 가지고 있지만 모델은 없습니다.



모델 초기화

 
 
훈련을 위해서는 원시(사전 훈련된 것이 아님)가 필요합니다. BERTLMHeadModel. 이를 생성하려면 먼저 FiliBERTo를 초기화하려는 매개변수를 설명하는 RoBERTa 구성 개체를 생성해야 합니다.

그런 다음 언어 모델링(LM) 헤드를 사용하여 RoBERTa 모델을 가져오고 초기화합니다.

훈련 준비

 
 
훈련 루프로 이동하기 전에 몇 가지 사항을 설정해야 합니다. 먼저 GPU/CPU 사용량을 설정합니다. 그런 다음 모델의 훈련 모드를 활성화하고 마지막으로 최적화 프로그램을 초기화합니다.

트레이닝

 
 
마지막으로 — 훈련 시간입니다! 우리는 PyTorch를 통해 훈련할 때와 마찬가지로 훈련합니다.

Tensorboard로 넘어가면 시간이 지남에 따라 손실이 발생한다는 것을 알게 될 것입니다. 유망해 보입니다.



손실 / 시간 — 이 차트에는 여러 교육 세션이 함께 표시되어 있습니다.

 

실제 테스트

 
 
이제 실제 테스트를 할 시간입니다. 우리는 MLM 파이프라인을 설정하고 Laura에게 결과를 평가하도록 요청합니다. 여기에서 22:44에 비디오 리뷰를 볼 수 있습니다:



우리는 먼저 pipeline 개체, 사용하여 'fill-mask' 논쟁. 그런 다음 다음과 같이 모델 테스트를 시작합니다.

“챠오 왔다 어?” 정답입니다! 그것은 내 이탈리아어 실력만큼 고급입니다. 그러니 Laura에게 넘겨줍시다.

우리는 "buongiorno, 왔어?" — 또는 "좋은 날이야 넌 어때?":

첫 번째 대답은 “buongiorno, chi va?”입니다. "좋은 하루 되세요. 거기 누구세요?"라는 뜻이에요. — 예를 들어 말도 안 돼요. 하지만 두 번째 대답은 맞습니다!

다음은 조금 더 어려운 문구입니다. "ciao, dove ci incontriamo oggi pomeriggio?" — 또는 “안녕하세요, 우리 오늘 오후에 어디서 만나요?”:

그리고 좀 더 긍정적인 결과를 반환합니다.

✅ "hi, where do we see each other this afternoon?"
✅ "hi, where do we meet this afternoon?"
❌ "hi, where here we are this afternoon?"
✅ "hi, where are we meeting this afternoon?"
✅ "hi, where do we meet this afternoon?"

마지막으로, 더 어려운 문장 하나 더, "cosa sarebbe Successo se avessimo scelto un altro giorno?" — 또는 “다른 날을 선택했다면 무슨 일이 일어났을까요?”:

우리는 여기에도 몇 가지 더 좋은 답변을 반환합니다.

✅ "what would have happened if we had chosen another day?"
✅ "what would have happened if I had chosen another day?"
✅ "what would have happened if they had chosen another day?"
✅ "what would have happened if you had chosen another day?"
❌ "what would have happened if another day was chosen?"

전반적으로 우리 모델은 Laura의 테스트를 통과한 것으로 보입니다. 이제 FiliBERTo라는 유능한 이탈리아어 언어 모델이 생겼습니다!

이것이 BERT 모델을 처음부터 훈련하는 연습의 전부입니다!

우리는 데이터를 가져오고 형식을 지정하는 것부터 언어 모델링을 사용하여 원시 BERT 모델을 훈련하는 것까지 많은 분야를 다루었습니다.

이 기사를 즐겼기를 바랍니다! 질문이 있으시면 다음을 통해 알려주십시오. 트위터 아니면 아래 댓글에. 이와 같은 콘텐츠를 더 원하시면 다음에 게시하겠습니다. 유튜브 도.

읽어 주셔서 감사합니다!

 

70% 할인! 자연어 처리: Python의 변환기를 사용한 NLP

Transformer 모델은 현대 NLP의 사실상의 표준입니다. 그들은 가장 표현력이 뛰어난 것으로 입증되었습니다…
 

*달리 명시된 경우를 제외하고 모든 이미지는 작성자의 것입니다.

 
바이오 : 제임스 브릭스 영국 런던에 본사를 둔 자연어 처리를 전문으로하고 금융 부문에서 일하는 데이터 과학자입니다. 그는 또한 프리랜서 멘토, 작가 및 콘텐츠 제작자입니다. 이메일 (jamescalam94@gmail.com).

실물. 허가를 받아 다시 게시했습니다.

관련 :

출처: https://www.kdnuggets.com/2021/08/train-bert-model-scratch.html

타임 스탬프 :

더보기 너 겟츠