> For the complete documentation index, see [llms.txt](https://lswkim322.gitbook.io/til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lswkim322.gitbook.io/til/til-ml/boostcamp/p-stage-klue/5-bert.md).

# (5강) BERT 기반 단일 문장 분류 모델 학습

> 3강에서 배운 BERT를 활용하여 단일 문장 분류 모델 TASK 해결하기\
> 활용분야로 긍/부정등의 감정분석, 뉴스의 카테고리 분류, 비속어 판단 모델 등
>
> \[Reference]\
> [BERT Text Classification Using Pytorch](https://towardsdatascience.com/bert-text-classification-using-pytorch-723dfb8b6b5b)\
> [Sentiment Analysis with BERT](https://curiousily.com/posts/sentiment-analysis-with-bert-and-hugging-face-using-pytorch-and-python/)\
> [네이버 영화리뷰 감정분석](https://colab.research.google.com/drive/1tIf0Ugdqg4qT7gcxia3tL7und64Rv1dP)\
> [Sequence Classification using Pytorch Lightning with BERT](https://medium.com/@knswamy/sequence-classification-using-pytorch-lightning-with-bert-on-imbd-data-5e9f48baa638)\
> [BERT Fine-Tuning Tutorial with PyTorch](https://mccormickml.com/2019/07/22/BERT-fine-tuning/)

## 1. KLUE 데이터셋 소개

한국어 자연어 이해 벤치마크(Korean Language Understanding Evaluation, KLUE)

### 1.1. KLUE 데이터셋 종

{% content-ref url="/pages/-MkPOfnuf6\_LYLEWPs3T" %}
[KLUE](/til/til-ml/untitled-2/klue.md)
{% endcontent-ref %}

### 1.2. 의존 구문 분석

단어들 사이의 관계를 분석하는 task

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-MkenrW3y3CkUJ0lmh-L%2F-MkepTR_1u3NNgN7rI9O%2Fimage.png?alt=media\&token=217a71ba-b6ad-4b3e-ae75-a11e1ebc1356)

* 특징
  * 지배소: 의미의 중심이 되는 요소
  * 의존소: 지배소가 갖는 의미를 보완해주는 요소
  * 어순과 생략이 자유로운 한국어와 같은 언어에서 주로 연구된다.
* 분류 규칙
  * 지배소는 후위언어이다. 즉 지배소는 항상 의존소보다 뒤에 위치한다.
  * 각 의존소의 지배소는 하나이다.
  * 교차 의존 구조는 없다.
* 분류 방법
  * Sequence labeling 방식으로 처리 단계를 나눈다.
  * 앞 어절에 의존소가 없고 다음 어절이 지배소인 어절을 삭제하며 의존 관계를 만든다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-MkenrW3y3CkUJ0lmh-L%2F-MkeqE55EgGo94nYm-BT%2Fimage.png?alt=media\&token=b1333948-f58d-485e-9b8e-ae81a76de987)

* 복잡한 자연어 형태를 그래프로 구조화해서 표현이 가능해진다. 즉, 각 대상에 대한 정보 추출이 가능해 진다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-MkenrW3y3CkUJ0lmh-L%2F-MkerGfejJRPnR_9ZxSD%2Fimage.png?alt=media\&token=b1107989-ad0e-41a1-a232-32a4e35d08ec)

* 구름그림 -> 새털구름을 그린 것 -> 내가 그린 것
* "나"는 "구름그림"을 그렸다
* "구름그림"은 "새털구름"을 그린것이다.

## 2. 단일 문장 분류 task 소개

### 2.1. 문장 분류 task

주어진 문장이 어떤 종류의 범주에 속하는지를 구분하는 task

* **감정 분석(Sentiment Analysis)**
  * 문장의 긍정 또는 부정 및 중립 등 성향을 분류하는 프로세스
  * 문장을 작성한 사람의 느낌, 감정등을 분석 할 수 있기 때문에 기업에서 모니터링, 고객지원, 또는 댓글에 대한 필터링 등을 자동화하는 작업에 주로 사용
  * **활용 방안**
    * 혐오 발언 분류: 댓글, 게임대화 등 혐오 발언을 분류하여 조치를 취하는 용도로 활용
    * 기업 모니터링: 소셜, 리뷰등 데이터에 대해 기업 이미지, 브랜드선호도, 제품평가 등 긍정 또는 부정적 요인을 분석
* **주제 라벨링(Topic Labeling)**
  * 문장의 내용을 이해하고 적절한에 범주를 분류하는 프로세스
  * 주제별로 뉴스 기사를 구성하는 등 데이터 구조화와 구성에 용이
  * **활용 방안**
    * 대용량 문서 분류: 대용량의 문서를 범주화
    * VoC(Voice of Customer): 고객의 피드백을 제품 가격, 개선점, 디자인등 적절한 주제로 분류하여 데이터를 구조화
* **언어감지(Language Detection)**
  * 문장이 어떤 나라 언어인지를 분류하는 프로세스
  * 주로 번역기에서 정확한 번역을 위해 입력 문장이 어떤 나라의 언어인지 타켓팅 하는 작업이 가능
  * **활용 방안**
    * 번역기: 번역할 문장에 대해 적절한 언어를 감지함 (구글 번역기: 자동감지)
    * 데이터 필터링: 타겟 언어 이외 데이터는 필터링
* **의도 분류(Intent Classification)**
  * 문장이 가진 의도를 분류하는 프로세스
  * 입력 문장이 질문, 불만, 명령 등 다양한 의도를 가질 수 있기 때문에 적절한 피드백을 줄 수 있는 곳으로 라우팅 작업이 가능
  * **활용 방안**
    * 챗봇: 문장의 의도인 질문, 명령, 거절 등을 분석하고 적절한 답변을 주기 위해 활용

### 2.2. 문장 분류를 위한 데이터

* **Kor\_hate**
  * 혐오표현에 대한 데이터
  * 특정 개인 또는 집단에 대한 공격적 문장
  * 무례, 공격적이거나 비꼬는 문장
  * 부정적이지 않은 문장

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-MkesseV7ZD1U-e5BrIB%2F-MketuUT4vsUljwHdaEx%2Fimage.png?alt=media\&token=c9a0df12-e68c-4bd8-839c-63817e27eee6)

* **Kor\_sarcasm**
  * 비꼬지 않은 표현의 문장
  * 비꼬는 표현의 문장

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-MkesseV7ZD1U-e5BrIB%2F-Mkeu5Z0DMWfOGLfvzoW%2Fimage.png?alt=media\&token=0c1fbfff-7801-4f6b-a17a-ef35ed46b45d)

* **Kor\_sae**
  * 예/아니오로 답변 가능한 질문
  * 대안 선택을 묻는 질문
  * Wh-질문
  * 금지명령
  * 요구명령
  * 강한 요구 명령

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-MkesseV7ZD1U-e5BrIB%2F-MkeuMMhONmzsTP8wCov%2Fimage.png?alt=media\&token=0b04573f-fc5a-4469-a26c-20180525f7cc)

