이번 프로젝트에서는 KLUE 데이터를 활용해 단어 사이의 관계추출 모델을 학습시킵니다.
프로젝트 주제 | 관계 추출(Relation Extraction)은 문장의 단어(Entity)에 대한 속성과 관계를 예측하는 문제입니다. 관계 추출은 지식 그래프 구축을 위한 핵심 구성 요소로, 구조화된 검색, 감정 분석, 질문 답변하기, 요약과 같은 자연어처리 응용 프로그램에서 중요합니다. 비구조적인 자연어 문장에서 구조적인 triple을 추출해 정보를 요약하고, 중요한 성분을 핵심적으로 파악할 수 있습니다. |
---|---|
활용 장비 및 재료 | GPU : Tesla V100 |
• 개발환경 : Jupyter Lab , VS code | |
• 협업 tool : | |
◦ Notion : 회의록 정리 , Experiment Page 만들어서 실험 정리 및 공유 | |
◦ Github : 프로젝트 업무 분배 및 코드 협업 | |
◦ Wandb : 실험 결과 공유 | |
◦ Slack, 카카오톡 : 활발한 의견 공유 | |
프로젝트 구조 및 사용 데이터셋의 구조도(연관도) | train.csv: 총 32470개 |
test_data.csv: 총 7765개 (정답 라벨 blind = 100으로 임의 표현) | |
sentence, subject_entity, object_entity, label, source의 column으로 이루어짐 | |
기대 효과 | 문장 속에서 단어간에 관계성을 파악하는 것은 의미나 의도를 해석함에 있어서 많은 도움을 줍니다. |
그림의 예시와 같이 요약된 정보를 사용해 QA 시스템 구축과 활용이 가능하며, 이외에도 요약된 언어 정보를 바탕으로 효율적인 시스템 및 서비스 구성이 가능합니다. |
id: 0
sentence: 〈Something〉는 조지 해리슨이 쓰고 비틀즈가 1969년 앨범 《Abbey Road》에 담은 노래다.
subject_entity: {'word': '비틀즈', 'start_idx': 24, 'end_idx': 26, 'type': 'ORG'}
object_entity: {'word': '조지 해리슨', 'start_idx': 13, 'end_idx': 18, 'type': 'PER'}
label: no_relation
source: wikipedia
김태일_T3063 | input sentence tagging, custom model 제작, 앙상블 코드 제작, 성능 검증 코드 제작 |
---|---|
문찬국_T3076 | Multi-Sentence, Tagging 실험, Refactoring, Sweep구현, 앙상블 실험, 협업툴(GIt) 관리, TestRecording 구현 |
이재학_T3161 | EDA(중복 및 mislabeling 제거), 평가 metric 분석, 하이퍼 파라미터 튜닝, Random Seed 및 EarlyStopping 구현 |
하성진_T3230 | Custom Loss 구현 및 실험, Entity Type Restriction 모델 구현 및 실험, KFold 코드 제작, AMP 적용 |
한나연_T3250 | EDA, Data Augmentation, Curriculum Learning 적용, confusion matrix 시각화 |
KLUE Relation Extraction 데이터셋은 train dataset 32470개, test dataset 7765개로 각각 id, sentence, subject entity, object entity, label, source 항목으로 구성된다. (자세한 데이터 구조는 데이터 개요 부분 참고)
subject entity와 object entity는 각각 word, start_idx, end_idx, type 정보로 구성된다. subject entity에는 PER(사람), ORG(기관)
2가지 type이 존재하고, object entity에는 PER(사람), ORG(기관), POH(기타), DAT(날짜), LOC(장소), NOH(수량)
6가지 type이 존재한다. subject entity는 type별로 고른 분포를 보이지만, object entity는 편향된 분포를 가진다.
subject entity 종류
object entity 종류
문장 길이인 sentence 컬럼 길이 시각화한 결과 평균 길이는 97, 최대 길이는 455로 문장 길이가 굉장히 긴 outlier도 존재하는 것을 확인했다. 데이터셋의 문장의 길이가 전반적으로 118 이하임을 기반으로 토크나이저의 max_length를 512에서 256으로 줄일 수 있었다.
문장 길이인 sentence 컬럼 길이 시각화
count 32470.000000
mean 97.083954
std 47.939902
min 14.000000
25% 64.000000
50% 87.000000
75% 118.000000
max 455.000000
총 30개의 relation이 존재하며, 가장 많은 no_relation
클래스는 9513개, per:place_of_death
클래스는 40개로 클래스별로 극심하게 불균형하다.
train dataset의 클래스별 분포
30가지 relation 설명 <출처: KLUE 논문>
subject 타입에 따른 라벨 갯수
오른쪽 표와 같이, Subject 타입에 따른 Label 타입은 Subject type에 종속되는 라벨을 사용하고 있음을 확인할 수 있었다. 예를 들어, Subject Type이 ORG인 경우 Label이 ‘org:~’이 사용됨을 확인할 수 있었다.
하지만, 전체 데이터 중 일부 데이터가 클래스 라벨이 Subject Type 따라가지 않는 것을 확인할 수 있었다. 이는 전체중 극히 일부로, 미스라벨링된 데이터로 판단하였다.