ABOUT ME

포트폴리오용 보안 블로그

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

     

    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)

     

     

     


     

     

    ⑤ 정규 표현식 (Regular Expression)

     

    정규 표현식 문법과 모듈 함수

    - 파이썬에서는 정규 표현식 모듈 re을 지원, 특정 규칙이 있는 텍스트 데이터를 빠르게 정제 가능

    - 정규 표현식 문법 <특수문자 표현>

    . 한 개의 임의의 문자를 나타냅니다. (줄바꿈 문자인 \n는 제외)
    ? 앞의 문자가 존재할 수도 있고, 존재하지 않을 수도 있습니다. (문자가 0개 또는 1개)
    * 앞의 문자가 무한개로 존재할 수도 있고, 존재하지 않을 수도 있습니다. (문자가 0개 이상)
    + 앞의 문자가 최소 한 개 이상 존재합니다. (문자가 1개 이상)
    ^ 뒤의 문자열로 문자열이 시작됩니다.
    $ 앞의 문자열로 문자열이 끝납니다.
    {숫자} 숫자만큼 반복합니다.
    {숫자1, 숫자2} 숫자1 이상 숫자2 이하만큼 반복합니다. ?, *, +를 이것으로 대체할 수 있습니다.
    {숫자,} 숫자 이상만큼 반복합니다.
    [ ] 대괄호 안의 문자들 중 한 개의 문자와 매치합니다. [amk]라고 한다면 a 또는 m 또는 k 중 하나라도 존재하면 매치를 의미합니다. [a-z]와 같이 범위를 지정할 수도 있습니다. [a-zA-Z]는 알파벳 전체를 의미하는 범위이며, 문자열에 알파벳이 존재하면 매치를 의미합니다.
    [^문자] 해당 문자를 제외한 문자를 매치합니다.
    l AlB와 같이 쓰이며 A 또는 B의 의미를 가집니다.

     

    -정규 표현식 문법 <역 슬래쉬>

    \ 역 슬래쉬 문자 자체를 의미합니다
    \d 모든 숫자를 의미합니다. [0-9]와 의미가 동일합니다.
    \D 숫자를 제외한 모든 문자를 의미합니다. [^0-9]와 의미가 동일합니다.
    \s 공백을 의미합니다. [ \t\n\r\f\v]와 의미가 동일합니다.
    \S 공백을 제외한 문자를 의미합니다. [^ \t\n\r\f\v]와 의미가 동일합니다.
    \w 문자 또는 숫자를 의미합니다. [a-zA-Z0-9]와 의미가 동일합니다.
    \W 문자 또는 숫자가 아닌 문자를 의미합니다. [^a-zA-Z0-9]와 의미가 동일합니다.

     

    - 정규표현식 모듈 함수

    re.compile() 정규표현식을 컴파일하는 함수입니다. 다시 말해, 파이썬에게 전해주는 역할을 합니다. 찾고자 하는 패턴이 빈번한 경우에는 미리 컴파일해놓고 사용하면 속도와 편의성면에서 유리합니다.
    re.search() 문자열 전체에 대해서 정규표현식과 매치되는지를 검색합니다.
    re.match() 문자열의 처음이 정규표현식과 매치되는지를 검색합니다.
    re.split() 정규 표현식을 기준으로 문자열을 분리하여 리스트로 리턴합니다.
    re.findall() 문자열에서 정규 표현식과 매치되는 모든 경우의 문자열을 찾아서 리스트로 리턴합니다. 만약, 매치되는 문자열이 없다면 빈 리스트가 리턴됩니다.
    re.finditer() 문자열에서 정규 표현식과 매치되는 모든 경우의 문자열에 대한 이터레이터 객체를 리턴합니다.
    re.sub() 문자열에서 정규 표현식과 일치하는 부분에 대해서 다른 문자열로 대체합니다.

     

     

     

     

    ⑥ 정수 인코딩 (Integer Encoding)

     

     개요

    - 컴퓨터는 텍스트보다는 숫자를 더 잘 처리 할 수 있음

    - 자연어 처리에서는 텍스트를 숫자로 바꾸는 여러가지 기법들이 존재

    @ 예시 : 텍스트에 단어가 5,000개가 있다면, 각 단어들을 1번부터 5,000번까지 맵핑 및 인덱싱

     

     정수 인코딩 (Integer Encoding)

    - 단어를 빈도수 순으로 정렬한 단어 집합(vocabulary)을 만듦

    - 빈도수가 높은 순서대로 차례로 낮은 숫자부터 정수를 부여하는 방법

    - lamda 사용 (단어, 빈도수), dictionary 사용 (단어, 순위), counter 사용 (중복 제거, 단어 빈도수 기록)

    - NLTK의 FreqDist 사용 (빈도수 계산 도구) <-> Counter와 동일한 방법

     

     케라스 (Keras)의 텍스트 전처리

    - 기본적인 전처리를 위한 도구들 제공

    - 정수 인코딩을 위해서 토크나이저 사용

    - fit_on_texts는 입력한 텍스트로부터 단어 빈도수가 높은 순으로 낮은 정수 인덱스 부여

     

     

     

     

    ⑦ 패딩 (Padding)

     

     개요

    - 자연어 처리를 하다보면 각 문장(문서)은 서로 길이가 다를 수 있음

    - 기계는 길이가 전부 동일한 문서들에 대해서는 하나의 행렬로 한번에 처리

    - 병렬 연산을 위해서 여러 문장의 길이를 임의로 동일하게 맞춰주는 작업 필요

     

     Numpy로 패딩하기

    - 가장 길이가 긴 문장의 길이가 7이라 가정

    - 길이가 7보다 짧은 문장에는 숫자 0을 채워서 길이 7로 맞춰줌

    - 데이터에 특정 값을 채워서 데이터의 크기(shape)를 조정하는 것이 패딩

    - 숫자 0을 사용하고 있다면 제로 패딩(zero padding)

     

     케라스 전처리 도구로 패딩하기

    - pad_sequences()를 제공하고 있음

Designed by Tistory.