본문 바로가기
데이터&AI/langchain

[langchain공부]gpt와 함께하는 few shot learning ! (feat. python)

by 일등박사 2024. 2. 24.

Few-Shot Learning 이란!?

Few-Shot Learning은 적은 양의 데이터로도 새로운 작업을 학습하도록 인공지능 모델을 훈련하는 기법

반적인 머신러닝 모델은 방대한 양의 데이터를 필요로 하지만,

Few-Shot Learning은 새로운 개념이나 카테고리를 빠르게 학습하도록 모델을 설계하여 데이터 부족 문제를 해결

 

Few-Shot Learning의 주요 특징:

  • 적은 양의 학습 데이터: 새로운 작업을 학습하기 위해 필요한 데이터가 매우 적음
  • 빠른 학습 속도: 새로운 개념을 빠르게 이해하고 적용할 수 있습니다.
  • 일반화 능력: 학습된 개념을 새로운 상황에 적용할 수 있습니다.

Few-Shot Learning의 활용 분야:

  • 자연어 처리: 새로운 단어나 문장의 의미를 학습
  • 컴퓨터 비전: 새로운 물체나 장면을 인식
  • 로봇 공학: 새로운 작업을 수행

Few-Shot Learning 방법:

  • 사전 훈련: 모델은 기존에 학습된 지식을 바탕으로 새로운 작업을 빠르게 학습합니다.
  • 메타 학습: 모델은 학습 과정 자체를 학습하여 새로운 작업에 효과적으로 적응합니다.
  • 모델 기반 학습: 모델은 학습된 모델을 기반으로 새로운 작업을 학습합니다.

Few-Shot Learning 예시!!!!! 일등박사어 공부하기!!

  • 일등박사어가 있습니다!!!
  • 일등박사어는 단순합니다.
  • 누군가 "일등" 이라고 인사하면 "박사" 라고 대답하는것입니다!!
  • 여러분께 묻겠습니다!! 일등!?

Few-Shot Learning 실습!? langchain

1. 관련 패키지를 임포트합니다! 오늘의 핵심 패키지는 FewShotPromptTemplate 입니다

 

from langchain.prompts import PromptTemplate, ChatPromptTemplate
from langchain_openai import OpenAI

from langchain.chat_models import ChatOpenAI

from langchain.prompts import PromptTemplate
from langchain.prompts import ChatPromptTemplate
from langchain.prompts import HumanMessagePromptTemplate
from langchain.prompts import AIMessagePromptTemplate
from langchain.prompts import SystemMessagePromptTemplate

from langchain.schema import AIMessage
from langchain.schema import HumanMessage
from langchain.schema import SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate

chatgpt = ChatOpenAI(temperature=0, openai_api_key  = '{나의키}' ,model='gpt-3.5-turbo')

 

2. few shot learning에 앞서 기존 chatgpt에 어떻게 답하는지 물어봅니다!

 

chatgpt = ChatOpenAI(temperature=0, openai_api_key  = openai_key,model='gpt-3.5-turbo')

normal_prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 친절한 비서야."),
    ("user", "{question}")
])

chain_normal = normal_prompt | chatgpt | parser

my_question = """
일등
"""

print(normal_prompt.format(question=my_question))


chain_normal.invoke({"question": my_question})

 

 

 

위와 같이 일등에 대한 일반론적인 답변을합니다!!

 

 

3. 랭체인 기반으로 few shot learning을 진행해 봅니다!!

examples = [
    {'question': """
     [일등박사어의 정의]
     일등박사어는 일등 이라고 인사하면 박사 라고 대답해.
     
     일등"""
    , 'answer':"박사"},
     {'question': """
        일등"""
    , 'answer':"박사"},   
    
]

example_prompt = PromptTemplate(input_variables=['question','answer'],template="Question:{question}\n{answer}")
print(example_prompt.format(**examples[0]))

  
prompt = FewShotPromptTemplate(
    examples=examples, 
    example_prompt=example_prompt,
    suffix="question : {question}",
    input_variables=["question"],
)

chain_fewshot = prompt | chatgpt | parser
chain_fewshot.invoke({"question": my_question})

짠!! gpt가 바라는대로 잘 대답합니다~^^

 

댓글