ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [13주차 - Day2] NLP: 텍스트 전처리
    교육/프로그래머스 인공지능 데브코스 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 등

     

     

     

    댓글

Designed by Tistory.