| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 다항분포
- geocoding
- 자연어 모델
- 피파온라인 API
- Tableu
- 옵티마이저
- 구글 스토어 리뷰
- 붕괴 스타레일
- 토픽 모델링
- 원신
- Optimizer
- KeyBert
- Roberta
- 데이터리안
- 데벨챌
- 포아송분포
- 문맥을 반영한 토픽모델링
- LDA
- 클래스 분류
- 트위치
- 조축회
- 블루 아카이브
- SBERT
- 코사인 유사도
- BERTopic
- CTM
- 블루아카이브 토픽모델링
- 데이터넥스트레벨챌린지
- 개체명 인식
- NLP
- Today
- Total
분석하고싶은코코
NLP - SBERT(Sentence-Bert) 본문
SBERT는 BERT의 문장 임베딩 성능을 우수하게 개선 시킨 파인튜닝 모델입니다. 문장 임베딩은 문장을 벡터 공간에 배치하여 문장 간 비교, 클러스터링과 같은 다양한 분석에 이용할 수 있는 장점이 있습니다.
SBERT에 대해서 이해하기 위해서 풀링(pooling)에 대해서 먼저 알아보고 BERT의 문장 임베딩을 알아보고 SBERT에 대해서 알아보는 순서로 SBERT를 이해하는 과정을 밟아가 보겠습니다.
1) 풀링(Pooling)
풀링 작업은 피처멥을 대표하는 피처멥을 만드는 작업이라고 생각하시면 됩니다. 이게 무슨소리냐? 이해를 돕기위해 예를 들어보겠습니다. A고등학교에 3학년이 존재합니다. 3학년에는 각 학급이 있겠죠? 학급은 10개의 반이 있다고 해보겠습니다. 그렇다면 10개 반에는 각각의 학생들이 있습니다. 자 이렇게 학교 -> 학급 -> 학생으로 순서대로 내려갔습니다. 그러면 이제 역으로 올라가는 과정을 거쳐보겠습니다. 운동회에서 홀수와 짝수반으로 나누어 계주를 진행한다고 해보겠습니다. 그러면 각 학급마다 대표학생들이 한 명씩 차출이 될 것입니다. 그러면 이 학생들은 각 반을 대표하는 학생들이 되는거죠. 여기까지 이해를 하셨나요? 그러면 풀링에 대한 작업도 이해를 하신 겁니다. 학생들이 최소의 피처들이 되었었고 학급은 풀링을 위한 범위였습니다. 그리고 계주 대표를 뽑는 과정에서 가장 빠른 사람이 뽑혔었겠죠? 이게 풀링의 방식 중 하나인 맥스풀리을 했다고 할 수 있습니다. 그렇게 모인 10명의 계주 주자들을 통해서 A학교의 3학년의 달리기를 대표한다고 말 할 수 있겠죠. 이것이 풀링 작업입니다.
이러한 풀링 작업은 사실 가장 많이 쓰이는 곳은 사진, 이미지, 영상을 처리하는 곳에서 많이 쓰입니다. 화질을 개선한다던가 모자이크를 한다던가 이런 작업에 이 풀링 작업이 무조건 들어갑니다. 그런데 자연어처리에서도 이게 가능하다는 것이죠. BERT를 통해서 우리는 단어들의 임베딩 백터를 얻습니다. 이 들은 하나의 문장을 구성하고 있는거죠. 그런데 풀링을 통해서 문장을 대표할 수 있는 하나의 백터를 만들 수 있다는 것입니다. 이정도 개념을 이해했으면 BERT의 문장 임베딩에 대해서 알아보겠습니다.
2) BERT의 문장 임베딩
BERT를 사용해 문장 임베딩할 수 있는 방법들은 많이 존재하지만 대표적인 방법 2가지에 대해서 알아보겠습니다.
- [CLS] 토큰
- Pooling
- MAX-Pooling
- AVERAGE-Pooling
2-1) [CLS] 토큰
앞서 BERT에 대해서 알아볼때 [CLS] 토큰을 통해서 문장의 긍정, 부정을 분류하는 작업에 대해서 이야기한 바 있습니다. 즉, [CLS] 토큰이 문장을 대표한다고 할 수 있습니다. 이게 BERT의 문장 임베딩 방법중 하나입니다. 꼭 긍정과 부정 이진 분류가 아니라 다중 클래스 분류의 경우도 이 [CLS] 토큰을 활용하여 분류가 가능합니다. 따라서 대표적인 문장 임베딩 방법 중 하나라고 할 수 있겠습니다.

