주어진 문장의 각 token이 어떤 범주에 속하는지 분류
NER (개체명 인식)
품사 태깅
스포츠 동아는 기관으로, ORG (Orginization)
개체명 인식은 형태소 단위 토큰을 음절 단위 토큰으로 분해하는 것이 좋음
unique_tags = set(tag for doc in tags for tag in doc)
tag2id = {tag: id for id, tag in enumerate(unique_tags)}
id2tag = {id: tag for tag, id in tag2id.items()}
pad_token_id = tokenizer.pad_token_id # 0
cls_token_id = tokenizer.cls_token_id # 101
sep_token_id = tokenizer.sep_token_id # 102
# special token도 tag화 하는 작업
pad_token_label_id = tag2id['O'] # tag2id['O']
cls_token_label_id = tag2id['O']
sep_token_label_id = tag2id['O']
기존 토크나이저와 다르게 음절 단위로 토크나이징
단어의 첫 음절을 제외하고 모두 prefix ##을 부착
input_ids[i] = tokenizer.convert_tokens_to_ids(syllable)
기존 BERT tokenizer에서 음절과 매핑되는 id를 input_ids에 저장
BERT tokenizer의 한국어 vocab에는 대부분 음절 단위 단어들이 저장되어 있어 괜찮음
model = BertForTokenClassification.from_pretrained(MODEL_NAME, num_labels=len(unique_tags))
BertForTokenClassification
사용입력 문장에 대해서도 반드시 음절 단위 토크나이징 후 모델에 피딩
각 음절에 개체명이 매핑됨
context, question, answer로 구성
answer은 answer start 정보를 제공하며, answer start에 answer의 length만큼 더하면 end index가 됨
구축한 데이터는 음절의 인덱스를 가져옴
BERT 모델은 wordpiece 단위로 되어 있어 음절 단위의 숫자를 token index로 변환해줘야 함
char_to_token
함수 사용BertForQuestionAnswering
사용
※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※