Language Modeling - Language Model은 텍스트에 확률을 할당하는 시스템으로 생각할 수 있다. (문장의 단어 x(1), x(2) , ... x(t) 가 주어졌을 때 다음에 올 단어 x(t+1) 의 확률) - 예를 들어 텍스트의 일부 x(1),x(2),...,x(t)를 가지고 있을 때, Language Model에 따라 이 텍스트가 발생할 확률(자연스러운 문장일 확률)은 다음과 같다. ⇒ 단어의 시퀀스(문장)에 대해서 얼마나 자연스러운 문장인지를 확률을 이용해 예측한다. 활용 문장의 확률 또는 단어의 등장 확률을 예측 기계번역, 음성인식, 자동완성(ex. 구글 검색) n-gram Language Models - Deep Learning 이전에 Language Model에 주로 사용된..
Sentence Structure Context-Free Grammars(CFGs) 문장의 구조를 단어가 결합된 constituency들의 집합으로 봄. Dependency Structure 문장의 관계를 단어 사이의 dependency로 봄 Why do we need sentence structure? 말하는 사람은 의미 전달을 위해 많은 단어 또는 더 큰 unit을 조합하여 의사소통을 진행, 듣는 사람은 단어 앞에 어떤 단어가 attach(modifer) 되는지를 파악해야함. 또한 NLP 관점에서 모델이 의미를 제대로 파악하기 위해서는 문장의 구조를 이해해야함. 문장 구조의 이해에 따라 다양한 의미 해석이 가능해지기 때문에 정확한 구조 파악은 적절한 의미전달에 필수적이다. Dependency Gram..
Named Entity Recognition(NER) 문장 단어의 이름을 찾고 구분하는 작업 단순하게 구현하면 context window를 활용하여 다음과 같이 구현 가능 개체명을 기준으로 동사와 기타 단어들이 관계를 맺는 구조로 이어지기 때문에, 즉 문법적으로 중요한 품사로 해석되어 문맥을 파악하는데 핵심 역할을 하므로 NER 은 NLP task 에서 중요하게 간주된다. 👉 NER 에 자주 쓰이는 모델 : CRF, RNN 한계점 - 문장내에서 사용되는 entity 의 정확한 개체를 분류하기 어려운 한계점 👉 문맥까지 고려하는 window classification 방법론 등장 Idea : 중심 단어와 주변 단어들을 함께 분류 문제에 활용하는 방법 Method1 : 단어벡터의 평균으로 게산한다. but ..
Word2Vec U는 context word들에 대한 vectors, V는 center word에 대한 vector가 된다. one-hot encoding 된 vector와의 곱 연산을 통해 word vector를 획득한다. Optimization은 GD 알고리즘을 사용한다 했지만, 일반적으로 이는 비효율적이다. 왜냐하면 매 update 마다 모든 word의 gradient를 계산하는 것은 시간이 매우 오래걸리기 때문이다. 그러므로 gradient descent 대신 stochastic gradient descent를 사용한다. Stochastice gradient descent는 모든 word에 대한 gradient를 계산하여 update 하는 것이 아닌 하나의 word 또는 mini-batch siz..
How do we represent the meaning of word? 1. WordNet 동의어(synonym) 및 언어의 상하관계(hypernyms)를 담고있는 사전. But, WordNet은 아래와 같은 몇가지 문제점이 가지고 있음. 뉘앙스를 반영하지 못함.(e.g. proficient는 특정 context에서만 good과 동의어 관계) 새로운 단어 반영이 어려움.(e.g. wicked, badass 등) → 업데이트가 불가능! 주관적임. human labor, 즉 인간의 손을 거쳐야 함. 정확한 word similarity를 계산할 수 없음. 2. One-Hot vector Word를 discrete symbol로 여기는 방식. 특정 단어의 위치에 해당하는 숫자만 1이고 나머지는 0으로 표시. ..
이번에는 "정규화"에 대해 이야기 해보고자 한다. 정규화에 대해 이야기 해보기 전에 먼저 오버피팅부터 복습해보자! 오버피팅이란 학습오차가 일반화 오차에 비해 현격하게 낮아지는 현상, 즉 모델이 학습 데이터의 불필요한 특징들까지 학습을 하여 모델의 일반화 성능이 떨어지는 상황을 말한다. 우리는 오버피팅을 방지하기 위해 여러가지 방법을 배웠는데, 한가지만 말해보자면, 검증 데이터셋과 테스트 데이터셋을 도입하여 모델의 최적화 과정에서 발생할 수 있는 오버피팅 현상을 방지 할 수 있었다. 정규화를 통해서도 오버피팅을 방지할 수 있는데, 정규화에는 데이터 증강, 배치정규화 등 여러가지 방법이 존재한다. 정규화 오버피팅을 늦추고 모델이 학습 데이터로부터 적절한 특징을 학습하여 일반화 오차를 낮춰줄 수 있는 기법을 ..
바로 앞에서 심층신경망을 활용하여 이진 분류를 수행하는 방법에 대해 글을 올렸다. 이진분류를 위해서 우리는 심층신경망의 가장 마지막 계층 이후에 시그모이드 활성 함수를 넣어주어 확률값이 반환되도록 구현하였다. >하지만 우리가 분류하고자 하는 클래스가 2개가 아닌 여러 개라면 어떻게 할까?28×28 크기의 픽셀들로 이루어져 있기 때문에 이 2차원 행렬을 1차원 벡터로 flatten할 경우, 784 크기의 벡터가 될 것이다. #MNIST 샘플의 각 픽셀은 0에서 255까지 숫자로 이루어짐. 따라서 각 픽셀을 255로 나눠주면 정규화 가능 x=train.data.float() / 255 #정규화 y=train.targets #view는 텐서의 크기를 변형 ( 단 데이터의 개수는 유지하되 size만 변경 -> ..
이번 글에서는 심층신경망을 활용한 분류 문제를 해결하는 방법에 대해서 이야기하고자 한다. 우리는 로지스틱 회귀를 통해 이진 분류문제를 해결하는 것을 배웠다. 마찬가지로 본격적인 분류 문제에 앞서, 특수 케이스인 이진 분류 문제를 심층신경망으로 해결하는 방법에 대해 공부하고자 한다. 로지스틱 회귀 로지스틱 회귀에 대해 간단하게 복습해보자! 로지스틱 회귀는 말만 '회귀'일뿐 사실상 분류 모델이라고 봐도 무방하다. 비선형 함수인 시그모이드를 활성화 함수로 사용하여 최종 출력값이 0~1사이의 값으로 나오게끔 구현되어 있으며 이렇게 나온 결과 값을 임계값을 기준으로 높으면 참, 낮으면 거짓이라고 분류한다. 손실함수로는 선형회귀와 다르게 BCE손실함수를 사용한다는 것을 유의해야 한다. >그렇다면 심층신경망을 활용하..