문서 분류(Text Classification)

 

  • 문서 분류란?
    • 텍스트를 입력으로 받아, 텍스트가 어떤 종류 범주에 속하는지 구분하는 작업
    • Input 
      • a document - d
      • a fixed set of classes - C={c_1, c_2, ..., c_J}
    • Output
      • a predicted class - c ∈ C
  • 다양한 문서 분류 문제들 예시
    • 문서 범주
    • 주제 분류 (ex) 논문 주제 분류 - 컴퓨터(AI, 데이터베이스, 그래픽, 암호학, etc...))
    • 이메일 스팸 분류
    • 감성 분류 (ex) 영화 리뷰, 제품 리뷰, 정치 리뷰, 예측(선거 결과))
      • 여러 측면이 있을 수 있지만 간단한 작업에 집중
        • 감정적, 태도적, 성격적 측면
        • 주어진 텍스트가 긍정적 태도를 보이고 있는지, 부정적 태도를 보이고 있는지.
    • 언어 분류 (영어? 한국어? 프랑스어?)
  • 문서 분류 방법
    • 규칙 기반 모델
      • 단어들 조합을 사용한 규칙들 사용
        • ex) spam : black-list-address OR ("dollars" AND "you have been selected")
      • Precision(정확도)은 높지만 recall(예외적 상황 커버 힘듦)이 낮음
      • Snorkel (규칙 기반 모델 + 머신러닝 모델)
        • 각각 규칙을 'labeling function'으로 간주
        • Graphical model 일종인 factor graph를 사용해 확률적 목표값을 생성하는 generative model
        • 프로젝트 초기 labeled data가 부족하거나 클래스 정의 자체가 애매한 경우(하지만 규칙을 생성하는 것은 쉽다 가정)에 매우 유용한 방법
        • 확률적 목표값이 생성된 후 딥모델 등 다양한 모델 사용 가능
    • 지도학습
      • Input
        • a document - d
        • a fixed set of classes - C={c_1, c_2, ..., c_J}
        • A trasining set of m hand-labeled documents - (d_1, c_1), ...., (d_m, c_m)
      • Output
        • a learned classifier - γ : d -> c
      • 다양한 모델 사용 가능
        • Naive Bayes
          • Naive Bayes 가정과 Bag of Words 표현에 기반한 간단한 모델
          • Bag of Words - 가방 안에 단어를 담고 섞는다!
            • 순서를 고려하지 않은 단어들의 집합 (단어의 빈도수만 고려)
          • Naive Bayes 분류기
            • 수식화
              • P(c|d) = P(d|c)P(c) / P(d)
              • 분모는 최적의 클래스를 찾는데 상관이 없는 부분이라 빼도 된다.
              • 위 문제를 해결하기 위하여 다음과 같은 2가지 가정을 사용한다.
                • Bag of Words 가정 : 위치는 확률에 영향을 주지 않는다.
                • 조건부 독립(Conditional independence) 가정 : 클래스가 주어지면 속성들은 독립적이다.
              • 가정들을 적용시킨 후의 수식
                Naive Bayes 분류기는 입력값에 관한 선형 모델이다.

            • 학습
              • MLE (Maximum Likelihood Estimation)
                • N_doc = 학습 데이터에 들어 있는 모든 문서의 수
                • Zero 확률문제(단어가 한 번도 나오지 않았을 시 나타나는 문제)를 개선하기 위한 Leplacel(add-1) smoothing
                  • 모든 단어들의 최소 빈도를 1로 설정하는 굉장히 간단한 방법.
              • 알고리즘
                • function TRAIN NAIVE BAYES(D, C) return log P(c) and log P(w|c)
                  for each class c∈C #Calculate P(c) terms
                      N_doc = number of documents in D
                      N_c = number of documents from D in class c
                      logprior[c] <- log(N_c / N_doc)
                      V <- vocabulary of D
                      bigdoc[c] <- append(d) for d∈D with class c
                      for each word w in V # Calculate P(w|c) terms
                          count(w,c) <- of occurrences of w in bigdoc[c]
                          loglikelihood[w, c] <- log(count(w, c) + 1 / sigma_w'(count(w',c)+1))
                  return logprior, loglikelihood, V
                      
                  function TEST NAIVE BAYES(testdoc, logprior, loglikelihood, C, V) return best c
                  for each class c∈C
                      sum[c] <- logprior[c]
                      for each position i in testdoc
                          word <- testdoc[i]
                          if word ∈ V
                              sum[c] <- sum[c]+loglikelihood[word, c]
                  return logprior, loglikelihood, V
        • Logistic regression
        • Neural networks
        • k-Nearest Neighbors
        • ...

