생성형 AI

2024. 12. 10. 13:02LLM(Large Language Model)의 기초

1. 생성형 AI()
- 생성형 AI는 주어진 데이터를 학습하고 이를 바탕으로 새로운 콘텐츠를 만들어내는 인공지능 기술입니다. 예를 들어, 이런 AI는 사람처럼 글을 쓰거나 그림을 그릴 수 있습니다. 기본적으로 많은 데이터를 분석해 패턴을 배우고, 그 패턴을 사용해 새로운 것을 창작하는 것입니다. 그래서 질문에 대한 답변이나 창의적인 글쓰기, 이미지 생성 등 다양한 작업을 할 수 있도록 도와줍니다.
 
예를 들어,

# copilot에 입력한 텍스트
# 세상에서 제일 실력있는 AI 개발자를 상상하여 그려줬으면 좋겠어. 
# 한국인이고 잘생긴 얼굴로 수염이 있고 안경을 쓴 얼굴로 그려줘
-->
그려달라고 하게되면 사람얼굴을 만들어준다
생성된 얼굴은 사람마다 다를수가 있다

 

2. LLM과 SLM

1. LLM (Large Language Model)
- LLM은 대형 언어 모델을 의미합니다. 이 모델은 매우 큰 데이터셋을 기반으로 학습되며, 수억에서 수조 개의 파라미터를 가지고 있습니다. 주로 딥러닝 기술을 활용하며, 자연어 처리(NLP) 작업에서 뛰어난 성능을 발휘합니다. LLM은 인간의 언어를 이해하고 생성하는 데 매우 뛰어난 능력을 보이며, 예를 들어 텍스트 생성, 번역, 질문 응답, 요약 등 다양한 작업을 처리할 수 있습니다.
 예) ChatGPT, Bloom, Gemini, LLaMa, Mistral 등
 
2. SLM (Small Language Model)
SLM은 소형 언어 모델을 의미하며, LLM과 비교하여 상대적으로 작은 크기의 모델입니다. SLM은 적은 수의 파라미터를 가지고 있으며, 특정 작업에 대해 최적화된 모델입니다. 이런 모델은 대형 모델보다 계산 자원이 적게 들고, 빠른 속도와 적은 메모리를 요구하지만, 성능은 LLM에 비해 다소 제한적일 수 있습니다. 
 예) T5-Small, GPT-NeoX, ALBERT, MobileBERT 등
 

3. 파라미터

파라미터는 인공지능 모델이 학습하면서 조정하는 숫자들입니다. 쉽게 말해, 파라미터는 AI 모델의 "뇌의 연결 강도"와 같습니다. AI가 텍스트나 이미지를 이해하고 생성할 때, 파라미터는 어떤 단어나 개념이 서로 얼마나 관련이 있는지를 결정합니다. 예를 들어, "고양이"라는 단어가 나오면 "털", "동물", "야옹" 같은 단어들과 연결될 가능성을 파라미터들이 계산합니다. 이 숫자들은 학습 과정을 통해 조정되어 모델이 점점 더 똑똑해지게 만듭니다.
모델이 복잡할수록 더 많은 파라미터가 필요합니다. LLM 같은 대규모 모델은 수십억 개 이상의 파라미터를 가지고 있어 복잡한 질문에 대한 답변을 잘할 수 있습니다. 반면, SLM은 더 적은 파라미터를 가지고 있어 간단한 작업에 적합합니다

y = wx + b
여기서 x는 데이터가 수만개 쌓인다

 

4. 텍스트 생성형 GPT

 - 텍스트 생성형 GPT(Generative Pre-trained Transformer)는 대규모 데이터셋을 기반으로 훈련된 인공지능 모델로, 주어진 입력에 따라 자연스러운 텍스트를 생성할 수 있습니다. 이 모델은 사람의 언어를 이해하고 생성하는 능력을 바탕으로, 질문에 답하거나 글을 작성하고, 창의적인 작업을 수행하는 데 사용됩니다. GPT는 다양한 문맥을 처리할 수 있으며, 글의 흐름과 의미를 일관되게 유지하며, 다양한 주제에 대해 텍스트를 생성할 수 있는 능력을 지니고 있습니다.
 
4-1. 텍스트 생성형 GPT API
주소 :  https://platform.openai.com/docs/models
 
4-2. GPT-3.5 Turbo
- GPT-3.5-turbo는 한 번에 16,385개의 토큰을 기억하고 사용할 수 있으며, 최대 4,096개의 토큰을 생성할 수 있습니다. 이는 모델이 매우 긴 텍스트를 처리하거나 긴 답변을 생성할 수 있는 능력을 가지고 있다는 것을 의미합니다.
 

5. 토큰(Token)

- 토큰은 모델이 처리하는 텍스트의 작은 단위입니다. 하나의 토큰은 단어, 부분적인 단어, 또는 심지어 공백이나 구두점일 수 있습니다. 예를 들어, "나는 학교에 간다"라는 문장은 5개의 토큰(나는, 학교, 에, 간다)으로 나눠질 수 있습니다. GPT 모델은 텍스트를 처리할 때 이 토큰들을 기반으로 학습하고, 예측을 생성합니다.
 
