본문 바로가기
TIL _Today I Learned/2024.10

[DAY 59] 자연어 처리 (NLP)

by gamdong2 2024. 10. 14.
[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.10.14

📕 학습 목록

  • Generative AI
  • Prompt Engineering
  • Transformer 아키텍처

 

📗 기억할 내용

1. Generative AI (생성형 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) 프롬프트 설계 과정

  1. 초기 설계: 모델에게 필요한 정보를 제공하고 예상 응답에 맞춰 구조화
  2. 테스트 및 개선: 다양한 입력을 테스트하고 프롬프트를 반복적으로 개선
  3. 최적화 및 평가: 자동화된 평가 시스템을 통해 프롬프트의 효율성을 평가

 

3. Transformer 아키텍처 및 파생 모델들

  • Transformer : 2017년에 등장한 NLP 모델로, Attention 메커니즘을 기반으로 순차 처리 없이 병렬 처리를 가능하게 만든 혁신적인 모델

1) 파생 모델들

  1. BERT: 양방향으로 문맥을 이해하는 인코더 기반 모델. 텍스트 분류, 질의응답에 강점
  2. GPT: 텍스트 생성에 특화된 단방향 디코더 모델. 텍스트 생성, 번역, 요약 작업에 사용
  3. RoBERTa: BERT의 개선판으로 더 많은 데이터를 사용하여 성능을 강화한 모델
  4. T5: 모든 NLP 작업을 텍스트-텍스트 형식으로 변환하여 처리
  5. DistilBERT: BERT의 경량화 버전으로, 작고 빠르지만 성능 유지
  6. XLNet: 양방향 학습을 유연하게 처리하도록 개선된 모델
  7. BART: 인코더-디코더 구조를 사용하여 텍스트 복원 및 요약에 강점
  8. Pegasus: 텍스트 요약 작업에 특화된 모델
  9. 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