본문 바로가기
정리/실무가 훤히 보이는 머신러닝&딥러닝

7장_한글 자연어 처리

by 스꼬맹이브로 2023. 3. 3.
728x90
반응형
SMALL

자연어 처리 기술(NLP, Natural Language Processing)
: 사람이 말하는 언어를 기계적으로 분석해 컴퓨터가 이해할 수 있는 형태로 만드는 기술

 

1. 자연어 처리 분야

  • 정보 검색(Information Retrieval Service)
    • 가장 널리 사용되고 있는 상용화된 자연어 처리 영역
    • 사용자가 입력한 용어나 문장에 대해 가장 유사한 문서를 찾아 순위를 매겨 사용자에게 제시하는 시스템
    • 에이전트(Agent)라고 하는 로봇이 인터넷상의 웹 페이지를 방문하여 검색 가능하도록 인덱싱(indexing)하는 정보 수집 과정과 수집된 정보에 대해 사용자의 검색어와 연관성을 계산하는 랭킹 모델이 핵심
    • 단순히 키워드 검색 뿐만 아니라 문맥, 산업별 전문용어 및 유사어, 관련성 등을 고려한 검색 서비스 요구 증가
  • 정보 추출(Information Extraction)
    • 방대한 데이터에서 원하는 주요한 정보를 찾아내는 기술
    • 대표적 기술 : 개체명 추출(Named Entity Extraction)
      - 문장 내에서 사람, 위치, 날짜, 조직명, 직업 같은 사전에 정의된 분류의 단어를 찾는 것
  • 기계 번역(Machine Translation)
    • 서로 다른 언어를 사용하는 인류가 늘 원하는 숙원 중 하나
    • 초기에는 통계적 기계 번역이 주류를 이뤘으나 최근 구글에서 딥러닝을 활용한 신경망 기반 기계 번역이 상당한 성능의 진전을 가져옴
  • 대화 시스템(Dialog Management)
    • 자연어 처리 기술은 주로 대화형 로봇인 챗봇, 음성 인식 분야 등에서 적극적으로 활용됨.
  • 감정 분석(Sentiment Analysis)
    • 텍스트 문장 내에서 표현하는 긍정 및 부정의 문맥을 판별하는 것
    • 보통 긍정/부정/중립의 상태로 표현하며 그 정도에 따라 강도를 나누기도 함
    • 대표적 사용처 : 대화 시스템, 시장 분석 등
  • 단어 및 문장 분류
    • 작성된 글이나 뉴스를 정제하고 분석하기 위해 분류를 수행
    • 산업별, 업무별로 분류해 정리하여 추후 검색과 분석 단계에 활용
  • 품사 태깅(POS Tagging,Part-of-Speech Tagging) 
    • 텍스트 분석을 위한 기반이 되는 기능
    • 문장 내에서 단어의 품사(명사, 동사, 형용사 등)를 찾아내 태그를 다는 과정
    • 동일한 단어가 문장의 문맥에 따라 품사가 달라질 수 있기 때문에 단순히 사전으로 해결하기 어려움
    • 이러한 모호성을 해소하기 위해 앞뒤 단어를 고려하는 엔그램(N-gram)을 참고
  •  구문 분석(Syntactic Analysis)
    • 품사 태깅과 마찬가지로 텍스트 분석을 위한 기반이 되는 기능
    • 문장을 잘 이해하기 위해 문장을 트리 형태로 구성
    • 주절과 종속절을 구분하거나 주어와 목적어 혹은 지시어에 대한 해석등을 통해 구문을 정확하게 해석하는 기술
    • 주어가 자주 생략되고 단어가 중의성을 갖는 한글에서는 더욱 어려움
  • 음성 인식(Speech Recognition)
    • 음성 신호를 이해하는 기능이라고 생각할 수 있으나 최종 결과는 텍스트이므로 자연어 기술이 포함됨
    • 음성 신호 정보를 음소 단위로 해석하는 음성 모델(Accoustic Model) + 음소를 단어로, 단어들을 문장으로 구성하는 언어 모델(Language Model)
      → 이 때, 언어 모델을 학습하여 가장 가능성 높은 문장을 예측

