[Boostcamp] Day 18. 16 다음은 18이지

Jaeyeon Kim·2023년 3월 29일
1

Naver Boostcamp AI Tech

목록 보기
18/29

하루 종일 깃허브 특강을 들었지만 ,,
아직은 기초적인 부분을 가르쳐주시다보니
새로운 부분은 없었던 것 같다.

그리고 요새 플러터를 공부 중인데,
리액트 네이티브와는 다른 매력이 있는 것 같다.
CSS 하나 없이 UI를 구성하는데,
반응형 앱을 설계하기에 매우 좋을 것 같다.

디자이너가 원하는 UI가 어떤 식으로 구성 돼있냐에 따라서
리액트 네이티브와 플러터 중에서 어떤걸 쓸 지
고민해봐야겠다.

오늘 배워간 것

자연어 처리란

컴퓨터가 주어진 단어나 문장, 그리고 더 큰 문단이나 글을 이해하는 과정이다.

Bag-of-Words

Sentences : "she loves this movie", "He loves her"
vocabulary : ["she", "loves", "this", "movie", "he", "her"]

one-hot-vector
she: [1 0 0 0 0 0], loves: [0 1 0 0 0 0],
this: [0 0 1 0 0 0], movie: [0 0 0 1 0 0],
he: [0 0 0 0 1 0], her: [0 0 0 0 0 1]

"she loves her": [1 1 0 0 0 1]

NaiveBayes Classifier

P(c)wiWP(wic)P(c)\prod_{w_{i}\in W}P(w_{i}|c)

특정 클래스에서 문장별로 등장하는 단어의 빈도를 확인하여 비교한다.
문제는, 단어 하나만 안 나와도 확률이 0이 된다.

Word Embedding

자연어를 단어들의 시퀀스라 볼 때, 단어들을 어떤 특정한 차원으로 이뤄진 공간에서의 한 점, 혹은 그 점의 좌표를 나타내는 벡터로 변환하는 기법

비슷한 의미의 단어는 비슷한 벡터값을 가진다. -> 벡터 간의 거리가 짧음.
이 때문에, 주변 단어를 파악해서 주변 단어들과 비슷한 단어를 찾을 수 있다.

한 문장에 대해서 sliding window를 활용하여 단어쌍들을 구하고, 이를 학습한다.
단어의 one hot vector를 구하고, 레이어(Embedding Layer)들을 통과한 후 softmax 레이어를 통과시켜 단어의 확률 분포를 구한다. 이 확률 분포가 GT와 근접하도록 레이어의 W들을 업데이트 한다.

one hot vector의 특성상 행렬곱에서 한 행 또는 한 열만 값이 남으므로 column vector를 뽑아와서 선형 결합을 하는 식으로 연산을 진행한다.(모든 행에 대해서 계산할 필요 x)

링크를 통해서 Word2Vec이 어떻게 학습되는지 볼 수 있다.

단어 간의 의미적인 관계를 벡터를 통해서 알 수 있다.

GloVe

Word2Vec와과의 차이는, 각 입력 및 출력 단어쌍들에 대해서 학습 데이터에서 그 두 단어가 한 윈도우 내에서 총 몇번 동시에 등장했는지를 사전에 계산을 미리 하고, 입력 워드의 임베딩 벡터와 출력 워드의 임베딩 벡터 간의 내적 값에 로그 값을 취해서 그 값이 최대한 사전에 계산한 등장 횟수 값과 근접하도록 한 것이다.

학습 데이터 안에서 빈번한 데이터들에 대해서 여러번 학습하지 않기 때문에 중복된 계산을 줄일 수 있다. 이 때문에 상대적으로 더 빠르고 적은 데이터에서도 더 잘 동작한다.

RNNs

hidden state 계산하는 법

ht=fW(ht1,xt)h_{t} = f_{W}(h_{t-1},x_{t})
ht=tanh(Whhht1+Wxhxt)h_{t} = tanh(W_{hh}h_{t-1} + W_{xh}x_{t})
yt=Wythty_{t} = W_{yt}h_{t}

ht1,xth_{t-1},x_{t}를 가지고 hth_{t}를 업데이트할 때의 연산을 WW라고 하면, WWht1h_{t-1}와 연산하는 부분과 xtx_{t}와 연산하는 부분으로 나눌 수 있으며, 그 예가 두번째 식이다.

Character-level LM

전에 논문을 읽을 때 들었던 생각이,
char 단위로 글을 인식하는데 어떻게 성능이 좋을까? 였다.

솔직히 말하면, 지금도 확신이 없다.
단어를 형성하는 데에는 좋지만 그 맥락과 의미를 유지하지는 못할 것이라 생각한다.

알고리즘 스터디

DFS, BFS에서의 depth는 시간, 반복 횟수, 거리 등의 의미로 사용될 수 있다.


서두르지 말고,
한 발짝씩 나아가기

profile
낭만과 열정으로 뭉친 개발자 🔥

0개의 댓글