from langchain_core.prompts import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
AIMessagePromptTemplate,
ErrorMessagePromptTemplate,
WarningMessagePromptTemplate,
InformativeMessagePromptTemplate
)
chat_prompt = ChatPromptTemplate.from_messages(
[
# 시스템 메시지: 시스템의 기능이나 상태를 설명
SystemMessagePromptTemplate.from_template("이 시스템은 천문학 질문에 답변할 수 있습니다."),
# 사용자 메시지: 사용자가 입력한 질문이나 요청
HumanMessagePromptTemplate.from_template("{user_input}"),
# AI 응답 메시지: 고정된 응답을 지정
AIMessagePromptTemplate.from_template("태양계에서 가장 큰 행성은 목성입니다."),
# 오류 메시지: 시스템 오류가 발생했을 때
ErrorMessagePromptTemplate.from_template("오류가 발생했습니다. 다시 시도해 주세요."),
# 경고 메시지: 잘못된 입력이나 경고를 표시
WarningMessagePromptTemplate.from_template("경고: 잘못된 입력입니다."),
# 정보 메시지: 사용자가 알아야 할 추가 정보 제공
InformativeMessagePromptTemplate.from_template("추가 정보: 천문학과 관련된 최신 연구 결과는 다음 사이트를 참고하세요."),
]
)
messages = chat_prompt.format_messages(user_input="태양계에서 가장 큰 행성은 무엇인가요?")
print(messages)
temperature-값이 낮을수록 항상 가장 확률이 높은 토큰(말뭉치의 최소 단위)이 선택되기 때문에 더 결정론적인 결과
top_p- 정확하고 사실적인 답변을 원한다면 이를 낮게 유지
=> 둘 중 하나만 변경
Max Length-max length를 조정하여 모델이 생성하는 토큰의 수를 관리
Stop Sequences-모델의 토큰 생성을 중지하는 문자열
Frequency Penalty가 높을수록 단어가 다시 등장할 가능성이 줄어듦
Presence Penalty - 응답에서 구문을 너무 자주 반복하는 것을 방지, 다양하거나 창의적인 텍스트를 생성하기 위해 더 높은 presence penalty를 사용
권장사항: temperature와 top_p를 모두 변경하지는 X, frequency penalty와 presence penalty를 모두 변경하지는 X
1. 예시를 추가하는 few-shot prompting
2. 프롬프트의 구성
프롬프트 엔지니어링: 모델에게 작업을 수행하도록 지시하기 위해 최적의 프롬프트를 설계하는 이러한 접근 방식
- 지시(Instruction): 모델이 수행할 특정 작업 또는 지시 시작 부분에 지시 사항을 명시 '###'과 같이 명확한 구분 기호를 사용하여 명령어와 지시 사항을 구분 지시와 작업을 구체적으로 설명
- 문맥: 더 나은 응답을 위해 모델을 조종할 수 있는 외부 정보나 추가 문맥 - 입력 데이터: 응답받고자 하는 입력이나 질문 - 출력 지시자 - 출력의 유형이나 형식
3. 프롬프트 구성 팁
불필요한 세부 사항을 많이 포함하는 것이 반드시 좋은 접근 방법은 아닙니다 구체적이고 직접적이어야. (매우 구체적이고 간결하며 정곡을 찌르는.) '하지 말아야 할 것'보다는 '해야 하는 것'에 초점을 두는 것
3-1. 추론 태스크는 특히 CoT. 해결방법을 단계별로 간결하게 제시.
주어진 수 중에서 홀수를 모두 더해서 짝수를 만들어 줘: 15, 32, 5, 13, 82, 7, 1. 문제를 단계별로 해결해 봐. 먼저 주어진 수 중 홀수를 찾아낸 뒤, 그것들을 합해서, 결과가 홀수인지 짝수인지 판별해 줘.
4. CoT
- 중간 추론 단계를 통해 복잡한 추론을 가능하게 함!! - 충분히 큰 대규모언어모델에서만 발생
- 답변 생성 시 모델이 해설을 단계별로 함께 생성하도록 지시함.
예시 Prompt: 나는 시장에 가서 사과 10개를 샀어. 나는 사과 2개를 이웃에게 주고, 2개를 수리공에게 주었어. 그리고 사과 5개를 더 사서 1개는 내가 먹었어. 사과가 몇 개나 남았니? 단계별로 생각해 보자.
Output: 먼저 사과 10개로 시작했어. 이웃에게 2개, 수리공에게 2개를 나누어 주었으므로 사과가 6개가 남았어. 그런 다음 사과 5개를 더 사서 이제 사과가 11개가 되었어. 마지막으로 사과 1개를 먹었으므로 사과 10개가 남게 돼.
4-1. Auto-CoT
"단계별로 생각해보자(Step by Step)"라는 프롬프트가 있는 대규모언어모델 -> 데모를 위한 추론 사슬을 하나씩 생성함으로써 수작업을 없애는 접근 방식
1단계): 질문 클러스터링(question clustering): 주어진 데이터 세트의 질문을 몇 개의 클러스터로 분할합니다. 2단계): 데모 샘플링(demonstration sampling): 각 클러스터에서 대표 질문을 선택하고 간단한 휴리스틱과 함께 제로샷 생각의 사슬(Zero-Shot-CoT)를 사용해 추론 체인을 생성합니다.
- 모든 이표채는 '액면가로 발행'됨: 즉 채권 발행 당시 채권의 가격은 == 채권의 액면가(만기에 상환하는 금액)과 동일함
(zeros. 즉 순할인채는 말 그대로 할인된 가격으로..)
- YTM은 채권 가격이 결정된 후에야 사후적으로 계산되는 수익률 값임. 즉, 전적으로 채권 가격에 의존함.
- 채권 발행 당시, 채권 fair pricing 방법 자체가
=> 채권의 고정된 CF, 즉 쿠폰+원금 포함하는 현금흐름 각각에 대해 PV시켜서 summation시킨 값을 채권 가격으로 결정함
=> 이때 액면가와 채권가격이 일치하므로 이표채 발행 당시의 YTM == coupon rate가 됨.
1. 쿠폰 금리 (Coupon Rate): - 쿠폰 금리는 채권 발행 시 정해진 이자율로, 채권 발행자가 정기적으로 채권 보유자에게 지급하는 이자의 비율을 말합니다. 예를 들어, 1000달러짜리 채권의 쿠폰 금리가 5%라면, 채권 보유자는 매년 50달러의 이자를 받게 됩니다.
2. 만기 수익률 (Yield to Maturity, YTM): - 만기 수익률은 채권을 만기까지 보유할 경우 얻을 수 있는 총 수익률을 나타내며, 이자 지급과 원금 상환을 모두 포함한 수익률입니다. 이는 시장 이자율, 채권 가격, 남은 기간 등 여러 요인을 고려하여 계산됩니다.
3. 발행 당시의 관계: - 채권 발행 시: 채권이 발행될 때, 쿠폰 금리와 YTM은 동일합니다. 이는 발행 당시 채권의 시장 가격이 액면가(face value)와 같기 때문입니다. - 예를 들어, 액면가가 1000달러이고 쿠폰 금리가 5%인 채권이 1000달러에 발행되면, 이 채권의 YTM도 5%가 됩니다.
4. 발행 이후의 관계 변화: - 시장 금리 상승: 만약 시장 금리가 상승하면, 기존 채권의 YTM은 쿠폰 금리보다 높아집니다. 이는 기존 채권의 가격이 떨어지기 때문입니다. 투자자들은 더 높은 시장 금리를 얻기 위해 기존 채권의 가격을 할인하여 구매하게 됩니다. - 예를 들어, 시장 금리가 6%로 상승하면, 기존의 5% 쿠폰 금리를 가진 채권은 가격이 떨어져야 YTM이 6%에 맞춰집니다.
- 시장 금리 하락: 반대로, 시장 금리가 하락하면 기존 채권의 YTM은 쿠폰 금리보다 낮아집니다. 이는 기존 채권의 가격이 상승하기 때문입니다. 더 높은 쿠폰 금리를 제공하는 채권은 더 높은 가격에 거래됩니다. - 예를 들어, 시장 금리가 4%로 하락하면, 기존의 5% 쿠폰 금리를 가진 채권은 가격이 올라가야 YTM이 4%에 맞춰집니다.
가설검증(Hypothesis Testing): 주어진 데이터가 어떤 가설을 지지하는지 또는 반박하는지를 판단하는 과정
**
통계학에서 **검정**과 **검증**은 비슷해 보이지만 다른 의미를 가지고 있습니다.
1. **검정 (Hypothesis Testing)**:
- 검정은 특정 가설이 통계적으로 유의미한지 여부를 판단하는 과정입니다.
- 예를 들어, 두 집단의 평균이 동일한지 검정하는 t-검정이나, 분산이 같은지 검정하는 F-검정 등이 있습니다.
- 검정의 결과로 귀무가설(보통 "차이가 없다"는 가설)을 기각할지 여부를 결정합니다. 검정의 핵심은 데이터로부터 얻은 증거가 가설을 지지할 만큼 충분한지 평가하는 것입니다.
2. **검증 (Verification)**:
- 검증은 어떤 모델이나 시스템, 방법론이 제대로 작동하는지 확인하는 과정입니다.
- 이는 실험이나 관찰을 통해 주어진 조건 하에서 이론적 주장이나 방법이 실제로 일치하는지를 점검하는 것입니다.
- 예를 들어, 통계 모델을 만들었을 때, 그 모델이 실제 데이터를 잘 설명하는지를 검증합니다.
정리하자면, **검정**은 주어진 가설이 데이터에 의해 지지되는지를 평가하는 과정이고, **검증**은 이론이나 모델이 제대로 작동하는지를 확인하는 과정입니다.
두 가지 가설을 세우고,
귀무가설(Null Hypothesis, 𝐻0): 일반적으로 기존의 믿음이나 가정, 또는 차이가 없음을 주장하는 가설임.
대립가설(Alternative Hypothesis, 𝐻1): 귀무가설과 반대되는 주장으로, 차이나 효과가 있음을 주장하는 가설임.
통계적 방법을 통해 이들 가설을 검증하는 방식
가설검증=검정의 단계
가설검증은 다음과 같은 단계로 이루어짐
가설 설정:
귀무가설 (𝐻0): 데이터에 차이가 없다고 주장함
대립가설 (𝐻1): 데이터에 차이가 있다고 주장함
유의수준 설정 (𝛼):
일반적으로 0.05나 0.01 같은 값
귀무가설이 참일 때, 잘못 기각할 확률 (False Positive이 확률)
검정 통계량 계산:
데이터를 기반으로 검정 통계량을 계산함.
이 통계량은 보통 표준정규분포(Z-검정), t-분포(t-검정) 등 여러 가지 방법이 있음.
p-값 계산:
검정 통계량이 주어진 분포에서 어느 정도의 극단적인 값을 갖는지를 계산함.
p-값: 귀무가설(영가설)이 참일 때, 검정 통계량이 현재 관측된 값보다 극단적인 값을 가질 확률임.
결정:
p-값을 유의수준 (𝛼)와 비교
if p값 < 𝛼, 귀무가설을 기각하고 대립가설을 채택 (실험 결과 P값이 작아야 실험 가정이 유의하다)
p-값이 𝛼보다 크면, 귀무가설을 기각하지 않음
예시
예제: 평균 비교
두 집단의 평균이 같은지 비교 -> 신약이 기존 약보다 효과가 있는지를 검증한다고 가정
가설 설정:
𝐻0: 두 집단의 평균이 같음 (𝜇1=𝜇2)
𝐻1: 두 집단의 평균이 다름 (𝜇1≠𝜇2)
유의수준 설정:
𝛼=0.05
검정 통계량 계산:
t-검정을 사용해 두 집단의 평균 차이를 검정
p-값 계산:
계산된 t-값에 대응하는 p-값을 찾음
결정:
p-값이 0.05보다 작으면, 귀무가설을 기각하고 신약이 기존 약과 효과가 다르다고 결론지음.
유형별 가설검증
가설검증에는 여러 유형이 있음:
Z-검정: 표본 크기가 크고, 모분산이 알려진 경우
t-검정: 표본 크기가 작고, 모분산이 알려지지 않은 경우
카이제곱검정: 범주형 데이터의 독립성이나 적합성 검정에 사용
F-검정: 두 집단의 분산 비교에 사용
가설검증의 오류
가설검증에서는 두 가지 주요 오류가 발생할 수 있음:
제1종 오류 (Type I Error): 귀무가설이 참인데 기각하는 오류 (유의수준 𝛼)
False Positive
예시: 암 진단 검사에서 실제로 암이 없는데도 검사가 암이 있다고 잘못 진단하는 경우
유의수준 (𝛼): 제1종 오류가 발생할 확률. 연구자가 설정하는 값으로, 보통 0.05 (5%)나 0.01 (1%) 같은 값을 사용
의미:α=0.05라면, 귀무가설이 참일 때 5%의 확률로 귀무가설을 잘못 기각할 수 있다
제2종 오류 (Type II Error): 귀무가설이 거짓인데 기각하지 않는 오류 (베타 𝛽)
False Negative
예시: 암 진단 검사에서 실제로 암이 있는데도 검사가 암이 없다고 잘못 진단하는 경우
베타 (𝛽): 제2종 오류가 발생할 확률. 유의수준과 달리 보통 명시적으로 설정되지 않고 계산을 통해 결정
검정력 (Power): 1 -𝛽를 검정력이라고 함. 실제로 대립가설이 참일 때 이를 올바르게 기각할 확률
검정력이 높을수록 좋은 검사.
제1종 오류와 제2종 오류 Trade-off
𝛼를 낮추면 제1종 오류의 확률은 줄어들지만, 𝛽는 증가해서 제2종 오류의 확률이 커질 수 있음 vice versa
오류 조절 방법
유의수준 (𝛼) 조정: 보통 연구자는 𝛼α를 0.05나 0.01로 설정하지만, 문제의 심각성에 따라 더 낮추거나 높일 수 있음.
표본 크기 증가: 표본 크기를 늘리면 검정력이 높아져서 제2종 오류의 확률을 줄일 수 있음. 이는 더 많은 데이터를 수집함으로써 오류를 줄이는 방법임.
효과 크기 증가: 효과 크기가 클수록 검정력이 높아져서 제2종 오류의 확률이 줄어듦. 연구 설계를 통해 더 뚜렷한 차이를 만들 수 있는 방법을 고려할 수 있음.
* P_err = Total probablility of error of a binary hypothesis test