ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [딥 러닝을 이용한 자연어 처리 입문] 2. 텍스트 전처리(3)
    기타/AI 2022. 9. 25. 12:54

    https://wikidocs.net/book/2155

     

    딥 러닝을 이용한 자연어 처리 입문

    많은 분들의 피드백으로 수년간 보완되어 온 딥 러닝 자연어 처리 무료 eBook입니다. 기본적인 텍스트 전처리부터 BERT와 같은 PLM의 다양한 다운스트림 태스크를 ...

    wikidocs.net

     

    해당 포스팅은 "딥 러닝을 이용한 자연어 처리 입문" 서적을 제 생각대로 요약한 내용입니다.

     

     


     

     

    목차 2. 텍스트 전처리 (Text Preprocessing)

     

    ① 토큰화 (Tokenization)

     

    ② 정제 (Cleaning) and 정규화 (Normalization)

     

    ③ 어간 추출 (Stemming) and 표제어 추출 (Lemmatization)

     

    ④ 불용어 (Stopword)

     

    ⑤ 정규 표현식 (Regular Expression)

     

    ⑥ 정수 인코딩 (Integer Encoding)

     

    ⑦ 패딩 (Padding)

     

    ⑧ 원-핫 인코딩 (One-Hot Encoding)

     

    ⑨ 데이터의 분리 (Splitting Data)

     

    ⑩ 한국어 전처리 패키지 (Text Preprocessing Tools for Korean Text)

     

     

     


     

     

    원-핫 인코딩 (One-Hot Encoding)

     

    배경

    - 원-핫 인코딩을 위해서 가장 먼저 해야할 일은 단어 집합을 만드는 일

    @ 단어 집합 (vocabulary) : 서로 다른 단어들의 집합, book과 books도 다른 단어로 간주

    - 텍스트의 모든 단어를 중복을 허용하지 않고 모아놓으면 이를 단어 집합이라고 함

    - 이 단어 집합에 고유한 정수를 부여하는 정수 인코딩 진행

     

     개요

    - 단어 집합의 크기를 벡터의 차원으로 함, 원-핫 인코딩은 단어의 벡터 표현 방식

    - 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여

    - Okt (KoNLPy) 형태소 분석기 통해서 문장 토큰화 수행 후 각 토큰에 대해서 고유한 정수 부여

    @ 단어 집합 : {'나' : 0, '는' : 1, '자연어' : 2, '처리' : 3, '를' : 4, '배운다' : 5}

    @ '자연어'라는 단어의 원-핫 벡터 : {0, 0, 1, 0, 0, 0}

    - 케라스(Keras)에서는 이를 지원하는 to_categorical() 도구 존재

     

     원-핫 인코딩 (One-Hot Encoding)의 한계

    - 단어의 개수가 늘어날 수록, 벡터를 저장하기 위해 필요한 공간(차원)이 계속 늘어남

    @ 예시 : 단어가 1000개인 코퍼스의 경우, 1의 값 1개와 0의 값 999개

    - 단어의 유사도를 표현하지 못함, 검색 시스템 등에서는 문제가 될 소지가 있음

    - 이러한 단점을 해결하기 위해 단어의 잠재 의미를 반영하여 다차원 공간에 벡터화 하는 기법 2가지

    @ 첫째 : LSA, HAL 등 카운트 기반으로 벡터화

    @ 둘째 : NNLM, RNNLM, Word2Vec 등 예측 기반으로 벡터화

    - 두 가지 방법을 모두 사용하는 GloVe 방법도 있음

     

     

     

     

    ⑨ 데이터의 분리 (Splitting Data)

     

     지도 학습 (Supervised Learning)

    - 정답이 무엇인지 맞춰야 하는 '문제' 데이터와 레이블이라고 부르는 '정답' 데이터 존재

    - 기계는 정답이 적혀져 있는 문제지를 문제와 정답을 함께 보면서 열심히 공부

    - 향후에 정답이 없는 문제에 대해서도 정답을 잘 예측해야 함

     

     x와 y 분리하기

    - x는 문제 데이터, y는 문제에 대한 정답 데이터

    - zip 함수, 데이터프레임, Numpy를 이용하여 분리 가능 

     

     테스트 데이터 분리하기

    - 훈련 목적 데이터와 테스트 목적 데이터로 분리

    - 사이킷 런(train_test_split())을 이용하거나 수동으로 분리 가능

     

     

     

     

    ⑩ 한국어 전처리 패키지 (Text Preprocessing Tools for Korean Text)

     

    PyKoSpacing

    - 띄어쓰기가 되어있지 않은 문장을 띄어쓰기를 한 문장으로 변환해주는 패키지

    - 대용량 코퍼스를 학습하여 만들어진 띄어쓰기 딥 러닝 모델로 준수한 성능

    - https://github.com/haven-jeon/PyKoSpacing

     

    Py-Hansepll

    - 네이버 한글 맞춤법 검사기를 바탕으로 만들어진 패키지

    - PyKoSpacing과 비슷하지만 결과가 조금은 다름

    - https://github.com/ssut/py-hanspell

     

     SOYNLP를 이용한 단어 토큰화

    - 품사 태깅, 단어 토큰화 등을 지원하는 단어 토크나이저

    - 비지도 학습으로 단어 토큰화를 진행, 데이터에 자주 등장하는 단어 분석

    - 토크나이저 내부적으로 단어 점수 표 동작

    - 응집 확률(cohesion probability)과 브랜칭 엔트로피(branching entropy) 활용

    @ 응집 확률 : 내부 문자열이 얼마나 응집하여 자주 등장하는지를 판단하는 척도

    ㄴ 하나의 단어에 가까울수록 값은 커짐 (반포한강공원 >> 반포한강공)

    @ 브랜칭 엔트로피 : 주어진 문자열에서 얼마나 다음 문자가 등장할 수 있는지를 판단하는 척도

    ㄴ 나올 단어가 다양하다면 값이 커짐 (디스 >> 디스플)

    - 기존에는 신조어, 형태소 분석기에 등록되지 않은 단어는 제대로 구분하지 못하는 단점 존재

    @ L tokenizer : 띄어쓰기 단위로 나눈 어절 토큰과 같이 L 토큰 + R 토큰 형식을 가지는 토크나이저

    ㄴ 공원에 -> 공원(L토큰) + 에(R토큰), 공부하는 -> 공부(L토큰), 하는(R토큰)

    @ 최대 점수 토크나이저 : 띄어쓰기가 되지 않는 문장에서 점수가 높은 글자 시퀀스를 순차적으로 찾아냄

     

     SOYNLP를 이용한 반복되는 문자 정제

    - ㅋㅋ, ㅎㅎ 등의 이모티콘의 경우 불필요하게 연속되는 경우가 많음

    - 모두 서로 다른 단어로 처리하는 것은 불필요하므로, 반복되는 것은 하나로 정규화

     

     Customized KoNLPy 

    - 사용자 사전을 추가하는 방법은 형태소 분석기마다 다른데, 생각보다 복잡한 경우들이 많음

    - cutomized_konlpy 형태소 분석기를 활용하여 특정 단어를 사전에 추가

    ㄴ add_dictonary('특정단어', 'Noun') -> 하나의 토큰으로 인식

     

     

     

     

Designed by Tistory.