(AI연구회 박종영)
대규모 언어 모델(Large Language Models, LLM)은 자연 언어 처리(NLP)의 분야에서 흥미로운 발전을 이끌어 내고 있습니다. 이들은 인간의 언어를 이해하고 생성하는 능력을 향상시키기 위해 수백만에서 수십억 개의 매개변수를 가진 모델을 사용하여 텍스트 데이터의 대규모 코퍼스를 학습합니다.
LLM의 대표적인 예는 GPT-3, BERT, T5 등이 있으며, 이들은 문장 생성, 질문 응답, 요약, 번역 등 다양한 언어 작업에서 뛰어난 성능을 보여주고 있습니다.
이러한 모델들은 기계 학습의 주요 원칙에 따라 작동하며, 많은 양의 텍스트 데이터로부터 패턴을 학습합니다. 이들은 통계적인 방법을 사용하여 언어의 구조와 의미를 파악하며, 주어진 맥락에서 가장 가능성이 높은 다음 단어 또는 문장을 예측합니다. 이 과정은 연속된 단어들 사이의 관계를 학습하고, 이를 통해 문장이나 문단을 생성하는 데 사용됩니다.
ChatGPT 및 LLM 관련용어를 간단하게 정리한 내용으로 ChatGPT와 LLM활용에 많은 도움되기 바랍니다
Transformer는 "Attention is All You Need"라는 논문에서 처음 소개된 아키텍처로, 자연 언어 처리(Natural Language Processing, NLP) 분야에서 널리 사용되고 있습니다. Transformer는 순차적인 정보를 처리하는 전통적인 RNN(Recurrent Neural Network)이나 LSTM(Long Short-Term Memory)과 달리, 입력 문장의 모든 단어를 동시에 처리하는 특징이 있습니다.
Transformer의 핵심 구성 요소는 "attention" 메커니즘입니다. Attention 메커니즘은 모델이 입력 문장의 모든 단어에 주의를 기울이고, 각 단어가 출력 문장의 각 단어를 생성하는 데 얼마나 중요한지를 결정합니다. 이렇게 하면 모델이 문장 내의 단어들 사이의 상호 작용과 관계를 더 잘 이해할 수 있습니다.
이러한 Transformer 아키텍처는 GPT(Generative Pretrained Transformer), BERT(Bidirectional Encoder Representations from Transformers) 등 많은 현대 NLP 모델의 기본 구조로 사용되며, 번역, 요약, 질문 응답 등 다양한 NLP 작업에서 뛰어난 성능을 보여주고 있습니다.
대규모 언어 모델은 기본적으로 매우 큰 규모의 변환기입니다. GPT는 Generative Pre-trained Transformer의 약자입니다.
Large Language Models (LLMs)는 자연 언어 처리 (NLP) 분야에서 대규모의 텍스트 데이터로부터 학습하여, 인간이 사용하는 언어를 이해하고 생성하는 능력을 갖게 됩니다.
LLMs는 수백만에서 수십억 개의 매개변수를 갖는 심층 학습 모델로, 다양한 종류의 문제를 해결하기 위해 이용될 수 있습니다. 이들은 문장 생성, 질문 응답, 기계 번역, 문서 요약 등 다양한 NLP 작업에서 뛰어난 성과를 보이고 있습니다.
LLMs의 예로는 OpenAI의 GPT-3 (Generative Pretrained Transformer 3), Google의 BERT (Bidirectional Encoder Representations from Transformers), T5 (Text-to-Text Transfer Transformer) 등이 있습니다. 이러한 모델들은 대부분 transformer 아키텍처를 기반으로 하며, 그 규모와 성능 때문에 "giant language models", "large-scale language models" 등으로도 불립니다.
그러나 이러한 대형 모델은 그 크기와 복잡성 때문에 학습하는 데 많은 계산 자원이 필요하며, 학습 데이터의 편향을 재현하거나 부정확한 정보를 생성하는 등의 문제도 있습니다. 이러한 이슈는 현재 활발하게 연구되고 있습니다.
LLM은 텍스트를 추가로 처리하기 전에 작은 청크로 변환합니다. 이러한 청크를 토큰이라고 합니다. 청크는 일반적으로 단일 단어이지만 항상 그런 것은 아닙니다. 때로는 한 단어를 여러 청크로 나눌 수 있습니다.
토큰(token)은 자연 언어 처리(Natural Language Processing, NLP)에서 기본적인 단위로, 텍스트를 분석하거나 처리하기 위해 텍스트를 나누는 방법을 의미합니다.
토큰화(tokenization)는 텍스트를 더 작은 부분, 즉 "토큰"으로 분할하는 과정입니다. 토큰은 보통 단어 또는 문장일 수 있으며, 이는 사용하는 모델 또는 작업에 따라 다르게 설정할 수 있습니다. 예를 들어, "I love AI"라는 문장을 토큰화하면 ["I", "love", "AI"]와 같이 각각의 단어가 토큰이 됩니다.
토큰화는 텍스트 데이터를 모델이 이해하고 처리할 수 있는 형태로 변환하는 데 필요한 첫 단계입니다. 이후 이 토큰들은 임베딩(embedding) 과정을 통해 모델이 이해할 수 있는 수치형 벡터로 변환됩니다.
토큰화는 NLP의 여러 하위 분야, 예를 들어 정보 검색, 텍스트 분류, 기계 번역 등에서 핵심적인 역할을 합니다.
임베딩(embedding)은 자연어 처리(Natural Language Processing, NLP)에서 텍스트 데이터를 컴퓨터가 이해하고 처리할 수 있는 수치형 데이터로 변환하는 방법입니다. 특히, 임베딩은 단어, 문장, 문단 등의 텍스트 단위를 고차원 공간에서의 점 또는 벡터로 표현합니다.
임베딩은 단어의 의미를 수치적으로 표현하므로, 서로 비슷한 단어들은 임베딩 공간에서 가까이 위치하게 됩니다. 이를 통해 모델은 단어 간의 유사성을 학습하고 이를 다양한 NLP 작업에 활용할 수 있습니다.
임베딩을 생성하는 방법에는 여러 가지가 있습니다. 가장 잘 알려진 방법 중 하나는 Word2Vec이며, 이외에도 GloVe(Global Vectors for Word Representation), FastText 등의 방법이 널리 사용됩니다. 또한, 최근에는 BERT, GPT와 같은 트랜스포머 기반 모델을 통해 문맥을 고려한 임베딩을 생성하는 방법도 활발히 연구되고 있습니다.
임베딩은 텍스트 데이터를 처리하고 분석하는 데 필수적인 도구로, 정보 검색, 텍스트 분류, 감성 분석, 기계 번역 등 다양한 NLP 작업에서 활용됩니다.
벡터 데이터베이스 (또는 벡터 저장소)는 데이터베이스로 간주 될 수 있지만 벡터에 대한 것입니다. 대량의 벡터를 저장하고 빠르게 액세스하는 데 최적화되어 있습니다. 텍스트에 대한 임베딩을 만든 후에는 벡터 데이터베이스에 저장하여 빠르게 쿼리하는 것이 가장 좋습니다.
벡터 데이터베이스는 고차원 벡터를 저장하고, 검색하는 데 특화된 데이터베이스입니다. 이러한 벡터들은 종종 임베딩으로부터 파생되며, 자연어 처리(Natural Language Processing, NLP), 이미지 인식, 음성 인식 등의 분야에서 널리 사용됩니다.
벡터 데이터베이스는 특히 "최근접 이웃 검색" (Nearest Neighbor Search, NNS) 작업을 수행하는 데 유용합니다. 즉, 주어진 쿼리 벡터와 가장 유사한 벡터를 데이터베이스에서 빠르게 찾는 것입니다. 이러한 작업은 코사인 유사도 또는 유클리디안 거리와 같은 메트릭을 사용하여 벡터 간의 유사성을 측정합니다.
벡터 데이터베이스의 예로는 FAISS(Facebook AI Similarity Search), Annoy(Spotify에서 개발), Elasticsearch의 벡터 검색 기능 등이 있습니다. 이러한 벡터 데이터베이스는 대규모 데이터셋에서 고차원 벡터를 효율적으로 처리하고, 실시간 검색 쿼리에 빠르게 응답할 수 있도록 설계되었습니다.
프롬프트(prompt)는 사용자에게 입력을 요청하는 메시지나 신호를 의미합니다. 보다 구체적으로, 자연어 처리(Natural Language Processing, NLP)나 대화형 시스템에서 프롬프트는 시스템이 사용자로부터 정보를 얻거나 특정 행동을 수행하도록 요청하는 문장 또는 질문입니다.
예를 들어, 대화형 AI 시스템에서 "오늘 날씨는 어떤가요?"라는 질문은 사용자로부터 날씨 정보를 입력받는 프롬프트입니다.
최근에는 GPT-3와 같은 대형 언어 모델에서 프롬프트가 모델의 출력을 가이드하는 데 중요한 역할을 하는 것으로 알려져 있습니다. 프롬프트는 이러한 모델이 생성하는 문장의 주제, 스타일, 톤 등을 결정하는 데 중요한 역할을 합니다. 따라서, 올바른 프롬프트를 제공하는 것은 이러한 모델을 효과적으로 사용하는 데 중요한 기술입니다.
프롬프트를 작성하는 방법과 프롬프트에 포함할 내용은 LLM에서 원하는 출력을 얻는 데 매우 중요합니다. 본질적으로 결정적이지 않으므로 프롬프트에 따라 매우 다른 결과를 얻을 수 있습니다.
프롬프트 엔지니어링에는 few-shot 프롬프트 및 사고 체인 프롬프트와 같은 다양한 기술이 사용됩니다.
온도는 OpenAI LLM의 매개변수입니다. 출력의 임의성을 조정합니다. 0.8과 같은 값이 높을수록 출력이 더 무작위화되고 0.2와 같은 값이 낮을수록 더 집중적이고 결정적입니다.
"Context ingestion" 또는 "in-context learning"은 언어 모델이 주어진 정보를 이해하고 그 정보를 현재의 작업이나 대화에 적용하는 능력을 의미합니다. 이는 특히 대화형 AI나 대화형 시스템에서 중요한 역할을 합니다.
예를 들어, 사용자가 "내 고양이가 아프다"라고 말하면, 모델은 "고양이"라는 개념과 "아프다"라는 상태를 이해해야 하며, 이후의 대화나 작업에서 이 정보를 사용해야 합니다. 이런 경우, "고양이"와 "아프다"라는 맥락(context)를 이해하고 적절하게 반응하는 것이 "context ingestion" 또는 "in-context learning"입니다.
이러한 능력은 모델이 정보를 연속적으로 추적하고 대화나 작업을 적절하게 진행하는 데 중요합니다. 이는 특히 시간에 따른 정보의 흐름을 추적하거나 여러 턴(turn)에 걸친 대화를 이해하는 데 필요합니다.
LLM은 방대한 양의 데이터에 대해 교육을 받았기 때문에 거의 모든 일반 주제에 대한 적절한 지식을 보유하고 있습니다. 그러나 특정 작업의 경우 LLM은 해당 특정 작업과 관련된 데이터로 훈련되지 않았기 때문에 성능이 저하될 수 있습니다.
LLM을 사용하여 회사의 내부 문서에 대한 질문에 답하는 챗봇을 만들려는 경우를 생각해 보십시오. LLM은 이러한 문서를 본 적이 없기 때문에 그 챗봇은 쓸모가 없습니다.
이 문제를 해결하는 데 사용되는 기술 중 하나는 컨텍스트 수집입니다. 그것은 우리가 묻고 싶은 것과 함께 프롬프트에 관련 컨텍스트를 추가하는 것을 의미합니다. 이 추가 컨텍스트는 자유 텍스트 또는 벡터 데이터베이스에 저장된 문서의 형태일 수 있습니다.
또한 LLM이 일반 교육 데이터의 정보를 사용하지 못하도록 질문에 답하기 위해 주어진 컨텍스트만 사용하도록 요청할 수 있습니다.
Fine-tuning은 사전 훈련된 모델을 특정 작업에 맞게 조정하는 과정을 말합니다. 이는 전이 학습(Transfer Learning)의 한 형태로, 사전 훈련된 모델의 지식을 활용하여 새로운 작업을 더 빠르고 효율적으로 학습하는 방법입니다.
Fine-tuning은 다음과 같은 단계로 진행됩니다:
사전 훈련된 모델을 로드합니다. 이 모델은 보통 대규모 데이터셋에서 미리 학습되었습니다. 예를 들어, 자연어 처리(NLP) 분야에서는 Wikipedia나 Common Crawl과 같은 대규모 텍스트 데이터셋에서 훈련된 BERT, GPT 등의 모델을 사용합니다.
사전 훈련된 모델의 일부 또는 전체 파라미터를 미세 조정합니다. 이는 새로운 작업의 학습 데이터에 맞게 모델을 업데이트하는 과정입니다. 학습률(learning rate)은 일반적으로 작게 설정되며, 이는 사전 훈련된 모델의 지식을 크게 변경하지 않으면서 새로운 작업에 맞게 미세 조정하는 데 도움이 됩니다.
미세 조정된 모델을 새로운 작업에서 평가합니다.
Fine-tuning은 새로운 작업에 대한 데이터가 적을 때 특히 유용합니다. 사전 훈련된 모델은 이미 많은 양의 데이터에서 학습했으므로, 적은 양의 데이터로도 새로운 작업을 잘 수행할 수 있습니다.
LLM을 미세 조정한다는 것은 특정 작업에 최적화하는 것을 의미합니다. 미세 조정의 목표는 LLM이 통신하는 방식을 조정하는 것이기 때문에 컨텍스트 수집과 다릅니다. 미세 조정은 일반적으로 LLM에 원하는 질문-답변 형식의 예를 제공하여 수행됩니다.
LangChain은 LLM을 사용하는 애플리케이션을 위한 오픈 소스 개발 프레임워크입니다.
LangChain은 LLM을 보다 효율적이고 프로그래밍 방식으로 사용할 수 있는 몇 가지 구성 요소를 제공합니다. LLM을 보다 효율적이거나 프로그래밍 방식으로 사용하기 위해 구성 요소 형태의 추상화를 제공합니다.
이러한 구성 요소 중 일부는 다음과 같습니다.
모델: ChatGPT 또는 기타 LLM
프롬프트: 프롬프트 템플릿 및 출력 구문 분석기
인덱스: 문서 로더 및 벡터 저장소와 같은 외부 데이터를 수집합니다.
체인: 구성 요소를 결합하여 엔드 투 엔드 사용 사례를 만듭니다. 간단한 체인의 예는 Prompt + LLM + Output Parser 일 수 있습니다
에이전트: LLM이 외부 도구를 사용하도록 합니다.
기업 홍보를 위한 확실한 방법
협회 홈페이지에 회사정보를 보강해 보세요.