언어모델

 

  • 목표 : 문장이 일어날 확률을 구하는 것
  • 왜 필요한가?
    • 기계번역 (machine translation)
    • 맞춤법 검사 (spell correction)
    • 음성인식 (speech recognition)
  • 언어모델(Language Model) : 연속적 단어들(sequence of words)에 확률을 부여하는 모델
    • P(W) = P(w_1, w_2, w_3 ..., w_n)
  • 관련된 일 : 연속적 단어들이 주어졌을 때 그 다음 단어의 확률을 구하는 것
    • P(w_n | w_1, w_2, ..., w_(n-1))

P(W) 구하기

 

  • 결합확률(joint probability) 구하기
    • P(its, water, is, so, transparent, that) => Chain rule을 사용해보자.
    • Chain Rule
      • 조건부 확률

        P(B | A) = P(A, B) / P(A)
        P(A, B) = P(A)P(B | A)
      • 두 개 이상 확률 변수들의 경우

        P(A, B, C, D) = P(A)P(B | A)P(C | A,B)P(D | A,B,C)
        P(A, B, C)P(D | A, B, C) = P(A, B)P(C | A, B)P(D | A,B,C)
      • 일반적인 경우

        P(x_1, x_2, ..., x_n) = P(x_1)P(x_2 | x_1)P(x_3 | x_1,x_2)...P(x_n | x_1, x_2, ..., x_(n-1))
      • P("its water is so transparent") =
        P(its) * P(water | its) * P(is | its water) * P(so | its water is) * P(transparent | its water is so)
      • 조건부 확률 P(w | h(history))

        P(the | its water is so transparent that) =
        Count(its water is so transparent that the) / Count(its water is so transparent that)
        • 가능한 문장의 개수가 너무 많고, 이를 계산할 수 있는 충분한 양의 데이터를 가지지 못할 것이란 문제가 있음.
    • Markov Assumption
      • 한 단어의 확률은 그 단어 앞에 나타나는 몇 개 단어들에만 의존한다는 가정
      • P(the | its water is so transparent that) ≈ P(the | that)
        p(the | its water is so transparent that ≈ P(the | transparent that)
      • Unigram 모델 : 단어가 나타날 확률은 이전의 단어에 의존하지 않는다는 극단적 모델 
      • Bigram 모델 : 단어가 나타날 확률은 바로 이전의 단어에만 의존한다.
        • 확률 계산
          • Maximum likelihood estimation
      • N-gram 모델
        • trigrams, 4-grams, 5-grams로 확장가능
        • 멀리 떨어진 단어들간의 관계(long-distance dependencies)를 완벽히 모델링하진 못함
        • 하지만 많은 경우 n-gram만으로도 좋은 결과를 얻을 수 있음 

모델 평가

 

  • 외재적 평가(exctrinsic evaluation)
    • 언어모델은 일반적으로 그 자체가 목표이기보단 특정 과제(맞춤법 검사 등)를 위한 부분으로서 쓰여지게 된다.
    • 따라서 언어모델이 좋은지 판단하기 위해선 그 과제의 평가지표를 사용하는 경우가 많다.
    • ex) 맞춤법 검사를 위해 두 개의 언어모델 A, B를 사요할 때
      • 각 모델을 사용해 얼마나 정확히 맞춤법 오류를 수정할 수 있는지 계산한다.
      • 정확도가 높은 언어모델을 최종적으로 사용한다.
  • 내재적 평가(intrinsic evaluation)
    • 외재적 평가는 시간이 많이 걸리는 단점이 있다.
    • 언어모델이 학습하는 확률자체를 평가할 수 있다. : Perplexity
    • 이 기준에서의 최적의 언어모델이 최종 과제에서 최적은 아닐 수도 있다.
    • 하지만 언어모델 학습과정에 버그가 있었는지 빨리 확인하는 용도로 사용할 수 있다.
  • 좋은 언어모델이란?
    • 테스트 데이터를 높은 확률로 예측하는 모델
      • Perplexity(PP) : 확률 역수를 단어 개수로 정규화한 값
        • Perplexity를 최소화하는 것이 확률을 최대화하는 것.

