20/08/27 TL. DL 기반 NLP
- -
오늘 할 일
데이터셋에 소스 추가
강의 수강 못한 부분들 듣기
자연어 처리 및 BERT 실습 강의 수강
transformers(text_classification -> run_glue.py) 코드 분석
자연어 처리 및 BERT 실습 강의 복습
매일 태깅 60개
매일 독서 - 카네기 인간관계론
매일 영단어
내일 할 일
강의 수강 못한 부분들 수강
프로에듀 활동
자연어 처리 및 BERT 실습 강의 수강
transformers(text_classification -> run_glue.py) 코드 분석
자연어 처리 및 BERT 실습 강의 복습
매일 태깅 60개
매일 독서 - 카네기 인간관계론
매일 영단어
https://monologg.kr/2020/05/01/transformers-porting/
https://huffon.github.io/2020/07/05/tokenizers/
https://keep-steady.tistory.com/37
https://www.tensorflow.org/tutorials/text/word_embeddings
단어 임베딩
단어 임베딩은 유사한 단어가 유사한 인코딩을 갖는 효율적이고 조밀 한 표현을 사용하는 방법을 제공합니다. 중요한 것은이 인코딩을 직접 지정할 필요가 없다는 것입니다. 임베딩은 부동 소수점 값으로 구성된 조밀 한 벡터입니다 (벡터의 길이는 사용자가 지정하는 매개 변수 임). 임베딩 값을 수동으로 지정하는 대신 학습 가능한 매개 변수입니다 (모델이 조밀 한 레이어에 대한 가중치를 학습하는 것과 동일한 방식으로 학습 중에 모델에서 학습 한 가중치). 8 차원 (작은 데이터 세트의 경우), 대규모 데이터 세트로 작업 할 때 최대 1024 차원의 단어 임베딩을 보는 것이 일반적입니다. 더 높은 차원의 임베딩은 단어 간의 세밀한 관계를 캡처 할 수 있지만 학습하는 데 더 많은 데이터가 필요합니다.
hidden layer에는 feature들을 대변하는 각각의 weight 값들이 들어있어서(뉴런 역할을 한다), 입력벡터와 곱해지면서 lookup vector를 뱉어낸다.
word2vec에서 embedding layer는 100~300차원 단어벡터로 만드는 것이 일반적.
학습 데이터 증량시키는 기법
1. 유의어 사전을 이용한 단어 교체
ex) 오렌지 위치에 바나나, 파인애플
2.역번역
타겟 언어를 소스 언어로 다시 바꾸고 섞는다.
3.텍스트 생성 : QA task
ML에서 정답이 주어지면 대부분
supervised -> classification으로 해결. (데이터 적을 때)
대부분의 자연어처리 문제들은 분류(classification)문제로 해결할 수 있다.
ex)띄어쓰기는 T/F문제로 해결 가능. 띄어쓰기 해야할 건 T로 안 해도 되는 글자는 F로.
Bag of Words
문서를 단어의 집합으로 간주.
문서에 나타나는 각 단어는 feature로 간주. 단어의 출현 빈도에 따른 가중치를 얻음.
Feature Selection
학습 문서에 출현한 용어(term)의 부분 집합을 선택
사전의 크기 줄여 효율적 분류기 생성
Noise Feature를 제거해 분류의 정확도 증가
WordNet 등 어휘 리소스 활용해 동의어, 상위어로 단어 확장
나이브 베이즈 : 문서 내 단어 빈도수를 이용해 가장 큰 확률을 얻는 클래스로 분류. 사전 확률을 기반으로 사후 확률을 표현.
사전확률 x 우도 / evidence
SVM(Support Vector Macine): 결정경계로 classification하는 것. 직관적, 선형적으로 분류하는 데 효과적이기 때문에 텍스트에 유용하다.
K-NN같은 clustering도 document classification에 적용할 수 있다.
tokenization : corpus를 token들로 쪼개는 것
token : 의미 있는 단위
->Input이 하나일 경우에 토근화를 통해 여러개로 나눌 수 있음.
->딥러닝은 데이터의 분포에서 패턴을 찾는데, input을 잘게 쪼갤 때, 입력의 패턴을 찾는데 도움을 준다. 또, 메모리적인 측면에서도 단어 조합으로 문장을 만드는 것이 더 효율적.
한국어는 교착어
->단어의 조사가 붙어 의미와 문법적 기능이 부여. 주로 형태소를 기준으로 나눔
한국어는 띄어쓰기가 잘 지켜지지 않는다.
->띄어쓰기를 하지 않아도 문장을 이해할 수 있다.
morphs : 형태소 추출
pos : 품사 태깅
nouns : 명사 추출
Penn Treebank POS태깅 기준
PRP : 인칭대명사, VBP : 동사, RB : 부사, VBG : 현재부사, IN : 전치사, NNP : 고유명사, NNS : 복수형 명사, CC : 접속사, DT : 관사 등
!~
colab에서 파이썬 명령이 아닌 쉘 명령어
->!ls
정규표현식 : 조건을 달아놓은 문자열을 선별, 대체할 때 사용
메타 문자 : 정규표현식을 이용하는 특수 기호들.
[] : 문자클래스.
[abc] : "a,b,c" 중 한 개의 문자와 매치
[a-c] : [abc]와 동일, [0-5] : [012345]와 동일
[a-zA-Z] : 알파벳 모두
[^0-9] : 0에서 9까지는 있으면 안된다.
\d : 숫자와 매치
\D : 숫자가 아닌 것과 매치 [^0-9]와 동일
\s : whitespace문자와 매치, [\t,\n\r\f\v]와 동일
\S : whitespace문자가 아닌 것과 매치
\w : 문자 + 숫자와 매치,[a-zA-Z0-9]와 동일
\W : 문자 + 숫자가 아닌 문자와 매치
. : \n을 제외한 모든 문자와 매치
-> a.b : "a + 모든 문자 + b"
* : 바로 앞에 있는 문자가 0개 이상
->ca*t => ct, cat, caat, caaat...
+ : 최소 1번 이상
->ca+t => cat, caat, caaat ...
{m}은 반드시 m번 반복
->ca{2}t => caat
->ca{2,4} => caat, caaat, caaaat
? : {0,1}을 의미
ab?c => abc, ac
match() : 문자열의 처음부터 정규식과 매치하는지 조사
search() : 문자열 전체를 검색해 매치하는지 조사
findall() : 정규식과 매치되는 모든 문자열을 리스트로
finditer() : 정규식과 매치되는 모든 문자열을 반복 가능한 객체로
input값들에 weight를 각각 한 다음에 sum을 하고 output으로 출력하기 전에, hidden layer에서 activation function을 결정한다. (뉴런에서 신경전달하는 과정) 이 때 output으로 어떤 값들을 내보낼지를 activation function이 결정한다.
퍼셉트론 : 1개의 뉴런을 가지는 가장 기본적인 신경망
activation function : input의 총합이 어떻게 활성화 되는지를 결정.
Sigmoid(binary[0,1]), Tanh(감정분석[-1,1]), ReLu, SoftMax(classification)...
softmax : 입력값 k개에 대한 각 클래스별 확률을 추정
Multi Layer Perception : 여러개의 perceptron을 결합한 형태(NN)
인풋 여러개에서 아웃풋 하나로. (순방향)
layer가 여러개가 쌓인 것 (DNN)
xor 문제 해결 가능
DNN에서는 ReLU, Tanh를 주로.
feature들을 스스로 학습할 수 있고, 정통적인 머신러닝보다 성능이 우수
CNN
convolution과 poolling을 반복.
convolution : filter가 stride하며 text 문서의 특징을 뽑아내어 vector를 가지게 됨.
CNN은 문장의 지역 정보를 보존하면서 각 문장 성분의 등장 정보를 학습에 반영하는 구조.
shallow but wide한 구조도 가능하고
-> word-level을 처리할 때
ex)conv 1개, pooling 1개
deep, narrow한 구조도 가능
-> character-level을 처리할 때
ex)노드 수는 적지만 필터를 여러번 거치는 복잡한 연산을 필요로 하는 task도 가능.
RNN : input의 수와 output의 수로 세분화 하기도 함
one-to-one : vanilla (Basic RNN)
one-to-many : 이미지 캡셔닝(이미지를 보고 텍스트를 출력)
many-to-one : 스팸 분류, 감성 분석
many-to-many : QA 챗봇, 기계 번역, 개체명 인식, 품사 태깅
(= Sequence to Sequence)
Vanila RNN의 경우, 가중치 변형이 없어서 일정한 내용을 유지
-> 앞에서 학습한 내용이 뒤에 가서 잊어버림
=> LSTM으로 해결
Sequence to Sequence 모델 단점 : Long-term dependency (장거리 전달)해결하기가 어려움.
LSTM : hidden state에 cell state를 추가. gate로 cell state를 update
->forget gate, input gate를 이용하여 이전 정보를 버리거나 유지. 잊어버릴거면 0에 가깝게 기억할거면 1에 가깝게
입력 블록 : 입력 게이트 출력 x 성분 별 => 상태 정보에 추가, 반영.
출력 게이트 : 위 값 총합
Bi-directional LSTM : 순방향으로만 읽으면 단어 12 읽고 3을 유추하는 게 힘들 수 있다. ex) He said, ?
그러나, 문장 다 읽고서 다시 간다면? He said, ? bears ~ 하면, Teddy가 나올 수 있다.
Encoder-Decoder model : 시퀀스 입력 데이터에 대해 적절한 시퀀스 출력을 학습하기 위한 모델. 2개의 RNN 구조를 이용해 모델링. 입력으로 완벽한 sequence, 출력으로 완벽한 sequence
주로기계 번역에서 이용.
->encoding할 때, input이 vector화 되어 decoder의 hidden state로 전달.
->decoder의 출력이 decoder의 다음 step의 input으로 전달(static(단어로)하게든, dynamic(벡터로)하게든)
end-to-end 방식 :
attention 방식 : encoder에서 받는 token중에서 중요한 position을 넘겨주어서 가중치를 준다. decoder에서 이를 인지하고 받는다.
일반적으로 input layer에서 hidden layer는 fully connected 돼있고 hidden layer에서 output으로는
마지막 dense layer의 출력 dimension이 출력 값!
->softmax 하고나서
'TL' 카테고리의 다른 글
20/08/29 TL. (0) | 2020.08.29 |
---|---|
20/08/28 TL. (0) | 2020.08.28 |
20/08/26 TL. (2) | 2020.08.26 |
20/08/25 TL. 통계 기반 NLP (0) | 2020.08.25 |
20/08/24 TL. 규칙 기반 NLP (0) | 2020.08.24 |
소중한 공감 감사합니다