tucan9389/pytorch-Korean-NER

re-labler 일반화

Opened this issue · 2 comments

개요

NER 학습 데이터셋이 주어졌을 때, 임의의 subword-tokenizer (e.g. CharBPE, BertWordPiece)가 주어지면 이에 맞추어 re-labeling을 한다. huggingface tokenizers 제공하는 class 기준으로 하면

  • BertWordPieceTokenizer
  • CharBPETokenizer
  • ByteLevelBPETokenizer

원하는 결과는 아래와 같다.

## klue-ner-v1_dev_00010-nsmc	<엠비씨:OG>에서 사극이 이렇게 망한다는 것을 깨달았다
엠	B-OG
비	I-OG
씨	I-OG
에	O
서	O
 	O
사	O
극	O
이	O
 	O
이	O
렇	O
게	O
 	O
망	O
한	O
다	O
는	O
 	O
것	O
을	O
 	O
깨	O
달	O
았	O
다	O

만약에 BertWordPieceTokenizer를 준다면

## klue-ner-v1_dev_00010-nsmc	<엠비씨:OG>에서 사극이 이렇게 망한다는 것을 깨달았다
엠	B-OG
비씨	I-OG
##에 O
	O
사극	O
##이 O
 	O
이렇	O
##게 O
 	O
망한다 O
##는	O
 	O
것	O
##을	O
 	O
깨달	O
##았다	O

``

입력포맷 지원

  1. 꺾새 기반 텍스트: <엠비씨:OG>에서 사극이 이렇게 망한다는 것을 깨달았다
  2. 포지션과 텍스트: 엠비씨에서 사극이 이렇게 망한다는 것을 깨달았다, [((0,3), OG)]
  3. 개행기반 텍스트와 레이블:
엠	B-OG
비씨	I-OG
##에 O
	O
사극	O
##이 O
 	O
이렇	O
##게 O
 	O
망한다 O
##는	O
 	O
것	O
##을	O
 	O
깨달	O
##았다	O

1. 꺾새 기반 텍스트

input_text_ids, input_label_ids = preprocess(tokenizer=tokenizer, text=t)
# input_text_ids, input_label_ids = preprocess(tokenizer=tokenizer, text=t, labels=labels)

2. 포지션과 텍스트

input_text_ids, input_label_ids = preprocess(tokenizer=tokenizer, raw_text=t, pos_label_list=t_info_list, labels=labels)

3. 개행기반 텍스트와 레이블

input_text_ids, input_label_ids = preprocess(tokenizer=tokenizer, text=t, labels=labels)