Sequence labeling: 음성, 단어 따위의 시퀀스 데이터에 레이블을 달아주는 과제
대표적으로 **개체명 인식(Named Entity Recognition)**이 있다!
모델의 출력: 각 토큰이 어떤 개체명 태그에 속할지의 확률
스페셜 토큰 CLS, SEP(문장의 시작 & 끝)을 토큰 시퀀스 앞뒤에
BERT 모델에 입력
모든 토큰(+추가 모듈) → 모델의 출력이 해당 토큰이 특정 개체명에 속할 확률이 되도록
태스크 모듈
x(마지막 레이어의 개별 토큰 벡터)
→ 드롭아웃
→ 가중치 행렬을 곱하기
→ h(분류 범주 수만큼의 차원을 갖는 벡터로 변환됨)
→ 소프트맥스
→y
출력, 정답이 최대한 같아지도록 BERT 레이어 전체를 포함한 모델 전체 업데이트
NERCorpus: 텍스트 파일을 ‘원본 문장 + 개체명 태그를 레이블한 문장’형태로 읽어들임
NERDataset: NERCorpus + 토크나이저를 품고있으며, NERCorpus가 넘겨준 데이터를 모델이 학습할 수 있는 형태로 가공
→ 문장 토큰화 & 인덱스화 / 레이블한 문장을 NERFeatures(모델이 읽을 수 있는 포맷)로 바꿔줌
NERFeatures
→ 인덱스로 변환된 토큰 시퀀스
→ 해당 토큰이 패딩 토큰인지(0)/아닌지(1)
→ 세그먼트
→ 정수로 바뀐 레이블 시퀀스
NERCorpus
NERDataset
B-: 해당 태그의 시작(begin)
I-: 해당 태그의 시작이 아님(inside)
0: 개체명이 아님(outside)
→ 학습, 평가용 데이터 로더
BertForTokenClassification: 개체명 인식을 위한 태스크 모듈이 덧붙여진 형태의 모델 클래스
pytorch lightning이 제공하는 라이트닝 모듈을 상속받아 태스크 정의