본문 바로가기
Natural Language Processing

[SeSac] LangChain 4 - 모델 파라미터

by 자몽먹은토끼 2024. 7. 14.
728x90
반응형
주요 파라미터
  1. Temperature : 생성하는 텍스트의 다양성을 조정. 반복되는 생성과정에서 값이 작으면 일관된 출력을 하고, 값이 크면 다양한 출력을 한다. 
  2. Max Tokens : 생성하는 최대 토큰 수. 생성할 텍스트의 길이를 제한한다.
  3. Top P(Probability) : 생성과정에서 특정 확률분포 내 상위 P% 토큰만을 고려 (temperature와 유사)
  4. Frequency Penalty : 빈도 패널티. 값이 클수록 이미 등장한 단어나 구절이 다시 등장할 확률을 감소시킴(temp와 유사)
  5. Presence Penalty : 존재 패널티. 텍스트 내에서 단어의 존재 유무에 따라 그 단어의 선택 확률을 조정(temp와 유사)
  6. Stop Sequences : 정지 시퀀스. 특정 단어나 구절이 등장할 경우, 생성을 멈추도록 함

> LLM의 출력을 조정하고 최적화하는데 사용

LLM 모델에 파라미터 직접 전달

 

- 모델 생성 시점

from langchain_openai import ChatOpenAI

# 모델 파라미터 설정
params = {
    "temperature": 0.7,         # 생성된 텍스트의 다양성 조정
    "max_tokens": 100,          # 생성할 최대 토큰 수
}

kwargs = {
    "frequency_penalty": 0.5,   # 이미 등장한 단어의 재등장 확률
    "presence_penalty": 0.5,    # 새로운 단어의 도입을 장려
    "stop": ["\n"]              # 정지 시퀀스 설정

}

# 모델 인스턴스를 생성할 때 설정
model = ChatOpenAI(model="gpt-3.5-turbo-0125", **params, model_kwargs = kwargs)


# 모델 호출
question = "태양계에서 가장 큰 행성은 무엇인가요?"
response = model.invoke(input=question)

# 전체 응답 출력
print(response)
# content='태양계에서 가장 큰 행성은 목성입니다. 목성은 지름이 약 139,822km로 태양계에서 가장 큰 행성이며, 대기 중에 수소와 헬륨 등의 기체가 풍부하게 존재하는 고대의 거대한 가스 행성입니다.'

> 모델을 생성할 때, 파라미터를 직접적으로 지정하여 전달

 

 

- 모델 호출 시점

# 모델 파라미터 설정
params = {
    "temperature": 0.7,         # 생성된 텍스트의 다양성 조정
    "max_tokens": 10,          # 생성할 최대 토큰 수
}

# 모델 인스턴스를 호출할 때 전달
response = model.invoke(input=question, **params)

# 문자열 출력
print(response.content)
# 태양계에서 가장 큰

> 모델을 호출할 때, 파라미터를 전달

 

 

 

모델에 추가적인 파라미터를 전달

 

만약 모델에 지정했던 파라미터를 변경하고자 할 때는 어떻게 해야 할까?

bind 메서드를 사용한다.

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "이 시스템은 천문학 질문에 답변할 수 있습니다."),
    ("user", "{user_input}"),
])

model = ChatOpenAI(model="gpt-3.5-turbo-0125", max_tokens=100)

messages = prompt.format_messages(user_input="태양계에서 가장 큰 행성은 무엇인가요?")

before_answer = model.invoke(messages)

# binding 이전 출력
print(before_answer)
# content='가장 큰 행성은 목성입니다. 목성은 태양계에서 가장 크고 질량이 가장 큰 행성으로, 지름은 약 14만 2000km에 달합니다.'




# 모델 호출 시 추가적인 인수를 전달하기 위해 bind 메서드 사용 (응답의 최대 길이를 10 토큰으로 제한)
chain = prompt | model.bind(max_tokens=10)

after_answer = chain.invoke({"user_input": "태양계에서 가장 큰 행성은 무엇인가요?"})

# binding 이후 출력
print(after_answer)
# content='태양계에서 가장 큰'

> bind 메서드를 사용하니 max_tokens의 값이 바뀌어 출력된 것을 확인할 수 있다.

> 추가적인 파라미터 전달 외에도 기존의 파라미터 값을 변경할 수도 있다.

728x90
반응형