GCUTermProjectHell/Korean_ABSA

[ 🏅금상 (국립국어원장상) 솔루션 ] 2022 국립국어원 인공 지능 언어 능력 평가 Team GCU_텀프지옥입니다

5

stars

52

commits

Jupyter Notebook

primary language

Dec 1, 2023

updated

absa
nlp
pytorch

README

대회 개요

2022 국립국어원 인공 지능 언어 능력 평가 Team GCU_텀프지옥입니다

사용되는 Dataset은 국립국어원이 쇼핑 리뷰를 기반으로 구축한 '속성 기반 감성 분석' 말뭉치입니다. 이 대회는 속성 기반 감성 분석(ABSA)을 수행하는 모델을 구현하는 과제입니다.

  1. 속성 범주 (예: 제춤 전체#인지도)
  2. 감성 (긍정/부정/중립)

참가팀은 입력된 문장에 대해 위의 속성 범주와 감성을 추출하고, 정답 튜플과 예측된 튜플을 비교하여 계산된 F1 점수를 통해 인공지능 모델의 성능을 평가합니다.

최종 Inference 방법

1. docker 가상환경 생성

docker build -t gcu_tphell:1.0 .

docker run --ipc host --gpus all -it --name hell gcu_tphell:1.0

위 명령어를 터미널에 입력하여 docker 생성 및 활성화한다.

2. 평가용 데이터 삽입

dataset/task_ABSA/ 폴더안에 nikluge-sa-2022-test.jsonl 파일의 형태로 삽입

3. 모델 다운로드

모델 다운로드 후 압축 해제하여 saved_model 폴더를 All.sh 와 같은 디렉토리에 위치시킨다. https://drive.google.com/file/d/1s8qriUESwZzu4F9a0n_pMQ4D3xyQoh6r/view?usp=share_link

4. Inference 코드 실행

bash All.sh 쉘 스크립트 실행시

requirements.txt 내의 패키지 설치 후 inference 및 앙상블 수행

5. 평가가 완료되면 final.jsonl 형태로 최종 저장된다.

데이터 분석 및 추가,증강

image

학습 데이터셋 polarity: positive 94.7%, neutral 3.3%, negative 2.0%

image

평가 데이터셋 polarity: positive 97.3%, neutral 1.8%, negative 0.9%

추가 데이터

네이버 쇼핑 후기 crawling data:
대회 제공 데이터셋과 비슷한 카테고리의 상품 후기를 네이버 쇼핑에서 직접 크롤링. 대회 제공 데이터의 라벨링 기준을 분석하여 최대한 비슷한 경향성을 가지고 라벨링을 진행 후 데이터셋에 추가

Gold data 120개:
국립 국어원 21년 속성 기반 감성 분석 말뭉치에서 대회 제공데이터에 미포함된 데이터 약 120개
(이들 120개 중 일부는 연예인 이름이 &name&으로 치환된 형태로, train 혹은 dev 데이터셋에 중복되어있던 걸로 확인됨,
하지만 test 데이터셋에는 단 한개도 포함되지 않음)

모델 1) kykim/Electra

kykim/electra-kor-base: https://github.com/kiyoungkim1/LMkor

  • 국내 주요 커머스 리뷰 1억개 + 블로그 형 웹사이트 2000만개 (75GB)
  • 모두의 말뭉치 (18GB)
  • 위키피디아와 나무위키 (6GB)

input 데이터 형식

[“문장에서 속성을 찾으시오:” + sentence_form ]

대응되는 정답 label

속성#개체에서 “#”을 “ ”로 바꾸고 [+ 정답1 + 정답2 ]

image

모델 2) paust/pko-t5-large

paust/pko-t5-large: https://huggingface.co/paust/pko-t5-base
한국어 데이터 (나무위키, 위키피디아, 모두의 말뭉치)를 T5의 span corruption task를 사용해서 unsupervised learning한 사전학습 모델

image

input 데이터 형식

[“문장에서 속성을 찾으시오:” + sentence_form + “이 문장의 속성은 <extra_id_0> <extra_id_1> <extra_id_2> <extra_id_3><extra_id_4>이다”]

대응되는 정답 label

토큰을 총 5가지로 한 이유는 한 문장에서 최대로 생성할 수 있는 정답 라벨을 5개로 설정하여 추가하였다. 이에 따라 T5모델에서 정답이 2가지 일 경우 아래 예시와 같이 입력하였다.

[+<extra_id_0>+정답1+<extra_id_1>+정답2+<extra_id_2>+<extra_id_3>+<extra_id_4>]

<extra_>

image

모델 Ensemble

Voting 통해 ACD (entity 분류) 후, 최종적으로 ensemble된 ACD에 ASC를 inference하여 최종본으로 제출
(본 팀은 이번 대회의 task는 결국 entity classficiationd에서 당락이 결정될 것으로 판단했다)

image

대응하는 정답라벨은 속성#개체에서 “#”을 “ ”로 바꾸고 [+ 정답1 + 정답2 ] 형식으로 넣었다.

Contributors

YEonleo

25 commits

Kimy19

22 commits

JuHyng

5 commits

GCUTermProjectHell/Korean_ABSA

