14주차 · Text Classification과 Sentiment Analysis

실습 전에

01 문장을 계산 가능한 형태로 바꾸기

컴퓨터가 문장의 감정을 분류하려면, 단어와 문장을 어떤 형태로 바꾸어 주어야 할까요?

설명
  • Token ID: 단어 또는 Token의 식별자
  • Embedding과 분류 모델: 예측에 유용한 표현을 학습

02 문장마다 다른 길이

길이가 다른 문장들을 한 번에 계산하려면 어떻게 묶어야 할까요? 길이를 맞추기 위해 채운 부분은 실제 단어와 어떻게 구분해야 할까요?

설명
  • 문장 표현에 불필요한 Padding 값이 반영됨. Mask로 제외
  • 평균 기반 표현은 단어 순서를 직접 보존하지 않음

실습

1. 토큰과 vocabulary

  1. 길이가 다른 두 영어 문장을 Token → Index → PAD 순서로 출력하세요.
  2. 학습 사전에 없는 단어 하나를 넣고 UNK 위치를 확인하세요.
  3. 실제 단어를 뜻하는 Index와 PAD·UNK를 구별해 적으세요.

2. 마스킹한 평균과 학습

  1. 제공된 두 문장의 평균 비교 셀을 실행하세요. 짧은 문장을 단독 처리한 Vector를 기준으로, 긴 문장과 함께 처리한 Vector의 최대 절대 차이를 Mask 적용 전·후 각각 기록하세요.
  2. 비교 셀에서 single_ids의 문장과 batch_ids의 첫 문장을 같은 짧은 문장으로 함께 바꾸세요. batch_ids의 둘째 문장은 그보다 긴 문장으로 바꾸고 같은 계산을 반복하세요. 사용한 문장과 두 차이를 기록하세요. 학습한 Embedding 가중치는 유지합니다.
  3. 단어 순서를 바꾼 두 문장의 Logit을 나란히 적고 최대 절대 차이를 구하세요. 현재 문장의 Token 수·PAD 수와 출력된 최대 차이를 근거로, PAD 포함 여부가 평균에 미친 영향과 평균 Pooling에서 단어 순서가 바뀐 영향을 나누어 설명하세요.

3. 새 문장 직접 입력

  1. 학습 사전의 단어로 긍정·중립·부정 영어 문장을 하나씩 my_reviews에 작성하세요.
  2. 의도한 감정·예측·Token을 기록하고, 모르는 단어나 문장부호를 하나 넣어 UNK 처리를 확인하세요.
  3. 예측이 의도와 달라도 원인을 설명하면 됩니다.

제출·저장

코드, 실제 Output·그래프, 직접 작성한 해석을 포함하세요. 제출은 KLAS를 이용하며 기한은 학기 일정과 최신 공지를 확인합니다.

파일명: 이름_학번_14주차.ipynb.

실행 환경을 다시 시작하고 전체 코드를 위에서부터 실행한 뒤 저장하세요.

선택 실습

Embedding에 Float Tensor의 Token Index를 전달한 경우

  1. 문장 분류 모델 학습까지 마친 뒤, 노트북 맨 아래에 Code Cell을 추가하고 다음 코드를 실행하세요.
    for debug_input in [X.float(), X]:
        print("Token Index:", debug_input.shape, debug_input.dtype)
        try:
            with torch.no_grad():
                print("Output:", model(debug_input).shape)
        except (RuntimeError, ValueError) as error:
            print(type(error).__name__, str(error))
  2. Text Cell에 각 입력의 dtype과 실행 성공 여부를 표로 적으세요. Embedding 입력이 단어의 연속적인 측정값이 아니라 Vocabulary의 행 번호라는 점과 오류 원인을 연결해 설명하세요. X.float() 호출 후에도 원래 X는 정수형입니다.