9차시. 임베딩 이해
퀴즈 1 — 임계값으로 관련 여부 판단하기
코사인이 임계값 이상이면 관련 있다고 판단하세요.
빈칸 코드에서 시작합니다.
def related(score, threshold):
pass결과 보기 (예시 풀이)
# 퀴즈 1. 코사인 유사도가 임계값 이상이면 "관련 있음"
# find_threshold.py로 구한 기준값을 실제 판단에 쓰는 함수입니다.
import math
def related(score, threshold):
# 코사인 유사도는 클수록 가깝습니다. 그래서 "이상(>=)"으로 비교합니다.
return score >= threshold
def cosine(v1, v2):
# 코사인 유사도 = 내적 ÷ (길이 × 길이). numpy 없이 같은 계산을 합니다.
dot = sum(a * b for a, b in zip(v1, v2))
len1 = math.sqrt(sum(a * a for a in v1))
len2 = math.sqrt(sum(b * b for b in v2))
return dot / (len1 * len2)
# 수업 자료 2-2)의 앞 세 숫자만 빌린 가짜 벡터입니다. (실제는 1536개)
refund = [0.21, -0.88, 0.05] # "환불 규정"
returns = [0.19, -0.85, 0.08] # "반품 절차"
lunch = [-0.72, 0.31, 0.66] # "점심 메뉴"
THRESHOLD = 0.47 # 수업 자료 6절의 권장 임계값 예시
# 확인 1: 뜻이 비슷한 쌍 → 점수가 높고 True
s = cosine(refund, returns)
print(f"환불 규정 ↔ 반품 절차: {s:.3f}", related(s, THRESHOLD))
# 확인 2: 무관한 쌍 → 점수가 낮고 False
s = cosine(refund, lunch)
print(f"환불 규정 ↔ 점심 메뉴: {s:.3f}", related(s, THRESHOLD))
# 확인 3: 임계값과 똑같은 점수는 관련 있음으로 봅니다
print(related(0.47, THRESHOLD))
실행 결과
환불 규정 ↔ 반품 절차: 0.999 True
환불 규정 ↔ 점심 메뉴: -0.421 False
True채점 기준: 작을수록 가까운 거리 점수에는 이 함수를 쓰면 안 된다.
관련 교안: 9차시 「6. 실습 ③ — 내 기준선 찾기」