[ 🏅금상 (국립국어원장상) 솔루션 ] 2022 국립국어원 인공 지능 언어 능력 평가 Team GCU_텀프지옥입니다

5

stars

52

commits

Jupyter Notebook

primary language

Dec 1, 2023

updated

absa
nlp
pytorch

README

대회 개요

2022 국립국어원 인공 지능 언어 능력 평가 Team GCU_텀프지옥입니다

사용되는 Dataset은 국립국어원이 쇼핑 리뷰를 기반으로 구축한 '속성 기반 감성 분석' 말뭉치입니다. 이 대회는 속성 기반 감성 분석(ABSA)을 수행하는 모델을 구현하는 과제입니다.

  1. 속성 범주 (예: 제춤 전체#인지도)
  2. 감성 (긍정/부정/중립)

참가팀은 입력된 문장에 대해 위의 속성 범주와 감성을 추출하고, 정답 튜플과 예측된 튜플을 비교하여 계산된 F1 점수를 통해 인공지능 모델의 성능을 평가합니다.

최종 Inference 방법

1. docker 가상환경 생성

docker build -t gcu_tphell:1.0 .

docker run --ipc host --gpus all -it --name hell gcu_tphell:1.0

위 명령어를 터미널에 입력하여 docker 생성 및 활성화한다.

2. 평가용 데이터 삽입

dataset/task_ABSA/ 폴더안에 nikluge-sa-2022-test.jsonl 파일의 형태로 삽입

3. 모델 다운로드

모델 다운로드 후 압축 해제하여 saved_model 폴더를 All.sh 와 같은 디렉토리에 위치시킨다. https://drive.google.com/file/d/1s8qriUESwZzu4F9a0n_pMQ4D3xyQoh6r/view?usp=share_link

4. Inference 코드 실행

bash All.sh 쉘 스크립트 실행시

requirements.txt 내의 패키지 설치 후 inference 및 앙상블 수행

5. 평가가 완료되면 final.jsonl 형태로 최종 저장된다.

데이터 분석 및 추가,증강

image

학습 데이터셋 polarity: positive 94.7%, neutral 3.3%, negative 2.0%

image

평가 데이터셋 polarity: positive 97.3%, neutral 1.8%, negative 0.9%

추가 데이터

네이버 쇼핑 후기 crawling data:
대회 제공 데이터셋과 비슷한 카테고리의 상품 후기를 네이버 쇼핑에서 직접 크롤링. 대회 제공 데이터의 라벨링 기준을 분석하여 최대한 비슷한 경향성을 가지고 라벨링을 진행 후 데이터셋에 추가

Gold data 120개:
국립 국어원 21년 속성 기반 감성 분석 말뭉치에서 대회 제공데이터에 미포함된 데이터 약 120개
(이들 120개 중 일부는 연예인 이름이 &name&으로 치환된 형태로, train 혹은 dev 데이터셋에 중복되어있던 걸로 확인됨,
하지만 test 데이터셋에는 단 한개도 포함되지 않음)

모델 1) kykim/Electra

kykim/electra-kor-base: https://github.com/kiyoungkim1/LMkor

  • 국내 주요 커머스 리뷰 1억개 + 블로그 형 웹사이트 2000만개 (75GB)
  • 모두의 말뭉치 (18GB)
  • 위키피디아와 나무위키 (6GB)

input 데이터 형식

[“문장에서 속성을 찾으시오:” + sentence_form ]

대응되는 정답 label

속성#개체에서 “#”을 “ ”로 바꾸고 [+ 정답1 + 정답2 ]

image

모델 2) paust/pko-t5-large

paust/pko-t5-large: https://huggingface.co/paust/pko-t5-base
한국어 데이터 (나무위키, 위키피디아, 모두의 말뭉치)를 T5의 span corruption task를 사용해서 unsupervised learning한 사전학습 모델

image

input 데이터 형식

[“문장에서 속성을 찾으시오:” + sentence_form + “이 문장의 속성은 <extra_id_0> <extra_id_1> <extra_id_2> <extra_id_3><extra_id_4>이다”]

대응되는 정답 label

토큰을 총 5가지로 한 이유는 한 문장에서 최대로 생성할 수 있는 정답 라벨을 5개로 설정하여 추가하였다. 이에 따라 T5모델에서 정답이 2가지 일 경우 아래 예시와 같이 입력하였다.

[+<extra_id_0>+정답1+<extra_id_1>+정답2+<extra_id_2>+<extra_id_3>+<extra_id_4>]

<extra_>

image

모델 Ensemble

Voting 통해 ACD (entity 분류) 후, 최종적으로 ensemble된 ACD에 ASC를 inference하여 최종본으로 제출
(본 팀은 이번 대회의 task는 결국 entity classficiationd에서 당락이 결정될 것으로 판단했다)

image

대응하는 정답라벨은 속성#개체에서 “#”을 “ ”로 바꾸고 [+ 정답1 + 정답2 ] 형식으로 넣었다.

Contributors

YEonleo

25 commits

Kimy19

22 commits

JuHyng

5 commits

Languages

Jupyter Notebook

74.3%

Python

24.3%

Shell

1.2%