사용자 측에 필요한것: 프론트엔드 Vue
모델을 서비스에 띄우는것: 백엔드 Fast API
비즈니스 로직이 필요할 때: Java SpringBoot
소프트웨어 개발 방식의 진화
AI 소프트웨어는 모델이다.
전통적 개발은 함수이다.
전통적 개발 AI 소프트웨어 서비스 개발
- 하지만 전통적 개발에는 한계가 있음.
- 기존에 사람이 직접 모든 요구사항을 정의(함수로) 했으나, 컴퓨터한테 사람..같이 일을 시키려면? 머신러닝 ?_? 인공신경망 사람의 뇌를 흉내낸다. 뉴런에서 CPU 메모리 디스크와 같은 동작이 가능? 알파고?
인간의 시각을 흉내낸것: CNN
- 합성곱 방식으로 사람의 시각을 흉내냄
인간의 언어를 흉내낸것: LLM
사람의 시각을 흉내낸것: RNN
- 강사님 꿀팁: 자율주행에 필요한 시각 데이터는 아직 많지 않고, 인간이 쌓아온 텍스트 데이터는 많음
ML → DL → LLM
- 데이터를 기반으로 컴퓨터에게 업무 지시를 한다. (ML/DL) DL = 알파고
- 인간 언어를 이용해서 컴퓨터와 의사 소통한다. (LLM) = 지피티
- 기계가 데이터 기반으로 동작하는 모델을 사용한다.
좋은 데이터가 좋은 모델을 만든다!
- 프롬프트가 사용자와 AI 연결
증강 지능 형태로 활용
AI를 이용한 인간의 경험과 지식을 확장
어떻게 AI를 활용할 것인가?
- 잘 알려진 LLM 서비스 활용하기 (챗지피티)
- 개인화 AI 애플리케이션 만들어보기
- 멀티 에이전트 등으로 업무 지능화하기
- ML/DL 과 LLM 을 결합한 지능형 서비스 출시
- LLM만으로는 충분하지 않음. LLM의 동작 방식은 제네럴인데, 훈련시키지 않고는 부족함.
정형 데이터와 비정형 데이터
정형 데이터는 행, 열이 있는 테이블로 모델링 할 수 있다. |
비정형 데이터는 미리 정해진 규칙을 따르지 않는다. |
파이썬은 버전관리가 이슈..(경험담)
왜 파이썬을 쓸까 그러면?
- 전세계적으로 오픈소스가 많은데 전부터 파이썬으로 구현된게 많아서 그냥 그렇게 됏다..
- 파이썬만 있으면 무료로 딥러닝 돌리기 가능해서 파이썬을 쓰는것같다
- R도 쓰긴 하는데 R은 파이썬보다 라이브러리가 적음
LLM이란?
LLM 이전 모델
0. 워드 임베딩
자연어를 모델에 입력하기 위한 임베딩이 연구됐다.
- 워드 임베딩이란?: 단어의 의미를 벡터로 변환하는 것이다.
1. Transformer Model (LLM)의 조상격
2017년도에 발표된 자연어 처리의 가장 최신 모델이자, RNN의 가장 큰 단점인 병렬 처리 부족을 해소한 모델이다.
트랜스포머가 구글의 BERT(인코더 보강)와 OpenAI GPT(디코더 보강)에 영향을 끼쳤다.
Attention mechanism
어텐션이란?
- 디코더에서 출력 단어를 예측하는 매 시점마다, 인코더에서의 전체 입력 문장을 다시 한 번 참고한다. 전체 입력 문장을 전부 다 동일한 비율로 참고하는 것이 아니라, 해당 시점에서 예측해야할 단어와 연관이 있는 입력 단어 부분을 조금 더 집중(어텐션) 해서 보게 된다.
- Self - Attention은 문장의 모든 단어들에게 동시에 적용된다.
LLM 활용하기
Homo Prompt = “질문하는 사람”
- 인공지능과 효과적으로 소통할 수 있는 능력을 갖춘 인간을 의미한다.
- 생성형 AI 기술이 확장되면서 새롭게 등장한 용어
- 생성 AI 시대이므로 효과적인 질문이 핵심이다.
Perplexity (혼란도)
모델이 다음 단어를 얼마나 혼란 없이 예측할 수 있는지를 나타내는 값
- 낮을수록 모델이 예측을 잘하는 것이고, 높을 수록 못하는 것임.
(1) 높은 Perplexity (PP = 1000)
- 모델이 주어진 문장에서 다음 단어를 맞히는 확률이 낮음 → "혼란스러움"
- 예를 들어, "나는 오늘 저녁에 [??]"에서 모델이 "밥을 먹는다"와 "하늘을 난다"를 비슷한 확률로 예측하면, Perplexity가 높아짐.
(2) 낮은 Perplexity (PP = 5)
- 모델이 다음 단어를 비교적 정확하게 예측할 수 있음.
- 예를 들어, "나는 오늘 저녁에" 다음에 "밥을 먹는다"가 높은 확률로 예측되면, Perplexity가 낮아짐.
Hallcination(환각)
실제로 존재하지 않는 정보나 잘못된 정보를 사실인 것처럼 생성하는 현상을 환각이라고 한다.
LLM이 디코딩(답변 생성) 에 강점이 있어서 자기가 몰라도 거짓말을 할 수 있다는 것이다.
Hallucination이 발생하는 이유
확률적 디코딩 방식
- LLM은 인간처럼 정보를 "이해"하거나 "논리적으로 추론"하는 것이 아니라, 기존 데이터를 학습하여 가장 가능성 높은 단어를 예측하는 방식으로 동작한다.
- 즉, 문맥상 자연스러워 보이는 답변을 생성할 뿐, 그 답변이 사실인지 아닌지 판단하지 못함.
- 예를 들어, GPT가 다음과 같은 질문을 받았다고 가정합시다.Q: "2023년 노벨 물리학상 수상자는 누구인가?"
- 만약 학습 데이터에 2023년 노벨상 정보가 없다면, GPT는 "아는 척"하면서 과거 데이터를 참고하여 가짜 정보를 만들어낼 가능성이 크다.
RAG 검색 증강 생성
Hallucination 을 보완하기 위해서 추가하는 것.
대형언어 모델은 현재 상황에 대한 최신 정보를 얻기를 거부하지만 항상 절대적인 자신감을 가지고 모든 질문에 답변하는 열정적인 신입 사원이 될 수 있다! -AWS-
이를 방지하기 위해 기존의 언어 모델 + 검색 기능을 추가해 더 정확한 답변을 생성하는 기술이다.
LLM에게 RAG를 제공해 항상 최신 정보와 ㅍ관련성을 유지한다. 이러한 정보들을 Vector DB에 저장해서 LLM이 이를 조회해 답변을 생성한다.
Vector DB
관련 정보 검색은 사용자 쿼리를 벡터 표현으로 변환하고 벡터 데이터베이스와 매칭된다. 예를 들어서, 조직의 인사 관련 질문에 답변할 수 있는 스마트 챗봇을 생각할 수 있다. 직원이 연차 휴가가 얼마나 남았냐고 물어보면 시스템은 개별 직원의 과거 휴가 기록과 함께 연차 휴가 정책 문서를 검색한다. 이러한 특정 문서는 직원이 입력한 내용과 매우 관련이 있기에 반환된다.
관련성은 수학적 벡터 계산 및 표현을 사용해 계산되고 설정된다.
- 벡터 DB는 Mysql 이나 NoSql 같이 사람이 쓰는 것이 아니라 LLM 같은 모델이 쓰는 것임!!!
- 쪼갠것을 인코딩해서 넣어둘 수 있는 벡터 디비
Temparture(자유도)
0일 수록 정확한 답변을 생성함.
높을수록 좀 더 자유롭고 넓은 답변을 생성한다.
Seed
LLM은 특성상 동일한 input prompt가 들어와도 결과가 항상 다르게 출력되는데, Seed 파라미터는 이를 조절하기 위해 만들어졌다.
# 프롬프트 준비
messages = [
{'role':'system', 'content':'당신은 건강한 식단과 식이의 전문가입니다.'},
{'role':'user', 'content':'''건강한 아침 식사의 조합 예시를 5개 추천해 주세요.'''}
]
response = client.chat.completions.create(
model = "gpt-4o-mini",
messages = messages,
temperature = 0,
max_tokens = 500,
seed= 8291
)
print(response.choices[0].message.content)
위 코드를 두번 실행하게 되면 seed값을 줬으므로 같은 답변인데도 조금 달라진다.
다양한 시스템 메세지는 출력의 형식을 크게 변화시킨다.
유저 메세지가 아닌, 시스템 메세지에 넣을 경우 더 효과적이다.
response = client.chat.completions.create(
model = "gpt-4o-mini",
messages = messages,
temperature = 0.5
)
response.choices[0].message.content
지피티의 최신 버전은 구조화된 출력을 제공한다.
from pydantic import BaseModel
class DrugDesc(BaseModel):
성분명: str
증상: list[str]
주의사항: list[str]
class DrugInfo(BaseModel):
약: list[DrugDesc]
completion = client.beta.chat.completions.parse(
model = "gpt-4o-2024-08-06",
messages = [
{'role':'system', 'content':'다음 데이터를 분석하세요. 새로운 내용을 추가하지 마세요.'},
{"role": "user", "content": """아세트아미노펜은 해열진통제이다.
발열 및 두통, 신경통, 근육통, 월경통, 염좌통 등을 가라앉히는 데 사용된다.
그 외에도 생리통 및 치통, 관절통, 류마티스성 통증 등에도 사용 가능하다.
아세트아미노펜 단일 성분으로 이뤄진 약 외에 감기약과 같은 복합제에도 함유되어 있는
경우가 많으므로 중복 복용하지 않도록 주의가 필요하다. """},
{"role":'user', 'content':'''미다졸람은 벤조디아제핀 계열에 속하는 약물이다.
뇌에서 억제성 신경전달물질의 작용을 강화시켜 진정효과를 나타내는 약물이다.
효과가 빠르게 나타나고 짧은 시간 동안 효과가 지속된다.
내시경검사나 수술 전에 진정 목적으로 사용된다.
졸음이나 주의력 저하 등의 부작용을 유발할 수 있으므로
투여 후 자동차 운전이나 위험한 기계 조작을 하지 않도록 한다.'''}],
response_format= DrugInfo,
)
druginfo = completion.choices[0].message.parsed #구조화된 출력
#druginfo = completion.choices[0].message.content #json 출력
druginfo
LLM은 맥락에 따라 다음 단어를 계속 출력한다. Attention에 따라…
맥락을 가지고 순차적인 형태로 질문을 해야 함.
답변에 맞춰서 이어지는 질문을 해주는게 유리하다.
임베딩
고차원의 데이터를 저차원의 연속적인 벡터 공간으로 변환하는 방법이다.
쉽게 말해 단어, 문장, 이미지, 사용자 데이터 등 다양한 정보를 숫자로 변환하는 과정이다.
→ "고양이" =
[0.8, 0.1, 0.3]
→ "개" =
[0.7, 0.2, 0.4]
이런 식으로 수치형 벡터로 변환해야 한다.
임베딩된 벡터는 유사도를 측정해 연관성을 찾을 수 있다.
- 코사인 유사도
- 유클리드 거리
sLLM(Small Language Model)
대형언어모델보다 작고 경량화된 언어 모델이다.
1) 가벼운 환경에서도 실행 가능
- 대형 모델(LLM)은 고성능 서버와 GPU가 필요하지만,
- sLLM은 로컬 PC, 모바일, IoT 기기, 엣지 디바이스에서도 동작 가능함.
- 예: 스마트폰 내장 AI, 자동차 음성 비서, 임베디드 AI 시스템
2) 특정 도메인 최적화 가능
- 특정 업무에 맞춰 학습된 sLLM은 LLM보다 더 높은 정확도를 제공할 수 있음.
- 예: 병원 의료 기록 분석, 법률 문서 요약, 기업 내부 문서 검색
3) 프라이버시 및 보안 강화
- 로컬 환경에서 실행 가능하여 클라우드에 데이터를 전송할 필요 없음.
- 기업 내부에서 자체적으로 운영할 때 보안성이 높음.
- 예: 기업 내부 챗봇, 고객 상담 AI
4) 실시간 응답 속도 향상
- 경량화된 모델이므로 응답 속도가 빠름.
- LLM처럼 복잡한 연산이 필요하지 않아 지연 없이 반응 가능.
- 예: 스마트 비서, 실시간 음성 번역
ex) Siri(애플), Gemma, LLama
랭체인
어떤 말을 구조화해서 잘라야 되는데 이것을 저장해서 사용하기 위한 라이브러리들을 불러오는 것이다.
랭체인은 LLM을 활용한 애플리케이션 개발에 특화된 오픈소스 프레임워크이다. 랭체인은 기존 언어 모델의 한계를 극복하고, AI 기술을 활용한 새로운 애플리케이션을 구축할 수 있는 중요한 도구이다.
OpenAI의 GPT-4나 Hugging Face 모델과 같은 대규모 언어 모델을 효과적으로 통합하는데 중점을 둔다. 기존의 언어 모델이 주로 텍스트 생성에 중점을 둔 반면, 랭체인은 다양한 외부 데이터 소스와 통합하여 보다 복잡하고 유용한 애플리케이션을 만들 수 있도록 설계된다. LLM의 잠재력을 극대화하기 위해 데이터베이스, 파일 시스템 등과 같은 다양한 데이터 소스와의 통합을 지원하여, 실시간 데이터와 상호작용하는 애플리케이션을 구축할 수 있다.
import os
os.environ['GROQ_API_KEY'] = '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'
chat = ChatGroq(
temperature=0.1,
model="llama-3.2-11b-vision-preview",
)
url = "<https://wow.groq.com/why-groq/>"
loader = WebBaseLoader(url)
docs = loader.load()
question = "Groq 엔진의 LLM 추론 속도가 빠른 이유는 무엇인가요? 한국어로 답변하세요."
system = "Answer the question from given contexts. Answer in Korean."
human = """
Context: {context}
---
Question: {question}
"""
prompt = ChatPromptTemplate.from_messages([("system", system), ("human", human)])
chain = prompt | chat | StrOutputParser()
start = time.time()
result = chain.invoke(
{"context":docs[0].page_content,
'question':question})
print(result)
end = time.time()
elapsed_time = end - start
print(f"Elapsed Time: {elapsed_time} seconds")
.invoke 하나로 체인(차례대로) 실행이 됨.
랭체인의 핵심 개념
랭체인은 여러 기능을 컴포넌트 형태로 제공한다.
이 모듈들을 조합해 강력한 AI 애플리케이션을 만든다.
- LLM 대형언어모델 인터페이스
- 프롬프트 관리
- 질문을 효과적으로 전달하도록 템플릿을 제공한다.
- 체인(여러작업을 연결)
- LLM 뿐만 아니라 여러 단계를 거쳐 복잡한 작업을 수행한다.
- 사용자의 질문을 받아
- 데이터베이스에서 정보를 검색하고
- 답변을 생성해 반환
- 메모리
- 대화 기록을 저장한다.
- AI가 대화 맥락을 기억하도록 지원
- 에이전트(Agents) - 동적인 AI
- AI가 스스로 어떤 도구를 사용할지 결정해 실행한다.
- 검색,계산, API호출 등을 자동으로 수행 가능
'SKALA' 카테고리의 다른 글
[SKALA] 3일차: LLM 모델의 심화 이해 및 활용 (0) | 2025.02.05 |
---|