* **Kor\_3i4k**
  * 단어 또는 문장조각
  * 평서문
  * 질문
  * 명령문
  * 수사적 질문
  * 수사적 명령문
  * 억양에 의존하는 의도

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-MkesseV7ZD1U-e5BrIB%2F-MkeudInenA5ze7rMm8N%2Fimage.png?alt=media\&token=fb9e67ae-0712-416e-8327-53aec124b3b3)

## 3. 단일 문장 분류 모델 학습

### 3.1. 모델 구조도

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-MkesseV7ZD1U-e5BrIB%2F-MkevL-_3OScCKU7OYz4%2Fimage.png?alt=media\&token=2eb59316-6fb4-4047-8dbf-1dddeae4f711)

### 3.2. 학습과정

* **주요 매개변수**
  * `Input_ids`: sequence token 을 입력
  * `attention_mask`: \[0, 1]로 구성된 마스크이며 패딩 토큰을 구분
  * `token_type_ids`: \[0, 1]로 구성되있으며 입력의 첫 문장과 두번째 문장 구분
  * `position_ids`: 각 입력 시퀸스의 임베딩 인덱스
  * `inputs_embeds`: input\_ids 대신 직접 임베딩 표현을 할당
  * `labels`: loss 계산을 위한 레이블
  * `Next_sentence_label`: 다음 문장 예측 loss 계산을 위한 레이블

#### 전체적인 흐름

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-MkesseV7ZD1U-e5BrIB%2F-MkewJdb7WuQifqRVzJS%2Fimage.png?alt=media\&token=92eed179-77de-42c4-b09e-1bcf5e32b251)

## 실습코드 Link

{% embed url="<https://drive.google.com/file/d/1cyUuPbTZtF1BxvA86OHd2BgprMK3e6dw/view?usp=sharing>" %}