'AI > KDT 인공지능' 카테고리의 다른 글

[07/30] NLP : 단어 임베딩  (0) 2021.07.30
[07/29] NLP : 문서분류  (0) 2021.07.29
[07/27] NLP : 텍스트 전처리  (0) 2021.07.28
[07/22] Spark 3  (0) 2021.07.22
[07/21] Spark 2  (0) 2021.07.21

자연어 처리란?

 

자연어의 의미를 컴퓨터로 분석해 특정 작업을 위해 사용할 수 있도록 하는 것

 

  • 응용 분야
    • 기계 번역
    • 감성 분석
    • 문서 분류
    • 질의 응답 시스템
    • 챗봇
    • 언어 생성
    • 음성 인식
    • 추천 시스템

단어 (Word)

 

  • 문장부호를 단어에 포함시켜야 할까?
    • 단어들 사이의 경계를 짓는 역할을 할 경우
    • 문장의 의미에 영향을 주는 경우
  • 구어체 문장의 경우
    • ex) I do uh main-mainly business data processing
    • main- 처럼 말을 더듬어 깨어진 단어가 나타나는 경우(Fragments)
    • uh와 같이 중간에 의미 없는 추임새(filled pauses)
  • 표제어(lemma) : 여러 단어들이 공유하는 뿌리 단어
  • 단어 형태(wordform) : 같은 표제얼르 공유하나 다양한 형태를 가지는 경우

  • 단어 정의
    • Vocabulary : 단어 집합
    • Type : Vocabulary의 한 원소 
    • Token : 문장 내 나타나는 한 단어 (an instance of a type in running text)
    • They picnicked by the pool, then lay back on the grass and looked at the stars.
      • 16 tokens
      • 14 types (the가 반복)

말뭉치(Corpus)

 

  • 하나의 말뭉치(corpus)는 일반적으로 대용량 문서들의 집합이다.
  • 말뭉치 특성은 아래 요소들에 따라 달라지게 된다.
    • 언어 (7097개 언어 존재)
    • 방언
    • 장르(뉴스, 소설, 과학기술문서, 위키피디아, 종교문서 등)
    • 글쓴이 인구 통계적 속성 (나이, 성별, 인종 등)
  • 다양한 말뭉치에 적용할 수 있는 NLP 알고리즘이 바람직.

텍스트 정규화

 

모든 자연어 처리는 텍스트 정규화가 필요하다.

  • 토큰화 (tokenizing words)
  • 단어정규화 (normalizing word formats)
  • 문장분절화 (segmenting sentences)