2. 텍스트 데이터 전처리

[전처리(preprocessing)]

  • 텍스트 처리 성능을 높이기 위해 잡음이나 불규칙한 내용을 정제하는 과정
  • 이를 통해 자연어 처리에서 정확도를 높임
  • 한글의 경우 문장 공백이 불규칙하거나 약어를 사용하는 등의 변형이 많은 언어이기 때문에 전처리가 매우 중요함

[텍스트 전처리 단계]

  • 불용어 제거
    • 불용어 : 문장의 단어 중에서 큰 의미를 가지지 않는 용어
    • 문장의 구성에서 중요한 의미를 가지지 않아 삭제되어도 무방하거나, 흔히 출현해 정보 해석에 어려움을 줌
    • 문장에 포함될 경우 모델 학습 시 잡음으로 영향을 끼침
    • 미리 사전으로 관리하여 문장에서 제거하는 과정을 거쳐야 함
  • 공백 교정
    •  공백 교정(Space Correction) 방법 : 토큰 추출 시 가장 쉬운 방법인 공백을 기준으로 단어를 추출하는 방법
    • 영어의 경우 공백을 기준으로 해도 토큰을 쉽게 구분할 수 있음
    • 한글의 경우 공백을 불규칙하게 사용하거나 틀리기 쉬운 언어이기 때문에 어려움
    • 문장 내 공백을 미리 교정해야 품사 태깅이나 개체명 인식 같은 처리를 잘 수행할 수 있음
  • 문장 분리
    • 문장을 잘 구분해야 구문 분석이 정확할 수 있음
    • 마침표를 기준으로 나누면 될 것이라고 생각할 수 있으나 소수점이나 약어의 경우에도 마침표를 사용하므로 주의
    • 보통 규칙 기반으로 처리하는 것이 일반적임

[텍스트 처리에서 활용되는 주요 용어]

토큰(token) : 자연어를 처리할 때 다루는 데이터의 가장 작은 단위

토큰의 종류

  • 자소(=낱소,Phoneme)
    • 음성을 구분하는 기준으로 문자 하나 하나보다는 음성을 기준으로 나눔
    • 한글의 경우 음성의 구성이 명확하기 때문에 초성, 중성, 종성으로 구분
    • ex) 학교 ㅎ,ㅏ,ㄱ,ㄱ,ㅛ
  • 음절(Syllable)
    • 각 낱자가 합쳐진 글자를 의미
    • 현대 한글의 음절은 모두 11,172자
    • ex) 학교 → 학, 교
  • 단어(=낱말,Word)
    • 스스로 의미를 담고 있는 최소의 단위
    • 하나 이상의 형태소로 구성되며 자립성이 있어 앞뒤로 띄어쓰기가 가능
    • ex) 학교에 간다 → 학교에, 간다
  • 표제어(Lemma)
    • 단어의 기본형을 의미
    • 단어의 기본형을 추출하는 과정으로 어미의 다양성 때문에 발생될 수 있는 어려움을 최소화 할 수 있음
    • ex) 학교에 간다 → 학교, 가다
  • 어간(Stem)
    • 실제 단어가 아닌 어간 일부를 추출한 것이기 때문에 실제 사전에 존재하지 않을 수도 있음
    • ex) 학교에 간다 → 학교, 간

3. 텍스트 데이터의 벡터화

컴퓨터는 문자 자체를 이해하지 못하기 때문에 처리하기 편하도록 벡터(vector)화를 수행해서 알고리즘의 입력으로 전달해야 함

