일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이진탐색
- 알고리즘_스터디
- dp
- mrc
- dfs
- 백트랙킹
- Level1
- 기술면접
- 그래프이론
- Level2_PStage
- 정렬
- 다이나믹프로그래밍
- 이코테
- Level2
- python3
- 프로그래머스
- ODQA
- 부스트캠프_AITech_3기
- 최단경로
- 백준
- 개인회고
- 구현
- 부스트캠프_AITech3기
- 다시보기
- 그리디
- 알고리즘스터디
- 단계별문제풀이
- U_stage
- 파이썬 3
- 주간회고
- Today
- Total
국문과 유목민
[일일리포트] Day 33 (NLP Basic) 본문
해당 일일리포트에서는 네이버 커넥트에서 진행하는 '부스트캠프 AI Tech 3기'에서 배운 내용을 다루고 있습니다. 저작권 이슈 때문에 관련 자료를 올릴 수는 없기에 핵심 이론과 코드를 요약해서 올리고 있기에 내용이 부족할 수 있습니다.
▶ Today I Learned (핵심 요약 정리)
NLP Task
- Low-level parsing:
- Tokenization
- Stemming(어근 추출)
- Word and phrase level:
- Named entity recognition(NER): 고유명사 인식 task
- Part-of-speech(POS) tagging: 품사 알아내는 task
- Noun-phrase chunking, dependency parsing, coreference resolution
- Sentence level
- Sentiment analysis, Machine translation
- Multi-sentence and paragraph level
- Entailment prediction: 두 문장 간 논리적 T/F구분
- Question Answering: 질문 답변, 키워드에 해당하는 문서를 찾고, 독해를 통해 질문을 이해하고 정답을 제시
- Dialog systems: 대화 시스템
- Summarization: 요약
- Text mining: 빅데이터와 연관된 기법
- Topik modeling, clustering Analysis, computational social science(키워드를 기반으로 한 사회현상 분석 가능)
- DataMining 학계: major conference: KDD, The WebConf, WSDM, CIKM, ICWSM
- Informal Retrieval
검색 기능에서 활용됐지만, 이미 검색 엔진의 경우 많은 발전이 있어 추가적인 발전이 더딘 상태였다. 하지만 '추천시스템'에 사용
Trends of NLP
- Word embeding: 각 단어를 vector화 하는 방법. Word2Vec와 GloVe방법을 사용.
- RNN-family models(LSTMs, and GURs): NLP의 메인 architecture
- Transformer: RNN을 대체하는 self-attention 구조가 나오게 된다. Transformer는 기계번역을 위해 나왔었다.
- Self-supervised training: 문장에서 특정 단어를 가려놓고, 가린 단어가 무엇인지 맞추면서 학습하는 것 (문법적인, 의미론적인 방법 학습)
- pre-trained model: BERT, GPT-3가 존재한다.
- artificial general inteligence: BigModel을 활용한 AI 사용성 향상
Bag of Words
주어진 문장(문서)의 단어를 이용해 one-hot vector형태로 만드는 작업. 이렇게 나온 vector를 BoW Vector라고 한다.
- Step1. Constructing the vocabulary containing unique words(문장에 나온 단어를 등록한다)
- Step2. Encoding unique words to one-hot vectors (Categorical 분포를 one-hot벡터로 만든다(1과 0으로))
- word embeding에서 단어의 쌍은 $\sqrt{2}$의 거리를 갖고, word의 유사도는 0으로 의미 상관없이 공통으로 설정된다.
Naive bayes classifier
one-hot벡터를 특정 class로 구분하는 대표적인 방법이다. 조건부 확률을 이용해서 문서 d에서 클래스 c를 분류해내는 방법이다. 여기서 문서 d는 우리가 구하려고하는 고정된 값이기 때문에 '상수'로 볼 수 있다. 따라서 operation 상에서 무시가 가능하므로 최종 식이 아래와 같이 나올 수 있다.
$$\begin{matrix}C_{MAP} &=& argmax_{c\in C} P(c|c)\\
&=& argmax_{c\in C}\frac{P(d|c)P(c)}{P(d)} \\
&=& argmax_{c\in C}P(d|c)P(c) \end{matrix}$$
$$ P(d|c)P(c) = P(w_1, w_2,... ,w_n|c)P(c) \rightarrow P(c)\prod_{w_i\in W}P(w_i|c)$$
- $P(d|c)$: 클래스 c가 고정되었을 때 문서 d가 나올 확률, 각 단어($.., w_n$)가 등장할 확률이 독립이라고 가정할 수 있다면, 각 단어의 확률을 모두 곱한 값으로 나타낼 수 있다.
- $P(c)$: 각 클래스 c가 나타날 확률
'각 클래스가 나타날 확률P(c)'과 '특정 클래스가 고정되어 있을 때 각각의 word가 나타날 확률P(d|c)'을 추정함으로써, 나이브베이즈 classifier에서 필요로 하는 파라미터를 모두 추정할 수 있다. (이러한 확률 계산은 MLE와 연관이 되어있음)
> BoW사전에 없는 단어가 나오면 0이 곱해지기 때문에 regularization task가 추가적으로 적용된다.
Word Embedding
단어를 벡터로 표현할 수 있게 변화시키는 방법이다. 비슷한 의미를 가진 단어가 좌표공간에서 유사한 거리에 위치하게 함으로써 컴퓨터가 단어의 의미를 쉽게 이해할 수 있게 한다. 대표적으로 Word2Vec방법과 GloVe 방법이 있다. 두 방법 모두 성능이 비등비등하게 나온다.
Word2Vec
워드 인베딩 중 가장 유명한 알고리즘으로 같은 문장에서 나타난 단어들의 유미가 의사한 경우 거리를 가깝게 설정한다. 한 단어가 주변에 등장하는 단어를 통해서 의미를 유추할 수 있다는 아이디어에서 출발했다. 특정 단어가 등장할 때, 다음에 어떤 단어가 나올 확률이 높은지 계산한다.
- 히든 레이어의 수는 하이퍼 파라미터 세팅값이다. 워드임베딩을 수행하는 차원 수와 동일한 값으로 설정하게 된다.
- $W_1$과 $W_2$의 행렬곱 연산을 통해서 유사도를 구하게 된다.
- 내적에 기반한 유사도는 최대한 작게 만들도록 입력 단어의 워드임베딩과 출력단어의 워드 임베딩을 조금씩 조절해가면서 학습을 진행하는 것이 word2Vec모델의 핵심이다.
- softmax함수의 입력값을 logit이라고 한다.
[참고 사이트] Word2Vec 시각화: https://ronxin.github.io/wevi/
Property of Word2Vec
- vec[queen] - vec[king] = vec[woman] - vec[man]: '여성 - 남성'으로 변화 (Korean word2vec도 존재)
- Word instrusion detection: 각 단어별 유클리디안 distance를 모든 단어와 계산해서 평균을 취하고 비교를 해 문장에서 가장 관련이 없는 단어를 찾는 방법
- Word2Vec은 이외에도 다양한 task에서 사용이 가능하다.
- Machine Translation: 각 언어별 좌표 유사도를 통해 번역 기법 향상
- Sentiment Analysis: 단어의 긍부정 결정
- Image Captioning: 주어진 이미지의 상황을 이해해 자연어 형태로 설명하는 task에도 word2vec 활용가능
[참고 사이트2] Korean Word2Vec: http://w.elnn.kr/search
GloVe(Global Vectors for Word Representation)
입출력 단어쌍의 등장횟수를 미리 계산하고, 입출력 벡터의 내적값에 대한 grountruth로 활용해 해당 단어쌍의 빈도수와 최대한 유사하게 나타날 수 있게 계산하는 방법이다. GloVe사이트에 가게 되면 Pre-trained된 모델을 받아서 활용할 수 있다.
- 중복되는 계산을 줄여 word2vec보다 적은 데이터에도 활용가능하며 더 빠르게 연산을 할 수 있다. 추천시스템의 가장 기초적인 이론에 활용된다.
$$J(\theta) = \frac{1}{2}\sum_{i,j=1}^{W}f(P_{ij})(u_i^Tv_j)-log(P_{ij})^2$$
- $u_i^Tv_j$: 입력 벡터와 출력벡터
▶Review(생각)
이번 주 부터 Level2가 시작이 되었는데, 이번 주 마스터님은 카이스트 주재걸 교수님이셨다. 교수님의 명성만으로도 기대가 됐었는데 실제 수업은 기대보다 더 좋았다. 지금까지 애매했던 개념들이 착착 정리되는 느낌이었다. 물론, 잘 이해가 안되는 개념의 경우 몇 번 씩 돌려서 들으면서 이해할 때도 있었다. 하지만 여러 번 들어도 설명이 애매한 강의가 있는 반면, 제대로 듣기만 하면 무조건 이해가 되는 강의였다. 그래서 이번 강의에 대한 내용을 잘 정리해두면 후에도 꽤나 도움이 될 것 같다.
추가적으로 오늘 기본과제1을 풀었는데, tokenizer와 word embedding을 라이브러리를 사용하지 않고 구현하는 task였다. 해당 과제를 수행하면서 tokenizer와 embedding에 대해 어떤 식으로 구현되는지에 대해 확실히 이해할 수 있었다. 한 가지 아쉬운 점은 tokenizer를 regular expression으로 하려고 시도했는데 계속 오류가 발생해서 결국 반복문으로 했다는 것이다. 나중에 질문해서 해결방법을 찾아봐야겠다.
'IT 견문록 > 2022_부스트캠프 AITech 3기(100일)' 카테고리의 다른 글
[일일리포트] Day 35 (Seq2Seq, BEAM) (0) | 2022.03.10 |
---|---|
[일일리포트] Day 34 (RNN, LSTM) (0) | 2022.03.08 |
[7주차] 개인 회고 (Level1_프로젝트 정리) (0) | 2022.03.05 |
[일일리포트] Day 32 (Level1_PStage_6) (0) | 2022.03.04 |
[일일리포트] Day 31 (Level1_PStage_5) (0) | 2022.03.03 |