Unix 명령으로 간단히 토큰화하기

 

  • 텍스트 파일 안에 있는 단어들 토큰화
    • tr -sc 'A-Za-z' '\n' < ooo.txt 
      • 주어진 텍스트파일 안에 있는 모든 단어들에 대해 newline으로 replace를 해준다.
        • ex) Hello I studying nlp now
        • Hello
          I
          studying
          nlp
          now
  • 빈도수로 정렬
    • tr -sc 'A-Za-z' '\n' < ooo.txt | sort | uniq -c | sort -n -r
  • 소문자로 변환해 정렬
    • tr 'A-Z' 'a-z' < ooo.txt | tr -sc 'a-z' '\n' | sort | uniq -c | sort -n -r

 

문제점들

 

  • 문장부호(punctuation)들을 항상 무시할 수 없다
    • 문장부호가 단어 의미를 명확히 하는 경우 제외시키지 않는 것이 좋다.
  • 접어(clitics) : 다른 단어에 붙어 존재하는 형태 ex) I'm -> I am
  • 여러 개 붙어야 의미 있는 경우 ex) rock'n'roll

한국어의 경우에서의 토큰화

 

  • 토큰화가 복잡함
  • 띄어쓰기가 잘 지켜지지 않고 띄어쓰기가 제대로 되어도 한 어절은 하나 이상의 의미 단위들이 있을 수 있다.
  • 형태소(morpheme) : 뜻을 가진 가장 작은 말의 단위
    • 자립형태소 : 명사, 대명사, 부사 등
    • 의존형태소 : 다른 형태소와 결합하여 사용되는 형태소. 접사, 어미, 조사 등
  • 단어보다 작은 단위(subword)로 토큰화가 필요하다.

Subword Tokenization

 

  • 만약 학습데이터에서 보지 못한 새로운 단어가 나타나면
    • 학습데이터 : low, new, newer
    • 테스트 데이터 : lower
    • -er, -est 등과 같은 형태소를 분리할 수 있으면 좋을 것
  • Subword tokenization algorithms
    • Byte-Pair Encoding (BPE)
    • WordPiece : 위와 유사한데 좀 더 확률적 개념을 활용해 향상시킨 모델
    • Unigram language modeling : 완전 확률을 기반한 모델
  • 두 가지 구성요소
    • Token learner : 말뭉치에서 vocabulary (token들 집합)을 만들어 냄
    • Token segmenter : 새로운 문장을 토큰화함.

Byte Pair Encoding(BPE)

 

  • 알고리즘 과정
    • Vocabulary를 단일 문자들 집합으로 초기화한다.
    • 다음을 반복
      • 말뭉치에서 연속적으로 가장 많이 발생하는 두 개 기호들(vocabulary 내 원소들)을 찾음
      • 두 기호들을 병합해 새로운 기호로 vocabulary에 추가
      • 말뭉치에서 그 두 기호들을 병합된 기호로 모두 교체
    • 위 과정을 k번 병합이 일어날 때까지 반복
  • 기호병합은 단어 안에서만 이뤄짐. 이것을 위해 단어끝을 나타내는 특수기호 '_'을 단어 뒤에 추가함. 그리고 각 단어를 문자 단위로 쪼갠다.
  • ex corpus )
    low low low low low lowest lowest newer newer newer newer newer newer wider wider wider new new
    • corpus
      5 l o w _
      2 l o w e s t _
      6 n e w e r _
      3 w i d e r _
      2 n e w _

      vocabulary
      _, d, e, i, l, n, o, r, s, t, w
    • e r을 er로 병합
      corpus
      5 l o w _
      2 l o w e s t _
      6 n e w er _
      3 w i d er _
      2 n e w _

      vocabulary
      _, d, e, i, l, n, o, r, s, t, w, er
    • er _을 er_로 병합
      corpus
      5 l o w _
      2 l o w e s t _
      6 n e w er_
      3 w i d er_
      2 n e w _

      vocabulary
      _, d, e, i, l, n, o, r, s, t, w, er, er_
    • n e을 ne로 병합
      corpus
      5 l o w _
      2 l o w e s t _
      6 ne w er_
      3 w i d er_
      2 ne w _

      vocabulary
      _, d, e, i, l, n, o, r, s, t, w, er, er_, ne
    • 다음과 같은 병합들이 일어남
      Merge          Current Vocabulary
      (ne, w)          _, d, e, i, l, n, o, r, s, t, w, er, er_, ne, new
      (l, o)             _, d, e, i, l, n, o, r, s, t, w, er, er_, ne, new, lo
      (lo, w)           _, d, e, i, l, n, o, r, s, t, w, er, er_, ne, new, lo, low
      (new, er_)       _, d, e, i, l, n, o, r, s, t, w, er, er_, ne, new, lo, low, newer_
      (low, er_)        _, d, e, i, l, n, o, r, s, t, w, er, er_, ne, new, lo, low, newer_, low_

  • Token segmenter
    • 새로운 단어가 주어졌을 때 어떻게 토큰화할 것인지?
    • Greedy한 적용 : 병합 학습한 순서대로 적용 ("e r" => "er")
    • 자주 나타나는 단어는 하나의 토큰으로 병합됨
    • 드문 단어는 subword 토큰들로 분할됨
  • 하나의 단어 "n e w e r _"은 하나의 토큰 "newer_"로 토큰화됨
  • 하나의 단어 "l o w e r _"은 두 개 토큰들 "low er_"로 토큰화됨

