LLM(Large Language Model)
LLM 즉, 대규모 언어 모델은 사람들끼리 대화하듯 자연스러운 답변을 AI가 생성할 수 있도록 방대한 양의 텍스트 데이터에 대해 훈련된 AI 모델이다. 방대한 양의 데이터를 제대로 학습하기 위해 모델의 크기가 커질 수밖에 없으며 대략적으로 LLM 모델의 파라미터 개수는 100억 개를 넘는다.
일반적인 AI 모델의 파라미터 개수가 수백만~수억 개인 것에 비하면 상당히 많은 것을 알 수 있다.
파라미터 갯수가 중요한 이유는 파라미터 갯수가 많을수록 AI 모델을 학습하는데 오랜 시간이 소요되기 때문이다. 당연히 모델을 최적화하는 것도 오랜 시간이 걸리며 고사양의 GPU가 요구된다. 일반인들이 쉽게 LLM 모델을 학습하지 못하는 이유가 그것 때문이다.
최근 가장 주목받는 AI 서비스인 Chat GPT가 대표적으로 LLM모델을 활용한 서비스이다. Chat GPT를 이용해 보신 분들은 아시겠지만 LLM을 이용하면 똑똑한 개인비서가 있는 것과 다름없다. LLM을 이용해 이메일 초안을 작성하고 코드를 작성하고 번역, 요약, 질의응답 등에 활용될 수 있기 때문이다.
LLM 응용 예시 (feat. Chat-gpt)
LLM을 활용한 서비스 중 chat gpt로 LLM을 어디까지 활용할 수 있을지 알아보자.
1. 코딩
LLM에게 원하는 컴퓨터 언어로 특정 알고리즘을 구현하도록 요구할 수 있다. 특히 코드는 바로 복사가 가능한 형태로 제공되며 주석처리까지 깔끔하게 제공된다.
2. 질의응답
네이버나 구글과 같은 검색엔진에 검색을 하듯이 질문을 하고 답변을 얻을 수 있다. 그러나 방대한 데이터를 이용해 학습된 모델 이기 때문에 답변의 출처에 대해 알기가 어렵고, 잘못된 답변을 할때도 종종 존재합니다. 또한 언어별로 답변의 퀄리티가 다르다는 단점도 존재합니다.
3. 작문
원하는 주제에 대한 글을 작성하는데 사용할 수 있다. 소설을 쓰거나 특정 음식의 레시피등 다양한 형태의 글을 작성할 수 있으며 해당 정보를 그대로 사용하기보다는 초안 정도로 활용하는게 적절해 보인다. 하지만 글의 후반부에 설명드릴 Langchain을 활용한다면 원하는 형태로 글을 작성하도록 요청할 수 있을 것이다.
4. 외국어 공부(feat.번역)
LLM은 일반적으로 다국어를 이용해 학습된다. 그렇기 때문에 번역 같은 task에도 활용될 수 있다. 하나의 모델로 다국어를 다룰 수 있다는 특징을 이용해 외국어 공부에 활용할 수 있다. 아래는 영어를 공부하는 방법에 대한 예시이다. 해당 내용은 링크의 내용을 요약한 것이다.
A) 쓰기-Writing
특정 문법/시제를 사용한 예문 생성 요청
Write a short conversation in [tense]
짧은 대화를 [시제]로 작성해줘
Rewrite this text in the passive voice [add text]
이 텍스트를 수동태로 바꿔서 작성해줘
Write a short story using as many gerunds as possible
가능한 많은 동명사를 사용해서 짧은 이야기를 작성해줘
B) 읽기-Reading
- 수능 문제처럼 글을 해석하고 5지선다로 문제를 출제 요청
- 글의 주제 파악 및 요약
LLM의 한계
1. 출력 문장 길이의 한계 존재
결국 AI는 출력 길이의 최대치가 존재할 수밖에 없다. 출력 길이의 제한을 두지 않으면 중간에 잘못된 문장이 생성되거나 학습 cost가 증가하는 등의 문제가 발생되기 때문이다.
그리고 문장이 생성되는 시간도 크게 증가하는 것이 필연적이다. 짧은 대화라면 문장의 길이가 크지 않아도 되지만, 작문과 같은 긴 길이의 문장을 요구했을 때는 큰 취약점으로 작용할 것이다.
2. 정보의 한계
2022 년까지의 데이터로 학습된 모델은 2023년에 생성된 새로운 정보 (새로운 대통령 즉위)에 대해서는 알 방법이 없다. LLM 모델이 검색 엔진으로써 제 기능을 하기 어려운 이유가 이것이라 생각한다.
물론 주기적인 업데이트가 가능하겠지만 한번 학습하는데 오랜 시간이 소요되는 만큼 실시간처럼 정보를 얻기가 쉽지 않을 것이다.
3. 출처의 신뢰성
위에서 언급했듯이 얻는 정보가 정답인지 아닌지 검증이 되지 않았다. 코드를 생성해 주지만 해당 코드가 작동되지 않을 수 독 있는 것이고 질문을 했을 때 해당 내용을 신뢰할 수 있는 장치가 존재하지 않는다.
4. 느린 답변 속도
입력 문장을 입력하고 결과를 얻기까지 꽤 많은 시간이 소요된다. 물론 해당 모델을 구동하는 환경에 따라 다르겠지만, 개인이 보유한 GPU 자원만 가지고 원활한 활용은 어렵다. 그렇기 때문에 부분 유료화에 대한 리스크를 반듯이 안고 있을 수밖에 없다.
LangChain
LangChain은 LLM(Large Language Model)을 이용해 엔드투엔드 애플리케이션을 구축할 수 있도록 설계된 강력한 프레임워크이다.
LangChain은 LLM을 감싸 그 위에서 다양한 모듈을 활용하여 손쉽게 복잡한 애플리케이션을 만 들 수 있다. 특히 LLM과 지식(Knoewldege)을 결합할 수 있도록 하여, 애플리케이션을 만들 때 드는 재학습 비용을 절약해, LLM의 단점인 고립성을 낮출 수 있도록 도와준다.
LangChain의 주요 기능
1. Models
LLM, chat models, Text Embedding Models 총 3종류의 다양한 모델을 다룬다. 해당 모델을 활용해서 input에 대한 output을 얻을 수 있다.
모델 정의
text to text Interface
message to message Interface
2. Prompts
모델에 대한 입력인 prompt를 관리한다. language model을 활용할 때 입력 문장을 구성해 few-shot learning을 하는 경우가 많다. 매번 해당 부분을 구성하는 건 쉽지 않은데 langchain을 이용하면 해당 부분을 손쉽게 구성할 수 있도록 도와준다.
Prompt Template
from langchain import PromptTemplate
# 입력 변수가 없는 프롬프트 예제
no_input_prompt = PromptTemplate(input_variables=[], template="Tell me a joke.")
no_input_prompt.format()
# -> "Tell me a joke."
# 하나의 입력 변수가 있는 예제 프롬프트
one_input_prompt = PromptTemplate(input_variables=["adjective"], template="Tell me a {adjective} joke.")
one_input_prompt.format(adjective="funny")
# -> "Tell me a funny joke."
# 여러 입력 변수가 있는 프롬프트 예제
multiple_input_prompt = PromptTemplate(
input_variables=["adjective", "content"],
template="Tell me a {adjective} joke about {content}."
)
multiple_input_prompt.format(adjective="funny", content="chickens")
# -> "Tell me a funny joke about chickens."
3. Chains
Models에서 지원하는 모델과 Prompts의 결합체들로 구성된다. 이름 그대로 언어 모델과 출력 prompt를 chain(결합) 한다.
LLMChain : 가장 간단한 형태의 Chain
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
from langchain.chains import LLMChain
llm = OpenAI(temperature=0.9)
# llm chain을 만들기 전 prompt 선언
prompt = PromptTemplate(
input_variables=["product"],
template="What is a good name for a company that makes {product}?"
)
# 사용자의 입력을 받아 프롬프트 형식을 지정하고, chain을 정의해준다.
chain = LLMChain(llm=llm, prompt=prompt)
# 입력 변수만 입력해 체인 실행
print(chain.run("colorful socks"))
# 출력 값
Socktopia Colourful Creations.
4. Memory
Chain과 Agent의 대화 내용을 저장하는데 활용된다. Chain과 Agent는 기본적으로 대화 내용(세션)을 저장하지 않는다.
간단하게는 과거 채팅 히스토리를 기억할 수 도 있고, 더 복잡한 정보를 검색할 수도 있다.
ChatMessageHistory
ChatMessageHisotry 클래스는 Human, AI 메시지를 저장한 다음 모두 가져올 수 있다. agent에서 파라미터로 입력해 사용가능하다.
from langchain.memory import ChatMessageHistory
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI()
history = ChatMessageHistory()
history.add_ai_message("hi!")
history.add_user_message("what is the capital of france?")
history.messages
# 출력값
[HumanMessage(content='hi!', additional_kwargs={}),
AIMessage(content='whats up?', additional_kwargs={})]
5. Agents
유저 인풋에 따라 적절한 Chain을 동적으로 호출한다. 즉, agent가 input을 이해하고 판단해 적절한 Chain을 이용하도록 매칭(호출) 하는 것이다.
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.llms import OpenAI
# 먼저, 에이전트를 제어하는 데 사용할 언어 모델을 로드합니다.
llm = OpenAI(temperature=0)
# 다음으로, 사용할 일부 툴을 로드합니다. `llm-math` 도구는 LLM을 사용하므로 이를 전달해야합니다.
tools = load_tools(["serpapi", "llm-math"], llm=llm)
# 마지막으로, 우리가 사용하려는 에이전트 유형과 함께 도구, 언어 모델 및 에이전트를 초기화합니다.
agent = initialize_agent(
tools,
llm,
agent="conversational-react-description",
verbose=True,
memory=memory)
# run 메서드로 실행
agent.run("What is Tesla's market capitalization as of March 3rd 2023, how many times bigger is this than Ford's market cap on the same day?")
결론
LLM은 현재도 강력한 성능을 보여주고 있지만 앞으로 경량화나 출처의 투명성등 해결해야 할 문제가 여러 가지 존재한다. 하지만 시간이 지남에 따라 문제가 하나씩 해결된다면 정말 개인이 큰 비용을 들이지 않고도 아이언맨에 나오는 자비스 같은 비서를 다룰 수 있게 될 것이다.
또한 LangChain처럼 LLM모델을 더 똑똑하게 활용할 수 있는 방법들이 계속해서 생겨 날 수 있으며, 멀지 않은 미래에 AI가 많은 일을 대체할 수 있지 않을까 생각한다.
reference
- https://www.chatgpters.org/c/aitalk/chat-gpt-w-r
- https://chat.openai.com/
- https://revf.tistory.com/280
- https://python.langchain.com/en/latest/index.html
'딥러닝 > LLM' 카테고리의 다른 글
Supervised Fine-tuning: customizing LLMs (0) | 2024.08.06 |
---|---|
Gemma 2 (9B & 27B) Evaluation vs. Open/Closed-Source LLMs (0) | 2024.08.01 |
Pretraining LLMs (0) | 2024.07.31 |
데이콘 - 도배 하자 질의 응답 처리 후기 (0) | 2024.05.05 |
Kaggle - LLM Science Exam 후기 (1) | 2023.10.23 |