P-stage2 [Day7] focal loss, 다른 tokenizer들
과거의 것들/AI Tech boostcamp

P-stage2 [Day7] focal loss, 다른 tokenizer들

수업내용

오늘은 뭘 할거냐면 문장에 있는 각 token들이 어떤 범주에 속하는지, 그러니까 사람이름인지 장소인지 기업이름인지 등을 구분하는것도 있고, 동사인지 명사인지 등을 구분하는 것도 있다.

개체명 인식 Named Entity Recognition (NER)은 인명, 기관명, 지명 등과 같이 특정한 의미를 가지는 단어 또는 어구(개체)등을 인식하는 과정을 의미한다.

품사태깅 Part-of-speech tagging (POS TAGGING)은 주어진 각 성분의 품사를 확인. 동사인지 명사인지 형용사인지 등..

이걸 위한 한국해양대학교에서 공개해준 한글용 데이터셋 kor-ner이 있다.

특이한건 이 데이터셋에선 BIO를 지원해줌. 이게 뭐냐면 각 단어가 시작되는 지점 B, 이미 시작해서 안에 있는 지점 I, 단어가 끝나서 나가는 지점 O를 구분해서 넣어놨다. 그냥 쓰고 싶으면 쓰라고 ㅎ

그래서 이걸 BERT로 할건데 주의할 점이 있음.

마스터님 같은 경우 그냥 berttokenizer를 안쓰고 음절 단위로 분리한다고 하신다. 왜그러냐면 만약 '이순신은 조선 중기의 무신이다'를 token으로 만들었을 때 앞의 '이순' 은 사람 이름으로 분류할 수가 있겠지만 tokenizer가 '##신은' 이라고 바꿨다고 해보자. 그런 이 '##신은'은 어떻게 해도 사람 이름으로 분류할 수가 없다. 이런 문제때문에 차라리 음절단위로 나누는 듯. UNK가 없는것은 덤이고.

이게 오늘 실습에서 할 학습 과정임.

실습

Day7_실습자료0문장_토큰_단위_학습.ipynb의 사본

Google Colaboratory

위에서 봤던 ner 데이터셋을 어떻게 이용하는지게 이용하는지

Bert 모델을 목적에 따라 다른 이름으로 가져옴.

답이 어디에 있는지 알아내는 기계 독해 학습

Day7_실습자료1기계_독해_학습.ipynb의 사본

Google Colaboratory

피어세션

번역기 등으로 데이터 늘려도 성능이 안늘더라..
데이터 늘릴때 그냥 넣는게 아니라 각각 원래 있던 label 비율만큼 맞춰서 늘리거나 하니까 성능이 그나마 오르더라.
k-fold 앙상블하면 test할때 잘 올라가더라. 일반화가 아주 잘된거지. 5개를 평균낸게 제일 좋았다. softmax 더해서 평균한거 soft voting
정형데이터 클러스터링 한다음에 리샘플링. 군집화해서 그 대표값을 넣는 방식.

마스터세션

문제제기, 그거에 대한 해답. 한 세트씩.
블로그 메디움.

이직할 땐 미리 구해놓기.

내가 하고자 하는 최종 목표가 하나 있고 모든 프로젝트들이 그거에 맞춰서 진행되는게 좋다. 이 목표를 이루기 위해선 이러이러한게 필요해서 이 프로젝트를 진행했다. 기존 논문의 문제점들은...

취업 목표라면 실용적인거.

목표

어제 봤던 가능해 보이는것들 해보기

행동

일단 데이터 불균형이 심하기 때문에 focal loss도 사용해 보기로 했다. focal loss를 사용하니 .val loss는 그냥 cross entropy를 사용할 때보다 확실히 줄었다.

근데 이상한 점이 있다. cross_entropy0.25 + focal0.75와 cross_entropy0.75 + focal0.25로 사용했을 때

비교표

비교표 4f289d7268a44e04b02ef309badbf132.csv
0.00MB

로 나온 것. focal을 더 섞어 사용했을 때 val loss는 확실히 줄어들지만 val acc은 거의 같았다. 왜이러는지 모르겠음.

내가 지금 사용하는 roberta에서 roberta용 tokenizer말고 다른 tokenizer 사용해도 된다길래 UNK가 제일 적게 나온다는 electra 써봤는데 acc이 0.5에서 고정되길래 안쓰는게 나을것같음.