WordPiece

 

  • 기호들의 쌍을찾을 때 빈도수(BPE) 대신 likelihood를 최대화시키는 쌍을 찾음
    • ex)
      Corpus C

      5 l o w _
      2 l o w e s t _ 
      6 n e w e r _
      3 w i d e r _
      2 n e w _
    • Corpus C_1

      5 l o w _
      2 l o w e s t _ 
      6 n e w er _
      3 w i d er _
      2 n e w _
    • Corpus C_2

      5 lo w _
      2 lo w e s t _ 
      6 n e w e r _
      3 w i d e r _
      2 n e w _
    • P(C_1) > P(C_2)이면 "er" 생성

Unigram 

 

  • 확률모델(언어모델)을 사용
  • 학습데이터 내 문장을 관측(observed) 확률변수로 정의
  • Tokenization을 잠재(latent) 확률변수로 정의
    • 연속적(Sequential) 변수
  • 데이터 주변 우도(marginal likelihood)를 최대화시키는 tokenization을 구함
    • EM(expectation maximization) 사용
    • Maximization step에서 Viterbi 알고리즘 사용(wordpiece는 greedy하게 likelihood 향상)

단어 정규화

 

  • 단어들을 정규화된 형식으로 표현
    • ex)
      U.S.A. or USA or US (하나로 통일)
      uhhuh or uh-huh
      Fed or fed
      am, is be, are
  • 검색엔진에서 문서들을 추출할 때 유용할 수 있다.
  • Case floding
    • 모든 문자들을 소문자화함
      • 일반화(generalization)를 위해 유용. 학습데이터와 테스트데이터 사이 불일치 문제에 도움
      • 정보검색, 음성인식 등에서 유용
      • 감성 분석 등의 문서 분류 문제에선 오히려 대소문자 구분이 유용할 수 있음.
        (ex) 국가이름 US / 대명사 us)
  • Lemmatization
    • 어근을 사용해 표현
      • ex)
        am, are, is -> be
        car, cars, car's, cars' -> car
  • 최근 단어 정규화 경향 -> 가능하면 하지 않으려고 한다. 
    • 단어 정규화가 필요한 근본적 이유
      • 단어들 사이 유사성을 이해해야하기 때문
      • 단어 정규화 작업을 같은 의미를 가진 여러 형태 단어들을 하나의 단어로 대응시키는 것으로 이해할 수 있음
    • 단어를 Vocabulary로 정의된 공간(고차원 희소 벡터)이 아닌 저차원 밀집 벡터로 대응시킬 수 있다면?
      • ex)
        car => [0.13, 0.52, 0.01]
        cars => [0.15, 0.49, 0.02]
      • 단어임베딩을 사용해 단어를 표현하게 되면 단어정규화 필요성이 줄어들게 됨.

