CCheckpointW2 · NLP
NLP / LLM 생성 → SBERT 임베딩제출 준비 중

W2

Deeplearning W2 Hackathon

인테리어 하자 질의응답

인테리어·건축 하자 질문에 답변을 생성하고, SBERT로 임베딩해 정답 벡터와 코사인 유사도로 채점합니다. 16강 생성 전략과 11강 문장 임베딩을 한 파이프라인에서 잇습니다.

METRIC
Cosine Similarity
LEVEL
중급
EST. TIME
2시간
BASELINE
LLM 생성 → SBERT 임베딩

Start Here / Step 00

데이터와 제출 규격부터 확인하세요

인테리어·건축 하자 관련 질문(자유 서술)

Dataset · Step 00

데이터셋 받기

train · test · sample_submission + 제출 안내(README) 한 번에. 원본 대회 가입 없이 시작합니다.

ZIP 받기

Output Contract

출력 함수 (선택)

save_checkpoint_result(
  ...,
  id_column="id",
  target_columns=[f"vec_{i}" for i in range(512)],
)
.py 받기

Starter / Step 00b

여기서 출발하세요

기준선 · Cosine Similarity 0.4133

ZIP을 푼 폴더에서 그대로 실행하면 submission.csv가 만들어집니다. 완성된 답이 아니라 기준선입니다 — 먼저 제출해 점수를 확인하고, 아래 항목을 바꿔가며 개선하세요.

From the Lectures · 이 코드가 출발한 강의

11강 · 문장 임베딩 SBERT와 E5
문장을 정규화된 벡터로 바꿔 내적 한 번으로 코사인 유사도를 구하는 방법
16강 · 텍스트 생성과 LLM 연결
생성이 자연스러운지와 정답과 의미가 가까운지는 별개 평가라는 원칙
05강 · Transformer와 사전학습모델 실전
HuggingFace 계열 모델을 pipeline으로 불러와 쓰는 방식

dl-w2-qa.py · sentence-transformers

import pandas as pd
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("distiluse-base-multilingual-cased-v1")

tr, te = pd.read_csv("train.csv"), pd.read_csv("test.csv")

# 11강 원칙: 문장을 좌표(임베딩)로 바꾸면 "가장 가까운 질문"을 찾는 문제가 된다.
# train 질문을 미리 임베딩해두고, test 질문마다 코사인 유사도가 가장 높은 것을 찾는다.
train_questions = tr["질문_1"].tolist()
train_embeddings = model.encode(train_questions, normalize_embeddings=True)

answers = []
for question in te["질문"]:
    q_vec = model.encode(question, normalize_embeddings=True)
    similarities = train_embeddings @ q_vec  # 정규화된 벡터라 내적 = 코사인
    nearest = similarities.argmax()
    answers.append(tr.iloc[nearest]["답변_1"])  # 가장 비슷한 질문의 답변을 그대로 재사용

# 채점은 "생성한 답변"이 아니라 그 답변의 임베딩 벡터로 이루어진다.
answer_vectors = model.encode(answers, normalize_embeddings=False)
submission = pd.DataFrame(answer_vectors, columns=[f"vec_{i}" for i in range(512)])
submission.insert(0, "id", te["id"])
submission.to_csv("submission.csv", index=False)

New Here · 강의에서 다루지 않은 부분

질문에 답변을 직접 '생성'하지 않고, train에서 가장 비슷한 질문의 답변을 재사용

이 baseline은 LLM 생성 없이 11강 최근접 이웃 검색만으로 답을 만듭니다. 그래서 무작위성이 전혀 없어 시드 고정이 필요 없습니다(같은 입력이면 항상 같은 출력). LLM으로 직접 답변을 생성하는 것이 다음 단계입니다.

Next Steps

  • 01질문_1 대신 질문_1+질문_2를 함께 임베딩해 검색 정확도 비교
  • 02최근접 이웃 답변을 그대로 쓰지 않고 LLM으로 다시 다듬어 생성
  • 03생성 시 temperature·top-p를 바꿔가며 코사인 유사도가 어떻게 달라지는지 관찰

Live Rankings

클래스 리더보드

이해 확인을 통과해 ranked가 된 제출만 표시합니다. 각 수강생의 최고 점수 1개만 순위에 반영됩니다.

순위 기록을 불러오는 중입니다.

Join the Board

제출 → 이해 확인 → 순위 공개

출력값은 서버가 다시 채점합니다. 객관식 3문항 중 2문항 이상과 80자 이상의 실험 회고를 제출하기 전까지 점수는 잠깁니다.

  1. 01CSV 검증현재
  2. 02서버 재채점대기
  3. 03이해 확인대기
  4. 04순위 공개대기

Submission Gate

제출 준비 중

미션 브리프는 먼저 확인할 수 있습니다. 강사가 비공개 평가셋과 제출 설정을 공개하면 CSV 제출과 이해 확인이 열립니다.

Learning Objectives

이번 미션에서 확인할 것

  1. 01질문에 대한 답변을 생성하고, distiluse-base-multilingual-cased-v1로 512차원 벡터로 바꾼다.
  2. 02생성이 자연스러운지와 정답과 의미가 가까운지가 별개 평가임을 확인한다.
  3. 03temperature·top-p 같은 디코딩 전략을 바꿔가며 코사인 유사도 변화를 관찰한다.

Output Checklist

제출·학습 산출물

사이트에는 submission.csv만 업로드합니다. 나머지는 notebook에 남겨 수업 중 실험 근거로 설명합니다.

  • 사이트 제출submission.csv (id, vec_0~vec_511)
  • 실험 기록재현 가능한 notebook
  • 실험 기록답변 생성 프롬프트·디코딩 설정 기록
  • 실험 기록baseline 대비 개선 실험 1건

Original Source

위 ZIP은 학습용 split입니다. 정답이 포함된 원본 전체는 아래 대회에서 확인하세요.

DACON · 236216 열기 ↗