[벡터화 방법]

  • 단어 사전
    • 문서나 문장 내에서 사용되는 모든 단어를 목록화하고 각 단어에 인덱스를 부여해 숫자를 할당하여 단어 사전(Dictionary)을 생성
    • 문장에서 단어를 추출해서 사전을 검색헤 해당하는 숫자로 텍스트를 변환
  • N-gram
    • N-gram은 통계와 확률을 바탕으로 한 색인 분석에 널리 사용되는 방식
    • 매우 직관적이어서 이해하기 쉽기 때문에 다양한 자연어 처리 알고리즘에 많이 사용됨
    • 입력한 문자열을 N개의 기준 단위로 절단하는 방법
    • N개의 단어만큼 옆으로 이동하면서 각 gram을 하나의 단위로 벡터화하거나 빈도를 계산
    • N은 경우에 따라 선택하면 되며 N이 2인 경우 bi-gram, 3인 경우 tri-gram이라고 함
  • Bag-of-words(BOW)
    • 단어 사전의 출력 결과와 비슷하지만 큰 차이점은 문장에서의 단어들의 순서 정보가 보존되지 않는 것임
    • 사전을 구성할 때와 같이 발견한 모든 단어가 포함되는 사전을 구성하고 단어별로 숫자형 인덱스를 할당함
    • 해당 인덱스 순서를 유지한 채로 문장에서 발생한 단어에 해당하는 숫자를 증가해 빈도 수를 누적
    • 결과, 문서 내에 어떤 단어가 많이 발견되는지 확인할 수 있음
    • 이러한 이유로 문서 분류를 하기 위해 BOW를 많이 사용함
  • TF-IDF(Term Frequency-Inverse Document Frequency)
    • 단어 빈도 - 역문서 빈도
    • 특정 단어가 문서 내에서 나타내는 중요도를 평가하는 척도
    • TF : 단어 빈도를 나타내며 문서 내에서 특정 단어가 몇 번 발견되었는지를 계산
    • IDF : DF의 역수, DF는 특정 단어가 발견되는 문서의 수를 뜻함, 즉 특정 문서가 아닌 대부분의 문서에서 발견되는 수를 뜻하므로 중요한 의미를 갖지 않는다고 볼 수 있음
    • TF-IDF값이 큰 단어는 전체적으로 빈도 수는 높지 않지만 해당 문서에서만 빈도가 높은 단어이므로 문서 분류를 고려할 때 큰 도움이 되는 수치임

4. 한글 자연어 처리 과정

자연어 분석 단계는 아래 그림과 같이 보통 4단계로 분류됨

좌측부터 기본적인 처리 단계를 의미하고 우측으로 갈수록 분석한 내용을 참고하여 난이도가 높은 의미 분석 및 응용 단계를 나타냄

자연어 처리 단계

  • 형태소 분석(Morphological Analysis)
    • 입력된 문자열을 분석하여 형태소라는 의미를 갖는 최소 단위로 쪼개는 분석 방법
    • 보통 사전을 기반으로 최소 단위 단어를 구분하기 때문에 신조어 같은 사전에 누락된 경우 처리가 어려움
  • 구문 분석(Syntax Analysis)
    • 문장을 구조적 상태로 분석하는 분석 방법
    • 문법을 이용하여 문장 구조를 해석하고 문장 내의 주절과 종속절을 구분해 주어와 동사 등의 구성을 해석

출처 : https://konlpy.org/ko/latest/_images/chunking.png

  • 의미 분석(Semantic Analysis)
    • 구문 분석 단계에서 생긴 의미적 모호성을 각 어절의 정보를 이용하여 해소하고 의미의 구조를 설정하는 단계

한글 의미 분석 사례

  • 화용 분석(Pragmatic Analysis)
    • 문장이 실세계에서 가지는 연관관계를 분석
    • 주어진 문장에 대해 분석하여 필요한 정보를 구조화하고 그에 대한 답변이 정확한지 판단
    • 화자의 질문 의도와 중요 정보를 추출하고 그에 대한 답변을 찾아 제시

5. 한글 형태소 분석기 알아보기