'AI > KDT 인공지능' 카테고리의 다른 글

[07/29] NLP : 문서분류  (0) 2021.07.29
[07/28] NLP : 언어 모델  (0) 2021.07.28
[07/22] Spark 3  (0) 2021.07.22
[07/21] Spark 2  (0) 2021.07.21
[07/20] Spark  (0) 2021.07.20

Spark MLib 소개

 

  • 머신러닝 관련 다양한 알고리즘, 유틸리티로 구성된 라이브러리
    • Classfication, Regression, Clustering, Collaborative Filtering(명시적 피드백(ex)리뷰 평점), 암묵적 피드백(ex)클릭, 구매 등등) 기반), Dimensionality, Reduction
    • 아직 딥러닝 지원은 미약
  • 여기엔 RDD 기반과 데이터프레임 기반 두 버전 존재
    • spark.mlib vs spark.ml
      • mlib가 RDD 기반. ml은 데이터프레임 기반
      • mlib는 RDD 위에서 동작하는 이전 라이브러리. 더 이상 업데이트가 안됨. 항상 spark.ml을 사용할 것! (import pyspark.ml(o) import pyspark.mlib(x))
  • Spark MLib 장점
    • 원스톱 ML 프레임워크
      • 데이터프레임과 SparkSQL 등을 이용해 전처리
      • 모델 빌딩
      • ML Pipeline을 통해 모델 빌딩 자동화
      • MLflow로 모델 관리하고 서빙
    • 대용량 데이터도 처리 가능
  • MLflow
    • 모델 관리와 서빙을 위한 Ops(Operations) 관련 기능 제공
  • Spark MLib 기반 모델 빌딩 기본 구조
    • 여느 라이브러리 사용 모델 빌딩과 크게 다르지 않음
      • 트레이닝셋 전처리
      • 모델 빌딩
      • 모델 검증
    • Scikit Learn과 비교했을 때 장점
      • 차이점은 데이터 크기
      • 트레이닝셋 크기가 크면 전처리와 모델 빌딩에 있어 Spark가 큰 장점을 가짐
      • Spark는 ML 파이프라인을 통해 모델 개발 반복을 쉽게 해줌

Spark MLib 피쳐 변환

 

  • 피쳐 추출과 변환
    • 피쳐 값들을 모델 훈련에 적합한 형태로 바꾸는 것을 지칭
    • 크게 두 가지 존재
      • Feature Extractor
        • 기존 피쳐에서 새로운 피쳐 추출
        • ex) TF-IDF, Word2Vec
      • Feature Transformer
        • 피쳐 값들은 숫자 필드여야 함. Categorical Data -> Numerical Data
        • 숫자 필드 값 범위 표준화 Feature Scaling or Normalization
        • 비어있는 필드들 값을 어떻게 채울까? Imputer
        • StringIndexer : 텍스트 카테고리를 숫자로 변환
          • sklearn.preprocessing 모듈에 다음과 같은 인코더 존재
            • OneHotEncoder, LabelEncoder, OrdinalEncoder, ...
          • Spark MLib 경우 pyspark.ml.feature 모듈 밑에 두 개의 인코더 존재
            • StringIndexer, OneHotEncoder
            • from pyspark.ml.feature import StringIndexer
              
              gender_indexer = StringIndexer(inputCol = 'Gender', outputCol = 'GenderIncdexed')
              gender_indexer_model = gender_indexer.fit(final_data)
              final_data_with_transformed_gender = gender_indexer_model.transform(final_data)
        • Sclaer : 숫자 필드값 범위 표준화
          • 숫자 필드 값 범위를 특정 범위로 변화하는 것. 피쳐 스케일링 또는 정규화라 부름
          • sklearn.preprocessing 모듈 아래 두 개 스케일러 존재 StandardScaler, MinMaxScaler
          • Spark MLib의 경우 pyspark.ml.feature 모듈 밑 두 개 스케일러 존재
            • StandardScaler
              • 각 값에서 평균을 빼고 이를 표준편차로 나눔. 값의 분포가 정규분포를 따르는 경우 사용
            • MinMaxScaler
              • 모든 값을 0과 1 사이로 스케일. 각 값에서 최소값을 빼고 (최대값 - 최소값)으로 나눔
        • Imputer : 값이 없는 필드 채우기
          • 값이 존재하지 않는 레코드들이 존재하는 필드들의 경우 기본값을 정해 채우는 것. Impute한다 부름.
          • sklearn.preprocessing 모듈 아래 존재. Imputer
          • Spark MLib의 경우 pyspark.ml.feature 모듈 밑에 존재
            • Imputer