5-1. 토큰은 과금 단위로 사용합니다.
[가격]: https://openai.com/api/pricing/
[토큰 확인] : https://platform.openai.com/tokenizer
 
5-2. 토큰화

### 5-2. 토큰화
토큰화(Tokenization)는 자연어 처리(NLP)에서 텍스트를 모델이 이해할 수 있는 작은 단위인 '토큰'으로 분리하는 과정입니다. 토큰은 대개 단어, 부분 단어, 구두점, 공백 등으로 구성될 수 있습니다. 이 과정은 언어 모델이 텍스트를 효과적으로 이해하고 처리할 수 있도록 돕습니다. 토큰화 방법은 문장을 어떻게 나누느냐에 따라 다르며, 각 방법은 모델이 텍스트를 어떻게 처리할지에 큰 영향을 미칩니다.

 
5-3. 토큰화 방법

### 5-3. 토큰화 방법
단어 단위 토큰화 (Word-level Tokenization): 문장을 단어 단위로 나눕니다.
* 예) "나는 학교에 간다" → ["나는", "학교에", "간다"]
서브워드 단위 토큰화 (Subword-level Tokenization): 단어를 더 작은 단위로 나눕니다. 주로 길고 복잡한 단어를 나누는 데 사용됩니다.
* 예)  "학교에" → ["학", "교", "에"]
문자 단위 토큰화 (Character-level Tokenization): 문장을 하나하나의 문자로 나눕니다.
* 예)  "학교" → ["학", "교"]
BPE (Byte Pair Encoding): 자주 등장하는 문자 쌍을 하나의 서브워드로 합치는 방법입니다.
* 예)  "low"와 "est"라는 단어가 있을 때, "low"와 "est"를 합쳐서 "lowest"와 같은 서브워드를 만드는 방식입니다. 자주 나오는 문자 쌍을 합쳐서 더 효율적인 토큰을 만들 수 있습니다. 이 방식은 주로 GPT와 같은 모델에서 사용됩니다.

 
6. GPT API를 이용한 간단한 실습
 6-1.. env 파일이 있어야 돌아간다 
. env 파일에는 GPT에서 만든 API KEY를 넣어서 만들어주면 된다
메모장에 만들어서 저장해 주면 된다.
동작을 하려면. env 파일을 붙여준다

예시)
 

### 6-1. .env
.env 파일은 환경 변수(Environment Variables) 를 저장하는 파일로, 주로 애플리케이션의 설정 정보나 비밀 키(secret key), 데이터베이스 비밀번호 등의 중요한 정보를 코드와 분리하여 관리하기 위해 사용됩니다. 이렇게 중요한 정보를 코드 안에 하드코딩하는 대신 .env 파일에 저장하고, 이를 코드에서 읽어오는 방식으로 보안과 유연성을 높일 수 있습니다.

 
6-1.

 
#env 설치
!pip install python-dotenv

 
6-2.

##각종 import 할 값을 설치해주면 된다 
import os
from openai import OpenAI
from dotenv import load_dotenv

 
6-3.

#설치가 완료되면 print가 잘 실행된다.
load_dotenv()

 
6-4.

#openai도 업그레이드 해준다
!pip install --upgrade openai

 
6-5.

import os
from openai import OpenAI
from dotenv import load_dotenv
#에러 발생시 런타임에서 세션 다시 시작 및 모두 실행 
client = OpenAI(
    api_key = os.getenv('API_KEY')
)

 
6-6.

response = client.chat.completions.create(
    model = 'gpt-3.5-turbo-0125',
    messages=[{"role":"user", "content":"안녕하세요? 오늘 어때요?"}]
)

 
6-7.

response

 
-->

더보기
ChatCompletion(id='chatcmpl-Acl9DecMlwZkM6atsHL3UPwycoy9X', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='안녕하세요! 제게 물어봐 주셔서 감사합니다. 오늘은 저도 잘 지내고 있어요. 여러분은 어떠세요? 혹시 무슨 일 있으신가요? 이야기해 주시면 같이 이야기 나누면서 즐거운 시간 보낼 수 있을 것 같아요. 😊', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None))], created=1733801063, model='gpt-3.5-turbo-0125', object='chat.completion', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=103, prompt_tokens=22, total_tokens=125, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=0, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=0), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cached_tokens=0)))

6-8.

response.choices[0].message.content
-->
안녕하세요! 제게 물어봐 주셔서 감사합니다. 오늘은 저도 잘 지내고 있어요. 여러분은 어떠세요? 혹시 무슨 일 있으신가요? 이야기해 주시면 같이 이야기 나누면서 즐거운 시간 보낼 수 있을 것 같아요. 😊

 
 
 

728x90
LIST

'LLM(Large Language Model)의 기초' 카테고리의 다른 글

FAST API  (8) 2024.12.13
Gradio  (3) 2024.12.11
프롬프트 엔지니어링  (8) 2024.12.11
몽고 DB 와 파이썬  (6) 2024.12.10
프롬프트 엔지니어링  (12) 2024.12.10