완전한 정답 (label) 없이 머신러닝 모델 학습시키는 방법. (정확하지 않거나 불완전한 라벨 사용)
약한 감독학습이란, 사람이 직접 정밀하게 라벨링하지 않고, 대체 가능한 방식(규칙, 외부 지식, 휴리스틱 등)을 이용해 학습 데이터를 만드는 방법이다.
예: "문장에 '무료'가 들어가면 광고일 확률 높음" → 라벨을 자동으로 부여
위키피디아, 사전 지식 그래프 등으로 라벨 추정
기존 모델의 예측값을 라벨처럼 사용
여러 개의 약한 라벨을 결합하여 강한 라벨처럼 만듦 (예: Snorkel)
예를들면 뉴스 기사 감정 분석을 위한 라벨링을 한다고 하면, 여기서 휴리스틱 라벨링을 활용하면 '최고'라는 단어가 들어가면 긍정적으로 판단하는... 그런식.
그러니까 정확성은 떨어지지만 속도와 비용을 고려한 모델학습(라벨링) 방식인듯.
이것들은 대표적으로 Weak Supervision할때 많이 언급되는 리소스와 도구다.
데이터셋
ORCAS-I는 Microsoft와 공동 연구자들이 만든, 검색 쿼리(intent)에 약한 감독학습 방식으로 라벨을 붙인 대규모 데이터셋이다. 웹 쿼리에 대해 사용자의 의도(Intent)를 분류하기 위한 데이터셋.
정보 검색(IR), 질문응답(QA), LLM 검색 강화 등에 사용되고 쿼리가 정보탐색인지, 내비게이션인지, 상업적인 의도인지 등을 분류하는거.
예를들면
Query: “Facebook login”
→ Intent: Navigational (서비스로 이동하려는 의도)
Query: “how to fix wifi connection”
→ Intent: Informational (정보 탐색)
이런식으로 라벨은 사용자의 검색 클릭 로그를 기반으로 약하게 추정하여 부여함.
Snorkel은 스텐포드에서 개발한 약한 감독학습을 체계적으로 설계하고 실행할 수 있게 해주는 프레임워크임. Snorkel AI라는 스타트업도 운영 중이다. "약한 라벨로 학습용 데이터 생성하게 해주는 도구"
Labeling Functions (LF):
사람이 작성하는 규칙, 외부 지식, 약한 모델 등을 통해 라벨을 붙이는 함수들
Generative Label Model:
여러 Labeling Function들이 낸 라벨들을 통합해서 최종 라벨을 추론
Discriminative Model:
위에서 생성된 라벨로 일반적인 딥러닝 모델을 학습시킴
# 예시: 영화 리뷰 감성 분류
# 1. Labeling Functions 정의
def has_positive_words(x):
return POSITIVE if "great" in x else ABSTAIN
def has_negative_words(x):
return NEGATIVE if "boring" in x else ABSTAIN
# 2. Label Model로 라벨 결합
label_model = LabelModel()
label_model.fit(L_train)
# 3. 생성된 라벨로 최종 모델 학습
model.fit(X, y=label_model.predict(L))