Skip to content

Day 01 Summary 180104

Hyunho Cho edited this page Jan 4, 2018 · 1 revision

1. Introduction

  • 전반적으로 챗봇을 만드는 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에서 논문도 나왔음
  • NLP가 어려운 이유 => 다양하다

  • 한국어 데이터셋

    • 다양한 곳에서 구할 수 있다.

    • 그래도 아무틑 괜찮은 데이터가 잘 없다. => 한국어 텍스트 분석이 어려운 이유 중 하나.

  • 영어 데이터셋

    • babi : fb에서 만들었음
    • SQUAD : 지문 속에 답이 있는 수능형 문제

2. Chatbot Implementation

  • 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
    • 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이 이김.
Clone this wiki locally