W2
Deeplearning W2 Hackathon
인테리어 하자 질의응답
인테리어·건축 하자 질문에 답변을 생성하고, SBERT로 임베딩해 정답 벡터와 코사인 유사도로 채점합니다. 16강 생성 전략과 11강 문장 임베딩을 한 파이프라인에서 잇습니다.
- METRIC
- Cosine Similarity
- LEVEL
- 중급
- EST. TIME
- 2시간
- BASELINE
- LLM 생성 → SBERT 임베딩
Start Here / Step 00
데이터와 제출 규격부터 확인하세요
인테리어·건축 하자 관련 질문(자유 서술)
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자 이상의 실험 회고를 제출하기 전까지 점수는 잠깁니다.
- 01CSV 검증현재
- 02서버 재채점대기
- 03이해 확인대기
- 04순위 공개대기
Submission Gate
제출 준비 중
미션 브리프는 먼저 확인할 수 있습니다. 강사가 비공개 평가셋과 제출 설정을 공개하면 CSV 제출과 이해 확인이 열립니다.
Learning Objectives
이번 미션에서 확인할 것
- 01질문에 대한 답변을 생성하고, distiluse-base-multilingual-cased-v1로 512차원 벡터로 바꾼다.
- 02생성이 자연스러운지와 정답과 의미가 가까운지가 별개 평가임을 확인한다.
- 03temperature·top-p 같은 디코딩 전략을 바꿔가며 코사인 유사도 변화를 관찰한다.
Output Checklist
제출·학습 산출물
사이트에는 submission.csv만 업로드합니다. 나머지는 notebook에 남겨 수업 중 실험 근거로 설명합니다.
- 사이트 제출submission.csv (id, vec_0~vec_511)
- 실험 기록재현 가능한 notebook
- 실험 기록답변 생성 프롬프트·디코딩 설정 기록
- 실험 기록baseline 대비 개선 실험 1건
Original Source
위 ZIP은 학습용 split입니다. 정답이 포함된 원본 전체는 아래 대회에서 확인하세요.