본문 바로가기
AI/Bedrock

Amazon Bedrock, LangChain과 사용하기 - 3. 추론 매개변수

by J's Note 2023. 10. 18.

Amazon Bedrock, LangChain과 사용하기

1. Amazon Bedrock, 개발환경 설정

2. Amazon Bedrock API, LangChain 사용해보기

3. 추론 매개변수

4. 스트리밍 API, 벡터 임베딩

5. Streamlit, 텍스트/이미지 생성

6. 간단한 검색증강(RAG : Retrieval Augmented Generation) 구현

7. 간단한 챗봇 구현 (Conversation Memory)

8. 챗봇 구현 (RAG + Conversation Memory)

추론 매개변수(Inference Parmeters)

추론 매개변수를 사용하여 모델에서 생성된 응답에 영샹을 미치도록 할 수 있습니다. 일반적으로 무작위성과 다양성을 제어하기위해 다음과 같은 매개변수를 지원합니다.

무작위성과 다양성

  • 온도(Temperature)
    • LLM은 확률을 사용하여 단어를 순서대로 구성합니다. 주어진 시퀀스에 대해 시퀀스의 당므 단어에 대한 옵션의 확률분포가 존재합니다. 온도를 0에 가깝게 설정하면 화률 이 더 높은 단어를 선택합니다.
    • 이 매개변수는 값이 낮을 수록 결정적인 반응을 갖는 가파른 곡선이되고, 갚이 높을수록 부작이 반응이 더 많은 비교적 평평한 곡선이 됩니다.
  • 상위K(Top-K)
    • 상위K는 모델이 더이상 단어를 선택하지 않는 컷오프를 정의합니다.
    • 예를들어 K=50이라면 주어진 시퀀스에서 다음에 올 가능성이 가장 높은 단어 50개 중에 선택을 하게 됩니다.
  • 상위P(Top-P)
    • 잠재적인 선택의 확률 합계를 기반으로 컷오프를 정의합니다. P를 1.0미만으로 설정하는경우 모델은 가능성이 가장 높은 옵션을 고려하게되고, 가능성이 낮은 옵션은 무시하게됩니다. 

 예를들어 "발굽소리가 들립니다"라는 프롬프트의 경우 모델이 다음 단어로 "말", "유니콘" 등을 제공할 수 있습니다. K 또는 P 를 설정하지 않고 온도를 최대로 설정하면 "유니콘"과 같은 특이한 결과를 얻을 확률이 높아집니다.

 

온도를 0으로 설정하게되면 "말"이 나올 확률이 높아집니다. 온도를 높게 설정하고 K나 P값을 낮추면 "말"이나 "얼룩말"과 같은 답이 나올 확률이 높아지고 "유니콘"이 나올 확률은 낮아집니다.

길이

  • 응답길이
    • 생성된 응답에 사용할 최소 및 최대 토큰수를 구성합니다.
  • 길이 페널티
    • 더 긴 응답에 패널티를 적용하여 출력이 간결해지도록 합니다.
    • 0.0은 패널티가 없음을 의미합니다. 긴 시퀀스를 생성하려면 0.0보다 작은 값을 설정합니다.
  • 중지 시퀀스
    • 일련의 문자로, 모델이 중지 시퀀스를 발견하면 추가적인 토큰 생성을 중지합니다.

반복

  • 반복패널티
    • 응답에서 동일한 단어의 반복을 방지합니다.
    • 1.0은 패널티가 없음을 의미합니다. 1.0보다 크다면 반복이 감소합니다.

 

추론 매개변수 적용해보기

🔗Bedrock콘솔에서 Text Playgrounds를 사용하면, 원하는 모델의 다양한 추론 매개변수를 가져올 수 있습니다.

저희는 AI21 Labs의 Jurassic-2 Mid를 한번 설정해보도록 하겠습니다. Inference를 설정하고 실행해봅니다.

View API request클릭시 body 부분에서 Inference Paramters를 확인할 수 있습니다.

{
  "prompt":"Write a haiku",
  "maxTokens":1014,
  "temperature":0.7,
  "topP":0.4,
  "stopSequences":[
    
  ],
  "countPenalty":{
    "scale":0.3
  },
  "presencePenalty":{
    "scale":1.2
  },
  "frequencyPenalty":{
    "scale":215.7
  }
}

 

해당 파라미터를 LangChain 라이브러리에 적용시켜보도록 하겠습니다. 이전 포스트의 코드 그대로에, 추론 파라미터를 추가하는 "model_kwargs"를 설정하도록 합니다.

from langchain.llms.bedrock import Bedrock
llm = Bedrock(
    region_name='us-east-1',
    endpoint_url="https://bedrock-runtime.us-east-1.amazonaws.com",
    model_id="ai21.j2-ultra-v1",
    model_kwargs = {"maxTokens":1014,
                    "temperature":0.7,
                    "topP":0.4,
                    "stopSequences":[
                      
                    ],
                    "countPenalty":{
                      "scale":0.3
                    },
                    "presencePenalty":{
                      "scale":1.2
                    },
                    "frequencyPenalty":{
                      "scale":215.7
                    }
                  }
)
prompt = "Write a haiku"
response_text = llm.predict(prompt)
print(response_text)

추론파라미터가 정상적으로 적용되었네요.