개요
대부분의 분들이 ChatGPT에 대해 들어보셨을 것이고 질문에 답하기 위해 사용해 보셨을 것입니다! 후드 아래에서 무슨 일이 일어나는지 궁금한 적이 있습니까? Open AI에서 개발한 Large Language Model GPT-3에 의해 구동됩니다. 종종 LLM이라고 하는 이러한 대규모 언어 모델은 자연 언어 처리.
대형 언어 모델이란 무엇입니까?
LLM 모델은 방대한 양의 텍스트 데이터에 대해 훈련되어 의미와 맥락을 통해 인간의 언어를 이해할 수 있습니다. 이전에는 대부분의 모델이 입력 기능과 해당 레이블을 제공하는 지도 방식을 사용하여 훈련되었습니다. 이와는 달리 LLM은 비지도 학습을 통해 훈련되며 레이블과 지침 없이 엄청난 양의 텍스트 데이터가 제공됩니다. 따라서 LLM은 언어 단어 간의 의미와 관계를 효율적으로 학습합니다. 텍스트 생성, 질문 답변, 한 언어에서 다른 언어로의 번역 등과 같은 다양한 작업에 사용할 수 있습니다.
무엇보다도 이러한 대규모 언어 모델은 도메인별 작업을 위해 사용자 지정 데이터 세트에서 미세 조정할 수 있습니다. 이 기사에서는 미세 조정의 필요성, 사용 가능한 다양한 LLM에 대해 설명하고 예제를 보여줍니다.
LLM 미세 조정 이해
귀하가 당뇨병 지원 커뮤니티를 운영 중이고 질문에 답하기 위해 온라인 헬프라인을 설정하고 싶다고 가정해 보겠습니다. 사전 훈련된 LLM은 보다 일반적으로 훈련되며 도메인별 질문에 대한 최상의 답변을 제공할 수 없고 의학 용어 및 약어를 이해할 수 없습니다. 이것은 미세 조정으로 해결할 수 있습니다.
미세 조정이란 무엇을 의미합니까? 간단히 말하자면, 토큰 전송
배우기! 대규모 언어 모델은 많은 리소스를 사용하는 거대한 데이터 세트에서 학습되며 수백만 개의 매개변수가 있습니다. 사전 교육 중에 LLM에서 학습한 표현 및 언어 패턴은 당면한 현재 작업으로 전송됩니다. 기술적인 측면에서 우리는 미리 훈련된 가중치로 모델을 초기화한 다음 매개 변수에 대해 작업에 최적화된 가중치에 도달하기 위해 작업별 데이터에 대해 모델을 훈련합니다. 모델의 아키텍처를 변경하고 필요에 따라 레이어를 수정할 수도 있습니다.
모델을 미세 조정해야 하는 이유는 무엇입니까?
- 시간과 리소스 절약: 미세 조정을 통해 처음부터 훈련하는 것보다 필요한 훈련 시간과 리소스를 줄일 수 있습니다.
- 데이터 요구 사항 감소: 처음부터 모델을 훈련시키려면 개인과 소규모 기업이 사용할 수 없는 방대한 양의 레이블이 지정된 데이터가 필요합니다. 미세 조정을 통해 적은 양의 데이터로도 우수한 성능을 얻을 수 있습니다.
- 필요에 따라 맞춤화: 선행 훈련된 LLM은 도메인별 용어 및 약어를 파악하지 못할 수 있습니다. 예를 들어 일반 LLM은 "유형 1"과 "유형 2"가 당뇨병의 유형을 의미한다는 것을 인식하지 못하는 반면 미세 조정된 LLM은 인식할 수 있습니다.
- 지속적인 학습 활성화: 당뇨병 정보 데이터에 대한 모델을 미세 조정하고 배포했다고 가정해 보겠습니다. 포함하고 싶은 새로운 다이어트 계획이나 치료법이 있으면 어떻게 합니까? 이전에 미세 조정된 모델의 가중치를 사용하고 새 데이터를 포함하도록 조정할 수 있습니다. 이를 통해 조직은 효율적인 방식으로 모델을 최신 상태로 유지할 수 있습니다.
오픈 소스 LLM 모델 선택
다음 단계는 작업에 대한 대규모 언어 모델을 선택하는 것입니다. 당신의 선택은 무엇입니까? 현재 사용 가능한 최신 대규모 언어 모델에는 GPT-3, Bloom, BERT, T5 및 XLNet이 포함됩니다. 이 중 GPT-3(Generative Pretrained Transformers)는 175억 개의 매개변수를 학습하고 다양한 NLU 작업을 처리할 수 있어 최고의 성능을 보여주었습니다. 그러나 GPT-3 미세 조정은 유료 구독을 통해서만 액세스할 수 있으며 다른 옵션보다 상대적으로 비쌉니다.
반면 BERT는 오픈 소스 대형 언어 모델이며 무료로 미세 조정이 가능합니다. BERT Bi-directional Encoder Decoder Transformers의 약자입니다. BERT는 문맥 단어 표현을 이해하는 데 탁월합니다.
당신은 어떻게 선택합니까?
작업이 텍스트 생성에 중점을 둔 경우 GPT-3(유료) 또는 GPT-2(오픈 소스) 모델을 선택하는 것이 좋습니다. 작업이 텍스트 분류, 질문 응답 또는 엔터티 인식에 속하는 경우 BERT를 사용할 수 있습니다. 당뇨병에 대한 질문 답변의 경우 BERT 모델로 진행할 것입니다.
데이터 세트 준비 및 전처리
모델과 작업에 따라 데이터 형식이 다르기 때문에 미세 조정의 가장 중요한 단계입니다. 이 경우를 위해 National Institue of Health에서 조달한 당뇨병에 대한 정보가 포함된 샘플 텍스트 문서를 만들었습니다. 웹 사이트. 자신의 데이터를 사용할 수 있습니다.
BERT를 질의 응답 작업으로 미세 조정하려면 데이터를 SQuAD 형식으로 변환하는 것이 좋습니다. SQuAD는 Stanford Question Answering Dataset이며 이 형식은 질문 응답 작업을 위한 NLP 모델 훈련에 널리 채택됩니다. 데이터는 JSON 형식이어야 하며 각 필드는 다음으로 구성됩니다.
context
: 모델이 질문에 대한 답변을 검색할 기반이 되는 텍스트가 있는 문장 또는 단락question
: BERT가 응답하기를 원하는 쿼리입니다. 최종 사용자가 QA 모델과 상호 작용하는 방식을 기반으로 이러한 질문의 프레임을 지정해야 합니다.answers
: 이 필드에 원하는 답을 입력해야 합니다. 이 아래에는 두 개의 하위 구성 요소가 있습니다.text
및answer_start
. 그만큼text
응답 문자열이 있습니다. 반면,answer_start
컨텍스트 단락에서 답이 시작되는 색인을 나타냅니다.
상상할 수 있듯이 수동으로 수행하는 경우 문서에 대한 이 데이터를 생성하는 데 많은 시간이 걸립니다. 걱정하지 마세요. Haystack 주석 도구를 사용하여 쉽게 수행하는 방법을 보여드리겠습니다.
Haystack으로 SQuAD 형식의 데이터를 생성하는 방법은 무엇입니까?
Haystack 주석 도구를 사용하면 질의 응답 작업을 위해 레이블이 지정된 데이터 세트를 빠르게 만들 수 있습니다. 계정을 생성하여 도구에 액세스할 수 있습니다. 대지. 새 프로젝트를 만들고 문서를 업로드합니다. "문서" 탭에서 볼 수 있고 "작업"으로 이동하면 질문을 만드는 옵션을 볼 수 있습니다. 질문을 작성하고 문서에서 답변을 강조 표시하면 Haystack이 자동으로 시작 색인을 찾습니다. 아래 이미지의 내 문서에서 어떻게 수행했는지 보여주었습니다.
그림 1: Haystack으로 질의 응답을 위한 레이블이 지정된 데이터 세트 생성
미세 조정을 위해 충분한 질문-답변 쌍 생성을 완료하면 아래와 같이 요약을 볼 수 있어야 합니다. "내보내기 레이블" 탭에서 내보내려는 형식에 대한 여러 옵션을 찾을 수 있습니다. 우리는 사례에 대한 분대 형식을 선택합니다. 도구 사용에 대한 추가 도움이 필요한 경우 해당 도구를 확인할 수 있습니다. 선적 서류 비치. 이제 미세 조정을 위한 QA 쌍이 포함된 JSON 파일이 있습니다.
미세 조정하는 방법?
Python은 미세 조정에 사용할 수 있는 많은 오픈 소스 패키지를 제공합니다. 내 경우에는 Pytorch 및 Transformers 패키지를 사용했습니다. 패키지 관리자인 pip를 사용하여 패키지 모듈을 가져오는 것부터 시작하십시오. 그만큼 transformers
라이브러리 제공 BERTTokenizer
, 특히 BERT 모델에 대한 입력을 토큰화하기 위한 것입니다.
!pip install torch
!pip install transformers import json
import torch
from transformers import BertTokenizer, BertForQuestionAnswering
from torch.utils.data import DataLoader, Dataset
로드 및 사전 처리를 위한 사용자 지정 데이터 세트 정의
다음 단계는 데이터를 로드하고 사전 처리하는 것입니다. 당신은 사용할 수 있습니다 Dataset
pytorch의 클래스 utils.data
데이터 세트에 대한 사용자 지정 클래스를 정의하는 모듈입니다. 맞춤 데이터 세트 클래스를 만들었습니다. diabetes
아래 코드 조각에서 볼 수 있듯이. 그만큼 init
변수 초기화를 담당합니다. 그만큼 file_path
JSON 교육 파일의 경로를 입력하고 초기화하는 데 사용되는 인수입니다. data
. 우리는 BertTokenizer
여기도.
다음으로 정의합니다. load_data()
기능. 이 함수는 JSON 파일을 JSON 데이터 개체로 읽고 여기에서 컨텍스트, 질문, 답변 및 해당 인덱스를 추출합니다. 추출된 필드를 목록에 추가하고 반환합니다.
XNUMXD덴탈의 getitem
BERT 토크나이저를 사용하여 질문과 컨텍스트를 입력 텐서로 인코딩합니다. input_ids
및 attention_mask
. 그만큼 encode_plus
텍스트를 토큰화하고 특수 토큰(예: [CLS] 및 [SEP])을 추가합니다. 우리는 squeeze()
BERT에 입력하기 전에 싱글톤 차원을 제거하는 방법. 마지막으로 처리된 입력 텐서를 반환합니다.
class diabetes(Dataset): def __init__(self, file_path): self.data = self.load_data(file_path) self.tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') def load_data(self, file_path): with open(file_path, 'r') as f: data = json.load(f) paragraphs = data['data'][0]['paragraphs'] extracted_data = [] for paragraph in paragraphs: context = paragraph['context'] for qa in paragraph['qas']: question = qa['question'] answer = qa['answers'][0]['text'] start_pos = qa['answers'][0]['answer_start'] extracted_data.append({ 'context': context, 'question': question, 'answer': answer, 'start_pos': start_pos, }) return extracted_data def __len__(self): return len(self.data) def __getitem__(self, index): example = self.data[index] question = example['question'] context = example['context'] answer = example['answer'] inputs = self.tokenizer.encode_plus(question, context, add_special_tokens=True, padding='max_length', max_length=512, truncation=True, return_tensors='pt') input_ids = inputs['input_ids'].squeeze() attention_mask = inputs['attention_mask'].squeeze() start_pos = torch.tensor(example['start_pos']) return input_ids, attention_mask, start_pos, end_pos
일단 정의하면 다음을 전달하여 이 클래스의 인스턴스를 만들 수 있습니다. file_path
그것에 대한 주장.
file_path = 'diabetes.json'
dataset = diabetes(file_path)
모델 훈련
나는 사용할 것이다 BertForQuestionAnswering
QA 작업에 가장 적합한 모델입니다. 사전 훈련된 가중치를 초기화할 수 있습니다. bert-base-uncased
호출하여 모델 from_pretrained
모델의 기능. 훈련에 사용할 평가 손실 함수와 옵티마이저도 선택해야 합니다.
모범 사례, 업계에서 인정하는 표준 및 포함된 치트 시트가 포함된 Git 학습에 대한 실습 가이드를 확인하십시오. 인터넷 검색 Git 명령을 중지하고 실제로 배움 이것!
저는 Adam 옵티마이저와 교차 엔트로피 손실 함수를 사용하고 있습니다. Pytorch 클래스를 사용할 수 있습니다. DataLoader
데이터를 다른 배치로 로드하고 편향을 피하기 위해 섞습니다.
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = BertForQuestionAnswering.from_pretrained('bert-base-uncased')
model.to(device) optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5)
loss_fn = torch.nn.CrossEntropyLoss()
batch_size = 8
num_epochs = 50 data_loader = DataLoader(dataset, batch_size=batch_size, shuffle=True)
데이터 로더가 정의되면 계속해서 최종 훈련 루프를 작성할 수 있습니다. 각 반복 중에 각 배치는 data_loader
이 포함되어 있습니다 batch_size
순방향 및 역방향 전파가 수행되는 예의 수. 이 코드는 손실이 최소화되는 최적의 매개변수 가중치 세트를 찾으려고 시도합니다.
for epoch in range(num_epochs): model.train() total_loss = 0 for batch in data_loader: input_ids = batch[0].to(device) attention_mask = batch[1].to(device) start_positions = batch[2].to(device) optimizer.zero_grad() outputs = model(input_ids, attention_mask=attention_mask, start_positions=start_positions) loss = outputs.loss loss.backward() optimizer.step() total_loss += loss.item() avg_loss = total_loss / len(data_loader) print(f"Epoch {epoch+1}/{num_epochs} - Average Loss: {avg_loss:.4f}")
이것으로 미세 조정이 완료됩니다! 다음으로 설정하여 모델을 테스트할 수 있습니다. model.eval()
. 학습 속도를 미세 조정하고 epochs 매개변수를 사용하지 않고 데이터에서 최상의 결과를 얻을 수도 있습니다.
최고의 팁과 관행
다음은 사용자 지정 데이터에서 대규모 언어 모델을 미세 조정하는 동안 유의해야 할 몇 가지 사항입니다.
- 데이터 세트는 언어 모델이 뛰어난 대상 도메인 또는 작업을 나타내야 합니다. 깨끗한 잘 구조화된 데이터가 필수적입니다.
- 모델이 패턴을 학습할 수 있도록 데이터에 충분한 훈련 예제가 있는지 확인하십시오. 그렇지 않으면 모델이 예제를 기억하고 과대적합할 수 있습니다. 일반화하다 보이지 않는 예까지.
- 당면한 작업과 관련된 말뭉치에서 훈련된 사전 훈련된 모델을 선택하십시오. 질문 답변을 위해 Stanford Question Answering 데이터 세트에서 훈련된 사전 훈련된 모델을 선택합니다. 이와 유사하게 감정 분석, 텍스트 생성, 요약, 텍스트 분류 등과 같은 작업에 사용할 수 있는 다양한 모델이 있습니다.
- 시험 기울기 누적 GPU 메모리가 제한된 경우. 이 방법에서는 각 배치 후 모델의 가중치를 업데이트하는 대신 업데이트를 수행하기 전에 여러 미니 배치에 걸쳐 기울기가 누적됩니다.
- 미세 조정하는 동안 과적합 문제에 직면하면 다음을 사용하십시오. 정규화 기술. 일반적으로 사용되는 일부 방법에는 모델 아키텍처에 드롭아웃 레이어 추가, 가중치 감쇠 및 레이어 정규화 구현이 포함됩니다.
결론
대규모 언어 모델은 빠르고 효율적인 방식으로 많은 작업을 자동화하는 데 도움이 될 수 있습니다. 미세 조정 LLM은 전이 학습의 힘을 활용하고 이를 특정 도메인에 맞게 사용자 지정하는 데 도움이 됩니다. 데이터 세트가 의료, 기술 틈새 시장, 금융 데이터 세트 등과 같은 도메인에 있는 경우 미세 조정이 필수적일 수 있습니다.
이 기사에서는 BERT가 오픈 소스이고 개인용으로 잘 작동하므로 사용했습니다. 대규모 프로젝트에서 작업하는 경우 GPT3 또는 기타 오픈 소스 대안과 같은 보다 강력한 LLM을 선택할 수 있습니다. 대규모 언어 모델을 미세 조정하면 계산 비용과 시간이 많이 소요될 수 있습니다. 규모에 따라 GPU 또는 TPU를 포함하여 충분한 컴퓨팅 리소스가 있는지 확인합니다.
- SEO 기반 콘텐츠 및 PR 배포. 오늘 증폭하십시오.
- PlatoData.Network 수직 생성 Ai. 자신에게 권한을 부여하십시오. 여기에서 액세스하십시오.
- PlatoAiStream. 웹3 인텔리전스. 지식 증폭. 여기에서 액세스하십시오.
- 플라톤ESG. 자동차 / EV, 탄소, 클린테크, 에너지, 환경, 태양광, 폐기물 관리. 여기에서 액세스하십시오.
- BlockOffsets. 환경 오프셋 소유권 현대화. 여기에서 액세스하십시오.
- 출처: https://stackabuse.com/guide-to-fine-tuning-open-source-llms-on-custom-data/
- :있다
- :이다
- :아니
- :어디
- $UP
- 1
- 12
- 20
- 8
- a
- 할 수 있는
- 소개
- ACCESS
- 액세스
- 계정
- 누적 된
- 달성
- 행위
- 실제로
- 아담
- 첨가
- 추가
- 채택
- 후
- 앞으로
- AI
- 또한
- 대안
- am
- 중
- 양
- 금액
- an
- 분석
- 및
- 다른
- 답변
- 답변
- 어떤
- 접근
- 아키텍처
- 있군요
- 논의
- 기사
- AS
- At
- 시도
- 자동화
- 자동적으로
- 가능
- 평균
- 피하기
- 기반으로
- BE
- 된
- 전에
- 이하
- BEST
- 더 나은
- 사이에
- 바이어스
- 억원
- 꽃
- 경계
- 사업
- 비자 면제 프로그램에 해당하는 국가의 시민권을 가지고 있지만
- by
- 부름
- CAN
- 생산 능력
- 케이스
- 잡아라
- 변경
- ChatGPT
- 검사
- 선택
- 왼쪽 메뉴에서
- 수업
- 분류
- 암호
- 일반적으로
- 커뮤니티
- 완료
- 결론
- 구성
- 이 포함되어 있습니다
- 문맥
- 문맥
- 변환
- 동
- 만들
- 만든
- 만들기
- Cross
- 결정적인
- Current
- 현재
- 관습
- 사용자 정의
- 데이터
- 데이터 세트
- 한정된
- 배포
- 원하는
- 개발
- 장치
- 당뇨병
- DID
- 다이어트
- 다른
- 치수
- 몇몇의
- do
- 문서
- 서류
- 하지
- 도메인
- 도메인
- 돈
- 한
- ...동안
- 마다
- 용이하게
- 효율적인
- 효율적으로
- 그렇지 않으면
- 가능
- end
- 충분히
- 확인
- 실재
- 시대
- 신기원
- 필수
- 평가
- 조차
- EVER
- 예
- 예
- 뛰어나다
- 우수한
- 비싼
- 수출
- 추출물
- 페이스메이크업
- 폭포
- 특징
- 연방 준비 은행
- 들
- Fields
- 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에
- 최후의
- 최종적으로
- 금융
- Find
- 초점
- 럭셔리
- 체재
- 앞으로
- FRAME
- 무료
- 에
- 기능
- 일반적으로
- 세대
- 생성적인
- 힘내
- Go
- 좋은
- GPU
- GPU
- 그라디언트
- 안내
- 손
- 핸들
- 손 -에
- 발생
- 있다
- 건강
- 들었다
- 무거운
- 도움
- 금후
- 여기에서 지금 확인해 보세요.
- 강조
- 후드
- 가져가
- 방법
- How To
- HTTPS
- 거대한
- 사람의
- 거대한
- i
- if
- 영상
- 그림
- 구현
- 가져 오기
- in
- 포함
- 포함
- 포함
- 색인
- 개인
- 정보
- 입력
- 입력
- 설치
- 예
- 명령
- 상호 작용하는
- 으로
- 개요
- IT
- 되풀이
- 일
- JSON
- 유지
- 레이블
- 언어
- 넓은
- 대규모
- 층
- 레이어
- 배우다
- 배운
- 배우기
- 하자
- 이점
- LG
- 도서관
- 처럼
- 제한된
- 명부
- ll
- LLM
- 하중
- 짐을 싣는 사람
- 로드
- 오프
- 롯
- 확인
- 매니저
- 태도
- 수동으로
- .
- 거대한
- XNUMX월..
- 평균
- 의미
- 의료
- 메모리
- 방법
- 방법
- 수도
- 수백만
- 최소의
- 모델
- 모델
- 수정
- 모듈
- 모듈
- 배우기
- 가장
- 많은
- 여러
- my
- 국가의
- 필요
- 필요
- 요구
- 신제품
- 다음 것
- NIH
- nlp
- 아니
- 표준
- 지금
- 번호
- 대상
- 획득
- 획득
- of
- 제공
- 자주
- on
- ONE
- 온라인
- 만
- 열 수
- 오픈 소스
- 선택권
- 옵션
- or
- 조직
- 기타
- 우리의
- 아웃
- 위에
- 자신의
- 꾸러미
- 패키지
- 지급
- 쌍
- 매개 변수
- 특별한
- 통과
- 통로
- 패턴
- 용
- 성능
- 수행
- 실행할 수 있는
- 확인
- 계획
- 플라톤
- 플라톤 데이터 인텔리전스
- 플라토데이터
- 전철기
- 가능성
- 힘
- powered
- 강한
- 실용적인
- 이전에
- 문제
- 처리됨
- 프로젝트
- 제공
- 제공
- 파이 토치
- 질문 게시판
- 문제
- 문의
- 빠른
- 빨리
- 율
- 차라리
- 도달
- 읽기
- 인식
- 인식
- 추천
- 감소
- 참조
- 관계
- 상대적으로
- 관련된
- 기억
- 제거
- 대표
- 요구조건 니즈
- 제품 자료
- 책임
- 결과
- 반품
- 반지
- 달리기
- s
- 라고
- 규모
- 할퀴다
- 검색
- 참조
- 본인
- 문장
- 감정
- 세트
- 설정
- 그림자
- 시트
- 영상을
- 표시
- 표시
- 셔플
- 의미하다
- 비슷한
- 작은
- 중소기업
- 작은
- 일부
- 출처
- 특별한
- 구체적인
- 구체적으로
- 스택카부스
- 기준
- 서
- stanford
- 스타트
- 시작 중
- 최첨단
- 단계
- 중지
- 끈
- 신청
- 이러한
- 충분한
- 개요
- SUPPORT
- 확인
- 받아
- 이야기
- 목표
- 태스크
- 작업
- 테크니컬
- 술어
- 조건
- test
- 텍스트 분류
- 보다
- 그
- XNUMXD덴탈의
- 그들의
- 그들
- 그때
- 그곳에.
- Bowman의
- 그들
- 이
- 을 통하여
- 시간
- 시간이 많이 걸리는
- 도움말
- 에
- 토큰 화하다
- 토큰 화
- 토큰
- 수단
- 상단
- 토치
- 에 대한
- Train
- 훈련 된
- 트레이닝
- 이전
- 전송
- 변압기
- 전이
- 번역
- 치료
- 시도
- 두
- 유형
- 유형
- 아래에
- 이해
- 이해
- 같지 않은
- 최신의
- 업데이트
- 업데이트
- 사용
- 익숙한
- 사용자
- 사용
- 사용
- 종류
- 관측
- 필요
- we
- 무게
- 잘
- 했다
- 뭐
- 이므로
- 어느
- 동안
- 넓은
- 크게
- 의지
- 과
- 없이
- 워드
- 말
- 일하는
- 일
- 걱정
- 겠지
- wouldn
- 쓰다
- 자신의
- 너의
- 제퍼 넷