한글 처리에서 많이 활용되고 있는 대표적인 형태소 분석기 종류

  • 한나눔(Hannanum)
    • 카이스트에서 개발한 형태소 분석기
    • 형태소 분석 및 품사 태깅 기능 제공
    • 자바와 C 지원
    • http://kldp.net/hannanum/
  • 꼬꼬마(Kkma)
    • 서울대학교에서 개발한 형태소 분석기
    • 자바 기반으로 개발
    • 품질 대비 속도가 느린 편
    • 문장 분리기 제공
    • GPL 라이선스를 따름
    • http://kkma.snu.ac.kr/documents/index.jsp
  • 코모란(Komoran)
    • 샤인웨어(Shineware)에서 개발한 형태소 분석기
    • 자바 기반으로 개발
    • 아파치 라이선스 2.0을 따름
    • https://github.com/shin285/KOMORAN
  • 은전한잎(mecab-ko)
    • 일본어 형태소 분석이였으나 한글을 지원하도록 포팅 개발됨
    • C++ 언어로 개발
    • GPL, LGPL, BSD 라이선스를 따름
    • 처리 성능 및 속도에서 좋은 평을 받고 있음
    • 사용자 사전을 추가할 수 있음
    • https://bitbucket.org/eungeon/mecab-ko/
  • 트위터(Twitter)
    • 트위터에서 개발한 형태소 분석기
    • 품질이 뛰어나지는 않으나 소셜 분석을 대상으로 하여 비형식어나 신조어 등을 상대적으로 잘 찾아냄
    • 처리 속도가 빨라 실시간 처리 등에 많이 활용됨
    • 사용자 사전을 추가할 수 있음
    • 2017년 이후 Open-Korean-Text라는 이름으로 변경되어 운영중
    • https://openkoreantext.org/

각 형태소 분석기에 대한 성능 비교 내용은 KoNlpy(https://konlpy.org/ko/latest/)에서 제공하니 참고하기 바람

 

***KoNlpy의 품사 태거가 제공하는 기능 비교표***

출처 : 실무가 훤히 보이는 머신러닝 & 딥러닝


6. 토픽 모델링(Topic modeling)

  • 문서에서 숨겨진 토픽을 발견하고, 많은 양의 비정형 데이터를 정리하는 데 사용
  • 레이블이 된 데이터가 필요 없음(비지도학습 방식)
  • 토픽 모델링 사례
    • 문서 토픽 요약 : 문서의 토픽을 요약하여 신속하게 분류할 수 있도록 도움
    • 검색엔진 최적화 : 토픽과 관련 키워드를 식별하여 온라인기사, 블로그, 문서 등을 쉽게 태그하여 검색 결과 최적화
    • 고객 지원 개선 : 제품 및 서비스 사양, 부서 등 고객 불만이나 피드백 관련하여 토픽과 관련 키워드 발견

잠재 디리클레 할당(Latent Dirichlet allocation, LDA)

  • 대표적인 토픽 모델링 알고리즘
  • 주어진 문서에 대해 각 문서에 어떤 주제들이 존재하는지에 대한 확률 모델

LDA 절차

  1. 사전(Dictionary)과 말뭉치(Corpus) 만들기
    • 문자열 상태로 처리할 수 없으므로 고유 ID로 매핑하기 위해 사전을 준비
    • 단어의 아이디와 출현횟수를 알기 위해 Bag-of-words 벡터 변환 방법 사용
  2. 모델 생성하기 
    • 사전과 말뭉치를 사용하여 LDA모델 생성
  3. 모델을 사용해 결과 출력
  4. 시각화
    • 맷플로립(matplotlib), 워드 클라우드(wordcloud)라이브러리를 사용

자연어 처리는 비정형 데이터를 다루는 기술

그만큼 알고리즘에 대한 이해도 중요하지만 데이터를 수집하고 정제하고 특징 정보로 바꾸는 과정이 상당히 중요함

728x90
반응형
LIST