RAG2026-5일39차시 · 미니프로젝트 ② 구현과 개선14 / 17← 이전목차다음 →MetaContents

39차시. 미니프로젝트 ② 구현과 개선

퀴즈 1 — 관련·무관 점수로 임계값 권장하기

관련 질문 점수 목록 rel 과 무관 질문 점수 목록 unrel 을 받아 권장 MIN_SCORE 와 WEAK_MARGIN 을 돌려주는 recommend(rel, unrel) 를 완성해 보세요. MIN_SCORE 는 (관련 최저 + 무관 최고) / 2, WEAK_MARGIN 은 0.08 과 (관련 최저 - 무관 최고) / 3 중 작은 값입니다. 두 무리가 겹치면(관련 최저가 무관 최고 이하) None 을 돌려주세요.

빈칸 코드에서 시작합니다.

Python
def recommend(rel, unrel):
    # 돌려줄 값: (min_score, weak_margin, gap)
    pass
결과 보기 (예시 풀이)
Python
# 1-2절 임계값 재측정을 표준 라이브러리만으로 흉내 냅니다.
# 진짜로는 top_score(q) 가 벡터 저장소에 물어 1등 조각의 점수를 돌려줍니다.
# 여기서는 질문별 점수를 딕셔너리에 미리 적어 둔 가짜 함수로 대신합니다.

def recommend(rel, unrel):
    # 관련 질문 중 가장 낮은 점수와, 무관 질문 중 가장 높은 점수를 봅니다.
    low_rel = min(rel)
    high_unrel = max(unrel)
    gap = low_rel - high_unrel

    # 두 무리가 겹치면 어떤 경계를 잡아도 한쪽이 틀립니다. 값을 내지 않고 알립니다.
    if gap <= 0:
        return None, None, gap

    # 경계는 두 점수의 한가운데, 애매 구간 폭은 틈의 1/3 과 0.08 중 작은 쪽입니다.
    min_score = (low_rel + high_unrel) / 2
    weak_margin = min(0.08, gap / 3)
    return min_score, weak_margin, gap

def show(name, scores, related, unrelated):
    # 가짜 top_score: 미리 적어 둔 점수를 꺼내 옵니다.
    def top_score(q):
        return scores[q]

    rel = [top_score(q) for q in related]
    unrel = [top_score(q) for q in unrelated]
    ms, wm, gap = recommend(rel, unrel)
    print(f"[{name}] 관련 최저 {min(rel):.3f} · 무관 최고 {max(unrel):.3f}")
    if ms is None:
        print(f"   두 무리가 {-gap:.3f} 만큼 겹칩니다. chunk 나 질문 목록부터 다시 보세요.")
    else:
        print(f"   권장 MIN_SCORE {ms:.2f} · 권장 WEAK_MARGIN {wm:.2f}")

RELATED = ["육아휴직 얼마나 쓸 수 있어?", "연차 며칠이야?", "출산휴가 기간은?"]
UNRELATED = ["회사 주차장 위치는?", "오늘 점심 메뉴는?", "서울 날씨는?"]

# 예시 1: 관련·무관 점수가 뚜렷이 갈리는 규정집 → 권장값이 나와야 합니다.
clear = dict(zip(RELATED + UNRELATED, [0.52, 0.61, 0.48, 0.21, 0.30, 0.33]))
show("규정집", clear, RELATED, UNRELATED)

# 예시 2: 무관 질문 하나가 관련 질문보다 높게 나온 경우 → 겹친다고 알려야 합니다.
mixed = dict(zip(RELATED + UNRELATED, [0.44, 0.50, 0.39, 0.28, 0.41, 0.25]))
show("짧은 문서", mixed, RELATED, UNRELATED)

실행 결과

출력
[규정집] 관련 최저 0.480 · 무관 최고 0.330
   권장 MIN_SCORE 0.41 · 권장 WEAK_MARGIN 0.05
[짧은 문서] 관련 최저 0.390 · 무관 최고 0.410
   두 무리가 0.020 만큼 겹칩니다. chunk 나 질문 목록부터 다시 보세요.

채점 기준: 1-2절 공식대로 계산하고, 관련 최저가 무관 최고 이하일 때 값을 내지 않으면 정답입니다.

관련 교안: 39차시 「1. [0~15분] 설정 재측정」 › 1-2) 임계값 재측정 (7분)

← 이전 절39차시 · 실습 1 — 미니프로젝트 ② 구현과 개선 실습 따라 하기다음 절 →39차시 · 퀴즈 2 — 개선 전후 비교표와 유지 판단