- 강의 내에 존재하는 코드는 따로 정리되어 있지 않으니, 강의를 보면서 참고 바랍니다.
- 강의: https://www.deeplearning.ai/short-courses/building-systems-with-chatgpt/
Ⅰ. 개요
- 시스템은 단일 호출보다 LLM(대형 언어 모델)을 더 많이 요구한다.
- LLM기반 어플리케이션을 개발한다.
Ⅱ. LLM, The Chat Format and Tokens
- LLM은 어떻게 동작할까?
- LLM 훈련의 주요 도구는 ‘사실 지도 학습’이다.
- 레이블 된 데이터를 얻고, 해당 데이터로 AI모델을 학습한다.
- LLM은 지도 학습을 통해, 반복적으로 다음 단어를 예측함으로써 구축될 수 있다.
- 2가지 주요한 LLM
- base LLM
- 학습 데이터를 기반으로 다음 단어를 반복적으로 예측한다.
- 단점은 문장을 완성 시키는 모델이므로, 질문을 했을 때 질문을 완성 시키려고만 한다. 즉, 질문에 대한 답을 제대로 못한다.
- Instruction Tuned LLM
① 광대한 데이터로 base LLM을 학습 시킨다.
② 더 작은 데이터 세트에서 모델을 Fine-Tune시킨다.
(해당 데이터 세트는 출력이 입력의 지시 사항을 따른다.)
③ 출력 품질을 높이기 위해, 사람들의 평가를 얻는다.
(출력이 도움이 되며, 정직 및 무해 여부 등의 평가를 의미한다.)
④ 사람들 평가를 참고하여 LLM을 더 학습 시켜, 모델이 더 높게 평가된 출력을 생성할 수 있는 확률을 높인다.
(일반적인 기술로는 RLHF가 있다.)
→ RLHF: 인간의 피드백에 의한 강화 학습 - base LLM은 몇 달이 걸릴 수 있지만, base LLM에서 Instruction Tuned LLM으로 가는 것은 몇 일 안에 완성할 수 있다.
- base LLM
- OpenAI 설치:
pip install OpenAI
- LLM 작동 방식
- LLM은 실제로 다음 단어를 반복적으로 예측하지 않는다.
- 아래 사진과 같은 토큰을 반복적으로 예측한다.
- 자주 등장하는 문자열을 구성하는 문자들을 함께 묶어 토큰을 형성한다.
- 보통 한 토큰은 대략 4개의 문자 or 단어의 약 3/4에 해당된다.
- 그래서 LLM의 입력과 출력 토큰 수에 대한 제한은 다르게 설정되어 있다. (입력은 context, 출력은 completion이라고 부른다.)
- chatgpt는 약 4000개 정도의 토큰을 제한한다.
- 토큰 수를 확인하는 경우는 chatgpt와 같이 제한된 약 4000개의 토큰을 초과할 경우이다.
- 해당 경우는 토큰 수를 확인하고, 토큰 제한 수에 맞춰 토큰을 잘라내는 방식으로 해결한다.
- LLM API를 사용하는 방법
- 독립된 system, user, assistant 메시지를 지정하는 방법이다.
- OpenAI API Key 호출
- OpenAI API Key를 코드에 평문으로 작성하면, 보안적 측면에서 안전할 수 없다.
- 로컬에서
.env
파일명으로 OpenAI API Key를 저장한다.- OpenAI API Key 발급
: https://platform.openai.com/api-keys import os openai.api_key="<OpenAI API Key>"
- OpenAI API Key 발급
dotenv
라는 라이브러리를 사용하여, API Key를 OS 환경 변수로 load할 수 있다.- 모듈설치:
pip install openai python-dotenv
- 참고: https://daco2020.tistory.com/480
- 모듈설치:
from dotenv import load_dotenv, find_dotenv
_=load_dotenv(find_dotenv()) #read local .env file
import os
import openai
openai.api_key = os.getenv('OPENAAI_API_KEY')
- Prompt-based AI 사용 이점
- 이전에는 몇 달이 걸렸던 반면, prompt-based AI를 사용하여 몇일만에 AI 애플리케이션을 개발할 수 있다.
- 해당 사항은 ‘비구조화 된 데이터 애플리케이션’에서만 가능하다.
(tabular 데이터를 다루는 머신러닝 애플리케이션에는 적용되지 않는다.
Ⅲ. classification
- 입력값을 평가하는 작업을 수행한다.
- 쿼리 유형을 분리하는 것이 어떤 명령을 사용할지 결정하는데 도움이 된다.
- prompt를 통해 시스템의 역할을 정의하고, 이를 바탕으로 user의 입력 값을 json 형태로 변경하여 입력 쿼리를 각 유형에 맞게 분류한다. (예제 참고)
- 역할 정의 시에는 Chat Complections API 사용하여 정의한다.
- (참고: https://wikidocs.net/204333)
Ⅳ. Moderation
- 입력할 수 있는 시스템 존재하는데, 이를 사용자들이 악용하려는 것인지 확인 해야 한다.
1. OpenAI Moderation API를 사용하여, 콘텐츠 검토
- OpenAI의 Moderation API는 OpenAI 사용 규정을 준수하도록 설계되었으며,
다양한 카테고리에서 금지된 콘텐츠를 식별하고 필터링 하는데 도움을 준다. - 해당 API는 무료로, API의 입출력을 모니터링 할 수 있다.
- openai.Moderaction.create사용하여, 사용자 입력 값이 유해 한지 확인한다.
- 입력 값에 따라 구분자 ####을 통해, 토큰 하나로 구성한다.
(####은 임의의 구분자이며, 각 시스템마다 개발자가 설정한 것에 따라 다르다.)
2. 다양한 프롬프트를 사용하여, 프롬프트 주입 감지
- 프롬프트 주입은 사용자가 AI시스템을 조작하려고 개발자가 설정한 의도된 명령어나 제약을 무시하거나 우회하려고 입력을 제공한 경우를 의미한다.
- ex) 사용자가 봇에게 가짜뉴스를 생성하도록 요청하는 프롬프트를 주입하였을 때
- 확인해야 될 부분
① 시스템 메시지에서 구분자와 명확한 지시를 사용하는 것이다. (시스템 목적에 맞는지)
② 사용자가 프롬프트 주입을 시도하려고 하는지 확인하는 것이다.
Ⅴ. Chain of Thought Reasoning
- 입력을 처리하는 작업에 대한 내용이다.
- AI모델은 입력된 질문의 답변을 하기 전, 문제에 대해 자세히 추론하는 것이 중요하다.
- ‘사고의 연쇄 추론’을 통해, AI 모델은 입력된 질문을 재구성하여 문제를 단계적으로 추론함으로써 추론 오류를 예방한다.
- 일부 애플리케이션에서는 답변에 도달하기 위해, 사용했던 추론 과정을 사용자에게 공유하면 안된다. 이때, 추론 과정이 공유되는 현상을 완화해주는 ‘내면의 독백’을 사용한다.
Ⅵ. Chaining Prompts
- 앞 Ⅴ장의 작업을 단순하게 하위 작업으로 분할하는 방법의 내용이다.
- Ⅴ장에서는 하나의 프롬프트로 사고의 연쇄 추론 과정을 진행하였지만, 해당 장에서는 여러 프롬프트로 분할하여 진행한다.
- 프롬프트 체인은 시스템 상태를 유지하고, 주어진 시점에서 다른 행동을 취할 수 있는 워크플로우가 있을 때 강력한 전략이다. (간단한 작업의 경우는 역효과가 날 수 있으니 주의!)
- 프롬프트 체인 장점
- 관리하기 쉽고, 오류 발생률을 줄여주는 장점이 존재한다.
- 하나의 프롬프트로 진행하는 것보다 분산함으로서, 비용을 줄일 수 있다는 장점이 존재한다.
- 해당 방법은 어떤 과정에서 실패했는지 확인하기 쉽고, 문제되는 단계만 수정 및 삭제할 수 있는 장점이 존재한다.
- 내용 검색이나 API 호출과 같이, 작업 흐름의 특정 지점에서 외부 도구를 사용할 수 있는 장점이 존재한다.
(단일 프롬프트는 불가능)
- 정보 검색 기술 중에는 ‘텍스트 임베딩’ 이라는 기술이 존재한다.
- 퍼지 검색이나 의미 검색을 가능하게 한다.
(정확한 키워드를 입력하지 않아도, 관련 정보를 검색할 수 있다.)
- 퍼지 검색이나 의미 검색을 가능하게 한다.
Ⅶ. Check Outputs
- 시스템이 생성한 출력물을 사용자에게 보여주기 전 확인하는 내용이다.
1. moderation API를 통한, 출력물 품질 평가
- 입력값에 대한 moderation을 진행할 때 사용했던 코드를 통해, 결과값에 해로운 내용이 있는지 확인하는 방법이다. (참고: Ⅲ. classification)
- moderation API는 필터링과 시스템 자체가 생성한 출력을 조절하는데 사용할 수 있다.
2. 프롬프트를 통한, 출력물 품질 평가
- 생성된 출력물을 프롬프트에 입력 값으로 줘서, 출력물을 평가해 달라고 지시하는 방법이다.
- 시스템이 여러 응답을 생성하고 프롬프트에 입력 값으로 줘서, 가장 좋은 출력물을 골라 달라는 방법도 가능하다.
- 즉각적인 응답을 얻기 위해, 사용하는 방식이다.
- 해당 방식을 사용하면, 지연 속도가 늦어지고 비용이 추가된다는 단점으로, 보통은 사용 빈도가 낮다. (추가적인 모델 호출, 토큰량 증가)
Ⅷ. Evaluation
- 사용자 입력 값을 moderation API를 통해. 플래그가 있는지 확인한다.
- 제품 목록을 추출한다.
- 제품 정보를 찾는다.
- 추출된 제품 정보를 바탕으로, 모델은 사용자의 입력에 대한 출력 값을 작성한다.
- 모델이 추출한 값을 moderation API를 통해, 플래그가 있는지 확인한다.
Ⅸ. Evaluation Part 1
- LLM 출력물 평가하는 방법에 대한 내용이다.
- 지도 학습의 경우는 훈련 데이터를 수집 하고 학습을 진행하기 때문에 테스트 데이터 수집은 어렵지 않다.
- 프롬프트 학습의 경우 프롬프트로 훈련 데이터를 점차적으로 수집하면서 학습을 진행하기 때문에, 훈련 데이터를 수집하는 동안에는 모델 작업도 중단된다.
- 모델의 정확도를 확인하는 단계
- 보통 해당 과정 중, 잘 동작 된다고 생각되면 이후 단계는 넘어가지 않는다.
(실제로, 보통 1~2단계에서 마무리 된다.)
① 소수의 예제를 통해, 프롬프트를 조정한다. (약 1~5개 정도의 예제)
② 소수의 까다로운 예제를 데이터세트에 추가한다.
(까다로운 예제의 경우에는 프롬프트가 효과가 없거나 알고리즘이 작동하지 않는다.)
③ 예제에 대한 성능 측정이 가능한 metrics 개발한다. (평균, 정확도,,등등)
④ 무작위로 샘플링 된 예제 세트를 수집하여, 모델을 조정한다.
( 보통 예제 세트는 개발 세트 또는 hold-out cross validataion set 이 사용된다.)
⑤ hold-out cross validataion set를 수집하여 사용한다. (모델 조정 시, 미 사용된 데이터 수집)
- 보통 해당 과정 중, 잘 동작 된다고 생각되면 이후 단계는 넘어가지 않는다.
- One-shot 프롬프팅: 단 하나의 좋은 예시를 프롬프트에게 제시하는 것을 의미한다.
- Few-shot 프롬프팅: 극 소량의 좋은 예시를 프롬프트에게 제시하는 것을 의미한다.
- 자동으로 평가하고 싶다면, 개발세트를 이용하면 된다.
- 개발 세트에는 사용자 입력에 대한 예시와 예시에 대한 좋은 답변이 소수로 적혀있는 데이터이다.
- 정답 데이터가 적혀있으므로, 시스템이 생성한 값이 올바른지 비교해볼 수 있다.
Ⅹ. Evaluation Part 2
- 이전 장에서는 정답 데이터 하나만 주어졌지만, 정답이 여러 개가 될 수 있다면 어떻게 출력물을 평가할 것 인지에 대한 내용이다.
1. 좋은 답변 예시가 없을 경우 평가 (Rubric)
- 좋은 답변의 예시가 없더라도, Rubric을 정하면 LLM 출력 평가를 진행할 수 있다.
- LLM 출력 평가의 기준(rubric)을 정해 둘 수 있다면, 다른 API를 호출하고 평가 기준을 바탕으로 LLM 출력을 평가할 수 있다. (=Rubric 평가)
- 고전적 자연어 처리 기법으로, LLM 출력이 좋은 답변과 비슷한지 측정하는 BLEU 지표가 존재한다.
2. 좋은 답변 예시가 있을 경우, 평가 (Rubric)
- 시스템 출력 값을 좋은 답변 예시와 비교하여 얼마나 비슷하게 출력되었는지 평가한다.
- 프롬프트를 이용하여, LLM에게 시스템 출력 값과 좋은 답변 예시를 비교 해달라고 요청할 수 있다.
- 좋은 답변이 존재하고, 이를 비교할 경우 Rubric을 이용할 수도 있다.
(OpenAI의 오픈 소스 evals 프레임워크에서 제공한 Rubric이다.)
Compare the factual content of the submitted answer with the expert answer. Ignore any differences in style, grammar, or punctuation.
The submitted answer may either be a subset or superset of the expert answer, or it may conflict with it. Determine which case applies. Answer the question by selecting one of the following options:
(A) The submitted answer is a subset of the expert answer and is fully consistent with it.
(B) The submitted answer is a superset of the expert answer and is fully consistent with it.
(C) The submitted answer contains all the same details as the expert answer.
(D) There is a disagreement between the submitted answer and the expert answer.
(E) The answers differ, but these differences don't matter from the perspective of factuality.
choice_strings: ABCDE
'AI' 카테고리의 다른 글
Chapter 6. 학습 관련 기술들 (0) | 2024.07.13 |
---|---|
Chapter 5. 오차역전파법 (0) | 2024.06.30 |
Chapter 4. 신경망 학습 (0) | 2024.06.23 |
Chapter 3. 신경망 (0) | 2024.06.18 |
Chapter2. 퍼셉트론 (1) | 2024.06.17 |