-
Notifications
You must be signed in to change notification settings - Fork 23
Day 01 Summary 180104
-
전반적으로 챗봇을 만드는 NLP에 대한 설명, 데이터에 대한 설명, NLP로 챗봇을 만들기 위한 Pipeline 설명하는 챕터
-
sklearn에 있는 Vectorizer, Tokenizer, Classifier를 이용하여 카톡 챗봇 서비스하는 과정 설명
-
NLP의 특징: 오디오, 이미지와 다르게 불연속적이다.
-
이러한 특성 때문에 상대적으로 어려움이 있다.
-
텍스트는 오디오처럼 수치에 대한 미분도 불가하다.
-
따라서 텍스트는 GAN으로 완전하게 생성이 불가하다.
-
-
자연어의 특징
-
순서가 있다.
-
계층구조가 있다.(구와 절)
-
-
텍스트는 길이가 달라서 padding을 해줘야함.
-
이러한 이유 때문에 padding이 너무나 많이 생김.
-
따라서 짧은 것들 기준으로 sorting 이용하여 padding하면 padding의 수를 줄일 수 있음
-
이론적으로는 batch 내에서는 텍스트의 길이가 같아야하는데, 서로 다른 batch간에는 텍스트 길이 달라도 됨.
-
이것을 이용하여 sorting의 padding이 가능한 것.
-
즉, 가로축(단어의 나열)을 timestep이라고 하면, 한 batch 안에서는 None으로 timestep사이즈를 주면 된다.
- 역자 주 : 확실히 못들엇어용
-
-
-
NLP Application
-
Sentimental Analysis
- Recursive NN을 이용하여 감정 분석을 할 수 있었음.
-
Question Answering
-
객관식 문제(Retrieval model)
-
주관식 문제(Generative model)
-
-
Machine Translation
- seq2seq + Attention
- CNN - CNN 은 FB에서 논문도 나왔음
- seq2seq + Attention
-
-
NLP가 어려운 이유 => 다양하다
-
한국어 데이터셋
-
다양한 곳에서 구할 수 있다.
-
그래도 아무틑 괜찮은 데이터가 잘 없다. => 한국어 텍스트 분석이 어려운 이유 중 하나.
-
-
영어 데이터셋
- babi : fb에서 만들었음
- SQUAD : 지문 속에 답이 있는 수능형 문제
-
Chatbot을 만들기 전에는 chatbot에 원하는 바가 무엇인지 고민해야한다.
-
Vectorization : 가장 처음 해야할 일.
-
컴퓨터는 숫자만 이해하므로, 단어를 숫자로 바꾸어주어야함.
-
가장 자주 쓰는 것 : one-hot encoding
- 각 단어에 index를 붙이는 것.
-
-
Tokenization
-
영어와는 달리 한국에서는 조사가 있다.
-
따라서 한국어에서는 조사를 잘 떼어내는 것이 중요하다.
-
정규표현식 혹은 KONLpy를 이용하여야 한다.
-
맞춤법을 어기면 말짱 꽝이다.
-
맞춤법을 교정하든가, 여타 알고리즘을 이용하여야한다.
-
-
-
단어를 더 작은 단위로 나누어도 된다.
-
음절 단위로 써도 되고, 형태소로 잘라도 되고.... 뭐 다양한 방법들이 있다.
-
품사(part-of-speech), 문장성분(sentence component)...etc.
-
-
-
그렇다면, 문장을 어떻게 vectorize할까?
-
TF-IDF(출현빈도 기준)
-
다른 문장이 아닌, 유독 이 문장에 쓰인 단어를 찾고 싶다 => 조사같은 거 제거되도록
-
문장의 특징적인 단어를 통해 문장의 vector를 만든다.
-
-
Distributed representaion
- Neural Probabilistic Language Model
-
one-hot vector에 행렬곱을 통해 해당 단어의 vector를 만드는 것.
- 뒷 장의 Embedding Matrix를 통해 이해하면 편합니다.
-
- Skip-Gram/CBow/FastText
- Neural Probabilistic Language Model
-
Combined
- GLOVE
-
Embedding Matrix
- pretrained된 좋은 것들이 많아서 그런 거를 많이 이용.
-
-
Vactorization(word embedding)
-
어떤 단어가 그 단어 주위에 많이 나오는지를 이용하여 embedding한다.
- '친구를 보면 그 사람을 알 수 있다.'
-
Sentence vectorize: embedding된 단어 + Keywords + Custom Features 의 vector를 concat 시킨다.
- 문장들의 vector 길이는 변하지 않는다.
-
-
Classification
-
RNN 기반의 Generative model은 generative 모델을 쓰지 않는다.
- 들어보니 스캐터랩의 핑퐁도 generative 모델을 쓰지 않고, 미리 만들어둔 수많은 답변에서 가져오는 방식이다.
-
텍스트 분류 모델들
- 다양함
- sklearn을 참고합시다.
-
TF-IDF
-
Intent가 labelling된 데이터 셋이 있는 경우.
-
새로운 문장이 들어왔을 때, 이걸 어떻게 classification하는가?
-
문장을 vectorize하고 가장 비슷한 문장의 label로 classify 하자
- similarity는 consine similarity를 가장 많이 사용한다.
-
sentence vectorize는 어떻게 하는가?
-
사전의 크기만한 벡터로 만들고, 각 벡터의 성분은 문장에 포함된 단어의 tf-idf 값을 이용함.
-
대신 문장이 굉장히 sparse한 vector가 될 수 있음.
- 문장을 할 때는 vocab size를 빈도가 많은 단어들만으로 줄여가지고, vector의 차원을 줄이는 방법을 많이 사용함.
-
-
-
TF-IDF는 매우 좋은 방법이라 딥러닝인 CNN을 이김.
- 데이터가 많으면 CNN이 이김.
-
-