Spark MLib ML Pipeline 살펴보기

 

  • 모델 빌딩 관련 문제들
    • 트레이닝 셋 관리가 안됨
    • 모델 훈련 방법이 기록이 안 됨 (ML Pipeline을 통해 해결)
      • 어떤 트레이닝 셋을 사용했는지?
      • 어떤 피쳐들을 썼는가?
      • 하이퍼 파라미터는 무엇을 사용했는가?
    • 모델 훈련에 많은 시간 소요 (ML Pipeline을 통해 해결)
      • 모델 훈련이 자동화가 안 된 경우 각 스텝들을 노트북 등 일일히 수행
      • 에러 발생 여지가 많음. 특정 스텝을 까먹거나 다른 방식을 적용하는 경우...
  • ML 파이프라인이란?
    • 데이터 과학자가 머신러닝 개발과 테스트를 빠르게 해주는 기능
    • 머신러닝 알고리즘 관계 없이 일관된 형태의 API를 사용하여 모델링 가능
    • ML 모델개발과 테스트를 반복 가능하게 해줌.
    • 구성 요소
      • 데이터프레임
        • 기본적으로 CSV, JSON, Parquet, JDBC(관계형 데이터베이스) 지원
        • 다음 2가지 새로운 데이터 소스 지원
          • 이미지 데이터 소스
          • LIBSVM 데이터 소스
            • label과 features 두 개 컬럼으로 구성된 머신러닝 트레이닝셋 포맷
            • features 컬럼은 벡터 형태 구조를 가짐
      • Transformer
        • 입력 데이터프레임을 다른 데이터프레임으로 변환
          • 하나 이상의 새로운 컬럼 추가
        • 두 종류의 Transformer가 존재하며 transform이 메인 함수
          • Feature Transformer
            • 입력 데이터프레임의 컬럼으로부터 새로운 컬럼을 만들어내 이를 추가한 새로운 데이터프레임을 출력으로 내줌. 보통 피쳐 엔지니어링을 하는데 사용
            • ex) Imputer, StringIndexer, VectorAssembler
          • Learning Model
            • 머신러닝 모델에 해당
            • 피쳐 데이터프레임을 입력으로 받아 예측값이 새로운 컬럼으로 포함된 데이터프레임을 출력으로 내줌. : prediction, probability
      • Estimator
        • 머신러닝 알고리즘에 해당. fit이 메인 함수
        • 모델 정보를 저장하고 읽는 함수 제공. save와 load
      • Parameter
        • Transformer와 Estimator의 공통 API.
        • 두 종류의 파라미터 존재
          • Param(하나의 이름과 값)
          • ParamMap (Param 리스트)

'AI > KDT 인공지능' 카테고리의 다른 글

[07/28] NLP : 언어 모델  (0) 2021.07.28
[07/27] NLP : 텍스트 전처리  (0) 2021.07.28
[07/21] Spark 2  (0) 2021.07.21
[07/20] Spark  (0) 2021.07.20
[07/19] 12주차 강의 개요  (0) 2021.07.19

+ Recent posts