diff --git a/04-prompt-engineering-fundamentals/translations/ko/README.md b/04-prompt-engineering-fundamentals/translations/ko/README.md index e0a2222f8..160052308 100644 --- a/04-prompt-engineering-fundamentals/translations/ko/README.md +++ b/04-prompt-engineering-fundamentals/translations/ko/README.md @@ -356,7 +356,7 @@ Link to a copy of that Notebook with the prompts filled in and run, showing what ### 다음으로, 환경 변수를 구성하세요 -- 레포지토리 루트에 있는 `.env.copy` 파일을 `.env`로 복사하고 `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_ENDPOINT`, `AZURE_OPENAI_DEPLOYMENT` 값을 채워넣으세요. [Learning Sandbox section](./04-prompt-engineering-fundamentals#learning-sandbox)에서 자세한 내용을 확인하세요. +- 레포지토리 루트에 있는 `.env.copy` 파일을 `.env`로 복사하고 `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_ENDPOINT`, `AZURE_OPENAI_DEPLOYMENT` 값을 채워넣으세요. [Learning Sandbox section](../../04-prompt-engineering-fundamentals#learning-sandbox)에서 자세한 내용을 확인하세요. ### 다음으로, Jupyter Notebook을 열어보세요 diff --git a/13-securing-ai-applications/translations/ko/README.md b/13-securing-ai-applications/translations/ko/README.md new file mode 100644 index 000000000..9a484fe4c --- /dev/null +++ b/13-securing-ai-applications/translations/ko/README.md @@ -0,0 +1,164 @@ +# 생성형 AI 애플리케이션 보안 + +[![생성형 AI 애플리케이션 보안](../../images/13-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson13-gh?WT.mc_id=academic-105485-koreyst) + +## 소개 + +이 수업에서는 다음을 다룹니다: + +- AI 시스템의 맥락에서 보안. +- AI 시스템에 대한 일반적인 위험과 위협. +- AI 시스템을 보호하기 위한 방법 및 고려사항. + +## 학습 목표 + +이 수업을 마친 후, 다음을 이해하게 될 것입니다: + +- AI 시스템에 대한 위협과 위험. +- AI 시스템을 보호하기 위한 일반적인 방법과 관행. +- 보안 테스트를 구현하여 예기치 않은 결과와 사용자 신뢰의 저하를 방지하는 방법. + +## 생성형 AI의 맥락에서 보안이란 무엇인가? + +인공지능(AI) 및 머신 러닝(ML) 기술이 점점 더 우리의 삶을 형성함에 따라, 고객 데이터를 보호하는 것뿐만 아니라 AI 시스템 자체를 보호하는 것도 중요합니다. AI/ML은 많은 산업에서 중요한 의사결정 과정에 점점 더 많이 사용되고 있으며, 잘못된 결정은 심각한 결과를 초래할 수 있습니다. + +여기서 고려해야 할 주요 포인트는 다음과 같습니다: + +- **AI/ML의 영향**: AI/ML은 일상 생활에 큰 영향을 미치므로 이를 보호하는 것이 필수적입니다. +- **보안 과제**: AI/ML의 이러한 영향에 맞춰 AI 기반 제품을 정교한 공격에서 보호하는 것이 중요합니다. 공격은 트롤러와 조직된 그룹 모두에 의해 발생할 수 있습니다. +- **전략적 문제**: 기술 산업은 장기적인 고객 안전 및 데이터 보안을 보장하기 위해 전략적 도전을 적극적으로 해결해야 합니다. + +또한 머신 러닝 모델은 악의적인 입력과 benign한 이상 데이터를 구별하는 데 대부분 능숙하지 않습니다. 훈련 데이터의 주요 출처는 비검토, 비조정된 공공 데이터셋에서 비롯되며, 이는 3자인 누구나 기여할 수 있습니다. 공격자는 데이터를 침해할 필요도 없이 자유롭게 기여할 수 있습니다. 시간이 지남에 따라, 신뢰도가 낮은 악성 데이터는 데이터 구조나 형식이 올바른 한, 신뢰도가 높은 데이터로 변모할 수 있습니다. + +이것이 바로 모델이 결정을 내리는데 사용하는 데이터 저장소의 무결성과 보호를 보장하는 것이 중요한 이유입니다. + +## AI의 위협과 리스크 이해 + +AI 및 관련 시스템 측면에서, 데이터 포이즈닝(data poisoning)은 오늘날 가장 중요한 보안 위협으로 부각되고 있습니다. 데이터 포이즈닝은 누군가가 AI를 훈련시키는 데 사용되는 정보를 의도적으로 변경하여, AI가 실수를 저지르게 만드는 것입니다. 이는 표준화된 탐지 및 완화 방법이 결여되고, 신뢰할 수 없거나 검증되지 않은 공개 데이터셋에 의존하기 때문입니다. 데이터의 출처와 계보를 추적하는 것이 데이터 무결성을 유지하고 부정확한 훈련 과정을 방지하는 데 중요합니다. 그렇지 않으면 "쓰레기 들어가면, 쓰레기 나온다"는 옛말이 적용되어 모델 성능이 악화될 수 있습니다. + +다음은 데이터 포이즈닝이 여러분의 모델에 어떻게 영향을 미칠 수 있는지에 대한 예시입니다: + +1. **레이블 뒤집기**: 이진 분류 작업에서 상대방이 훈련 데이터의 일부 서브셋의 레이블을 고의로 뒤집습니다. 예를 들어, benign(양성) 샘플이 malicious(악성)으로 레이블되어 모델이 잘못된 연관을 학습하게 됩니다.\ + **예시**: 스팸 필터가 조작된 레이블로 인해 정상 이메일을 스팸으로 잘못 분류함. +2. **특성 포이즈닝**: 공격자가 훈련 데이터의 특성을 미세하게 수정하여 모델에 편향을 유도하거나 오도합니다.\ + **예시**: 추천 시스템을 조작하려고 제품 설명에 관련 없는 키워드를 추가함. +3. **데이터 주입**: 악성 데이터를 훈련 세트에 주입하여 모델의 동작을 영향을 미칩니다.\ + **예시**: 감정 분석 결과를 왜곡하기 위해 가짜 사용자 리뷰를 도입함. +4. **백도어 공격**: 상대방이 훈련 데이터에 숨겨진 패턴(백도어)을 삽입합니다. 모델은 이 패턴을 학습하여, 트리거되면 악의적으로 동작합니다.\ + **예시**: 특정 인물을 오인식하도록 백도어 이미지로 훈련된 얼굴 인식 시스템. + +MITRE Corporation은 AI 시스템에 대한 실제 공격에서 적들이 사용하는 전술과 기술을 담은 [ATLAS(Adversarial Threat Landscape for Artificial-Intelligence Systems)](https://atlas.mitre.org/?WT.mc_id=academic-105485-koreyst)라는 지식 기반을 만들었습니다. + +> AI 시스템의 통합이 증가함에 따라 기존의 사이버 공격 이외에도 AI를 활용한 시스템에 대한 취약점이 증가하고 있습니다. 우리는 전 세계 커뮤니티가 다양한 시스템에 AI를 점점 더 많이 통합함에 따라 이러한 독특하고 진화하는 취약점에 대한 인식을 높이기 위해 ATLAS를 개발했습니다. ATLAS는 MITRE ATT&CK® 프레임워크를 모델로 하여, ATT&CK의 전술, 기술, 절차(TTPs)와 보완적입니다. + +전통적인 사이버 보안에서 고급 위협 에뮬레이션 시나리오를 계획하는 데 광범위하게 사용되는 MITRE ATT&CK® 프레임워크와 마찬가지로, ATLAS는 emerging attacks에 대비하기 위해 더 잘 이해하고 준비하는 데 도움이 되는 쉽게 검색 가능한 TTP 집합을 제공합니다. + +또한, Open Web Application Security Project (OWASP)는 LLMs를 활용하는 애플리케이션에서 발견된 가장 중요한 취약점의 "[Top 10 리스트](https://llmtop10.com/?WT.mc_id=academic-105485-koreyst)"를 작성했습니다. 이 목록은 앞서 언급한 데이터 포이즈닝과 같은 위협과 다음과 같은 다른 위협의 리스크를 강조합니다: + +- **프롬프트 인젝션**: 공격자가 주의 깊게 제작한 입력을 통해 대형 언어 모델(LLM)을 조작하여 의도된 동작을 벗어나게 하는 기술. +- **공급망 취약점**: Python 모듈이나 외부 데이터셋과 같은 LLMs에서 사용되는 애플리케이션 구성 요소와 소프트웨어가 자체적으로 손상되어 예상치 못한 결과, 편향을 도입하거나 기본 인프라의 취약점을 초래할 수 있음. +- **과도한 의존**: LLMs는 오류를 범할 수 있으며 부정확하거나 안전하지 않은 결과를 제공할 가능성이 큽니다. 여러 문서화된 상황에서 사람들이 결과를 곧이곧대로 받아들여 의도치 않은 실제 세계의 부정적 결과로 이어진 경우가 있습니다. + +Microsoft Cloud Advocate Rod Trent는 이러한 신흥 AI 위협에 대해 깊이 탐구하고 이러한 시나리오를 최적의 방법으로 다루는 광범위한 지침을 제공하는 무료 전자책 [Must Learn AI Security](https://github.com/rod-trent/OpenAISecurity/tree/main/Must_Learn/Book_Version?WT.mc_id=academic-105485-koreyst)를 저술했습니다. + +## AI 시스템 및 LLM의 보안 테스트 + +인공지능(AI)은 다양한 분야와 산업을 변혁시키며 사회에 새로운 가능성과 혜택을 제공하고 있습니다. 그러나 AI는 데이터 프라이버시, 편향성, 설명 가능성 부족, 잠재적 오용 등의 상당한 문제와 위험도 제기합니다. 따라서 AI 시스템이 윤리적 및 법적 기준을 준수하고 사용자 및 이해관계자가 신뢰할 수 있도록 보안되고 책임 있게 만들어지는 것이 중요합니다. + +보안 테스트는 AI 시스템 또는 LLM(대규모 언어 모델)의 보안을 평가하여 취약점을 식별하고 이를 악용하는 과정입니다. 이는 테스트의 목적과 범위에 따라 개발자, 사용자 또는 서드파티 감사자에 의해 수행될 수 있습니다. AI 시스템 및 LLM을 위한 가장 일반적인 보안 테스트 방법은 다음과 같습니다: + +- **데이터 소독**: 이는 AI 시스템 또는 LLM의 학습 데이터 또는 입력에서 민감하거나 개인적인 정보를 제거하거나 익명화하는 과정입니다. 데이터 소독은 비밀 또는 개인 데이터의 노출을 줄여 데이터 유출과 악의적 조작을 방지하는 데 도움이 됩니다. +- **적대적 테스트**: 이는 AI 시스템 또는 LLM의 입력 또는 출력에 적대적 예제를 생성하고 적용하여 그 견고성과 적대적 공격에 대한 저항력을 평가하는 과정입니다. 적대적 테스트는 공격자가 악용할 수 있는 AI 시스템 또는 LLM의 취약점과 약점을 식별하고 완화하는 데 도움이 됩니다. +- **모델 검증**: 이는 AI 시스템 또는 LLM의 모델 매개변수 또는 아키텍처의 정확성과 완전성을 검증하는 과정입니다. 모델 검증은 모델이 보호되고 인증되어 모델 도난을 방지하는지 확인하는 데 도움이 됩니다. +- **출력 검증**: 이는 AI 시스템 또는 LLM의 출력 품질과 신뢰성을 검증하는 과정입니다. 출력 검증은 출력이 일관되고 정확한지 확인하여 악의적 조작을 감지하고 수정하는 데 도움이 됩니다. + +OpenAI는 첨단 AI 시스템의 선두 주자로, AI 안전에 기여하고자 하는 목표로 붉은 팀 네트워크 이니셔티브의 일환으로 일련의 *안전 평가*를 설정했습니다. 이 평가는 AI 시스템의 출력을 테스트하기 위한 것입니다. + +> 평가의 범위는 간단한 Q&A 테스트에서 더 복잡한 시뮬레이션까지 다양할 수 있습니다. 다음은 다양한 각도에서 AI 행동을 평가하기 위해 OpenAI가 개발한 샘플 평가의 구체적인 예입니다: + +#### 설득 + +- [MakeMeSay](https://github.com/openai/evals/tree/main/evals/elsuite/make_me_say/readme.md?WT.mc_id=academic-105485-koreyst): AI 시스템이 다른 AI 시스템을 비밀 단어를 말하게 속이는 능력. +- [MakeMePay](https://github.com/openai/evals/tree/main/evals/elsuite/make_me_pay/readme.md?WT.mc_id=academic-105485-koreyst): AI 시스템이 다른 AI 시스템을 돈을 기부하도록 설득하는 능력. +- [Ballot Proposal](https://github.com/openai/evals/tree/main/evals/elsuite/ballots/readme.md?WT.mc_id=academic-105485-koreyst): AI 시스템이 다른 AI 시스템의 정치적 제안에 대한 지지에 영향을 미치는 능력. + +#### 스테가노그래피(은밀한 메시징) + +- [스테가노그래피](https://github.com/openai/evals/tree/main/evals/elsuite/steganography/readme.md?WT.mc_id=academic-105485-koreyst): AI 시스템이 다른 AI 시스템에 의해 잡히지 않고 비밀 메시지를 얼마나 잘 전달할 수 있는가? +- [텍스트 압축](https://github.com/openai/evals/tree/main/evals/elsuite/text_compression/readme.md?WT.mc_id=academic-105485-koreyst): AI 시스템이 메시지를 압축 및 해제압축하여 비밀 메시지를 숨기는 능력을 얼마나 잘 갖추고 있는가? +- [셸링 포인트](https://github.com/openai/evals/blob/main/evals/elsuite/schelling_point/README.md?WT.mc_id=academic-105485-koreyst): AI 시스템이 직접적인 의사소통 없이 다른 AI 시스템과 얼마나 잘 협력할 수 있는가? + +### AI 보안 + +AI 시스템을 악의적인 공격, 남용 또는 의도하지 않은 결과로부터 보호하는 것이 중요합니다. 여기에는 AI 시스템의 안전성, 신뢰성 및 신뢰성을 보장하기 위한 다음과 같은 조치가 포함됩니다: + +- AI 모델을 훈련하고 실행하는 데 사용되는 데이터 및 알고리즘의 보안 +- AI 시스템의 무단 액세스, 조작 또는 사보타주 방지 +- AI 시스템의 편향성, 차별 또는 윤리적 문제 감지 및 완화 +- AI 결정과 행동의 책임성, 투명성 및 설명 가능성 보장 +- AI 시스템의 목표와 가치를 인간과 사회의 목표와 가치에 맞추기 + +AI 보안은 AI 시스템과 데이터의 무결성, 가용성 및 기밀성을 보장하는 데 중요합니다. AI 보안의 도전과 기회는 다음과 같습니다: + +- 기회: 사이버 보안 전략에 AI를 통합하면 위협을 식별하고 대응 시간을 개선하는 데 중요한 역할을 할 수 있습니다. AI는 피싱, 악성 소프트웨어 또는 랜섬웨어와 같은 사이버 공격의 감지 및 완화를 자동화하고 증강하는 데 도움을 줄 수 있습니다. +- 도전: AI는 적대자에 의해 정교한 공격을 실행하는 데도 사용될 수 있습니다. 예를 들어, 가짜 또는 오해를 불러일으키는 콘텐츠 생성, 사용자 사칭 또는 AI 시스템의 취약성 악용 등이 있습니다. 따라서 AI 개발자는 남용에 강한 견고하고 탄력적인 시스템을 설계할 책임이 있습니다. + +### 데이터 보호 + +LLM은 사용하는 데이터의 프라이버시와 보안에 위험을 초래할 수 있습니다. 예를 들어, LLM은 개인 이름, 주소, 비밀번호, 신용카드 번호와 같은 훈련 데이터에서 민감한 정보를 기억하고 유출할 가능성이 있습니다. 또한, 악의적인 행위자가 취약점이나 편향성을 악용하기 위해 LLM을 조작하거나 공격할 수 있습니다. 따라서 이러한 위험을 인지하고 LLM과 함께 사용하는 데이터를 보호하기 위한 적절한 조치를 취하는 것이 중요합니다. 데이터를 보호하기 위해 취할 수 있는 몇 가지 단계는 다음과 같습니다: + +- **LLM과 공유하는 데이터의 양과 유형 제한**: 필요한 목적에 적합하고 관련된 데이터만 공유하며, 민감하거나 기밀이거나 개인적인 데이터는 공유하지 않도록 해야 합니다. 사용자는 또한 식별 정보를 제거하거나 마스킹하거나, 안전한 통신 채널을 사용하여 LLM과 공유하는 데이터를 익명화하거나 암호화하여야 합니다. +- **LLM이 생성한 데이터 검증**: LLM이 생성한 출력물이 원치 않거나 부적절한 정보를 포함하지 않는지 항상 정확성과 품질을 확인해야 합니다. +- **데이터 유출이나 사건의 보고 및 경고**: LLM이 생성하는 텍스트가 부적절, 부정확, 공격적, 해로운 경우와 같은 의심스러운 활동이나 비정상적인 행동을 주의 깊게 관찰해야 합니다. 이는 데이터 유출이나 보안 사고의 징후일 수 있습니다. + +데이터 보안, 거버넌스, 준수는 다중 클라우드 환경에서 데이터와 AI의 힘을 활용하고자 하는 모든 조직에 필수적입니다. 모든 데이터를 보호하고 관리하는 것은 복잡하고 다면적인 작업입니다. 구조화된 데이터, 비구조화된 데이터, AI가 생성한 데이터를 포함하여 여러 클라우드의 여러 위치에 있는 다양한 유형의 데이터를 보호하고 관리해야 하며, 현재 및 미래의 데이터 보안, 거버넌스, AI 규제를 고려해야 합니다. 데이터를 보호하기 위해 다음과 같은 모범 사례 및 예방 조치를 채택해야 합니다: + +- 데이터 보호 및 프라이버시 기능을 제공하는 클라우드 서비스 또는 플랫폼 사용. +- 데이터 오류, 불일치 또는 이상을 확인하기 위한 데이터 품질 및 검증 도구 사용. +- 데이터가 책임감 있고 투명하게 사용되도록 보장하기 위한 데이터 거버넌스 및 윤리 프레임워크 사용. + +### 실제 세계의 위협을 모방하기 - AI 레드 팀 + +실제 세계의 위협을 모방하는 것은 시스템의 취약점을 식별하고 수비자의 대응을 테스트하기 위해 유사한 도구, 전술, 절차를 사용하는 것을 통해 탄력적인 AI 시스템을 구축하는 표준 관행으로 간주됩니다. + +> AI 레드 팀 실행의 의미는 진화하여 더 확장된 의미를 가지게 되었습니다: 이는 보안 취약점을 탐색하는 것뿐만 아니라 잠재적으로 해로운 콘텐츠 생성을 포함한 다른 시스템 실패를 탐색하는 것도 포함합니다. AI 시스템은 새로운 위험을 가지고 있으며, 레드 팀은 프롬프트 주입 및 기반 없는 콘텐츠 생성과 같은 새로운 위험을 이해하는 데 중요합니다. - [Microsoft AI 레드 팀이 더 안전한 AI의 미래를 구축](https://www.microsoft.com/security/blog/2023/08/07/microsoft-ai-red-team-building-future-of-safer-ai/?WT.mc_id=academic-105485-koreyst) + +[![레드 팀에 대한 지침 및 리소스](../../images/13-AI-red-team.png?WT.mc_id=academic-105485-koreyst)]() + +아래는 Microsoft의 AI 레드 팀 프로그램을 형성한 주요 통찰입니다. + +1. **AI 레드 팀의 광범위한 범위:** + AI 레드 팀은 이제 보안과 책임 있는 AI(RAI) 결과 모두를 포괄합니다. 전통적으로 레드 팀은 모델을 벡터로 취급하고 보안 측면에 초점을 맞췄습니다(예: 기본 모델 탈취). 그러나 AI 시스템은 새로운 보안 취약점을 도입합니다(예: 프롬프트 주입, 데이터 중독), 이는 특별한 주의가 필요합니다. 보안을 넘어, AI 레드 팀은 공정성 이슈(예: 고정관념)와 유해한 콘텐츠(예: 폭력 미화)도 탐험합니다. 이러한 문제를 조기에 식별하면 방어 투자 우선순위를 정할 수 있습니다. +2. **악의적이고 무해한 실패:** + AI 레드 팀은 악의적이거나 무해한 관점에서의 실패를 고려합니다. 예를 들어, 새로운 Bing을 레드 팀 할 때, 악의적인 공격자가 시스템을 전복시키는 방법뿐만 아니라 일반 사용자가 문제나 유해한 콘텐츠를 만나는 상황도 탐구합니다. 전통적인 보안 레드 팀이 주로 악의적인 행위자에 집중하는 것과 달리, AI 레드 팀은 더 넓은 범위의 인물과 잠재적인 실패를 고려합니다. +3. **AI 시스템의 동적 특성:** + AI 애플리케이션은 끊임없이 진화합니다. 대형 언어 모델 애플리케이션에서는 개발자들이 변화하는 요구 사항에 맞추어 적응합니다. 지속적인 레드 팀 활동은 진화하는 위험에 대한 지속적인 경계와 적응을 보장합니다. + +AI 레드 팀은 보완적 동작으로 간주하여 [역할 기반 접근 제어 (RBAC)](https://learn.microsoft.com/azure/ai-services/openai/how-to/role-based-access-control?WT.mc_id=academic-105485-koreyst) 및 종합적인 데이터 관리 솔루션과 같은 추가 통제 수단을 보완해줘야 합니다. 이는 프라이버시와 보안을 중시하면서 편견, 유해한 콘텐츠, 잘못된 정보를 최소화하여 사용자 신뢰를 훼손하지 않는 안전하고 책임 있는 AI 솔루션을 구현하는 것을 목표로 하는 보안 전략을 보완하기 위함입니다. + +AI 시스템에서 레드 팀이 위험을 식별하고 완화하는 데 도움이 되는 추가 읽을거리 목록은 다음과 같습니다: + +- [대형 언어 모델(LLM) 및 그 애플리케이션에 대한 레드 팀 계획](https://learn.microsoft.com/azure/ai-services/openai/concepts/red-teaming?WT.mc_id=academic-105485-koreyst) +- [OpenAI 레드 팀 네트워크란?](https://openai.com/blog/red-teaming-network?WT.mc_id=academic-105485-koreyst) +- [AI 레드 팀 - 더 안전하고 더 책임 있는 AI 솔루션을 구축하는 핵심 관행](https://rodtrent.substack.com/p/ai-red-teaming?WT.mc_id=academic-105485-koreyst) +- MITRE [ATLAS (인공지능 시스템에 대한 적대적 위협 지형도)](https://atlas.mitre.org/?WT.mc_id=academic-105485-koreyst), AI 시스템에 대한 실제 공격에서 사용되는 전술과 기술이 기록된 지식 기반. + +## 지식 확인 + +데이터 무결성을 유지하고 오용을 방지하기 위한 좋은 접근 방법은 무엇일까요? + +1. 데이터 접근 및 관리에 강력한 역할 기반 제어를 적용하기 +1. 데이터의 오인을 방지하거나 오용을 막기 위해 데이터 라벨링을 구현하고 감사하기 +1. AI 인프라가 콘텐츠 필터링을 지원하도록 보장하기 + +A:1, 세 가지 모두 훌륭한 권장 사항이지만, 사용자에게 적절한 데이터 접근 권한을 부여하는 것이 LLM이 사용하는 데이터의 조작 및 오인을 방지하는 데 큰 도움이 됩니다. + +## 🚀 도전 + +AI 시대에 민감한 정보를 [관리하고 보호하는 방법](https://learn.microsoft.com/training/paths/purview-protect-govern-ai/?WT.mc_id=academic-105485-koreyst)에 대해 더 알아보세요. + +## 수고하셨습니다. 학습을 계속하세요! + +이 레슨을 완료한 후 [Generative AI 학습 컬렉션](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)을 확인하여 Generative AI 지식을 계속 향상시키세요! + +Lesson 14로 이동하여 [생성형 AI 애플리케이션 수명 주기](../../../14-the-generative-ai-application-lifecycle/README.md?WT.mc_id=academic-105485-koreyst)를 살펴보세요! diff --git a/14-the-generative-ai-application-lifecycle/translations/ko/README.md b/14-the-generative-ai-application-lifecycle/translations/ko/README.md new file mode 100644 index 000000000..6d871826d --- /dev/null +++ b/14-the-generative-ai-application-lifecycle/translations/ko/README.md @@ -0,0 +1,84 @@ +# 생성형 AI 애플리케이션 생애주기 + +모든 AI 애플리케이션에 중요한 질문은 AI 기능의 적절성입니다. AI는 빠르게 발전하는 분야이므로, 애플리케이션이 지속적으로 관련성, 신뢰성 및 강건성을 유지하도록 하기 위해서는 모니터링, 평가 및 개선이 계속 필요합니다. 이러한 과정에서 생성형 AI 생애주기가 중요한 역할을 합니다. + +생성형 AI 생애주기는 생성형 AI 애플리케이션을 개발, 배포 및 유지 관리하는 단계를 안내하는 프레임워크입니다. 이를 통해 목표를 설정하고, 성능을 측정하며, 도전에 대응하고, 해결책을 구현할 수 있습니다. 또한, 도메인 및 이해 관계자의 윤리적 및 법적 기준에 애플리케이션을 일치시킬 수 있도록 도와줍니다. 생성형 AI 생애주기를 따르면 애플리케이션이 항상 가치를 제공하고 사용자 만족도를 충족시킬 수 있습니다. + +## 소개 + +이 장에서는 다음을 이해할 것입니다: + +- MLOps에서 LLMOps로의 패러다임 전환 +- LLM 수명 주기 +- 수명 주기 도구 +- 수명 주기 측정 및 평가 + +## MLOps에서 LLMOps로의 패러다임 전환 이해하기 + +LLM은 인공지능 무기고의 새로운 도구로서, 응용 프로그램의 분석 및 생성 작업에 있어서 매우 강력합니다. 그러나 이 강력함은 AI와 고전적인 머신 러닝 작업을 간소화하는 방식에 몇 가지 영향을 미칩니다. + +이와 함께, 우리는 동적으로 이 도구를 적응시키기 위한 새로운 패러다임이 필요합니다. 적절한 인센티브로 말이죠. 이전의 AI 애플리케이션은 "ML 애플리케이션"으로, 새로운 AI 애플리케이션은 "GenAI 애플리케이션" 또는 단순히 "AI 애플리케이션"으로 분류할 수 있는데, 이는 당시에 사용된 주류 기술과 기법을 반영합니다. 이는 여러 방식으로 우리 내러티브를 변화시킵니다. 다음 비교를 살펴보세요. + +![LLMOps vs. MLOps 비교](../../images/01-llmops-shift.png?WT.mc_id=academic-105485-koreys) + +LLMOps에서는 앱 개발자에 더욱 초점을 맞추고, 통합을 주요 포인트로 사용하며 "서비스로서의 모델(Models-as-a-Service)"을 사용하고 지표를 다음과 같이 생각합니다. + +- 품질: 응답 품질 +- 해악: 책임 있는 AI +- 정직성: 응답의 타당성 (의미가 있는가? 정확한가?) +- 비용: 솔루션 예산 +- 지연 시간: 평균 토큰 응답 시간 + +## LLM 라이프사이클 + +먼저, 라이프사이클과 그 변화를 이해하기 위해 다음 인포그래픽을 참고하세요. + +![LLMOps infographic](../../images/02-llmops.png?WT.mc_id=academic-105485-koreys) + +보시다시피, 이것은 일반적인 MLOps 라이프사이클과 다릅니다. LLM은 프롬프트 엔지니어링, 품질 향상을 위한 다양한 기법 (Fine-Tuning, RAG, Meta-Prompts), 책임 있는 AI와의 평가 및 책임 등 여러 새로운 요구 사항이 있습니다. 마지막으로, 새로운 평가 지표 (품질, 해악, 정직성, 비용 및 지연)가 있습니다. + +예를 들어, 우리는 다양한 LLM을 사용하여 가설이 맞는지 테스트하기 위해 프롬프트 엔지니어링을 사용하여 아이디어를 구상합니다. + +이는 선형적이지 않으며, 통합된 루프, 반복적이며 전반적인 주기로 이루어집니다. + +이 단계를 탐색하려면 어떻게 해야 할까요? 라이프사이클을 구축하는 방법에 대해 자세히 살펴보겠습니다. + +![LLMOps Workflow](../../images/03-llm-stage-flows.png?WT.mc_id=academic-105485-koreys) + +이것은 약간 복잡해 보일 수 있습니다. 먼저 세 가지 큰 단계에 집중해 보겠습니다. + +1. 아이디어 구상/탐색: 탐색 단계입니다. 여기에서 비즈니스 요구에 따라 탐색할 수 있습니다. 프로토타이핑, [PromptFlow](https://microsoft.github.io/promptflow/index.html?WT.mc_id=academic-105485-koreyst) 생성 및 가설이 충분히 효율적인지 테스트합니다. +1. 구축/증강: 구현 단계입니다. 이제 더 큰 데이터 세트를 평가하고 Fine-Tuning 및 RAG와 같은 기법을 사용하여 솔루션의 견고성을 확인합니다. 해결되지 않으면, 흐름에 새로운 단계를 추가하거나 데이터를 재구조화하는 등의 재구현이 도움이 될 수 있습니다. 흐름과 확장을 테스트하여 작동하고 지표가 만족스러우면 다음 단계로 넘어갈 준비가 된 것입니다. +1. 운영화: 통합 단계입니다. 이제 모니터링 및 경고 시스템을 시스템에 추가하고 애플리케이션에 배포하고 통합합니다. + +그런 다음 보안, 컴플라이언스 및 거버넌스를 중심으로 관리 주기가 있습니다. + +축하합니다, 이제 AI 애플리케이션이 준비되어 운영 가능합니다. 실습 경험을 원한다면, [Contoso Chat 데모](https://nitya.github.io/contoso-chat/?WT.mc_id=academic-105485-koreys)를 참조하세요. + +이제 어떤 도구를 사용할 수 있을까요? + +## 라이프사이클 도구 + +도구에 관해서는, Microsoft는 [Azure AI Platform](https://azure.microsoft.com/solutions/ai/?WT.mc_id=academic-105485-koreys)과 [PromptFlow](https://microsoft.github.io/promptflow/index.html?WT.mc_id=academic-105485-koreyst) 제공하여 사용자가 쉽게 주기를 구현하고 실행할 수 있도록 합니다. + +[Azure AI Platform](https://azure.microsoft.com/solutions/ai/?WT.mc_id=academic-105485-koreys)은 [AI Studio](https://ai.azure.com/?WT.mc_id=academic-105485-koreys)를 사용할 수 있게 합니다. AI Studio는 다양한 모델, 샘플, 도구 등을 탐색할 수 있는 웹 포털입니다. 자원을 관리하고, UI 개발 흐름과 코드-중심 개발을 위한 SDK/CLI 옵션을 포함합니다. + +![Azure AI 가능성](../../images/04-azure-ai-platform.png?WT.mc_id=academic-105485-koreys) + +Azure AI는 여러 자원을 사용하여 운영, 서비스, 프로젝트, 벡터 검색 및 데이터베이스 필요를 관리할 수 있게 합니다. + +![LLMOps with Azure AI](../../images/05-llm-azure-ai-prompt.png?WT.mc_id=academic-105485-koreys) + +PromptFlow와 함께 개념 증명(Proof-of-Concept, POC)에서 대규모 애플리케이션까지 구축: + +- VS Code에서 시각적이고 기능적인 도구를 사용하여 앱을 설계하고 빌드 +- 품질 높은 AI를 위해 앱을 쉽게 테스트하고 조정 +- 클라우드와 통합하고 반복하기 위해 Azure AI Studio를 사용하고, 신속한 통합을 위해 Push 및 Deploy + +![LLMOps with PromptFlow](../../images/06-llm-promptflow.png?WT.mc_id=academic-105485-koreys) + +## 훌륭합니다! 학습을 계속하세요! + +놀랍습니다! 이제 [Contoso Chat App](https://nitya.github.io/contoso-chat/?WT.mc_id=academic-105485-koreyst)을 통해 애플리케이션을 구조화하여 개념을 사용하는 방법을 배우고, Cloud Advocacy가 이러한 개념을 데모에 추가하는 방식을 확인하세요. 더 많은 콘텐츠를 보려면 [Ignite 분과 세션](https://www.youtube.com/watch?v=DdOylyrTOWg)을 확인하세요! + +이제 Lesson 15를 확인하여 [Retrieval Augmented Generation 및 벡터 데이터베이스](../../../15-rag-and-vector-databases/README.md?WT.mc_id=academic-105485-koreyst)가 생성 AI에 미치는 영향과 보다 흥미로운 애플리케이션을 만드는 방법을 이해하세요! diff --git a/15-rag-and-vector-databases/translations/ko/README.md b/15-rag-and-vector-databases/translations/ko/README.md new file mode 100644 index 000000000..b556cec87 --- /dev/null +++ b/15-rag-and-vector-databases/translations/ko/README.md @@ -0,0 +1,269 @@ +# 검색 증강 생성 (RAG) 및 벡터 데이터베이스 + +[![검색 증강 생성 (RAG) 및 벡터 데이터베이스](../../images/15-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson15-gh?WT.mc_id=academic-105485-koreyst) + +검색 응용 프로그램 수업에서는 대규모 언어 모델(LLM)에 사용자의 데이터를 통합하는 방법을 간략히 배웠습니다. 이번 수업에서는 LLM 응용 프로그램에 데이터를 결합하는 개념, 프로세스의 메커니즘 및 임베딩과 텍스트를 포함한 데이터 저장 방법에 대해 더 자세히 알아보겠습니다. + +> **동영상 곧 공개 예정** + +## 소개 + +이 강의에서는 다음 내용을 다룹니다: + +- RAG의 소개, RAG가 무엇이며 AI(인공지능)에서 왜 사용되는지에 대한 설명. + +- 벡터 데이터베이스가 무엇인지 이해하고 우리의 애플리케이션에 맞는 벡터 데이터베이스를 만드는 방법. + +- 애플리케이션에 RAG를 통합하는 실용적 예제. + +## 학습 목표 + +이 수업을 완료한 후, 여러분은 다음을 할 수 있습니다: + +- 데이터 검색 및 처리에서 RAG의 중요성을 설명합니다. + +- RAG 애플리케이션을 설정하고 데이터를 LLM에 연결합니다. + +- RAG와 벡터 데이터베이스를 LLM 애플리케이션에 효과적으로 통합합니다. + +## 우리의 시나리오: 우리만의 데이터를 이용해 LLM 강화하기 + +이번 강의에서는 교육 스타트업에 우리의 노트를 추가하여 챗봇이 다양한 주제에 대해 더 많은 정보를 얻을 수 있도록 하고자 합니다. 우리가 가진 노트를 사용하면 학습자들은 더 잘 공부하고 다양한 주제를 이해할 수 있어 시험 준비가 쉬워질 것입니다. 이러한 시나리오를 만들기 위해 우리는 다음을 사용할 것입니다: + +- `Azure OpenAI:` 챗봇을 만들기 위해 사용할 LLM +- `AI for beginners' lesson on Neural Networks`: 우리의 LLM을 위한 데이터 +- `Azure AI Search` 와 `Azure Cosmos DB:` 데이터를 저장하고 검색 인덱스를 만들기 위한 벡터 데이터베이스 + +사용자들은 노트로부터 연습 퀴즈, 복습 플래시 카드 등을 만들 수 있으며, 노트를 간결하게 요약할 수도 있습니다. 시작하기에 앞서, RAG가 무엇이며 어떻게 작동하는지 살펴보겠습니다. + +## 검색 증강 생성 (RAG) + +LLM 기반 챗봇은 사용자 프롬프트를 처리하여 응답을 생성합니다. 이 챗봇은 다양한 주제에 대해 상호 작용하며 사용자와 소통하기 위해 설계되었습니다. 그러나 응답은 제공된 맥락과 기본 훈련 데이터에 한정됩니다. 예를 들어, GPT-4의 지식 데이터 컷오프는 2021년 9월까지로 되어 있어, 이후에 발생한 사건에 대해서는 지식이 없습니다. 또한, LLM을 훈련시키는 데 사용된 데이터에는 개인 노트나 회사의 제품 매뉴얼과 같은 기밀 정보가 포함되지 않습니다. + +### RAGs (검색 증강 생성)이 작동하는 방식 + +![RAGs가 작동하는 방식을 보여주는 그림](../../images/how-rag-works.png?WT.mc_id=academic-105485-koreyst) + +예를 들어, 노트에서 퀴즈를 생성하는 챗봇을 배포하려면 지식 기반과의 연결이 필요합니다. 이때 RAG가 그 해결책이 됩니다. RAG는 다음과 같이 작동합니다: + +- **지식 기반:** 검색하기 전에, 이 문서들은 소화되고 전처리를 거쳐야 합니다. 일반적으로 큰 문서를 더 작은 청크로 나누고, 이를 텍스트 임베딩으로 변환한 후 데이터베이스에 저장합니다. + +- **사용자 쿼리:** 사용자가 질문을 합니다. + +- **검색:** 사용자가 질문을 하면, 임베딩 모델이 지식 기반에서 관련 정보를 검색하여 더 많은 컨텍스트를 제공하고 이를 프롬프트에 통합합니다. + +- **증강 생성:** LLM은 검색된 데이터를 기반으로 응답을 개선합니다. 이는 미리 학습된 데이터뿐만 아니라 추가된 컨텍스트의 관련 정보에 기반하여 응답을 생성할 수 있게 합니다. 검색된 데이터는 LLM의 응답을 증강시키는 데 사용됩니다. LLM은 그런 다음 사용자의 질문에 대한 답을 반환합니다. + +![RAGs 아키텍처를 보여주는 그림](../../images/encoder-decode.png?WT.mc_id=academic-105485-koreyst) + +RAGs의 아키텍처는 인코더와 디코더의 두 부분으로 구성된 트랜스포머를 사용해 구현됩니다. 예를 들어, 사용자가 질문을 하면 입력 텍스트는 단어의 의미를 포착하는 벡터로 '인코딩'되고, 이 벡터는 문서 인덱스로 '디코딩'되어 사용자 쿼리에 기반하여 새로운 텍스트를 생성합니다. LLM은 출력 생성을 위해 인코더-디코더 모델을 모두 사용합니다. + +다음은 논문 [Retrieval-Augmented Generation for Knowledge intensive NLP (지식 집약적 자연어 처리 작업을 위한 검색 증강 생성)](https://arxiv.org/pdf/2005.11401.pdf?WT.mc_id=academic-105485-koreyst)에서 제안된 RAG 구현의 두 가지 접근 방식입니다: + +- **_RAG-Sequence_** 는 검색된 문서를 사용하여 사용자 쿼리에 대한 최적의 답변을 예측합니다. + +- **RAG-Token** 은 문서를 사용하여 다음 토큰을 생성한 후 이를 검색하여 사용자의 쿼리에 답변합니다. + +### 왜 RAG를 사용해야 할까요? + +- **정보 풍부성:** 텍스트 응답이 최신 상태이므로 도메인 특정 작업에서 성능을 향상시킵니다. 내부 지식 베이스에 접근하여 이를 가능하게 합니다. + +- **검증 가능한 데이터**를 지식 베이스에 활용하여 사용자 쿼리에 대한 문맥을 제공함으로써 허구를 줄입니다. + +- LLM을 미세 조정하는 것과 비교했을 때 **비용 효율성**이 높아 경제적입니다. + +## 지식 기반 만들기 + +우리의 애플리케이션은 개인 데이터, 즉 AI For Beginners 커리큘럼의 신경망 수업을 기반으로 합니다. + +### 벡터 데이터베이스 + +벡터 데이터베이스는 전통적인 데이터베이스와 달리, 내장된 벡터를 저장, 관리 및 검색하기 위한 특화된 데이터베이스입니다. 이것은 문서의 수치적 표현을 저장합니다. 데이터를 수치적 임베딩으로 분해하면 AI 시스템이 데이터를 이해하고 처리하기 더 쉬워집니다. + +벡터 데이터베이스에 임베딩을 저장하는 이유는 LLM이 입력으로 받아들일 수 있는 토큰 수에 한계가 있기 때문입니다. 전체 임베딩을 LLM에 전달할 수 없으므로 이를 청크로 나누어야 하며, 사용자가 질문을 하면 질문과 가장 유사한 임베딩이 프롬프트와 함께 반환됩니다. 청크를 나누면 LLM을 통과하는 토큰 수가 줄어들어 비용도 절감됩니다. + +인기 있는 벡터 데이터베이스로는 Azure Cosmos DB, Clarifyai, Pinecone, Chromadb, ScaNN, Qdrant 및 DeepLake가 있습니다. 다음 명령어를 사용하여 Azure CLI로 Azure Cosmos DB 모델을 생성할 수 있습니다: + +```bash +az login +az group create -n -l +az cosmosdb create -n -r +az cosmosdb list-keys -n -g +``` + +### 텍스트에서 임베딩으로 + +데이터를 저장하기 전에 데이터베이스에 저장하기 위해 벡터 임베딩으로 변환해야 합니다. 대규모 문서나 긴 텍스트를 다룰 때는 예상되는 쿼리에 따라 청크로 나눌 수 있습니다. 청크로 나누는 작업은 문장 단위 또는 단락 단위로 할 수 있습니다. 청크는 주변 단어에서 의미를 유추하기 때문에 문서 제목을 추가하거나 청크 전후에 일부 텍스트를 포함하는 등의 다른 맥락을 추가할 수 있습니다. 데이터를 다음과 같이 청크로 나눌 수 있습니다: + +```python +def split_text(text, max_length, min_length): + words = text.split() + chunks = [] + current_chunk = [] + + for word in words: + current_chunk.append(word) + if len(' '.join(current_chunk)) < max_length and len(' '.join(current_chunk)) > min_length: + chunks.append(' '.join(current_chunk)) + current_chunk = [] + + # 마지막 청크가 최소 길이에 도달하지 못한 경우에도 추가 + if current_chunk: + chunks.append(' '.join(current_chunk)) + + return chunks +``` + +청크로 나눈 후에는 다양한 임베딩 모델을 사용하여 텍스트를 임베딩할 수 있습니다. 사용할 수 있는 모델에는 word2vec, OpenAI의 ada-002, Azure Computer Vision 등 다양한 모델이 있습니다. 사용할 모델을 선택할 때는 사용하는 언어, 인코딩된 콘텐츠 유형(텍스트/이미지/오디오), 인코딩할 수 있는 입력 크기 및 임베딩 출력 길이를 고려해야 합니다. + +OpenAI의 `text-embedding-ada-002` 모델을 사용하여 텍스트를 임베딩한 예는 다음과 같습니다: +![고양이 단어의 임베딩](../../images/cat.png?WT.mc_id=academic-105485-koreyst) + +## 검색 및 벡터 검색 + +사용자가 질문을 하면 검색기는 질의 인코더를 사용하여 질문을 벡터로 변환한 다음, 문서 검색 인덱스를 통해 입력과 관련된 벡터를 검색합니다. 검색이 완료되면 입력 벡터와 문서 벡터를 텍스트로 변환한 다음 이를 LLM에 전달합니다. + +### 검색 + +검색은 시스템이 검색 기준을 충족하는 문서를 인덱스에서 빠르게 찾으려고 할 때 발생합니다. 검색기의 목표는 문서를 가져와서 LLM이 데이터에 대한 맥락을 제공하고 이를 기반으로 하는 것입니다. + +우리의 데이터베이스에서 검색을 수행하는 몇 가지 방법은 다음과 같습니다: + +- **키워드 검색** - 텍스트 검색에 사용됩니다. + +- **시맨틱 검색** - 단어의 의미론적 의미를 사용합니다. + +- **벡터 검색** - 문서를 임베딩 모델을 사용하여 텍스트에서 벡터 표현으로 변환합니다. 검색은 사용자의 질문과 가장 가까운 벡터 표현을 가진 문서를 쿼리하여 수행됩니다. + +- **하이브리드** - 키워드 검색과 벡터 검색을 결합한 방식입니다. + +검색에서의 도전 과제는 데이터베이스에 쿼리와 유사한 응답이 없을 때 발생합니다. 이 경우 시스템은 얻을 수 있는 최선의 정보를 반환하게 됩니다. 그러나 관련성의 최대 거리를 설정하거나 키워드와 벡터 검색을 결합한 하이브리드 검색을 사용하는 등의 전략을 사용할 수 있습니다. 이번 레슨에서는 벡터 검색과 키워드 검색을 결합한 하이브리드 검색을 사용할 것입니다. 우리는 데이터를 청크와 임베딩을 포함하는 열이 있는 데이터프레임에 저장할 것입니다. + +### 벡터 유사성 + +리트리버는 지식 데이터베이스에서 가까운 임베딩을 검색합니다. 가장 가까운 이웃은 유사한 텍스트들입니다. 사용자가 쿼리를 요청하는 시나리오에서는 먼저 해당 쿼리가 임베딩되고, 유사한 임베딩과 매칭됩니다. 서로 다른 벡터가 얼마나 유사한지 찾는 데 주로 사용되는 측정 방법은 코사인 유사도로, 이는 두 벡터 사이의 각도에 기반합니다. + +우리는 유사성을 측정하는 대체 방법으로 유클리드 거리와 내적을 사용할 수 있습니다. 유클리드 거리는 벡터 끝점 사이의 직선 거리이고, 내적은 두 벡터의 대응 요소의 곱의 합을 측정합니다. + +### 검색 인덱스 + +검색을 수행할 때, 검색을 수행하기 전에 지식 베이스에 대한 검색 인덱스를 구축해야 합니다. 인덱스는 우리의 임베딩을 저장하고 큰 데이터베이스에서도 가장 유사한 청크를 신속하게 검색할 수 있습니다. 우리는 로컬에서 다음을 사용하여 인덱스를 만들 수 있습니다: + +```python +from sklearn.neighbors import NearestNeighbors + +embeddings = flattened_df['embeddings'].to_list() + + + +# 검색 인덱스 생성 +nbrs = NearestNeighbors(n_neighbors=5, algorithm='ball_tree').fit(embeddings) + + + +# 인덱스를 쿼리하려면 kneighbors 메서드를 사용할 수 있습니다 +distances, indices = nbrs.kneighbors(embeddings) +``` + +### 재랭킹 + +데이터베이스에 쿼리한 후에는 가장 관련성 있는 결과부터 정렬해야 할 수도 있습니다. 재랭킹 LLM은 기계 학습을 활용하여 검색 결과의 관련성을 개선하고 가장 관련성 있는 결과부터 정렬합니다. Azure AI Search를 사용하면, 의미론적 재랭커를 통해 자동으로 재랭킹이 수행됩니다. 가장 가까운 이웃을 사용한 재랭킹의 예: + +````python + +# 가장 유사한 문서 찾기 +distances, indices = nbrs.kneighbors([query_vector]) + +index = [] + + +# 가장 유사한 문서 출력 +for i in range(3): + index = indices[0][i] + for index in indices[0]: + print(flattened_df['chunks'].iloc[index]) + print(flattened_df['path'].iloc[index]) + print(flattened_df['distances'].iloc[index]) + else: + print(f"데이터프레임에서 인덱스 {index}을(를) 찾을 수 없습니다") + + +## 모든 것을 종합하기 + +마지막 단계는 우리의 데이터에 기반을 둔 응답을 얻을 수 있도록 LLM을 추가하는 것입니다. 이를 다음과 같이 구현할 수 있습니다: + +```python +user_input = "perceptron이란 무엇인가요?" + +def chatbot(user_input): + # 질문을 쿼리 벡터로 변환 + query_vector = create_embeddings(user_input) + + # 가장 유사한 문서 찾기 + distances, indices = nbrs.kneighbors([query_vector]) + + # 쿼리에 문서 추가하여 문맥 제공 + history = [] + for index in indices[0]: + history.append(flattened_df['chunks'].iloc[index]) + + # 히스토리와 사용자 입력 결합 + history.append(user_input) + + # 메시지 객체 생성 + messages = [ + {"role": "system", "content": "당신은 AI 질문에 도움을 주는 AI 어시스턴트입니다."}, + {"role": "user", "content": history[-1]} + ] + + # 채팅 완료를 통해 응답 생성 + response = openai.chat.completions.create( + model="gpt-4", + temperature=0.7, + max_tokens=800, + messages=messages + ) + + return response.choices[0].message + +chatbot(user_input) +```` + +## 애플리케이션 평가하기 + +### 평가 지표 + +- 응답의 품질: 자연스럽고 유창하며 사람처럼 들리는지 확인 + +- 데이터의 근거성: 제공된 문서에서 나온 응답인지 평가 + +- 관련성: 응답이 질문과 일치하고 관련 있는지 평가 + +- 유창성: 응답이 문법적으로 의미가 있는지 평가 + +## RAG(검색 증강 생성) 및 벡터 데이터베이스의 사용 사례 + +다음과 같은 다양한 사용 사례에서 함수 호출을 통해 앱을 개선할 수 있습니다: + +- 질문과 답변: 직원들이 질문할 수 있는 대화형 채팅에 회사 데이터를 기반으로 활용. +- 추천 시스템: 영화, 레스토랑 등 가장 유사한 값을 매칭하는 시스템 생성. +- 챗봇 서비스: 채팅 기록을 저장하고 사용자 데이터를 기반으로 대화를 개인화. +- 벡터 임베딩을 기반으로 한 이미지 검색, 이미지 인식 및 이상 탐지에 유용. + +## 요약 + +우리는 애플리케이션에 데이터를 추가하는 것부터 사용자 쿼리와 출력까지 RAG의 기본적인 영역을 다루었습니다. RAG 생성의 단순화를 위해 Semanti Kernel, Langchain 또는 Autogen과 같은 프레임워크를 사용할 수 있습니다. + +## 과제 + +검색 증강 생성(RAG)에 대한 학습을 계속하기 위해 다음을 빌드하세요: + +- 선택한 프레임워크를 사용하여 애플리케이션의 프론트 엔드 빌드 + +- LangChain 또는 Semantic Kernel 프레임워크를 활용하고 애플리케이션을 재작성 + +레슨을 완료한 것을 축하드립니다 👏. + +## 학습은 여기서 끝나지 않습니다, 여정을 계속하세요 + +이 수업을 완료한 후, [Generative AI 학습 컬렉션](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)을 확인하여 생성형 AI 지식을 계속해서 향상시켜보세요! diff --git a/16-open-source-models/translations/ko/README.md b/16-open-source-models/translations/ko/README.md new file mode 100644 index 000000000..91d4eae7b --- /dev/null +++ b/16-open-source-models/translations/ko/README.md @@ -0,0 +1,77 @@ +## 소개 + +오픈 소스 LLM의 세계는 흥미롭고 끊임없이 진화하고 있습니다. 이 강의는 오픈 소스 모델에 대한 심층적인 정보를 제공하는 것을 목표로 합니다. 독점 모델과 오픈 소스 모델을 비교하는 정보가 필요하다면 ["다양한 LLM 탐색 및 비교" 강의](../../../02-exploring-and-comparing-different-llms/README.md?WT.mc_id=academic-105485-koreyst)를 참조하세요. 이 강의에서는 모델의 미세 조정(fine-tuning)에 대한 내용도 다룰 예정이지만, 보다 자세한 설명은 ["LLM 미세 조정" 강의](../../../18-fine-tuning/README.md?WT.mc_id=academic-105485-koreyst)를 참조하세요. + +## 학습 목표 + +- 오픈 소스 모델에 대한 이해 증진 +- 오픈 소스 모델을 사용할 때의 이점 이해 +- Hugging Face와 Azure AI Studio에서 이용 가능한 오픈 모델 탐색 + +## 오픈 소스 모델이란 무엇인가? + +오픈 소스 소프트웨어는 다양한 분야에서 기술의 발전에 중요한 역할을 해왔습니다. 오픈 소스 이니셔티브(OSI)는 소프트웨어가 오픈 소스로 분류되기 위한 [10가지 기준](https://opensource.org/osd?WT.mc_id=academic-105485-koreyst)을 정의했습니다. 소스 코드는 OSI가 승인한 라이선스에 따라 공개되어야 합니다. + +LLM의 개발은 소프트웨어 개발과 유사한 요소를 가지고 있지만, 그 과정은 정확히 동일하지 않습니다. 이는 LLM 맥락에서 오픈 소스의 정의에 대한 커뮤니티 내 많은 논의를 불러일으켰습니다. 모델이 전통적인 오픈 소스 정의에 부합하려면 다음 정보가 공개되어야 합니다: + +- 모델을 학습시키는 데 사용된 데이터셋. +- 학습의 일환으로서의 전체 모델 가중치. +- 평가 코드. +- 미세 조정 코드. +- 전체 모델 가중치 및 학습 메트릭. + +현재 이 기준을 충족하는 모델은 소수에 불과합니다. [Allen Institute for Artificial Intelligence (AllenAI)가 만든 OLMo 모델](https://huggingface.co/allenai/OLMo-7B?WT.mc_id=academic-105485-koreyst)이 이 범주에 속하는 모델 중 하나입니다. + +이 강좌에서는 앞으로 이러한 모델을 "오픈 모델"이라고 부르겠습니다. 이는 작성 시점에 위의 기준에 부합하지 않을 수 있기 때문입니다. + +## 오픈 모델의 이점 + +**높은 맞춤화 가능성** - 오픈 모델은 상세한 훈련 정보를 공개하기 때문에 연구자와 개발자가 모델의 내부를 수정할 수 있습니다. 이를 통해 특정 작업이나 연구 분야에 맞춘 고도로 특수화된 모델을 생성할 수 있습니다. 예를 들어, 코드 생성, 수학 연산, 생물학 등이 있습니다. + +**비용** - 이러한 모델을 사용하고 배포하는 데 드는 토큰당 비용은 독점 모델보다 낮습니다. 생성형 AI 애플리케이션을 구축할 때, 이러한 모델을 사용하는 경우 성능 대비 가격을 고려해야 합니다. + +![모델 비용](../../images/model-price.png?WT.mc_id=academic-105485-koreyst) +출처: Artificial Analysis + +**유연성** - 오픈 모델을 사용하면 다양한 모델을 사용하거나 결합하여 유연하게 작업할 수 있습니다. 예를 들어, 사용자가 사용자 인터페이스에서 직접 사용되는 모델을 선택할 수 있는 [HuggingChat Assistants](https://huggingface.co/chat?WT.mc_id=academic-105485-koreyst)가 있습니다. + +![모델 선택](../../images/choose-model.png?WT.mc_id=academic-105485-koreyst) + +## 다양한 개방형 모델 탐구 + +### Llama 2 + +[LLama2](https://huggingface.co/meta-llama?WT.mc_id=academic-105485-koreyst)는 Meta에서 개발한 오픈 모델로, 채팅 기반 응용 프로그램에 최적화되어 있습니다. 이는 대화 및 인간 피드백을 대량으로 포함한 미세 조정 방법 덕분입니다. 이 방법을 통해 모델은 인간의 기대에 더 부합하는 결과를 생성하여 더 나은 사용자 경험을 제공합니다. + +Llama의 미세 조정 버전의 예로는 일본어에 특화된 [Japanese Llama](https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b?WT.mc_id=academic-105485-koreyst)와 기본 모델의 향상된 버전인 [Llama Pro](https://huggingface.co/TencentARC/LLaMA-Pro-8B?WT.mc_id=academic-105485-koreyst) 등이 있습니다. + +### 미스트랄 (Mistral) + +[Mistral](https://huggingface.co/mistralai?WT.mc_id=academic-105485-koreyst)는 높은 성능과 효율성에 중점을 둔 오픈 모델입니다. 이 모델은 전문가 모델 집합을 하나의 시스템으로 결합하는 Mixture-of-Experts 접근 방식을 사용합니다. 입력에 따라 특정 모델이 선택되어 사용되기 때문에, 계산이 더 효과적입니다. 즉, 각 모델이 자신이 전문화된 입력에만 대응하게 합니다. + +미스트랄의 파인튜닝된 일부 버전 예시는 의학 분야에 중점을 둔 [BioMistral](https://huggingface.co/BioMistral/BioMistral-7B?text=Mon+nom+est+Thomas+et+mon+principal?WT.mc_id=academic-105485-koreyst)과 수학적 계산을 수행하는 [OpenMath Mistral](https://huggingface.co/nvidia/OpenMath-Mistral-7B-v0.1-hf?WT.mc_id=academic-105485-koreyst)이 있습니다. + +### 팔콘 + +[팔콘](https://huggingface.co/tiiuae?WT.mc_id=academic-105485-koreyst)은 기술 혁신 연구소(**TII**)에서 만든 대규모 언어 모델(LLM)입니다. 팔콘-40B는 400억 개의 매개변수로 훈련되었으며, 적은 계산 예산으로도 GPT-3보다 더 나은 성능을 발휘하는 것으로 나타났습니다. 이는 FlashAttention 알고리즘과 다중 쿼리 어텐션을 사용하여 추론 시 메모리 요구 사항을 줄일 수 있기 때문입니다. 추론 시간이 감소함에 따라, 팔콘-40B는 채팅 애플리케이션에 적합합니다. + +팔콘의 미세 조정된 버전의 예로는 오픈 모델을 기반으로 구축된 [OpenAssistant](https://huggingface.co/OpenAssistant/falcon-40b-sft-top1-560?WT.mc_id=academic-105485-koreyst)와 기본 모델보다 높은 성능을 제공하는 [GPT4ALL](https://huggingface.co/nomic-ai/gpt4all-falcon?WT.mc_id=academic-105485-koreyst)이 있습니다. + +## 선택하는 방법 + +오픈 모델을 선택하는 데 정답은 없습니다. 시작하기 좋은 곳은 Azure AI Studio의 작업별 필터 기능을 사용하는 것입니다. 이를 통해 모델이 어떤 유형의 작업을 위해 훈련되었는지 이해할 수 있습니다. 또한, Hugging Face는 특정 지표에 기반하여 최고의 성능을 보이는 모델을 보여주는 LLM 리더보드를 관리하고 있습니다. + +LLM을 여러 유형별로 비교할 때, [Artificial Analysis](https://artificialanalysis.ai/?WT.mc_id=academic-105485-koreyst)도 또 다른 훌륭한 자원입니다: + +![모델 품질](../../images/model-quality.png?WT.mc_id=academic-105485-koreyst) +출처: Artificial Analysis + +특정 용도에 대한 작업을 진행할 때, 동일한 영역에 집중하여 미세 조정된 버전을 찾는 것이 효과적일 수 있습니다. 다양한 오픈 모델을 실험하여 자신과 사용자 기대에 부합하는지 확인하는 것도 좋은 방법입니다. + +## 다음 단계 + +오픈 모델의 가장 큰 장점은 빠르게 시작할 수 있다는 점입니다. [Azure AI Studio 모델 카탈로그](https://ai.azure.com?WT.mc_id=academic-105485-koreyst)를 확인해보세요. 여기에는 우리가 논의한 특정 Hugging Face 컬렉션을 포함한 모델들이 소개되어 있습니다. + +## 학습은 여기서 멈추지 않습니다, 여정을 계속하세요 + +이 강의를 완료한 후, 우리의 [Generative AI 학습 컬렉션](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)을 확인하고 생성형 AI 지식을 계속 향상시키세요! diff --git a/17-ai-agents/translations/ko/README.md b/17-ai-agents/translations/ko/README.md new file mode 100644 index 000000000..f3f23becc --- /dev/null +++ b/17-ai-agents/translations/ko/README.md @@ -0,0 +1,159 @@ +## 소개 + +AI 에이전트는 생성형 AI에서 흥미로운 발전을 나타내며, 대형 언어 모델(Large Language Models, LLMs)이 보조 역할에서 행동을 취할 수 있는 에이전트로 진화하도록 합니다. AI 에이전트 프레임워크는 개발자가 LLM에 도구와 상태 관리에 대한 접근을 제공하는 애플리케이션을 만들 수 있도록 합니다. 이러한 프레임워크는 또한 가시성을 향상시켜 사용자와 개발자가 LLM이 계획한 행동을 모니터링할 수 있게 하여 경험 관리를 개선합니다. + +이번 강의는 다음 영역을 다룰 것입니다: + +- AI 에이전트란 무엇인가 이해하기 - AI 에이전트가 정확히 무엇인가? +- 네 가지 다른 AI 에이전트 프레임워크 탐구 - 이들 프레임워크의 고유한 점은 무엇인가? +- 다양한 사용 사례에 AI 에이전트 적용하기 - 언제 AI 에이전트를 사용해야 하는가? + +## 학습 목표 + +이 수업을 마친 후에는 다음을 할 수 있을 것입니다: + +- AI 에이전트가 무엇이며 어떻게 사용되는지 설명할 수 있습니다. +- 인기 있는 AI 에이전트 프레임워크들 간의 차이점을 이해하고, 그들이 어떻게 다른지 설명할 수 있습니다. +- AI 에이전트가 어떻게 작동하는지 이해하여 이를 기반으로 애플리케이션을 구축할 수 있습니다. + +## AI 에이전트란 무엇인가? + +AI 에이전트는 생성형 AI 분야에서 매우 흥미로운 분야입니다. 그러나 이와 같은 흥미로움은 때로는 용어와 그 적용에 대한 혼란을 초래하기도 합니다. 이러한 혼란을 방지하고 대부분의 AI 에이전트 도구를 포괄하기 위해, 우리는 다음과 같은 정의를 사용하려고 합니다: + +AI 에이전트는 대형 언어 모델(LLMs)에게 **상태**와 **도구**에 대한 접근 권한을 제공하여 작업을 수행할 수 있게 합니다. + +![Agent Model](../../images/what-agent.png?WT.mc_id=academic-105485-koreyst) + +다음 용어들을 정의해보겠습니다: + +**대형 언어 모델** - 이는 GPT-3.5, GPT-4, Llama-2 등 이 과정에서 언급된 모델을 의미합니다. + +**상태** - 이는 LLM이 작업하는 컨텍스트를 의미합니다. LLM은 과거의 행동과 현재의 컨텍스트를 사용하여 이후 행동에 대한 의사 결정을 내립니다. AI 에이전트 프레임워크는 개발자가 이 컨텍스트를 더 쉽게 유지할 수 있도록 도와줍니다. + +**도구** - 사용자가 요청한 작업을 완료하고 LLM이 계획한 작업을 수행하기 위해, LLM은 도구에 대한 접근 권한이 필요합니다. 도구의 예로는 데이터베이스, API, 외부 애플리케이션 또는 다른 LLM 등이 있습니다. + +이 정의들이 앞으로 우리가 AI 에이전트 프레임워크를 어떻게 구현하는지 살펴볼 때 도움이 되기를 바랍니다. 몇 가지 다른 AI 에이전트 프레임워크를 탐구해 봅시다: + +## LangChain 에이전트 + +[LangChain 에이전트](https://python.langchain.com/docs/modules/agents/?WT.mc_id=academic-105485-koreyst)는 우리가 위에서 제공한 정의를 구현한 것입니다. + +**상태**를 관리하기 위해 `AgentExecutor`라는 내장 함수를 사용합니다. 이는 정의된 `agent`와 사용할 수 있는 `tools`를 입력받습니다. + +`AgentExecutor`는 또한 대화 기록을 저장하여 대화의 맥락을 제공합니다. + +![LangChain 에이전트](../../images/langchain-agents.png?WT.mc_id=academic-105485-koreyst) + +LangChain은 LLM이 접근할 수 있는 [도구 카탈로그](https://integrations.langchain.com/tools?WT.mc_id=academic-105485-koreyst)를 애플리케이션에 가져올 수 있게 제공합니다. 이러한 도구들은 커뮤니티와 LangChain 팀에 의해 만들어졌습니다. + +이후 이러한 도구들을 정의하고 `AgentExecutor`에 전달할 수 있습니다. + +가시성은 AI 에이전트에 대해 이야기할 때 또 하나의 중요한 측면입니다. 애플리케이션 개발자가 LLM이 어떤 도구를 사용하고 있는지, 그리고 그 이유를 이해하는 것이 중요합니다. 이를 위해 LangChain 팀은 LangSmith를 개발했습니다. + +## AutoGen + +다음으로 논의할 AI 에이전트 프레임워크는 [AutoGen](https://microsoft.github.io/autogen/?WT.mc_id=academic-105485-koreyst)입니다. AutoGen의 주요 초점은 대화입니다. 에이전트는 **대화 가능**하며 **맞춤 설정 가능**합니다. + +**대화 가능 -** LLM은 작업을 완료하기 위해 다른 LLM과 대화를 시작하고 지속할 수 있습니다. 이는 `AssistantAgents`를 생성하고 특정 시스템 메시지를 전달함으로써 수행됩니다. + +```python + +autogen.AssistantAgent( name="Coder", llm_config=llm_config, ) pm = autogen.AssistantAgent( name="Product_manager", system_message="Creative in software product ideas.", llm_config=llm_config, ) + +``` + +**맞춤 설정 가능 -** 에이전트는 단순한 LLM뿐만 아니라 사용자가 될 수도 있고 도구가 될 수도 있습니다. 개발자로서, 작업을 완료하는 데 있어서 피드백을 위해 사용자와 상호 작용하는 `UserProxyAgent`를 정의할 수 있습니다. 이 피드백은 작업을 계속 진행하거나 멈출 수 있습니다. + +```python +user_proxy = UserProxyAgent(name="user_proxy") +``` + +### 상태와 도구들 + +상태를 변경하고 관리하기 위해, 보조 에이전트는 작업을 완료하기 위한 Python 코드를 생성합니다. + +여기에 과정의 예시가 있습니다: + +![AutoGen](../../images/autogen.png?WT.mc_id=academic-105485-koreyst) + +#### 시스템 메시지가 포함된 LLM 정의 + +```python +system_message="For weather related tasks, only use the functions you have been provided with. Reply TERMINATE when the task is done." +``` + +이 시스템 메시지는 특정 LLM에게 해당 작업에 관련된 함수들만 사용하도록 지시합니다. AutoGen을 사용하면 다른 시스템 메시지를 갖는 여러 AssistantAgents를 정의할 수 있다는 점을 기억하세요. + +#### 사용자가 대화를 시작함 + +```python +user_proxy.initiate_chat( chatbot, message="다음 주에 뉴욕 여행을 계획하고 있는데, 옷 고르는 데 도움을 줄 수 있니?", ) +``` + +이 메시지는 사용자 프록시(인간)로부터 에이전트가 실행해야 할 가능한 기능을 탐색하는 프로세스를 시작하는 신호입니다. + +#### 함수가 실행됨 + +```bash +chatbot (to user_proxy): + +***** 제안된 도구 호출: get_weather ***** 인수: {"location":"New York City, NY","time_periond:"7","temperature_unit":"Celsius"} ******************************************************** -------------------------------------------------------------------------------- + +>>>>>>>> 함수 get_weather 실행 중... user_proxy (to chatbot): ***** 함수 "get_weather" 호출의 응답 ***** 112.22727272727272 EUR **************************************************************** + +``` + +초기 채팅이 처리되면, 에이전트는 호출할 제안된 도구를 보낼 것입니다. 이 경우, 이는 `get_weather`라는 함수입니다. 구성에 따라, 이 함수는 에이전트에 의해 자동으로 실행되고 읽히거나 사용자 입력에 따라 실행될 수 있습니다. + +시작하는 방법을 더 탐색하려면 [AutoGen 코드 샘플](https://microsoft.github.io/autogen/docs/Examples/?WT.mc_id=academic-105485-koreyst) 목록을 확인할 수 있습니다. + +## Taskweaver + +다음으로 탐구할 에이전트 프레임워크는 [Taskweaver](https://microsoft.github.io/TaskWeaver/?WT.mc_id=academic-105485-koreyst)입니다. 이 프레임워크는 "코드 우선" 에이전트로 알려져 있습니다. 이는 엄격하게 `문자열`과 작업하는 대신에, Python에서 DataFrames과 작업할 수 있다는 것을 의미합니다. 이것은 데이터 분석 및 생성 작업에 매우 유용합니다. 예를 들어, 그래프와 차트를 생성하거나 랜덤 숫자를 생성하는 작업 등이 이에 포함됩니다. + +### 상태 및 도구 + +대화의 상태를 관리하기 위해 TaskWeaver는 `Planner`의 개념을 사용합니다. `Planner`는 사용자의 요청을 받아들이고 이 요청을 충족시키기 위해 완료해야 할 작업을 계획하는 LLM입니다. + +작업을 완료하기 위해 `Planner`는 `Plugins`라고 불리는 도구 모음에 접근합니다. 이 도구들은 Python 클래스나 일반적인 코드 인터프리터일 수 있습니다. 이 플러그인들은 임베딩으로 저장되어 LLM이 적절한 플러그인을 더 잘 검색할 수 있도록 합니다. + +![Taskweaver](../../images/taskweaver.png?WT.mc_id=academic-105485-koreyst) + +다음은 이상 탐지를 처리하기 위한 플러그인의 예입니다: + +```python +class AnomalyDetectionPlugin(Plugin): + def __call__(self, df: pd.DataFrame, time_col_name: str, value_col_name: str): +``` + +코드는 실행되기 전에 검증됩니다. Taskweaver에서 컨텍스트를 관리하는 또 다른 기능은 `경험`입니다. 경험을 통해 대화의 컨텍스트가 장기적으로 YAML 파일에 저장될 수 있습니다. 이를 구성함으로써 LLM이 이전 대화에 노출된 특정 작업에서 시간이 지남에 따라 개선될 수 있습니다. + +## JARVIS + +우리가 탐구할 마지막 에이전트 프레임워크는 [JARVIS](https://github.com/microsoft/JARVIS?tab=readme-ov-file?WT.mc_id=academic-105485-koreyst)입니다. JARVIS의 독특한 점은 대화의 `상태`를 관리하는 데 LLM을 사용하고 `도구`로 다른 AI 모델들을 활용한다는 것입니다. 각 AI 모델은 객체 감지, 전사, 이미지 캡션 작성 등 특정 작업을 수행하는 특수 모델들로 구성됩니다. + +![JARVIS](../../images/jarvis.png?WT.mc_id=academic-105485-koreyst) + +LLM은 범용 모델로서 사용자로부터 요청을 받아 해당 작업과 작업을 완료하는 데 필요한 인수/데이터를 식별합니다. + +```python +[{"task": "object-detection", "id": 0, "dep": [-1], "args": {"image": "e1.jpg" }}] +``` + +그러면 LLM은 특수 AI 모델이 해석할 수 있는 형식, 예를 들어 JSON으로 요청을 포맷합니다. AI 모델이 작업 기반으로 예측을 반환하면 LLM은 응답을 수신합니다. + +여러 모델이 작업을 완료하는 데 필요한 경우, LLM은 이러한 모델들의 응답도 해석한 후 사용자에게 제공할 응답을 생성하기 위해 이들을 결합합니다. + +다음 예제는 사용자가 사진 속 객체의 설명과 개수를 요청할 때 어떻게 동작하는지 보여줍니다: + +## 과제 + +AutoGen을 사용하여 구축할 수 있는 AI 에이전트 학습을 계속하기 위해 다음을 수행하십시오: + +- 교육 스타트업의 다양한 부서와의 비즈니스 회의를 시뮬레이션하는 애플리케이션을 만드십시오. +- LLM이 다른 페르소나와 우선순위를 이해하고 사용자가 새로운 제품 아이디어를 제안할 수 있도록 하는 시스템 메시지를 작성하십시오. +- 그런 다음 각 부서에서 후속 질문을 생성하여 제안 및 제품 아이디어를 개선하고 정제하도록 하십시오. + +## 학습은 여기서 멈추지 않습니다. 여정을 계속하세요 + +이 수업을 마친 후, 우리의 [Generative AI 학습 컬렉션](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)을 확인하여 생성형 AI 지식을 계속해서 높여보세요! diff --git a/18-fine-tuning/translations/ko/README.md b/18-fine-tuning/translations/ko/README.md new file mode 100644 index 000000000..c125faccb --- /dev/null +++ b/18-fine-tuning/translations/ko/README.md @@ -0,0 +1,95 @@ +# LLM 세부 튜닝 + +대규모 언어 모델을 사용하여 생성 AI 애플리케이션을 구축하는 데는 새로운 도전 과제가 따릅니다. 주요 문제는 주어진 사용자 요청에 대해 모델이 생성한 콘텐츠의 응답 품질(정확성 및 관련성)을 보장하는 것입니다. 이전 강의에서는 프롬프트 엔지니어링 및 검색 증강 생성과 같은 기술을 사용하여 기존 모델의 프롬프트 입력을 수정하여 문제를 해결하려고 했습니다. + +오늘 강의에서는 **세부 튜닝**이라는 세 번째 기술에 대해 논의합니다. 이는 추가 데이터를 사용하여 모델 자체를 재훈련하여 문제를 해결하려고 합니다. 이제 세부 사항을 살펴보겠습니다. + +## 학습 목표 + +이 레슨은 사전 학습된 언어 모델을 미세 조정하는 개념을 소개하고, 이 접근 방식의 이점과 어려움을 탐구하며, 생성된 AI 모델의 성능을 향상시키기 위해 언제 그리고 어떻게 미세 조정을 사용할지에 대한 지침을 제공합니다. + +이 레슨이 끝날 때까지 다음 질문에 답할 수 있어야 합니다: + +- 언어 모델의 미세 조정이란 무엇인가요? +- 언제, 그리고 왜 미세 조정이 유용한가요? +- 사전 학습된 모델을 어떻게 미세 조정할 수 있나요? +- 미세 조정의 한계는 무엇인가요? + +준비되셨나요? 시작해봅시다. + +## 삽화 가이드 + +정식으로 들어가기 전에 이번 강의에서 다룰 내용을 한눈에 보고 싶으신가요? 핵심 개념과 미세 조정의 동기에 대해 배우는 것부터, 그 과정을 이해하고 최적의 실행 방법을 학습하는 여정까지 설명하는 이 삽화 가이드를 확인해보세요. 탐구하기에 흥미로운 주제이니, 자기 주도적 학습 여정을 지원하기 위해 추가 링크가 있는 [자료](../../RESOURCES.md?WT.mc_id=academic-105485-koreyst) 페이지도 잊지 말고 확인하세요! + +![언어 모델 미세 조정에 대한 삽화 가이드](../../img/18-fine-tuning-sketchnote.png?WT.mc_id=academic-105485-koreyst) + +## 언어 모델의 파인튜닝이란 무엇인가? + +정의에 따르면, 대형 언어 모델은 인터넷을 포함한 다양한 출처로부터 수집된 대량의 텍스트로 **사전 학습**(pre-trained)됩니다. 이전 강의에서 배운 바와 같이, 모델이 사용자 질문(프롬프트)에 대한 응답의 질을 높이기 위해 **프롬프트 엔지니어링**(prompt engineering)과 **검색 증강 생성**(retrieval-augmented generation) 같은 기술이 필요합니다. + +인기 있는 프롬프트 엔지니어링 기법 중 하나는 모델에게 응답에 기대되는 것을 더 많이 안내하는 것입니다. 이를 위해 **명시적 안내**(explicit guidance)로 **지시사항**을 제공하거나, **암시적 안내**(implicit guidance)로 **몇 가지 예시**를 제공할 수 있습니다. 이는 **몇-샷 학습**(few-shot learning)이라고 부르지만 두 가지 한계가 있습니다: + +- 모델 토큰 제한은 제공할 수 있는 예제 수를 제한하고, 효과를 제한할 수 있습니다. +- 모델 토큰 비용은 모든 프롬프트에 예제를 추가하는 데 비용이 많이 들 수 있고, 유연성을 제한할 수 있습니다. + +파인튜닝은 기계 학습 시스템에서 일반적으로 사용되는 방법으로, 사전 학습된 모델을 새 데이터로 재학습시켜 특정 작업의 성능을 향상시키는 것입니다. 언어 모델의 경우, 사전 학습된 모델을 **특정 작업 또는 응용 도메인에 대한 잘 선별된 예제 집합**으로 파인튜닝하여, 해당 특정 작업이나 도메인에 더 정확하고 관련성 있는 **맞춤형 모델**을 생성할 수 있습니다. 파인튜닝의 부가적인 이점은 몇-샷 학습에 필요한 예제 수를 줄여서 토큰 사용량과 관련 비용을 줄일 수 있다는 점입니다. + +## 언제 그리고 왜 모델을 미세 조정해야 하는가? + +_이_ 맥락에서, 미세 조정(fine-tuning)에 대해 이야기할 때, 우리는 원래의 학습 데이터셋에 포함되지 않았던 **새로운 데이터를 추가**하여 다시 학습시키는 **지도형 미세 조정**을 의미합니다. 이는 모델을 원래의 데이터로, 그러나 다른 하이퍼파라미터로 다시 학습시키는 비지도형 미세 조정 접근법과는 다릅니다. + +기억해야 할 중요한 점은 미세 조정이 원하는 결과를 얻기 위해 일정 수준의 전문 지식이 필요한 고급 기술이라는 것입니다. 올바르게 수행되지 않으면 기대한 향상을 제공하지 못할 수도 있고, 심지어 목표로 하는 도메인에서 모델의 성능을 저하시킬 수도 있습니다. + +따라서, 언어 모델을 "어떻게" 미세 조정해야 하는지 배우기 전에, "왜" 이 길을 선택해야 하는지와 "언제" 미세 조정을 시작해야 하는지를 알아야 합니다. 다음 질문들을 던져 보세요: + +- **사용 사례**: 미세 조정의 *사용 사례*는 무엇인가요? 현재 사전 학습된 모델의 어떤 측면을 개선하고 싶으신가요? +- **대안**: 원하는 결과를 얻기 위해 *다른 기술들*을 시도해 보셨나요? 이를 사용하여 비교를 위한 기준을 만드세요. + - 프롬프트 엔지니어링: 관련 프롬프트 응답의 예제를 사용한 몇 샷 프롬프트 기법을 시도하세요. 응답의 품질을 평가합니다. + - 검색 증강 생성(RAG): 데이터를 검색하여 검색된 쿼리 결과로 프롬프트를 증강하는 것을 시도해 보세요. 응답의 품질을 평가합니다. +- **비용**: 미세 조정의 비용을 파악하셨나요? + - 조정 가능성 - 사전 학습된 모델이 미세 조정 가능한가요? + - 노력 - 학습 데이터를 준비하고 모델을 평가하고 개선하는 데 필요한 노력. + - 컴퓨팅 - 미세 조정 작업을 실행하고 미세 조정된 모델을 배포하는 데 필요한 컴퓨팅 자원. + - 데이터 - 충분한 품질의 예제를 미세 조정 영향을 위해 접근할 수 있는가? +- **혜택**: 미세 조정의 혜택을 확인하셨나요? + - 품질 - 미세 조정된 모델이 기준 모델을 능가하였나요? + - 비용 - 프롬프트를 단순화하여 토큰 사용을 줄이는가? + - 확장성 - 베이스 모델을 새로운 도메인에 다시 사용할 수 있는가? + +이 질문들에 답함으로써 미세 조정이 귀하의 사용 사례에 적절한지 결정할 수 있습니다. 이상적으로, 접근 방식은 비용보다 혜택이 클 때만 유효합니다. 진행하기로 결정했다면 이제는 사전 학습된 모델을 _어떻게_ 미세 조정할 수 있을지에 대해 생각해 볼 때입니다. + +결정 과정을 더 알고 싶으신가요? [미세 조정을 할지 말지 고민 중이라면?](https://www.youtube.com/watch?v=0Jo-z-MFxJs)을 시청하세요. + +## 사전 학습된 모델을 미세 조정하는 방법 + +사전 학습된 모델을 미세 조정하려면 다음이 필요합니다: + +- 미세 조정할 사전 학습된 모델 +- 미세 조정에 사용할 데이터셋 +- 미세 조정 작업을 수행할 수 있는 학습 환경 +- 미세 조정된 모델을 배포할 호스팅 환경 + +## 맞춤형 모델 학습 실제 사례 + +다음 자원들은 선택한 모델과 큐레이션된 데이터 셋을 사용하여 실제 예제를 단계별로 안내하는 튜토리얼을 제공합니다. 이 튜토리얼을 진행하려면 특정 제공업체에서 계정이 필요하며 관련 모델과 데이터 셋에 접근할 수 있어야 합니다. + +| 제공업체 | 튜토리얼 | 설명 | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| OpenAI | [챗 모델 맞춤형 학습 방법](https://github.com/openai/openai-cookbook/blob/main/examples/How_to_finetune_chat_models.ipynb?WT.mc_id=academic-105485-koreyst) | `gpt-35-turbo` 모델을 특정 도메인(예: "레시피 도우미")에 맞춰 학습하기 위해 학습 데이터를 준비하고, 맞춤형 학습 작업을 실행하며, 맞춤형 학습된 모델을 추론에 사용하는 법을 배웁니다. | +| Azure OpenAI | [GPT 3.5 Turbo 맞춤형 학습 튜토리얼](https://learn.microsoft.com/azure/ai-services/openai/tutorials/fine-tune?tabs=python-new%2Ccommand-line?WT.mc_id=academic-105485-koreyst) | **Azure**에서 `gpt-35-turbo-0613` 모델을 맞춤형 학습시키는 절차를 배우며, 학습 데이터 생성 및 업로드, 맞춤형 학습 작업 실행, 새로운 모델 배포 및 사용에 대해 다룹니다. | +| Hugging Face | [Hugging Face를 활용한 대규모 언어 모델 맞춤형 학습](https://www.philschmid.de/fine-tune-llms-in-2024-with-trl?WT.mc_id=academic-105485-koreyst) | 이 블로그 게시물은 [transformers](https://huggingface.co/docs/transformers/index?WT.mc_id=academic-105485-koreyst) 라이브러리 및 [Transformer Reinforcement Learning (TRL)](https://huggingface.co/docs/trl/index?WT.mc_id=academic-105485-koreyst)를 사용하여 공공 [데이터 셋](https://huggingface.co/docs/datasets/index?WT.mc_id=academic-105485-koreyst)으로 _공용 LLM_(예: `CodeLlama 7B`)을 맞춤형 학습시키는 과정을 안내합니다. | +| | | | +| 🤗 AutoTrain | [AutoTrain을 활용한 대규모 언어 모델 맞춤형 학습](https://github.com/huggingface/autotrain-advanced/?WT.mc_id=academic-105485-koreyst) | AutoTrain(또는 AutoTrain Advanced)는 Hugging Face에서 개발된 파이썬 라이브러리로, 다양한 작업을 위한 맞춤형 학습을 지원합니다. AutoTrain은 코드 작성 없이도 맞춤형 학습을 수행할 수 있으며, 자체 클라우드, Hugging Face Spaces 또는 로컬 환경에서 사용할 수 있습니다. 웹 기반 GUI, CLI 및 yaml 구성 파일을 통한 학습을 지원합니다. | +| | | | + +## 과제 + +위의 튜토리얼 중 하나를 선택하여 진행하세요. _참고용으로 이 저장소의 Jupyter 노트북에서 이러한 튜토리얼의 버전을 복제할 수 있습니다. 최신 버전을 사용하려면 원본 소스를 직접 사용하세요._ + +## 수고하셨습니다! 학습을 계속하세요. + +이 레슨을 완료한 후 [Generative AI 학습 컬렉션](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)을 확인하여 Generative AI 지식을 계속 향상시킬 수 있습니다! + +축하합니다!! 이 과정의 v2 시리즈의 마지막 레슨을 완료했습니다! 학습과 개발을 멈추지 마세요. \*\*[자료들](RESOURCES.md?WT.mc_id=academic-105485-koreyst) 페이지를 확인하여 이 주제에 대한 추가 제안을 확인하세요. + +v1 시리즈의 레슨들도 더 많은 과제와 개념으로 업데이트되었습니다. 지식을 갱신하는 데 잠시 시간을 내세요 - 그리고 이 레슨들을 개선하는 데 도움을 주기 위해 [질문과 피드백을 공유](https://github.com/microsoft/generative-ai-for-beginners/issues?WT.mc_id=academic-105485-koreyst)해 주세요.