[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.10.14
📕 학습 목록
- Generative AI
- Prompt Engineering
- Transformer 아키텍처
📗 기억할 내용
1. Generative AI (생성형 AI)
- Generative AI : 기존의 데이터나 프롬프트를 기반으로 새로운 텍스트, 이미지, 오디오 등을 생성하는 AI 기술
- 딥러닝 기술을 사용하여 새로운 콘텐츠를 만들 수 있음
1) 대표적인 모델
- GPT: 텍스트 생성에 강점을 가진 모델로, 다양한 형태의 텍스트 생성 작업에 사용
- DALL·E: 텍스트 설명을 바탕으로 이미지를 생성하는 모델
- Stable Diffusion: 사용자의 텍스트 설명을 바탕으로 고품질의 이미지 생성
2) 활용 분야
- 콘텐츠 생성: 자동으로 글쓰기, 이미지 생성, 음악 제작 등에서 활용
- 제품 디자인: AI가 제품 설계에 필요한 다양한 시안을 제안
- 예술 창작: 예술 작품을 생성하거나 새로운 디자인을 창출
2. 프롬프트 엔지니어링 (Prompt Engineering)
- 프롬프트(Prompt) : LLM에게 주어지는 작업 지시 또는 질문. 프롬프트 엔지니어링은 모델이 적절한 출력을 제공할 수 있도록 효과적인 입력을 설계하는 과정
1) 핵심 목표
- 빠른 성능 개선: 파인튜닝 없이 모델이 주어진 입력을 최적으로 처리하게 만듦
- 리소스 절약: 더 적은 리소스로 더 나은 성능을 내는 데 중점을 둠
2) Few-shot, Zero-shot 학습
- Few-shot: 모델이 몇 가지 예시만을 가지고 학습할 수 있도록 설계
- Zero-shot: 별도의 학습 없이도 새로운 작업에 대응할 수 있도록 모델을 설정
3) 프롬프트 설계 과정
- 초기 설계: 모델에게 필요한 정보를 제공하고 예상 응답에 맞춰 구조화
- 테스트 및 개선: 다양한 입력을 테스트하고 프롬프트를 반복적으로 개선
- 최적화 및 평가: 자동화된 평가 시스템을 통해 프롬프트의 효율성을 평가
3. Transformer 아키텍처 및 파생 모델들
- Transformer : 2017년에 등장한 NLP 모델로, Attention 메커니즘을 기반으로 순차 처리 없이 병렬 처리를 가능하게 만든 혁신적인 모델
1) 파생 모델들
- BERT: 양방향으로 문맥을 이해하는 인코더 기반 모델. 텍스트 분류, 질의응답에 강점
- GPT: 텍스트 생성에 특화된 단방향 디코더 모델. 텍스트 생성, 번역, 요약 작업에 사용
- RoBERTa: BERT의 개선판으로 더 많은 데이터를 사용하여 성능을 강화한 모델
- T5: 모든 NLP 작업을 텍스트-텍스트 형식으로 변환하여 처리
- DistilBERT: BERT의 경량화 버전으로, 작고 빠르지만 성능 유지
- XLNet: 양방향 학습을 유연하게 처리하도록 개선된 모델
- BART: 인코더-디코더 구조를 사용하여 텍스트 복원 및 요약에 강점
- Pegasus: 텍스트 요약 작업에 특화된 모델
- ELECTRA: 토큰 생성 대신 감지 방식으로 더 효율적으로 학습
4. 데이터 처리 및 학습 방법론
- 순차적인 데이터 흐름을 의미하며, 자연어 처리(NLP)나 시계열 데이터 처리에서 주로 사용
1) 청크 (Chunk)
- 긴 시퀀스를 작은 단위로 나누어 처리. 텍스트를 청크로 나누면 모델이 효율적으로 학습할 수 있음
2) 에포크 (Epoch)
- 전체 데이터셋을 한 번 학습하는 과정을 의미. 보통 여러 에포크를 반복하여 학습
3) 배치 (Batch)
- 전체 데이터를 작은 묶음으로 나누어 학습하는 단위. 한 번에 처리할 데이터 양을 결정
4) 연관성
- 시퀀스-청크: 긴 시퀀스를 청크로 나누어 처리
- 에포크-배치: 배치 단위로 나누어 학습을 반복하면서 1 에포크가 완료
5. 평가 및 테스트 케이스 구축
- 작업별 맞춤 평가: 실제 작업 분포를 반영하여 평가하고, 예외 케이스를 고려
- 자동화 가능성: 가능한 한 자동으로 평가가 이루어지도록 설계
- 품질 우선: 양보다 품질이 우선되도록 설계
1) 평가 예시
- 작업 충실도: 감성 분석의 정확성 평가
- 일관성: FAQ 봇의 응답 일관성 평가
- 관련성: 요약 작업에서 ROUGE-L을 활용한 평가
- 톤과 스타일: LLM 기반으로 고객 서비스의 톤 평가
2) 평가 채점 방식
- 코드 기반 채점: 출력 결과를 정답과 비교하여 평가
- 사람 채점: 주관적 평가로 더 깊이 있는 분석
- LLM 기반 채점: 빠르고 유연한 자동 평가
6. LLM 활용 방법
- Prompt engineering with context: 문맥을 반영한 입력을 설계
- Retrieval-augmented generation (RAG): 외부 문서를 검색해 문맥을 보강한 답변 제공
- Fine-tuned model: 사용자의 요구에 맞게 사전 학습된 모델을 세밀하게 조정
- Trained model: 대규모 데이터를 사용해 훈련된 모델을 기반으로 응답
1) Fine-tuning vs 프롬프트 엔지니어링
- Fine-tuning: 모델 자체를 재학습하여 특정 작업에 맞춤화
- 프롬프트 엔지니어링: 입력만 수정하여 성능을 개선, 재학습이 불필요
7. XML과 QShot 태깅 시스템
1) QShot Tagging
- 데이터를 태그로 구조화하여 관리하는 방식으로, 주석과 메타데이터를 포함시켜 관리
- XML을 사용하여 데이터를 계층적으로 관리하고 쉽게 검색, 분류 가능
2) XML 태깅 예시
<text id="001">
<content>What is the capital of South Korea?</content>
<tags>
<tag category="Geography">Capital</tag>
<tag category="Country">South Korea</tag>
</tags>
</text>
3) 장점
- 데이터 구조화: 데이터의 계층적 구조를 정의하여 명확하게 관리 가능
- 확장성: 새로운 태그를 추가하여 데이터를 손쉽게 확장하고 관리 가능
8. KoBERT와 한국어 방언 분류 모델
1) KoBERT
- 한국어 데이터에 특화된 BERT 모델로, 한국어 텍스트 분류 및 질의응답 작업에 강점
- 방언 분류 작업에 적용하여, 다양한 방언 데이터를 바탕으로 특정 지역 방언을 분류
2) 한국어 방언 분류 프로젝트
- CSV 데이터로 방언 데이터를 학습하고, KoBERT를 사용하여 방언 예측 모델을 구축
- 방언 데이터는 특정 지역(충청도, 경상도, 전라도, 제주도 등)으로 나누어져 있으며, 각 방언의 패턴을 학습
9. 추가 개념
1) LLM 기반 서비스 구축
- 딥러닝과 자연어 처리 모델을 활용하여 사용자가 입력하는 질문에 대해 적절한 강의나 자료를 추천하는 서비스 개발
2) 모델 성능 평가 및 최적화
- 모델의 성능을 지속적으로 평가하여, 최적의 성능을 보장하기 위해 테스트 케이스와 평가 지표(정확도, 일관성 등)를 설정
📘 코드 실습
[평가 및 테스트 케이스 구축]
1) 코사인 유사도 평가 : 유사한 답변을 산출하는가
# SentenceTransformer 모델을 사용하여 코사인 유사도 평가 model = SentenceTransformer('jhgan/ko-sroberta-multitask') # 두 응답 목록의 문장 임베딩 생성 my_embeddings = model.encode(gpt_answers) csv_embeddings = model.encode(csv_answers) # 코사인 유사도 계산 cosine_similarities = np.dot(my_embeddings, csv_embeddings.T) / ( np.linalg.norm(my_embeddings, axis=1)[:, None] * np.linalg.norm(csv_embeddings, axis=1) ) # 평균 코사인 유사도 계산 average_cosine_similarity = np.mean(np.diag(cosine_similarities)) # 결과 출력 print(f"평균 코사인 유사도: {average_cosine_similarity:.2f}")
2) ROUGE-L 평가 : 두 텍스트에서 공통된 연속된 부분의 문자열 길이를 비교
from rouge import Rouge # 참조 답변 (CSV에서 제공된 가상 답변) reference = csv_answers # 평가할 모델의 답변 (GPT가 작성한 답변) candidate = gpt_answers # ROUGE 점수 계산 rouge = Rouge() scores = [rouge.get_scores(cand, ref)[0] for ref, cand in zip(reference, candidate)] # ROUGE-L 점수 계산 rouge_l_f1 = sum([score['rouge-l']['f'] for score in scores]) / len(scores) rouge_l_precision = sum([score['rouge-l']['p'] for score in scores]) / len(scores) rouge_l_recall = sum([score['rouge-l']['r'] for score in scores]) / len(scores) # 결과 출력 print(f"평균 ROUGE-L F1 점수: {rouge_l_f1:.2f}") print(f"평균 ROUGE-L Precision: {rouge_l_precision:.2f}") print(f"평균 ROUGE-L Recall: {rouge_l_recall:.2f}")
📙 내일 일정
- 자연어 처리(NLP) 모델
'TIL _Today I Learned > 2024.10' 카테고리의 다른 글
[DAY 61] NLP 실습???????? (0) | 2024.10.16 |
---|---|
[DAY 60] 자연어 처리 (NLP) 모델 (1) | 2024.10.15 |
[DAY 58] 자연어 처리 (NLP) (1) | 2024.10.11 |
[DAY 57] SQL 실습 (0) | 2024.10.10 |
[DAY 56] 비관계형 데이터베이스 (0) | 2024.10.08 |