일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- genetic epidemiology
- 확산텐서영상
- 비모수적 모델
- parrec
- decorater
- parametric model
- PYTHON
- paper review
- 데코레이터
- MICCAI
- nfiti
- words encoding
- nibabel
- 유전역학
- nlp
- non-parametric model
- MRI
- parer review
- 확산강조영상
- tabular
- 파이썬
- monai
- TabNet
- Surgical video analysis
- Phase recognition
- 코드오류
- 모수적 모델
- deep learning #segmentation #sementic #pytorch #UNETR #transformer #UNET #3D #3D medical image
- TeCNO
- precision #정밀도 #민감도 #sensitivity #특이도 #specifisity #F1 score #dice score #confusion matrix #recall #PR-AUC #ROC-AUC #PR curve #ROC curve #NPV #PPV
- Today
- Total
KimbgAI
[NLP] 다양한 word encoding 방법 (bag of words, N-gram, TF-IDF) 본문
이 내용은 유투브 허민석님의 자료를 공부하며 정리하기 위해 작성된 내용임을 밝힙니다.
https://www.youtube.com/@TheEasyoung
bag of words 란?
단어는 머신러닝 모델에 입력으로 사용하기 위해 숫자로 변환되어야함.
이를 위한 다양한 방법들이 있는데, 그 중 가장 기초적인 것이 바로 bag of words 라는 것으로 굉장히 심플하다.
전체 데이터셋에서 나타나는 모든 단어 기반으로 임의의 문장을 원핫인코딩(one-hot encoding)하여 나타낸 것.
가령, 아래와 같이 나타내는 것이다.
전체 데이터셋에서 나타나는 각각의 유니크한 문자들을 나열하고,
어떤 문장을 이루는 단어들이 해당 문장에 몇번 나타났는지 표기하는 것이다.
이로써 다른 문장들과의 유사성도 계산할 수 있다.
요즘과 같이 엄청난 양의 문자를 처리해야하는 시대에 이 방법의 단점은 매우 치명적이다.
1. Sparsity
- 단어가 백만개, 천만개가 있다면 원핫인코딩된 문장은 굉장히 sparse한 vector으로 표현됨.
- 이는 학습에 치명적임. 공간에 비해 정보량이 너무 적어 효율적으로 학습하기 어렵기 때문.
2. 문장간의 유사성이 단지 단어출현 빈도에 의해 결정되기 때문에 엉뚱한 결과로 이어질 수 있음.
1번째 문장과 2번째 문장이 3번째 문장보다 의미적으로 더 유사하지만, 계산상에서는 단지 '단어의 출현빈도'로 인해 3번째 문장이 더 유사하게 나타남.
3. 의미, 맥락이 무시됨.
home run과 run home은 아예 다른 뜻임에도 같은 문장으로 계산될 것임.
4. Out of vocabulary
오타가 있거나 신조어 등 학습하지 못한 단어에서는 굉장히 무기력해짐.
Real world 에서는 위와같은 상황이 빈번하게 발생하기 마련인데, 이를 반영하지 못함.
N-gram이란?
N-gram은 연속적인 N개의 토큰으로 구성된 일련의 시퀀스를 말한다.
여기서 토큰은 알파벳이나 단어 등이 될 수 있다.
예를 들어, 1-gram (unigram) 인 경우에는 아래와 같이 계산됨.
2-gram (bigram)인 경우에는
3-gram (trigram)인 경우에는
뭐 이런식이다.
N-gram은 bag of words의 단점을 일부 보완할 수 있다.
예를들면, bag of words로 나타내면 아래와 같이 나타낼 수 있다.
여기서는 'not'이라는 단어의 위치에 따라 문장 해석이 완전히 달라지지만, bag of words는 이를 고려하지 못한다.
반면 word level에서 bi-gram으로 나타내면,
으로 나타나기 때문에 not boring이 붙어있게 되어, 보다 문장의 의미를 파악하는데 도움이 됨.
또한 다음 단어를 추천해주는데 도움도 준다.
아래와 같이 3문장이 있을때 tri-gram으로 나타내면 how are you의 빈도가 가장 높다.
그래서 'how are' 까지만 작성했을때 'you'라는 단어를 추천해줄 수 있다.
spelling 체크할때도 마찬가지로,
q는 u와 거의 붙어서 나오기 때문에, qwality라는 단어는 나타났을때 qw가 아닌 qu를 추천해줄 수 있음.
TF-IDF 이란?
임의의 문장에서 특정 단어의 중요도, 연관성 등을 측정해주는 방법 중의 하나이다. (Full name: Term Frequency Inverse Document Frequency)
TF는 (특정 단어의 출현빈도 / 사용된 단어 갯수) 를 나타내며, bag of words와 비슷하다.
그리고 앞서 설명한 bag of words의 단점을 IDF을 통해 보정한다.
수식은 Log(총 문장의 갯수 / 특정 단어 출현 빈도) 임.
즉, 특정 단어의 출현빈도가 많아지면 값이 작아짐.
아래와 같이 계산됨.
이 TF-IDF를 가지고 문장 혹은 문서의 유사도를 측정할 수 있다.
일반적인 bag of words로 나타낸 유사도와 TF-IDF로 계산된 bag of words의 유사도와 비교해보자.
아래와 같이 4개의 문장이 있다고 해보자
bag of words로 나타내면 아래와 같고,
d4와 나머지 문장의 코사인 유사도를 계산하면, d1이 0.82로 가장 높다.
하지만, d4는 '최고의 아메리카 레스토랑'를 의미하고 있는데 단지 d1과 'the best'라는 단어가 비슷하게 출현되어 이탈리안 레스토랑, 파스타가 포함된 문장과의 유사도가 가장 높게 나타난 것을 볼 수 있다.
하지만 TF-IDF로 계산하면,
로 나타나고, 코사인 유사도는 아래 그림과 같이,
실제 의미적으로 가장 유사한 d2가 가장 높은 유사도를 보인다.
단점도 분명하다.
마찬가지로 '단어'의 출현빈도를 통해 계산되기 때문에 서로 다른 단어들과의 유사도는 고려하지 않는다.
또한 동의어(synonym)에 약하다.
예를들어,
위와같이 거의 같은 내용임에도 겹치는 단어가 하나도 없기 때문에 유사도는 0으로 계산된다.
이러한 한계를 극복하기 위해
LSA (Latent semantic analysis) (잠재의미분석) 이나
Word2Vec, Glove와 같은 word embvedding 기법 등이 단어를 인코딩하는데에 좀더 최신 방법이라고 할 수 있다.
끝!