Embedding, Neural Networks
평소에 헷갈리는 것들이랑 새로운 것들, 그리고 소소한 팁들을 정리한다.
Embedding in NLP
word embedding:
- 비유하자면 색상에 rgb표현을 사용. 즉 단어를 숫자로 표현.
자연어 처리(Natural Language Processing)
분야에서 임베딩(Embedding)
은 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자형태인 vector 로 바꾼 결과 혹은 그 일련의 과정 전체를 의미한다. 가장 간단한 형태의 임베딩은 단어의 빈도를 그대로 벡터로 사용하는 것이다. 단어-문서 행렬(Term-Document Matrix)
는 row는 단어 column은 문서에 대응한다.운수좋은 날이라는 문서의 임베딩은 [2, 1, 1]
이다. 막걸리라는 단어의 임베딩은 [0, 1, 0, 0]
이다. 또한 사랑 손님과 어머니, 삼포 가는 길이 사용하는 단어 목록이 상대적으로 많이 겹치고 있는 것을 알 수 있다.
Embedding’ 역할
단어/문장 간 관련도 계산:
- word2vec. 단어-문서행렬=가장단순형태임베딩.의미적/문법적 정보 함축
전이학습(Transfer learning)
:
- 품질 좋은 임베딩은 모형의 성능과 모형의 수렴속도가 빨라지는데이런 품질 좋은 임베딩을 다른 딥러닝 모델의 입력값으로 사용하는 것을 transfer learning
nlp모델 대부분은 우리가 딥러닝과 달리 머신러닝처럼 사람이 Feature를 직접 뽑았다. 그렇기에 Feature를 추출할 때 언어학적인 지식을 활용해야 했다. 허나. 2000년대 중반 이후 NLP 분야에서도 딥러닝 모델이 주목받기 시작하여 Feature를 직접 뽑지 않아도 되었다.데이터를 넣어주면 사람의 개입없이 모델 스스로 처음부터 끝까지 이해하는 End-to-End Model 기법을 사용하였다. 대표적으로는 기계번역에 널리 사용됐던 Sequence-to-Sequence 모델이 있다. 2018년 ELMo 모델이 제안된 이후 NLP 모델은 pre-training과 fine tuning 방식으로 발전하고 있다.
우리가 풀고 싶은 자연어 처리의 구체적 문제들(예시 : 품사 판별(Part-Of-Speech tagging)
, 개체명 인식(Named Entity Recognition)
, 의미역 분석(Semantic Role Labeling))
을 다운 스트림 태스크(DownStream task)
라고 한다. 다운스트림에 앞서 해결해야 할 과제라는 뜻의 업스트림 테스크(UpStream task)
는 단어/문장 임베딩을 Pre-train하는 작업이 해당된다.
임베딩의 종류와 성능
- 행렬 분해: GloVe, Swivel
- 예측 기반:Neural Network기반 방법들이 속한다. ex) Word2Vec, FastText, BERT, ELMo, GPT 등
- 토픽 기반
자주 쓰는 용어와 간략한 뜻
Corpus (말뭉치)
- 임베딩 학습이라는 특정한 목적을 가지고 수집한 표본이다.
Collection (컬렉션)
- Corpus에 속한 각각의 집합.한국어 위키백과와 네이버 영화 리뷰를 말뭉치로 쓴다면 이들 각각이 컬렉션이 된다.
Sentence(문장)
:
- 마침표
(.)
나 느낌표(!)
, 물음표(?)
와 같은 기호로 구분된 문자열을 문장으로 취급한다.
Document(문서)
:
- 일반적으로 줄바꿈
(\n)
문자로 구분된 문자열을 문서로 취급한다.
Token(토큰)
:
- 문장은 여러개의 토큰으로 구성된다. 토큰은 단어
(Word)
, 형태소(Morpheme)
, 서브워드(subword or sub-unit)
라고도 한다. 문장을 토큰 시퀀스로 분석하는 과정을 토크나이즈(tokenize)
라고 한다.
Vocabulary (어휘집합)
:
- Corpus에 있는 모든 Document를 Sentence로 나누고 여기에 Tokenize를 실행한 후 중복을 제거한 Token들의 집합이다. Vocabulary에 없는 token은 미등록 단어
(Unknown word)
라고 한다.
임베딩을 만들 때 사용하는 통계 정보:
-
문장에 어떤 단어가 많이 쓰였는지 -> bag of words 가정,
-
단어가 어떤 순서로 등장하는지 -> Language model
(언어 모델)
가정, -
문장에 어떤 단어가 같이 나타났는지 -> distribution hypothesis
(분포가정)
.
CBOW(Continuos Bag-of-Words:
- CBOW모델은 주변단어로 현재단어 추정하는 방법.
Continuos Bag of Words(CBOW)
CBOW:
- several times faster to train than the skip-gram, slightly better accuracy for the frequent words.
Skip-gram model
신경망이 훈련할 “가짜”태스크를 만듬. 이 망의 입출력에 관심없고 목표는 word vectors 라는 은닉층의 가중치를 배우는것
Skip-gram:
- works well with a small amount of the training data, represents well even rare words or phrases.
타깃 단어를 가지고 문맥 단어가 무엇일지 예측하는 과정에서 학습된다.
- 하나의 단어를 one-hot 벡터로 만들어서 입력값으로 사용한다.
(입력층 벡터)
- 가중치 행렬을 one-hot 벡터에 곱해서 n-차원 벡터를 만든다.
(N-차원 은닉층)
- n-차원 벡터에 다시 가중치 행렬을 곱해서 one-hot 벡터와 같은 차원의 벡터로 만든다.
(출력층 벡터)
- 만들어진 벡터를 실제 예측하려는 주변 단어들 각각의 one-hot 벡터와 비교해서 학습한다.
cbow vs. skip-gram
두 모델의 확실한 차이점은 CBOW에서는 입력값으로 여러 개의 단어를 사용하고, 학습을 위해 하나의 단어와 비교하지만, Skip-gram에서는 입력값이 하나의 단어를 사용하고, 학습을 위해 주변의 여러 단어와 비교한다.
일련의 학습 과정을 모두 끝낸 후 가중치 행렬의 각 행을 단어 벡터로 사용한다. 카운트 기반 방법(Bag of Words 가정 방법들)
로 만든 단어 벡터보다 단어 간의 유사도를 잘 측정하며, 단어들의 복잡한 특징까지도 잘 잡아낸다는 장점이 있다. 보통 CBOW보다 Skip-gram의 성능이 더 좋아 자주 사용된다. 하지만 무조건적으로 좋은 것은 아니다!
python3 -c "import sklearn; sklearn.show_versions()"
- sklearn 뿐만아니라 다른 파이썬 dependency도 출력해준다.
TORCH.NN
These are the basic building block for graphs.
Containers
CLASS torch.nn.Sequential(*args)
A sequential container. Modules will be added to it in the order they are passed in the constructor. Alternatively, an ordered dict of modules can also be passed in. 컨스트럭터에서 전달되는 순서대로 모듈이 추가된다.
class collections.OrderedDict([items])
densenet
입력에 가까운 레이어와 출력에 가까운 레이어 사이에 연결이 짧은 경우 대체로 더 정확 더 딥하다(DenseNet)
, which connects each layer to every other layer in a feed-forward fashion(각레이어를 다른 모든 레이어에 연결한다.)
feed-forward란, 네트워크에 피드백 연결이나 루프가 없음을 의미하는 방향성 비순환 그래프이다. (전(앞)방향)
그래서 feed-forward neural network (ffnn)
은 descendant 인 rnn과 다름.
encoder
On the Properties of Neural Machine Translation: Encoder–Decoder Approaches
(Kyunghyun Cho et al.)
인공신경망 중 인코더 내용의 논문이다.특히 두가지 모델사용 nmt에서의 속성을 분석 그모델중
- RNN Encoder-Decoder
- newly proposed gated recursive on-volutional neural network. They show unknown word, sentences long 할수록 성능 급격히 저하된다. 게이트 재귀 컨벌루션 네트워크가 문장의 문법적 구조를 자동으로 학습함을 발견했다.
self.demb = Embeddings(self.input_dim_drug, self.emb_size, self.max_d, self.dropout_rate)
(인공)
신경망에서 weight:
-
가중치는 두 뉴런 사이의 신호
(또는 연결 강도)
를 제어합니다. 즉, 가중치는 입력이 출력에 미치는 영향을 결정합니다. -
두 유닛
(뉴런)
사이의 신호(연결 강도)
제어하는값이다. 다시말해 인풋이 얼마나 아웃풋에 영향을 미치는지 정도.
bias:
- 비유하자면 선형함수에서 상수역할과 비슷하다. 상수인 편향은 다음 레이어에 대한 추가 입력입니다. bias는 수신 연결이없고, 이전 레이어의 영향을 받지 않는다. 그러나 그들 자신의 가중치로 나가는 연결이 존재한다. bias unit은 설령 모든 인풋이 0이라도 여전히 뉴런에서 활성화할 수 있음을 보장한다.