2-2) Pooling
처음에 풀링에 대해서 설명하였습니다. 앞서 풀링의 방법 중 하나인 맥스풀링에 대해서 설명하였습니다. 다른 방법으로는 평균풀링이 존재합니다. 이 두 가지 풀링 방법을 통해서 문장 임베딩을 진행할 수 있습니다. BERT 모델을 통해서 나온 출력들에 대해서 평균 혹은 맥스 풀링을 진행하게 되는데 두 가지로 나눠서 이야기하는 이유는 각각의 풀링을 통해서 나오는 문장 벡터가 대표하는 의미가 다르기 때문입니다. 평균 풀링을 통해서 나온 문장 벡터는 BERT를 통해 나온 결과들의 의미를 대부분을 반영하고 있다면 맥스 풀링을 통한 문장 백터는 문장에서 중요한 단어의 의미를 담은 문장 벡터라고 이해하시면 되겠습니다.

3) SBERT
SBERT는 위에서부터 이해해온 과정을 수행하여 BERT를 파인튜닝한 모델이라고 생각하시면 됩니다. 포스팅 맨 처음 언급하였는데 SBERT는 문장간의 비교, 분석에 유용하다고 하였습니다. 앞에서는 어떤 방법을 사용하는지에 대해서 알아보았고 이제는 방법을 활용해 SBERT가 어떻게 학습하는지에 대해서 알아보겠습니다. 학습 구조는 2개로 나눌 수 있습니다. 훈련을 시키고자 하는 데이터의 종류에 따라 나뉘는데 우리가 흔히 알고 있는 데이터 형태와 일치합니다. Categorical, Numerical 두 가지 데이터중 어떤 데이터냐 따라에서 훈련 방법이 달라집니다. 우선 Categorical 데이터에 대한 훈련 방법에 대해서 알아보겠습니다.
Categorical 데이터에 대한 훈련 방법은 아래 그림과 같이 문장 A, B가 각가 BERT 통해서 나온 결과값을 설정한 풀링 방식을 통해서 문장 벡터를 각각 만들어 냅니다. 이를 u, v라 할때 두 벡터를 그냥 합치(concat)는게 아니라 |u-v|라는 값까지 포함한 3가지를 concat하게 됩니다. 이를 통해서 나온 벡터는 가중치 행렬과 곱해지고 이를 통해 나온 벡터는 softmax함수를 지나 최종 결과를 얻게 됩니다.

Numerical 데이터의 훈련 방법은 아래와 같습니다. 그 이유는 문장 간 비교를 수치로 표현한 것이기 때문입니다. 따라서 풀링을 통해서 나온 각각의 벡터들의 코사인 유사도를 통해서 그 수치를 구하는 작업을 하게 됩니다. 만약 스코어의 점수 범위가 0~10점이라면 두 벡터의 코사인 유사도를 10으로 나누어 학습을 진행시켜주면됩니다.

'머신러닝&딥러닝 > NLP' 카테고리의 다른 글
| NLP - KeyBert 토픽 모델링 (1) | 2023.10.09 |
|---|---|
| NLP - 한국어 자연어 모델(Korean Language Model) (1) | 2023.10.06 |
| NLP - BERT 실전 활용(2) (1) | 2023.10.03 |
| NLP - BERT 실전 활용(1) (1) | 2023.10.01 |
| NLP - Bert이해하기(2)_트랜스포머(transformer) (1) | 2023.09.29 |