Master Prompt Engineering: LLM Embedding and Fine-tuning
Retrieval Augmented Generation (RAG)에 대한 완전한 개요
Prompting, RAG 또는 Fine-tuning을 사용해야 할까요?
Question answering using embeddings-based search
LLMs (GPT-3/3.5/4)의 파인 튜닝과 임베딩은 질문 응답(QA) 및 정보 검색과 같은 다양한 애플리케이션을 위해 이 고급 언어 모델의 능력을 활용하려는 사람들 사이에서 인기 있는 토론 주제가 되었습니다.
semantic embeddings과 파인 튜닝은 모두 LLMs를 특정 작업에 맞게 조정하는 기술이지만, 그들은 다른 목적을 제공하며 고유한 이점을 제공합니다.
이 두 개념은 서로 관련되어 있으며 언제 어떤 것을 사용해야 하는지에 대한 혼란이 자주 있기 때문에 함께 탐구하겠습니다.
핵심 개념
LLM 전이 학습
전이 학습(Transfer Learning)은 기계 학습 기법으로, 모델이 한 작업에서 얻은 지식을 다른 관련 작업에 적용할 수 있게 해줍니다. 이 접근법은 모델을 처음부터 훈련시키는 것에 비해 상당한 시간과 연산 자원을 절약할 수 있습니다. 전이 학습은 원래 이미지 인식 작업을 위해 개발되었지만, 이후에 자연어 처리(NLP) 작업에도 적용되었습니다.
LLMs (GPT-3/3.5/4)의 맥락에서 전이 학습은 모델이 특정 애플리케이션 또는 도메인에 맞게 조정하기 위해 언어, 패턴, 구조에 대한 기존의 지식을 사용할 때 발생합니다.
전이 학습은 특정 작업을 위해 모델을 파인 튜닝하는 것을 포함합니다. 그러나 파인 튜닝 과정이 새로운 정보보다는 새로운 작업이나 패턴을 모델에 가르치는 데 중점을 둔다는 것을 주의해야 합니다. 이는 QA와 같이 추가 지식의 저장 및 검색이 필요한 작업에 대한 이상적인 해결책이 아니라는 것을 의미합니다.
파인 튜닝: 모델 응답 개선하기
Fine-tuning은 챗봇과 같은 사전 훈련된 모델의 성능을 정교화하기 위해 사용되는 기법입니다.
예시를 제공하고 모델의 매개변수를 조정함으로써, 파인 튜닝은 특정 작업에 대해 더 정확하고 문맥상 관련성 있는 응답을 생성하게 합니다.
이러한 작업은 챗봇 대화, 코드 생성, 질문 형성에서부터 원하는 출력과 더 나은 일치를 보장하기 위한 것에 이르기까지 다양합니다. 이 과정은 훈련 중에 신경망이 가중치를 조정하는 것과 유사합니다.
이 기술은 언어 모델이 특정한 방식으로 작동하도록 보장하는 데 탁월합니다. 예를 들어, 조직이 도널드 트럼프와 같은 특정 스타일로 말하는 AI를 모델링하길 원한다면, 파인 튜닝이 선택해야 할 접근법입니다.
또는 예를 들어, 고객 서비스 챗봇에서 파인 튜닝은 챗봇이 업계 특정 용어나 전문 용어를 이해하는 데 도움을 주어, 고객 문의에 대한 더 정확하고 관련성 있는 응답을 가능하게 합니다.
전이 학습의 한 형태로서, 파인 튜닝은 광범위한 재훈련을 필요로 하지 않고 사전 훈련된 모델을 새로운 작업을 수행하도록 조정합니다. 이 과정은 모델의 매개변수에 약간의 조정을 가하여 대상 작업을 더 잘 실행하게 합니다.
이 방법은 챗봇 기록이나 방송 인터뷰 기록과 같은 다양한 데이터를 활용하여 큰 언어 모델에 특정한 유형의 행동을 주입합니다. 파인 튜닝은 언어 모델이 특정한 행동을 취하도록 조정하는 유용한 접근법을 제공하지만, 그 효과는 한계가 있습니다.
그러나 언어 모델(예: GPT-3)을 파인 튜닝하는 것은 그 자체로 도전이 됩니다.
파인 튜닝이 행동을 모방하는 데 효과적이긴 하지만, 법률 또는 금융 분야와 같이 광범위한 도메인 지식이 필요한 경우에는 최적의 선택이 아닙니다.
예를 들어, 가장 높은 주식 가격 움직임을 가진 주식을 결정하는 것과 같이 매우 정확한 데이터가 필요한 경우, 파인 튜닝만으로는 충분하지 않을 수 있습니다. 이러한 경우 지식 기반 방법이 유리합니다.
흔한 오해 중 하나는 파인 튜닝이 모델에게 새로운 정보를 습득하게 할 것이라는 것이지만, 실제로는 모델에게 새로운 작업이나 패턴을 가르치는 것이지 새로운 지식을 가르치는 것이 아닙니다.
게다가, 파인 튜닝은 시간이 많이 걸리며, 복잡하고, 비용이 많이 들 수 있어, 여러 사용 사례에 대한 확장성과 실용성을 제한할 수 있습니다.
특정 작업 가르치기의 가치: 파인 튜닝의 주요 이점 중 하나는 모델에 특정 작업이나 패턴을 가르칠 수 있는 능력입니다, 이를 통해 해당 분야에서 더 효과적으로 작동하게 합니다.
예를 들어, 파인 튜닝은 이메일 생성, 코드 생성, 또는 장편 소설 작성과 같은 작업에서 모델의 능력을 향상시키는 데 사용될 수 있습니다. 이러한 특정 작업에 중점을 둠으로써 모델은 사용자의 필요에 맞게 더 정확하고 관련성 있으며 문맥상 적절한 출력을 제공할 수 있습니다.
LLMs를 파인 튜닝하는 것은 새로운 지식을 가르치는 것이 아니라는 것을 알아두는 것이 중요합니다. 모델의 사전 훈련 단계는 이미 그것에 많은 정보를 제공하며, 파인 튜닝은 원하는 패턴과 일치하는 텍스트를 생성하도록 모델을 단순히 조정합니다. 본질적으로, 파인 튜닝은 새로운 지식을 도입하지 않고, 특정 작업에 대한 적절한 구조를 이해하고 생성하도록 LLMs를 도와줍니다.
Semantic Embeddings: 지식 기반 방법
파인 튜닝과는 대조적으로, 지식 기반 방법(knowledge-based method)은 모델을 재훈련하는 것을 포함하지 않습니다. 대신, 이는 모든 사용 가능한 지식을 포함하는 임베딩 또는 벡터 데이터베이스를 생성하는 것을 의미합니다. 이 데이터베이스는 대규모 언어 모델에 프롬프트의 일부로 피드될 관련 데이터를 찾는 데 사용됩니다.
시맨틱 임베딩은 단어나 문구의 의미를 포착하는 텍스트의 수치적 벡터 표현입니다. 이러한 벡터를 비교하고 분석함으로써 텍스트 요소 간의 유사성과 차이점을 파악할 수 있습니다.
검색을 위해 시맨틱 임베딩을 활용하면, 특히 대규모 데이터셋 내에서 관련 정보를 빠르고 효과적으로 검색할 수 있습니다.
이 방법은 작업이 정확한 데이터 제공과 관련이 있을 때 효과적입니다. 예를 들어, 금융 시장의 통계를 위한 지식 베이스를 생성하기 위해 임베딩을 사용하면, 실시간으로 관련된 데이터를 제공할 수 있습니다.
지식 기반 방법은 파인 튜닝의 필요성을 제거하므로 비용을 절감해 AI 적용을 더 경제적으로 가능하게 합니다.
시맨틱 검색은 파인 튜닝에 비해 여러 가지 장점이 있습니다. 예로, 더 빠른 검색 속도, 계산 비용의 감소, 정보나 사실의 잘못된 해석 또는 조작을 방지하는 것 등이 있습니다. 이러한 장점들로 인해, 모델 내에서 특정한 지식에 액세스하려는 목적을 가질 때 시맨틱 검색이 종종 선호됩니다.
임베딩은 추천 시스템, 검색 기능, 텍스트 분류 등 다양한 분야에서 사용됩니다. 예를 들면, 스트리밍 플랫폼의 영화 추천 시스템을 설계할 때, 임베딩은 텍스트 기반의 설명을 통해 유사한 주제나 장르의 영화를 식별할 수 있습니다. 이러한 설명들을 벡터로 표현함으로써, 시스템은 이들 사이의 거리를 계산하고 벡터 공간에서 가까운 영화들을 추천하게 되어, 사용자에게 더 정확하고 관련 있는 경험을 제공하게 됩니다.
GPT-3과 같은 대규모 언어 모델(Large Language Model, LLM)의 파인 튜닝 주요 과제
GPT-3와 같은 LLM의 파인 튜닝은 그 효율성, 확장성 및 효과성에 영향을 줄 수 있는 여러 과제들을 내포하고 있습니다. 이 섹션에서는 LLM의 파인 튜닝과 관련된 주요 과제들에 대해 논의합니다:
- 계산 비용(Computational Costs): LLM의 파인 튜닝은 상당한 계산 자원을 필요로 하며, 이로 인해 비용이 많이 들 수 있습니다. 이러한 비용은 제한된 예산을 가진 조직이나 연구자들에게는 실행이 어려울 수 있습니다.
- 훈련 데이터의 질(Training Data Quality): 성공적인 파인 튜닝을 위해서는 고품질이고 관련성 있는 훈련 데이터가 필수적입니다. 그러나 이러한 데이터를 구하고 준비하는 것은 시간이 많이 걸리며, 모델의 성능에 영향을 줄 수 있는 편향이나 부정확성을 도입할 위험이 항상 있습니다.
- 과적합(Overfitting): 모델이 훈련 데이터에 지나치게 특화될 경우, 새로운 예제에 대한 일반화 능력이 떨어지는 현상인 과적합이 발생할 수 있습니다. LLM의 파인 튜닝에서는 최적의 성능을 달성하기 위해 특화와 일반화 사이의 균형을 유지하는 것이 중요한 과제입니다.
- 착각과 환각(Confabulation and Hallucination): LLM의 파인 튜닝은 때때로 모델이 잘못되거나 허구의 정보를 생성하는 착각, 그리고 그럴듯하지만 잘못된 답변을 생성하는 환각 현상을 초래할 수 있습니다. 이로 인해 모델의 출력의 신뢰성과 믿을 만함이 저하될 수 있습니다.
- 모델의 적응성(Model Adaptability): 새로운 정보나 업데이트된 지식이 사용 가능해질 때, 모델을 다시 파인 튜닝하는 것이 필요할 수 있습니다. 이 과정은 자원이 많이 들고 까다로울 수 있습니다, 특히 모델이 지속적으로 업데이트되어야 하는 경우에는 더욱 그렇습니다.
- 윤리적 고려사항(Ethical Considerations): LLM의 파인 튜닝은 훈련 데이터로부터 무심코 배우게 되어 유해한 스테레오타입이나 잘못된 정보를 전파할 수 있는 잠재적인 편향을 초래할 수 있습니다. 파인 튜닝된 모델의 윤리적인 사용 및 출력을 보장하는 것은 어려울 수 있으며 지속적인 모니터링 및 평가가 필요합니다.
파인 튜닝의 단점 및 대안 고려
인공 지능의 세계는 혁신을 위한 많은 문을 열어주었고, 계속 발전함에 따라 GPT-3.5와 GPT-4와 같은 언어 모델을 파인 튜닝하는 것이 흔한 관행이 되었습니다. 그렇다면 파인 튜닝은 항상 성공적인 결과를 가져다 주는 것일까요, 아니면 이 기술에 단점이 있을까요? 이 기사에서는 파인 튜닝의 도전과 대안을 고려하고, 특정 상황에서 그것이 번거로움을 감수할 가치가 있는지를 살펴보면서 대화식으로 이야기를 나눠보겠습니다.
모든 모델이 동일하게 생성되지는 않습니다
먼저, 모든 언어 모델이 파인 튜닝 가능한 것은 아니라는 것을 인식하는 것이 중요합니다. 사실, 현재 가장 인기 있는 모델인 GPT-3.5와 GPT-4는 전혀 파인 튜닝될 수 없습니다. 그러므로 AI의 최고봉을 사용하려면 다른 방법을 찾아야 합니다. *GPT-3.5는 이제 파인 튜닝할 수 있습니다.
보이지 않는 비용
파인 튜닝은 어떤 독점 클럽처럼 상당한 비용을 수반합니다. 파인 튜닝된 GPT-3 모델을 사용할 때 기본 GPT-3.5-turbo 모델에 비해 비용이 대략 60배 증가한다는 사실에 놀라게 될 것입니다. 그리고 그것뿐만 아니라, 파인 튜닝된 GPT-3 모델을 사용하는 것은 기본 GPT-4 모델에 비해 두 배 비쌀 수 있습니다. 따라서 돈을 낭비하고 싶지 않다면 파인 튜닝 열차에 올라타기 전에 두 번 생각해보세요.
느리고 차근차근한 것이 항상 우승하는 것은 아니다
달콤한 설탕물로 가득한 신발을 신고 경주를 시도하는 것을 상상해보세요 – 그것이 바로 반복 루프에서 파인 튜닝을 느낄 때의 모습입니다. 새로운 기능을 추가하고 싶나요? 몇 줄의 프롬프트를 빠르게 추가하는 대신 가짜 데이터를 만들고, 파인 튜닝 과정을 거친 후 새롭게 파인 튜닝된 모델을 사용해야 합니다. 이것은 느리고 노동 집약적인 고비로, 가장 인내심 있는 혁신가조차도 늪에 빠져 있는 것 같은 느낌을 받게 합니다.
데이터 생성의 부담
아, 수많은 데이터를 수동으로 생성하는 즐거움! 결론적으로, 파인 튜닝은 모델이 마법을 부리는 동안 손가락을 꼬집는 것만이 아닙니다. 이 과정은 파인 튜닝에 필요한 데이터를 생성하기 위한 상당한 시간과 노력을 요구합니다. 그리고 솔직히, 누가 그런 시간이 있을까요?
데이터와 개인정보 보호
파인 튜닝에 대해 이야기할 때 중요한 것은 황금룰을 기억하는 것입니다: 실제 고객 데이터를 사용하지 마세요. 민감한 정보 유출 위험을 피하려면 항상 합성 데이터를 선택해야 합니다. 하지만, 모델을 파인 튜닝하지 않는다면, 실수로 비밀을 털어놓을 걱정을 할 필요가 없겠죠, 맞죠?
파인 튜닝이 제시하는 모든 도전을 감안할 때, 제로샷(zero-shot), 원샷(one-shot), 퓨샷(few-shot) 학습과 같은 대체 기술을 활용하는 것이 중요합니다. 이러한 대체 방법을 활용하면 파인 튜닝의 단점에 빠지지 않고 프로젝트를 계속 진행할 수 있습니다. 옛말에, “고양이의 가죽을 벗기는 방법은 하나가 아니다”라는 말이 있습니다 – 이 경우, 언어 모델을 최적화하는 방법은 여러 가지입니다.
파인 튜닝의 미래
제한사항에도 불구하고, 파인 튜닝은 GPT와 같은 기본 모델이 어려워하는 작업에 특히 AI 적용에서 강력한 도구로 남아있습니다.
적절한 모델을 사용하고 파인 튜닝을 올바르게 구현함으로써, 간단한 지시를 더 복잡한 작업으로 변환할 수 있는 대형 언어 모델을 만들 수 있습니다.
올바르게 파인 튜닝을 수행함으로써 대형 언어 모델은 간단한 지시로 복잡한 작업을 수행할 수 있게 개발될 수 있습니다. 이 접근 방식은 다양한 분야에서 AI의 실용적인 실세계 응용 프로그램을 위한 새로운 문을 엽니다.
LLM에서 임베딩의 문제점
그 중요성에도 불구하고 LLM에서의 임베딩과 관련된 몇 가지 문제점이 있습니다:
- 높은 차원성(High-dimensionality): LLM에서 생성된 임베딩은 종종 높은 차원성을 가지며, 이로 인해 계산 복잡성과 저장 요구 사항이 증가할 수 있습니다. 이로 인해 대규모 데이터셋을 다루거나 유사성 검색, 클러스터링 또는 분류 작업을 효율적으로 수행하는 것이 어려울 수 있습니다.
- 희소한 표현(Sparse representation): 임베딩은 벡터의 대부분의 요소가 0 또는 근접한 값인 희소한 표현을 결과로 할 수 있습니다. 이러한 희소성은 유사성 검색이나 다른 작업 중에 메모리 소모량을 증가시키고 계산 시간을 느리게 할 수 있습니다.
- 해석 가능성(Interpretability): 임베딩은 종종 고차원 공간에서 복잡한 관계를 나타내기 때문에 해석하기 어렵습니다. 이러한 해석 가능성의 부족은 임베딩의 편향이나 부정확성과 같은 문제를 진단하고 모델의 기본적인 추론을 이해하는 것이 어렵게 만들 수 있습니다.
- 데이터 품질(Data quality): 임베딩의 효과성은 LLM 학습에 사용된 입력 데이터의 품질에 크게 의존합니다. 잡음이 많거나 편향된 또는 형식이 잘못된 데이터는 최적이 아닌 임베딩을 초래하여 다운스트림 작업의 성능이 저하될 수 있습니다.
- 도메인 적응(Domain adaptation): 사전 훈련된 LLM은 일반적인 목적의 임베딩을 생성할 수 있지만, 특정 도메인이나 작업에 이러한 임베딩을 적용하려면 도메인 특정 데이터에서 추가적인 파인 튜닝이나 교육이 필요할 수 있습니다. 이 과정은 자원을 많이 소모하며 모델 교육과 최적화에 대한 전문 지식이 필요합니다.
- 어휘 사전 밖의 단어(Out-of-vocabulary words): 경우에 따라 LLM은 교육 데이터에 없었던 단어나 구를 만날 수 있습니다. 이러한 어휘 사전 밖(OOV)의 단어는 모델이 의미 있는 표현을 생성하기 위한 제한된 정보를 가지고 있기 때문에 최적이 아니거나 부정확한 임베딩을 초래할 수 있습니다.
- 언어 범위(Language coverage): 많은 LLM은 주로 영어나 다른 널리 사용되는 언어의 데이터에서 교육을 받습니다. 이로 인해 자원이 부족한 언어에 대한 임베딩의 품질이 제한될 수 있습니다. 이로 인해 대표성이 부족한 언어와 관련된 작업에서 성능이 저하될 수 있습니다.
- 편향과 공정성(Bias and fairness): 임베딩은 교육 데이터에 존재하는 편향, 예를 들면 성별, 인종 또는 문화적 편향을 무의식적으로 포착하고 반영할 수 있습니다. 이러한 편향은 다운스트림 작업에서 모델의 행동에 영향을 줄 수 있어 공정성과 윤리적 함의에 대한 우려가 발생합니다.
Fine-tuning 및 Embedding 과정 개요
이 섹션에서는 각 과정의 고수준 개요를 제공하며, 관련된 주요 활동에 대해 간략히 논의합니다. 우리의 목표는 단계별 가이드를 제시하는 것이 아니라 핵심 개념에 대한 일반적인 이해를 제공하는 것입니다. 우리는 이 핵심 아이디어들을 명료하고 간결하게 설명하기 위해 정보를 세심하게 정제하였습니다.
Fine-tuning 과정 개요
정의:
Fine-tuning은 특정 작업에 대한 성능을 향상시키기 위해 미리 학습된 모델(대규모 데이터세트에서 학습된 모델)을 추가로 학습하는 방법입니다.주요 활동:
- 기본 모델 선택: 원하는 작업과 가장 가까운 아키텍처와 학습을 가진 미리 학습된 모델을 선택합니다.
- 데이터 수집: 특정 작업과 관련된 도메인 특정 데이터세트를 획득합니다. 이 데이터세트는 fine-tuning 접근 방식에 따라 레이블이 지정되거나 지정되지 않을 수 있습니다.
- 모델 훈련: 도메인 특정 데이터세트를 사용하여 모델을 학습합니다. 이 단계는 기본 모델의 일반적인 지식을 활용하고 특정 작업에 맞게 조정합니다.
- 평가: Fine-tuning 후 테스트 데이터세트를 사용하여 원하는 작업의 모델 성능을 평가합니다.
- 반복적인 개선: 평가 결과에 따라, 필요에 따라 이전 단계로 돌아가 매개변수를 조정하거나 더 많은 데이터를 획득하거나 학습 방법을 개선합니다.
Embedding 과정 개요
정의:
Embedding은 단어, 문장 또는 문서를 고정 크기의 숫자 벡터로 변환합니다. 이 벡터들은 데이터의 엔터티 간의 의미 정보와 관계를 포착합니다.주요 활동:
- 토큰화: 입력 데이터(문장이나 문단과 같은)를 더 작은 단위(대개 단어나 하위 단어)로 분해합니다.
- 벡터 생성: 미리 학습된 모델을 사용하여 토큰을 고차원 벡터로 변환합니다. 이 벡터들은 토큰의 의미를 인코딩합니다.
- 차원 축소 (선택적): Embedding을 더 관리하기 쉽게하거나 시각화하기 위해 PCA(주성분 분석)나 t-SNE(분산 확률적 이웃 임베딩)와 같은 기법을 적용하여 차원의 수를 줄일 수 있습니다.
- 응용: 유사성 검색, 클러스터링 또는 분류와 같은 다양한 기계 학습 작업에서 embedding을 사용합니다.
- 저장 및 검색: 하류 응용 프로그램에서 빠른 검색 및 비교를 위해 효율적인 데이터 구조(최근접 이웃 검색 트리와 같은)에 embedding을 저장합니다.
요약하면, fine-tuning은 특정 작업을 위한 미리 학습된 모델의 성능을 향상시키는 것을 목표로 하고, embedding 과정은 언어 엔터티를 그들의 의미적 본질을 포착하는 벡터로 변환하는 데 중점을 둡니다. 두 과정 모두 현대 언어 모델의 기능과 응용 프로그램을 향상시키는 데 중요합니다.
Fine-tuning 과정 개요
- 목표 정의: 모델이 전문화되기 원하는 작업이나 도메인(예: 감정 분석, 요약 또는 특정 주제 영역)을 명확히 식별하세요.
- 데이터 수집 및 전처리: 목표와 관련된 데이터셋을 수집합니다. 이 데이터셋에는 원하는 입력-출력 쌍의 예제가 포함되어야 합니다. 데이터를 전처리하여 깨끗하고 일관성 있게 올바르게 포맷되도록 합니다.
- 데이터 분할: 데이터셋을 훈련, 검증, 테스트 세트로 나눕니다. 훈련 세트는 모델을 세밀하게 조정하는 데 사용되며, 검증 세트는 훈련 중 모델의 성능을 모니터링하고 최적의 모델을 선택하는 데 도움을 주고, 테스트 세트는 최종 모델의 성능을 평가하는 데 사용됩니다.
- Fine-tuning 구성 선택: 세밀한 조정을 위한 적절한 모델 아키텍처, 학습률, 배치 크기 및 기타 하이퍼파라미터를 선택합니다. 최적의 구성을 찾기 위해 실험 및 하이퍼파라미터 튜닝이 필요할 수 있습니다.
- 모델 세밀하게 조정: 사전 훈련된 가중치로 LLM을 초기화하고 세밀한 조정 과정을 시작합니다. 여러 epoch 동안 또는 검증 성능이 개선되지 않을 때까지 훈련 데이터셋에서 모델을 훈련시킵니다.
- 성능 모니터링 및 평가: 훈련 중에 검증 세트에서 모델의 성능을 정기적으로 확인합니다. 이렇게 하면 과적합 또는 과소적합을 확인할 수 있으며, 검증 세트의 성능이 개선되지 않을 때 훈련을 중단할 수 있습니다.
- 최적의 모델 선택: 검증 세트에서 가장 높은 성능을 보이는 모델의 반복을 선택합니다.
- 테스트 세트를 사용하여 평가: 테스트 데이터셋에서 세밀하게 조정된 모델의 성능을 평가하여 일반화 능력에 대한 편향되지 않은 추정을 얻습니다.
- 모델 배포: 세밀한 조정 과정이 완료되고 모델의 성능이 만족스러울 경우 응용 프로그램 또는 시스템에 모델을 배포합니다.
- 모니터링 및 유지 관리: 실제 시나리오에서 모델의 성능을 지속적으로 모니터링하고, 최적의 성능을 보장하기 위해 필요한 경우 세밀하게 조정하거나 재훈련합니다.
LLM을 활용한 임베딩 및 벡터 검색 개요
임베딩 과정은 GPT-3, Gpt-3.5, GPT-4와 같은 대규모 언어 모델(LLM)의 핵심 구성 요소로, 텍스트를 수치 형식으로 의미론적으로 이해하고 표현할 수 있게 합니다. 다음은 LLM용 임베딩 과정의 단계별 개요입니다:
- 관련 데이터 출처: 모델이 이해하기 원하는 도메인 또는 작업과 관련된 텍스트 데이터를 수집합니다. 관심 주제를 다루는 문서, 기사, 연구 논문, 웹 페이지를 포함할 수 있습니다.
- 데이터 전처리: 불필요하거나 민감한 정보를 제거하고 문법과 철자 오류를 수정하며 텍스트를 추가 처리를 위한 형식으로 포맷팅하여 텍스트 데이터를 정리합니다.
- 토큰화: 언어 모델의 요구 사항에 따라 전처리된 텍스트를 개별 단어, 부분 단어 또는 문자로 토큰화합니다. 이 과정은 텍스트를 LLM에서 처리할 수 있는 더 작은 단위로 분해합니다.
- 임베딩: 토큰화된 텍스트를 언어 모델을 통해 전달하여 임베딩을 생성합니다. 이 임베딩은 텍스트의 의미론적 의미를 캡처하고 유사성 검색, 클러스터링 또는 분류와 같은 다양한 작업을 수행할 수 있게 합니다.
- 차원 축소 (선택 사항): 필요한 경우 PCA 또는 t-SNE와 같은 기술을 사용하여 생성된 임베딩의 차원을 축소합니다. 이 단계는 유사성 검색 및 기타 다운스트림 작업의 효율성을 개선하는 데 도움이 될 수 있습니다.
- 인덱싱 및 저장: 벡터 데이터베이스나 반전 인덱스와 같은 적절한 데이터 구조를 사용하여 생성된 임베딩을 인덱싱하여 검색 또는 쿼리 처리 중 빠르고 효율적인 검색을 용이하게 합니다.
- 검색: 사용자 쿼리의 임베딩과 인덱스된 텍스트의 임베딩을 비교하여 유사성 검색 또는 기타 작업을 수행하는 데 인덱스된 임베딩을 사용합니다. 유사성 점수 또는 기타 관련 기준을 기반으로 가장 관련성 있는 문서나 텍스트 덩어리를 검색합니다.
- 후처리: 사용자의 쿼리에 포괄적이고 정보적인 응답을 제공하기 위해 검색된 문서나 텍스트 덩어리에서 메타데이터나 관심 분야의 특정 섹션과 같은 관련 정보를 추출합니다.
임베딩과 파인튜닝 사이에서 선택하기
응용 프로그램에서 일부 중복되는 부분이 있지만 임베딩을 사용할지 또는 파인튜닝을 사용할지의 선택은 주어진 문제에 따라 다릅니다. 검색 및 추천 작업의 경우, 임베딩은 텍스트 데이터의 효율적인 비교를 가능하게 하기 때문에 일반적으로 더 적합합니다. 예를 들면, 챗봇 응답 생성에서는 파인튜닝이 선호되는 방법입니다. 이는 모델의 성능을 향상시켜 사용자 입력에 적절한 응답을 생성하기 때문입니다.
의미론적 임베딩 vs 파인튜닝
GPT-3와 같은 언어 모델의 힘을 활용하기 위해 의미론적 임베딩과 파인튜닝은 두 가지 별개의 방법론임을 이해하는 것이 중요합니다. 파인튜닝은 전이 학습을 통해 모델에 새로운 작업을 가르치는 데 중점을 둡니다. 반면 의미론적 임베딩은 텍스트의 의미를 숫자로 변환하여 의미론적 검색과 정보 검색과 같은 작업에 사용합니다.
의미론적 검색, 또는 신경 검색 또는 벡터 검색이라고도 불리는 이 기술은 데이터베이스가 키워드나 인덱스에만 기반한 것이 아닌 의미론적 의미를 기반으로 정보를 검색하고 검색할 수 있게 합니다. 이 접근법은 매우 확장 가능하며, 특정 작업에 대한 모델을 파인튜닝하는 것보다 일반적으로 더 빠르고 경제적입니다.
반대로, 파인튜닝은 시간이 오래 걸리고 복잡하며 비용이 많이 들 수 있으며, 새로운 정보를 저장하고 검색하는 모델의 능력을 본질적으로 향상시키지 않습니다. 또한, QA를 위해 대규모 언어 모델을 파인튜닝하는 것은 항상 가장 효율적이거나 효과적인 해결책이 아닐 수 있습니다. 이는 고립(부정확하거나 만들어진 정보를 생산) 및 환각(그럴듯하나 잘못된 답을 생성)과 같은 문제에 계속 직면하기 때문입니다.
모든 검색 문제는 질문-답변 작업으로 구성될 수 있다는 주장을 할 수 있습니다. 이것은 어느 정도까지는 사실이지만, 질문-답변에 임베딩과 파인튜닝을 사용하는 선택은 문제의 특정 요구 사항과 복잡성에 따라 다릅니다. 단순한 검색 작업의 경우, 임베딩이 더 효율적이고 구현하기 쉬울 수 있으며, 더 복잡한 질문-답변 시나리오의 경우 파인튜닝이 더 나은 결과를 제공할 수 있습니다.
사례 연구
1.사례 연구: 고객 지원 챗봇을 위해 GPT-3 파인튜닝하기
배경: 통신사를 위한 챗봇을 만드는 작업을 맡게 되었습니다. 이 챗봇은 청구, 문제 해결 및 제품 정보와 관련된 고객 문의에 답변할 책임이 있습니다. 목표는 이 특정 도메인에 GPT-3를 파인튜닝하여 고객 지원 쿼리 처리 성능을 향상시키는 것입니다.
단계 1: 훈련 데이터 수집: 개인을 식별할 수 있는 정보(PII)를 제거하여 익명화 및 정화된 고객 지원 채팅 로그를 수집합니다. 이 채팅 로그에는 고객의 쿼리와 지원 담당자의 응답이 모두 포함되어야 합니다. 후속 처리를 위해 로그를 구조화된 형식(예: JSON, CSV)으로 정리합니다.
단계 2: 데이터 전처리: 관련 없거나 민감한 정보를 제거하고, 문법 및 철자 오류를 수정하고, GPT-3의 입력 요구 사항과 일치하도록 텍스트를 형식화하여 데이터를 정화 및 전처리합니다. 채팅 로그를 GPT-3가 이해할 수 있는 대화 형식으로 변환합니다.
단계 3: JSONL 파일 생성: GPT-3를 파인튜닝하기 위해 사용될 전처리된 데이터로 JSONL 파일(개행으로 구분된 JSON)을 생성합니다. 파일의 각 줄은 두 개의 키를 가진 JSON 객체 형태의 단일 예제를 나타내야 합니다: “role” (either “user” or “assistant”)와 “content” (텍스트 내용).
JSONL 파일의 예제 추출:
{“role”: “user”, “content”: “내 현재 잔액을 어떻게 확인할 수 있나요?”}
{“role”: “assistant”,”content”: “현재 잔액을 확인하려면 웹사이트나 모바일 앱에 로그인하여 ‘계정 개요’ 섹션으로 이동하세요.”}
{“role”: “user”, “content”: “인터넷 연결이 느린 경우 어떻게 해야 합니까?”}
{“role”: “assistant”, “content”: “인터넷 연결이 느리면 모뎀과 라우터를 다시 시작해보십시오. 문제가 지속되면 지원팀에 문의하여 추가 지원을 받으십시오.”}
…
단계 4: GPT-3 파인튜닝: JSONL 파일을 OpenAI 플랫폼에 업로드하고 GPT-3 모델을 사용하여 파인튜닝 과정을 시작합니다. 요구 사항 및 데이터셋 크기를 기반으로 학습률, 에폭 수, 배치 크기와 같은 훈련 매개변수를 지정합니다. 훈련 과정을 모니터링하고 최적의 성능을 달성하기 위해 필요에 따라 매개변수를 조정합니다.
단계 5: 파인튜닝된 모델 평가: 파인튜닝 과정이 완료되면, 훈련 중에 사용되지 않은 별도의 채팅 로그 세트에서 파인튜닝된 GPT-3 모델의 성능을 평가합니다. 고객 지원 쿼리를 처리하는 데 있어서의 효과성을 판단하기 위해 정확도, 응답 시간 및 기타 관련 메트릭을 측정합니다.
단계 6: 파인튜닝된 모델 배포: 파인튜닝된 GPT-3 모델을 챗봇 애플리케이션에 통합하고 실제 사용자로 테스트합니다. 지속적으로 성능을 모니터링하고 정확도와 사용자 경험을 향상시키기 위해 필요한 조정을 합니다.
2.사례 연구: 임베딩과 벡터 검색을 활용한 법률 연구 플랫폼 개선
배경: 이 시나리오에서는 법률 전문가들이 관련된 판례, 법령 및 법률 기사를 검색하는 데 도움을 주는 법률 연구 플랫폼을 개선하는 작업을 맡게 됩니다. 현재 플랫폼은 키워드 기반 검색 방식을 사용하며, 이로 인해 종종 관련 없거나 불완전한 결과를 반환합니다. 목표는 임베딩과 벡터 검색을 사용하여 검색 기능을 강화하고 더 정확하고 맥락상 관련된 결과를 제공하는 것입니다.
단계 1: 문서 수집 및 전처리: 판례, 법령 및 법률 기사를 포함한 포괄적인 법률 문서를 수집합니다. 문서를 전처리하여 관련 없거나 민감한 정보를 제거하고 문법 및 철자 오류를 수정한 다음, 추가 처리를 위해 텍스트를 포맷팅합니다.
단계 2: 문서 분할: 수집된 법률 문서를 더 작은 독립적인 섹션, 예를 들어 문단 또는 하위 섹션으로 나누어 임베딩 및 벡터 검색을 용이하게 합니다. 추가 처리를 위해 이러한 청크를 구조화된 형식(예: JSON, CSV)으로 저장합니다.
단계 3: 임베딩 생성: GPT-3와 같은 사전 훈련된 언어 모델을 사용하여 각 문서 청크에 대한 의미적 임베딩을 생성합니다. 이 임베딩은 텍스트의 맥락상 의미를 나타내는 데 사용되며 벡터 기반 유사성 검색을 가능하게 합니다.
단계 4: 임베딩 색인화: 생성된 임베딩을 Pinecone, Elasticsearch 또는 Faiss와 같은 벡터 검색을 지원하는 벡터 데이터베이스나 검색 엔진에 저장합니다. 문서 제목, 작성자 및 발행 날짜와 같은 관련 문서 청크 메타데이터와 함께 임베딩을 색인화합니다.
단계 5: 검색 기능 구현: 사용자가 쿼리를 제출하면 문서 임베딩에 사용된 동일한 언어 모델을 사용하여 쿼리에 대한 임베딩을 생성합니다. 색인화된 임베딩을 사용하여 벡터 검색을 수행하고, 쿼리 임베딩과의 유사성을 기반으로 문서 청크를 순위 지정합니다.
단계 6: 결과 표시 및 정제: 사용자에게 상위 순위의 문서 청크와 그들의 메타데이터 및 원본 문서 정보를 반환합니다. 사용자가 문서 유형, 날짜 범위 또는 관할 지역과 같은 추가 필터를 사용하여 검색 결과를 정제할 수 있도록 합니다.
단계 7: 성능 평가 및 최적화: 검색 정확도, 리콜 및 사용자 만족도와 같은 지표를 사용하여 개선된 검색 기능의 성능을 평가합니다. 사용자 피드백을 수집하고 검색 로그를 분석하여 개선이 필요한 영역을 식별합니다. 더 나은 검색 결과를 제공하기 위해 임베딩 및 벡터 검색 과정을 지속적으로 정제하고 최적화합니다.
이 시점에서 중요한 것은 이러한 개념을 이해하고 언제 사용하고 언제 사용하지 않아야 하는지 알아두는 것입니다. 우리의 더 고급 수업에서는 이러한 주제들을 더 자세히 살펴볼 예정입니다. 일반적으로 프롬프트 엔지니어로서 개발 팀과 함께 일하게 될 것이며, 기술과 전략에 대한 지침을 제공하고 그들이 그것을 실행하게 할 수 있습니다. 이것이 프롬프트 엔지니어링의 이러한 측면에서 실제 경험을 갖는 것이 유용한 자산이 아니라는 것을 의미하는 것은 아닙니다.
요약
GPT-3 파인튜닝
- 새로운 작업이나 패턴을 교육
- 원래 이미지 모델용으로 만들어졌으나, 지금은 NLP 작업에 적용
- 분류, 감정 분석, 명명된 엔터티 인식 등에 사용됨
- 새로운 정보를 가르치지 않음, 새로운 작업만 학습
- 창작성과 환각에 취약
- 비싸고, 느리며, 구현하기 어려움
- 대규모 데이터셋에 확장성이 없음
임베딩 및 의미론적 검색
- 뉴럴 검색이나 벡터 검색으로도 알려짐
- LLMs의 지식 베이스에 추가
- 텍스트의 의미를 나타내기 위해 의미론적 임베딩 사용
- 확장성이 좋고, 빠르며, 비용 효율적
- 키워드뿐만 아니라 맥락과 주제를 기반으로 검색
- 새로운 정보로 쉽게 업데이트됨
- 관련 정보를 검색하여 QA 문제의 절반을 해결
Fine-tuning과 의미론적 검색 비교
파인튜닝
- 느리고, 어렵고, 비싸다
- 창작성에 취약하다
- 새로운 정보가 아닌 새로운 작업을 가르친다
- 지속적인 재교육이 필요하다
- QA 작업에 이상적이지 않다
의미론적 검색
- 빠르고, 쉽고, 저렴하다
- 정확한 정보를 회상한다
- 새로운 정보를 추가하기 쉽다
- 확장성 있고 효율적이다
- 관련 문서를 검색하여 QA 작업의 절반을 해결한다.
자연어 처리 분야에서 LLMs의 파인튜닝과 의미 임베딩은 각각 특정한 필요와 작업에 맞는 독특한 장점을 제공합니다. 이들은 AI의 산업적 응용의 지속적인 발전을 반영하며 각각의 특징과 도전점을 갖고 있습니다.
의미론적 검색은 빠르게 그리고 정확하게 정보를 검색하는데 최적화되어 있습니다. 반면, 파인튜닝은 특정한 작업 또는 응용 프로그램에 부합하는 구조화된 텍스트를 생성하는데 초점을 둡니다.
LLMs의 파인튜닝은 새로운 작업이나 패턴을 학습하는데 탁월하지만, 그것의 고유한 제한사항과 기술적 복잡성 때문에 QA 작업에는 적합하지 않을 수 있습니다.
반대로, 의미론적 검색은 QA 작업에 더 적합하며, 관련된 정보를 효율적으로 가져오고 확장성을 제공하는데 더 우수합니다.
이 두 방법의 각각의 장점을 알아볼 때, 사용자는 자신의 특별한 목적에 가장 적합한 방법을 선택할 수 있습니다.
What about multilingual embeddings?
다양한 언어들의 단어나 문장을 공통된 공간에서 나타내는 것을 다중언어 임베딩이라고 합니다. 이 공통된 표현은 별도의 언어 모델 없이도 번역, 전이 학습, 다언어 정보 검색과 같은 다언어 작업을 가능하게 합니다. 아래에 간략하게 요약해 보겠습니다:
- mBERT (다중언어 BERT):
- 원래의 BERT 모델의 변형으로, mBERT는 여러 언어의 텍스트를 동시에 학습합니다. 모든 언어가 mBERT의 동일한 임베딩 공간을 공유하기 때문에, 다른 언어들 사이의 단어나 문장을 직접 비교할 수 있습니다.
- XLM (다언어 언어 모델):
- XLM은 다언어 작업을 위해 특별히 설계되었습니다. BERT와 유사하지만, 단일언어 데이터와 병렬 데이터 둘 다를 사용하여 학습되어, 언어 간의 관계를 이해하는 데 더 우수합니다.
- LASER (언어 중립적 문장 표현):
- 페이스북 AI에 의해 개발된 LASER는 93개 언어의 문장을 단일 공유 공간에 인코드합니다. 번역 기반의 학습 접근법을 사용하여, 번역된 문장의 표현이 임베딩 공간에서 가능한 한 가깝게 되도록 합니다.
- 다중언어 Word2Vec 또는 FastText:
- 일반적으로 단일 언어에서 학습되는 Word2Vec과 FastText는 다중언어 말뭉치를 사용하여 공통 임베딩을 생성할 수 있습니다.
- 다중언어 작업을 위한 바이트 페어 인코딩 (BPE):
- 원래 데이터 압축을 위해 설계된 BPE는 하위 단어 토크나이저로서 자연어 처리에서 유용하게 사용됩니다.
- 단일언어 임베딩 조정:
- 다른 접근법은 단일언어 임베딩을 따로 학습하고 공통된 공간에서 조정하는 것입니다.
다중언어 임베딩의 장점:
- 자원 전송: 데이터나 연산 자원이 제한된 언어들의 경우, 다중언어 임베딩을 통해 자원이 풍부한 언어에서 지식을 전송받을 수 있습니다.
- 통합된 모델: 여러 언어에 걸쳐 작동하는 단일 모델을 구축할 수 있습니다.
고려 사항:
- 품질 저하: 공유된 공간에서 개별 언어의 임베딩 품질이 손상될 수 있습니다.
- 학습 데이터: 다중언어 임베딩의 품질은 대체로 다중언어 학습 데이터의 품질과 균형에 따라 달라집니다.
다언어 작업을 다룰 때나 언어 중립적인 애플리케이션을 목표로 할 때, 다중언어 임베딩은 강력한 도구를 제공합니다. 하지만 특정 작업과 사용 가능한 데이터와 가장 잘 맞는 방법을 선택하는 것이 중요합니다.
How do embeddings handle multiple languages?
임베딩은 다양한 모델 아키텍처와 사용 목적에 따라 여러 언어를 처리하는 방법이 다릅니다. 여러 언어를 처리하는 방식에 대해 간략히 설명하겠습니다:
- 단일 언어 임베딩 (Monolingual Embeddings):
- 이 임베딩은 단일 언어에서 훈련됩니다. 여러 언어에 대한 임베딩을 원한다면 각 언어에 대해 별도의 임베딩을 갖게 됩니다.
- 예: 영어 Word2Vec 모델과 별도의 스페인어 Word2Vec 모델.
- 이중/다중 언어 임베딩 (Bilingual/Multilingual Embeddings):
- 두 가지 이상의 언어 텍스트에서 훈련됩니다. 목표는 다른 언어의 의미론적으로 유사한 단어를 임베딩 공간에서 서로 가까이 매핑하는 것입니다.
- Canonical Correlation Analysis (CCA) 또는 병렬 말뭉치를 사용한 지도 학습 방법을 사용하여 다른 언어의 임베딩을 공유된 공간에 정렬할 수 있습니다.
- 크로스 언어 임베딩 (Cross-lingual Embeddings):
- 이 임베딩은 다중 언어 임베딩의 하위 집합으로, 명시적으로 하나의 언어에서 다른 언어로 NLP 작업을 전송할 수 있도록 합니다.
- 많은 레이블이 지정된 데이터가 있는 언어(예: 영어)에서 레이블이 거의 지정되지 않은 언어로 지식을 전송하려는 상황에 유용합니다.
- 언어에 중립적인 임베딩 (Language-agnostic Embeddings):
- 이러한 임베딩은 어떤 특정 언어를 특별히 선호하지 않도록 훈련됩니다.
- 예를 들어, BERT 기반 다중 언어 모델(mBERT)은 명시적인 정렬 없이 공유된 임베딩 공간에서 여러 언어의 텍스트에 대해 훈련됩니다. 이를 통해 mBERT는 명시적으로 훈련되지 않은 언어의 작업에 사용될 수 있습니다.
- Byte-Pair Encoding (BPE) 또는 SentencePiece 사용:
- BPE와 SentencePiece는 언어 간에 공유될 수 있는 서브워드 단위를 생성하는 비지도 토큰화 방법입니다. 이는 모델이 대상 언어의 특정 단어를 본 적이 없더라도 알려진 서브워드 단위로 단어를 분해하여 의미있는 표현을 생성할 수 있음을 의미합니다.
- 제로샷 학습 (Zero-shot Learning):
- 일부 현대 모델은 다중 언어 모델의 공유된 임베딩 공간을 활용하여 훈련되지 않은 언어에서 작업을 수행할 수 있습니다. 이를 다중 언어 NLP의 맥락에서 제로샷 학습이라고 종종 부릅니다.
여러 언어를 처리하는 임베딩은 특히 적은 리소스가 사용되는 언어를 다룰 때 복잡할 수 있습니다. 그러나 다중 언어 모델과 임베딩 기술의 발전으로 인해 여러 언어 간의 의미론적 의미를 통일된 방식으로 포착하는 것이 점점 더 실행 가능해지고 있습니다.
Are there multilingual embeddings limitations?
다국어 임베딩의 한계:
- 품질 차이: 일부 언어는 훈련 데이터가 부족하거나 언어적 특성 때문에 임베딩 품질이 다른 언어에 비해 낮을 수 있습니다.
- 세부 뉘앙스 손실: 공통된 임베딩 공간을 사용하면 언어의 고유한 특성이나 뉘앙스를 손실할 수 있습니다.
- 단어의 모호성: 서로 다른 언어의 단어가 비슷한 임베딩을 가질 때, 의미의 충돌이 발생할 수 있습니다.
- 확장성 문제: 많은 언어를 포함할수록 모든 언어에 대해 고품질 임베딩을 생성하는 것이 더 까다로워집니다.
- 문화적 문맥의 손실: 임베딩은 문화적 문맥을 완전히 반영하지 못할 수 있습니다.
- 병렬 데이터 의존: 많은 다국어 임베딩은 여러 언어의 병렬 데이터에 의존합니다. 이러한 데이터가 부족한 언어들은 임베딩 품질이 떨어질 수 있습니다.
- 변동하는 성능: 특정 작업에서는 단일 언어 임베딩이 다국어 임베딩보다 더 좋은 성능을 나타낼 수 있습니다.
- 하위 단어 문제: 하위 단어 기반의 임베딩 방식은 때로는 의미를 올바르게 표현하지 못할 수 있습니다.
- 업데이트의 어려움: 새로운 데이터나 언어를 추가할 때 매번 임베딩을 재훈련해야 할 수 있습니다.
이런 한계점을 고려하면서도 다국어 임베딩은 여러 언어 간의 정보 전달과 통합에 큰 장점을 제공합니다.
한글 처리에 사용할 수 있는 임베딩 방식은 여러 가지가 있습니다. 목적, 사용 가능한 데이터 및 자원에 따라 최적의 방식을 선택할 수 있습니다. 다음은 한글 처리에 대한 몇 가지 추천 임베딩 방식입니다:
- Word2Vec:
- 한글은 조사, 어미 등의 문법적 특성으로 인해 Word2Vec와 같은 단어 수준 임베딩이 의미론적 뉘앙스를 잘 포착하기 어려울 수 있습니다. 그러나 충분한 데이터가 있다면 Word2Vec은 꽤 유용할 수 있습니다.
- FastText:
- FastText는 서브워드 단위의 정보를 활용하여 임베딩을 생성합니다. 이러한 서브워드 접근 방식은 한글의 형태론적 특성에 맞게 설계되어 있어, 한글에 특히 효과적입니다.
- SentencePiece or BPE (Byte-Pair Encoding):
- 이 방법들은 언어 독립적인 토큰화 방식을 제공하며, 특히 한글과 같은 언어에서 잘 작동합니다. 이런 방식을 사용하면 조사나 어미를 잘 처리할 수 있습니다.
- BERT 및 그 변형들 (KoBERT, HanBERT 등):
- BERT와 그 한글 버전인 KoBERT, HanBERT 등은 문장이나 문단 수준의 컨텍스트를 기반으로 임베딩을 생성합니다. 딥러닝 기반의 이러한 모델은 한글의 문맥적 뉘앙스를 포착하는 데 매우 효과적입니다.
- ELMo:
- ELMo는 문맥에 따라 다른 임베딩을 생성하는 방식으로, 문장 내의 단어의 문맥을 반영하여 임베딩을 생성합니다. 한글의 문맥을 잘 반영할 수 있습니다.
- Doc2Vec:
- 문서 전체를 벡터화하는 방법으로, 특히 문서 분류나 유사도 계산과 같은 작업에 적합합니다.
추천 방식:
- 개별 단어나 짧은 문구의 의미를 분석하고자 하는 경우, FastText나 SentencePiece와 같은 서브워드 기반의 임베딩이 좋습니다.
- 문장이나 문단의 문맥을 기반으로 정보를 추출하고자 하는 경우, BERT나 그 변형 모델들을 사용하는 것이 좋습니다.
결론적으로, 작업의 목적과 특성, 사용 가능한 리소스에 따라 적합한 임베딩 방식을 선택해야 합니다.