교육/프로그래머스 인공지능 데브코스

[13주차 - Day2] NLP: 텍스트 전처리

zzangyeah 2021. 8. 10. 09:33
728x90

자연어 처리

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

 

참고자료

https://web.stanford.edu/~jurafsky/slp3/

 

Speech and Language Processing

Speech and Language Processing (3rd ed. draft) Dan Jurafsky and James H. Martin Here's our December 30, 2020 draft! Includes: new version of Chapter 8 (bringing together POS and NER in one chapter), new version of Chapter 9 (with Transformers) Chapter 11 (

web.stanford.edu

 

 

텍스트 전처리

단어(Word)

  • Vocabulary : 단어의 집합
  • Type : Vocabulary의 한 원소, 문장 내의 유니크한 Token
  • Token : 문장 내에 나타나는 한 단어

ex)They picnicked by the pool, then lay back on the grass and looked at the stars.

    token : 16개 type : 14개(the가 반복)

말뭉치(Corpus)

하나의 말뭉치는 대용량 문서들의 집합

말뭉치의 특성은 언어, 방언, 장르(뉴스, 소설 등), 글쓴이의 인구통계적 속성(나이, 성별, 인종 등)에 따라 달라지게 됨

텍스트 정규화

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

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

#1. 텍스트 파일 안에 있는 단어들 토큰화해서 한줄씩 띄워서 출력
tr -sc 'A-Za-z' '\n' < hamlet.txt

#2. 빈도수로 정렬 '빈도수 단어'로 출력
tr -sc 'A-Za-z' '\n' < hamlet.txt | sort | uniq -c | sort -n -r

#3. 소문자로 변환해서 정렬
tr 'A-Z''a-z' < hamlet.txt | tr -sc 'a-z' '\n' | sort | uniq -c | sort -n -r

 

 

위의 방식처럼 단순하게 토큰화하면 생기는 문제점

  • 문장부호들은 항상 무시할 수는 없다    ex)AT&T, ph.D., $12.50, 01/02/2021, http://www.yahoo.com, #ml, helloworld@email.com
  • 접어(clitics) 다른 단어에 붙어서 존재하는 형태    ex)we're->we are
  • 여러 개의 단어가 붙어야 의미있는 경우     ex)New York, rock'n'roll

한국어의 경우

토큰화가 복잡함->띄어쓰기 문제, 형태소(morpheme)의 문제

ex)열심히 코딩한 당신, 연휴에는 여행을 가봐요->열심히/코딩/한/당신/,/연휴/에는/여행/을/가봐요

->단어보다 작은 단위(subword)로 토큰화가 필요함을 알 수 있음

 

1. 텍스트 정규화 - Subword Tokenization

ex)만약 학습데이터에서 보지 못했던 새로운 단어가 나타난다면?

학습데이터 : low, new, newer

테스트데이터 : lower

->-er, -est 등과 같은 형태소를 분리할 수 있으면 좋을 것

 

Subword Tokenization Algorithms의 종류

  • Bytes-Pair Encoding(BPE)
  • WordPiece
  • Unigram language modeling

Subword Tokenization Algorithms의 두가지 구성요소

  • Token learner : 말뭉치에서 Vocabulary(token들의 집합)을 만들어냄
  • Token Segmenter : 새로운 문장을 토큰화

 

1. Byte Pair Encoding(BPE)

  1. Vocabulary를 단일 문자들의 집합으로 초기화함
  2. 말뭉치에서 연속적으로 가장 많이 발생하는 두 개의 기호들(vocabulary내의 원소들)을 찾음
  3. 두 기호들을 병합하고 새로운 기호로 vocabulary에 추가
  4. 말뭉치에서 두 기호들을 병합된 기호로 모두 교체
  5. 2-4번을 k번의 병합이 일어날 때까지 반복

기호병합은 단어 안에서만 이루어짐

단어 끝을 나타내는 특수기호 '_'를 단어 뒤에 추가하고 각 단어를 문자단위로 쪼갬

 

1. e r을 er로 병합
2. er _ 을 er_로 병합
3. n e 을 ne로 병합
위의 방식을 계속해서 병합하면 이처럼 병합이 됨

 

2. Wordpiece

BPE는 빈도수를 이용하는 반면 Wordpiece는 likelihood를 최대화시키는 쌍을 찾음

 

3. Unigram

병합을 순차적으로 고려하지 않고 여러 개의 병합이 동시에 일어날 수 있게 likelihood계산

확률모델(언어모델)을 사용

  • 학습데이터 내의 문장 : 관측(observed)확률변수로 정의
  • 모든 가능한 tokenization : 잠재(latent) 확률변수로 정의

데이터의 주변 우도(marginal likelihood)를 최대화시키는 tokenization을 구함

더보기

주변 우도(marginal likelihood)?

P(X, Z)를 Z에 대해 ∑한 것 = P(X) = 주변 우도 (X : 관측된 변수, Z : 잠재 변수)

->EM(Expectation maximization)을 사용하는데 E step과 M step중 M step의 Viterbi알고리즘 사용

 

2. 텍스트 정규화 - 단어정규화

단어들을 정규화된 형식으로 표현

why?같은 의미를 가진 단어인데 여러 형태인 경우 문제가 발생할 수 있으므로 해결해야함

ex)U.S.A=USA=US / uhhuh=uh-huh / Fed=fed / am=is=be=are 등

  • Case folding : 모든 문자들을 소문자화함, 일반화(generalization)에 유용
  • Lemmatization : 어근을 사용해서 표현 ex)am,are,is=be / car,cars,car's,cars'=car 등