[ 배운 내용 ]
Chapter 1. 자연어처리 요소 기술
1. NLP란
2. 형태소분석과 품사태깅
- MeCab을 사용한 형태소 분석 실습
3. 규칙&패턴 기반 자연어처리
- 개체명 인식
- BIO 태깅 기법
- 구문 분석
- 패턴 매칭
Chapter 2. 기계학습 기반 자연어처리
1. 문서 벡터화
2. 문서 유사성
3. 문서 분류
Chapter 1. 자연어처리 요소 기술
1. NLP란
NLP (Natural Language Processing, 자연어 처리)
- SW를 이용하여 인간의 언어를 처리하고 이용하려는 연구 분야
NLP의 목표
- 인간의 언어로 디지털 디바이스와 상호작용 하여 원하는 task를 수행하도록 하는 것
- 자연어로 된 대량의 컨텐츠를 분석하여 비즈니스 인사이트를 도출해내는 것
Input으로 음성, 텍스트가 주어지고
Output으로 사용자가 요청한 task가 달성된 state 혹은 질문에 대한 대답이 나온다.
NLP application의 결과물
- 정보 검색
- 기계 번역
- 챗봇
- 텍스트 마이닝 등
2. 형태소분석과 품사태깅
[ 한국어의 품사 ]
- 품사 - 단어를 그 문법적 성질에 따라 분류한 갈래
- 체언 - 명사, 대명사, 수사
- 용언 - 동사, 형용사
- 수식언 - 관형사, 부사
- 독립언 - 감탄사
- 관계언 - 조사, 서술격 조사
격조사
- 명사에 붙어서 그 명사가 문장에서 일정한 자격을 가지게 하는 조사
- 주격, 목적격, 서술격, 보격, 부사격 조사
선어말어미
: -았, -었, -겠, -시 등
어말어미
: 종결어미, 연결어미, 전성어미
형태소 분석
- 한 어절 내에 있는 모든 형태소(사전 표제어)를 분리하는 작업
- 용언(동사, 형용사)의 원형을 복원
- 형태소들 간의 결합관계가 적합한지 검사
- 복합어 분석, 미등록어 추청(신조어, 외국어 등)
- 형태소 : 일정한 뜻을 가진 가장 작은 말의 단위
ex) 사무실에서부터였다고는 --> 사무실+에서부터+이+었+다고는
영장전담판사실 --> 영장+전담+판사+실
형태소 분석의 모호성 (morphological ambiguity)
: 동일한 표층평(surface form) 어절이 여러가지 형태소 결합으로 분석 가능한 문제
ex) "감기는"
- 감기(명사) + 는(조사)
- 감기(동사) + 는(어미)
- 감(동사) + 기(명사형전성어미) + 는(조사)
품사 태깅 (Parts-of-Speech Tagging) PoST
- 품사태그 : 형태소 분석의 기준이 되는 세분화된 품사 체계
- 품사태깅을 통해 형태소 분석의 모호성을 해결해준다.
해당 문맥에 맞는 품사태그를 선택해야 하는 문제가 있는데 다음의 방법들로 해결이 가능하다
- 통계(확률)기법에 의한 해결
- 대량의 품사 태깅된 말뭉치를 구축
- 통계적으로 확률이 높은 품사 태그를 선택
- 기계학습/딥러닝 기법에 의한 해결
Hidden Markov Model (HMM) 기반 품사 태깅
: 대량의 품사태깅된 말뭉치 기반의 통계적 기법
대용량+고품질의 품사가태깅된 말뭉치를 기반으로 형태소 사전을 참고하여 가능한 품사 태그열을 살펴본다. 그 다음 조건부 확률을 계산하여 가장 확률이 높은 조합을 선택한다.
따라서 말뭉치 구축이 매우 중요한 기법임!!
- 한글 형태소 품사태그표 참고
http://kkma.snu.ac.kr/documents/?doc=postag
형태소 분석에는 다음의 이슈들이 있다.
- 전처리 (띄어쓰기, 맞춤법 교정, 비속어 필터링 등) 필요
- 형태소 분석의 모호성
- 미등록어 처리 (신조어, 외국어, 축약어 등)
- 지속적인 사전 업데이트가 필요 (고유명사, 동의어, 신조어 등)
[ 형태소 분석 실습 - MeCab 사용 ]
MeCab : 오픈소스 형태소 분석기
- MeCab 설치하기 (구글코랩 환경)
- 셀 단위로 실행하기
# 구글 드라이브 연동하기
from google.colab import drive
drive.mount('/content/gdrive')
!git clone https://github.com/SOMJANG/Mecab-ko-for-Google-Colab.git
!pwd
%cd Mecab-ko-for-Google-Colab
!bash install_mecab-ko_on_colab_light_220429.sh
- 설치하고 나면 다음과 같이 폴더가 생긴다
- 형태소 분석 + 품사태깅
import MeCab
# 형태소 분석기 인스턴스 생성
tagger = MeCab.Tagger()
sentence = '이제 Colab에서 Mecab-ko-dic 사용이 가능합니다.'
print (tagger.parse(sentence)) # 각 형태소와 해당하는 품사태그가 나온다.
sentence = '코로나 감염 뒤 4주 이상 후유증이 이어지는 현상을 롱코비드라고 부른다.'
print (tagger.parse(sentence))
두 문장의 형태소 분석 결과를 보면 Mecab-ko-dic과 롱코비드가 각각
Mecab / - / -ko / - / dic 과 롱 / 코비드로 따로 분석된 것을 볼 수 있다.
sentence = '예일공중보건대학원 로버트슨 교수는 이미 코로나19가 팬데믹에서 엔데믹으로 전환 중이라고 말했다.'
print (tagger.parse(sentence))
예일공중보건대학원 또한 분리되서 분석된다.
/content/mecab-ko-dic-2.1.1-20180720/user-dic 의 경로를 보면 nnp.csv라는 사용자 사전 파일이 있다.
nnp.csv
- 사용자 사전에 미리 등록되어 있는 고유명사(품사태그 : NNP) 샘플이 들어있음
- 한 줄에 하나의 엔트리 씩 csv 파일 형태로 저장되어 있다.
해당 파일에 원하는 고유명사(nnp) 단어를 추가해주면 되는데 로컬로 갖고와서 Notepad++ 등의 편집기로 추가해주거나 코랩 상에서 직접 추가해 줄 수 있다.
- nnp.csv 내용 확인
!cat user-dic/nnp.csv
# 대우,,,,NNP,*,F,대우,*,*,*,*,*
# 구글,,,,NNP,*,T,구글,*,*,*,*,*
- 코랩 상에서 직접 단어 추가하기
# "Mecab-ko-dic" 단어를 고유명사로 직접 추가
!echo "Mecab-ko-dic,,,,NNP,*,T,Mecab-ko-dic,*,*,*,*,*" >> user-dic/nnp.csv
!cat user-dic/nnp.csv
# 대우,,,,NNP,*,F,대우,*,*,*,*,*
# 구글,,,,NNP,*,T,구글,*,*,*,*,*
# Mecab-ko-dic,,,,NNP,*,T,Mecab-ko-dic,*,*,*,*,*
원래 있던 양식을 복붙해서 원하는 내용으로 바꿔만 주면 된다.
※ T/F는 마지막 글자에 받침 유무 표시
- 로컬로 불러와서 Notepad++로 편집
- nng.csv 파일도 만들어서 일반명사(품사태그 : NNG)에 해당하는 단어들도 추가해주었다.
- /content/mecab-ko-dic-2.1.1-20180720/user-dic 경로로 nnp.csv와 nng.csv 파일을 옮겨준 뒤 다시 형태소 분석을 해보았다.
사용자 사전이 업데이트 된 것을 볼 수 있다.
- 아래 명령어까지 실행해주어야 사용자 사전이 완전히 업데이트 된다.
# 사용자사전 업데이트
!bash ./tools/add-userdic.sh
# 사전 리빌드
!sudo make install
- 다시 형태소 분석 수행
tagger = MeCab.Tagger()
# 사용자 사전 업데이트 확인
sentence = '코로나 감염 뒤 4주 이상 후유증이 이어지는 현상을 롱코비드라고 부른다.'
print (tagger.parse(sentence))
sentence = '예일공중보건대학원 로버트슨 교수는 이미 코로나19가 팬데믹에서 엔데믹으로 전환 중이라고 말했다.'
print (tagger.parse(sentence))
sentence = '토트넘이 리그 4위로 21-22 프리미어리그 시즌을 마무리해서 UCL에 진출했다.'
print (tagger.parse(sentence))
3. 개체명 인식
개체명 인식 (Named Entity Recognition, NER)
: 필요로 하는 목적에 맞게 누가, 무엇(누구)을, 언제, 어디서, 얼마나(수량, 크기, 비율 등), .... 에 대한 정보를 인식하도록 하는 기법
- 사람, 동식물, 장소, 국가, 조직, 브랜드명 등 고유명사나
- 날짜, 시간, 화폐(금액), 주소, 전화번호, 이메일, 결제방식 등을 인식하도록 한다.
[ 개체명 카테고리 ]
- 예시로 PERSON, NORP, FACILITY, LOCATION, PRODUCT, EVENT 등이 있다.
- 정해진 것이 아니고 필요로 하는 task에 따라 다르게 설계할 수 있다.
개체명 태깅 기법 (BIO 태깅)
BIO (Beginning-Inside-Outside) 태깅
- 개체명 태깅 방법 중 하나
- Beginning : 개체명의 시작 부분
- Inside : 개체명의 내부 부분
- Outside : 개체명에 포함되지 않는 부분
ex) "해리포터 보러 메가박스 가자" ==> BIO 태깅
구문 분석 (Syntax Analysis)
- 언어별 grammer(문법)와 lexicon(어휘의 품사/속성 정보를 담은 사전)에 기반하여 문장의 구문 구조를 분석한다.
- 자연어 문장을 SW가 처리 가능한 내부 형태(트리의 형태)로 표현하는 것
구문 분석의 모호성 (syntatic ambiguity) 문제
: 하나의 입력문장이 여러가지 구조로 분석 가능한 문제
ex)
Time flies like light : 시간 파리가 좋아한다 빛을 / 시간은 날아간다 처럼 빛
패턴 매칭
- 구문 분석의 모호성을 해결하기 위해서 문장의 중요한 단어들을 중심으로 주변에 관계를 맺고 있는 단어들을 활용하는 방식이다.
- 전체적인 구문분석보다는 실용적이고 실생활에 적용이 가능하다는 장점이 있다.
ex) '출생지'에 대한 구문 패턴 예시
태어나다
: A(명사) + 는(조사) + B(명사) + 에서(조사) + 태어나다
탄생하다
: A(명사) + 는(조사) + B(명사) + 에서(조사) + 탄생하다
==> 출생지(A, B) : A의 출생지는 B이다.
A는 '사람'이고, B는 '장소'속성을 갖는 단어일 때만 패턴에 매칭이 된다.
ex) 챗봇 시스템 등에서 사용자가 입력한 문장을 통해 사용자의 의도를 분석하고 분석된 의도에 따라 적절한 답변을 생성 (패턴매칭 기반 의도 분석)
패턴매칭을 하기 위해 다양한 입력 문장의 예시들로 패턴을 설계해야 한다.
[ 규칙(패턴)기반 자연어처리 장단점 ]
장점
- 구축한 패턴이 정확하고 언어자원이 많다면 좋은 성능을 보여준다.
- 특정 카테고리를 추가하거나 제거해야 할 경우 즉각적으로 반영이 가능하다.
단점
- 리소스 구축 비용이 든다.
- 새로운 도메인에 적용하는 것이 어렵다.
- 패턴 매칭 시 기존의 패턴과 충돌이 발생하는 등 패턴의 유지관리 이슈가 발생할 수 있다.
말뭉치 (Corpus)
: 언어 연구를 위해 특정 목적을 가지고 언어의 표본을 추출한 집합
Chapter 2. 기계학습 기반 자연어처리
- 문서 벡터화
- 문서 유사성
- 문서 분류
대부분의 자연어처리 문제들은 분류 문제로 해결이 가능하다
ex) 개체명 인식은 다중분류 문제
1. 문서 벡터화 & 문서 유사성
[ 문서의 표현 ]
Bag of Words
- 문서는 Bag of Words (단어의 집합)으로 간주한다.
- 문서에 나타나는 각 단어는 feature로 간주되고 단어의 출현 빈도에 따른 가중치를 얻는다.
Feature Selection
- 학습 문서에 출현한 용어(term)의 부분 집합을 선택하는 것
- 사전의 크기를 줄여서 학습에 더 효율적인 분류기를 만든다.
- Noise feature를 제거하여 분류의 정확도를 높인다.
문서를 기계학습에 사용하려면 기계가 사용 가능한 표현으로 바꿔주어야 한다. (의미적 표현 --> 수학적 표현)
이를 문서의 벡터화 라고 한다.
문서의 벡터화를 위해 일단 문서에서 term을 추출해준다.
Term Extraction
- 문서를 term 단위(형태소 단위)로 분해하는 것
- 문서에서 term을 추출하는 것
Term Extraction을 수행하면서 조사/어미 등의 Noise를 제거해준다.
※ Noise : feature로서 작용하지 않는 의미를 담고 있지 않은 형태소
Term Extraction 후에는 Term들을 Term ID로 변환한 뒤 고유 일련번호를 부여해서 숫자로 변환시켜 Term Vocabulary를 생성해준다.
문서집합에 있는 term들을 사전화한 Term Vocabulary에 Stop words나 욕설, 비속어 등을 제거해주고, DF값을 추가해준다.
※ Stop Word List : 너무 자주 출현하기 때문에 문서를 변별하는 feature로서 쓸모 없는 단어들(조사, 어미, 관사, 접속사 등)
Document Frequency Count (DF)
: 단어가 포함된 문서의 개수 (해당 단어가 몇개의 문서에서 등장했는지)
Term Frequency Vector (TF)
: 각 term의 문서 내 빈도수
문서 내의 term들을 TF와 DF의 빈도수로만 표현하면 같은 빈도수로 등장해도 등장한 문서의 사이즈에 따라 비율이 달라지는 문제가 생긴다. 따라서 가중치 벡터(Weighted Vector)로 문서를 표현해주어야 한다.
Weighting 기법
- TF 또는 TF x IDF
- 확률 사용
등이 있지만 TF x IDF 방법이 가장 표준이라고 한다.
※ IDF (Inverse Document Frequency)
- log(N/DF) 로 표현할 수 있으며 (문서집합의 총 문서수 / 문서 빈도)에 로그를 씌운 값이다.
- 이 문서가 전체 콜렉션에서 몇번 등장했는지를 표현하는 값이다.
- IDF값이 클수록 해당 단어가 특정 문서에서만 나타나기 때문에 문서의 식별력을 잘 갖고있는 것이라고 볼 수 있다.
[ TF x IDF 값 ]
- TF와 IDF를 결합하여 각 용어의 가중치를 계산한 값
- 문서 D에 나타난 용어 t에 부여되는 가중치
- 적은 수의 문서에 용어 t가 많이 나타날 때 가장 높은 값을 갖는다. (해당 문서들에 대해 높은 식별력을 갖는다.)
- 한 문서나 많은 문서들에 해당 용어가 적게 나타나면 낮은 값을 가진다. (적합성이 뚜렷하지 X)
- 거의 모든 문서에 해당 용어가 나타날 경우 아주 낮은 값을 가진다.
이렇게 TF x IDF값으로 문서를 가중치 벡터로 변환해주면 문서 유사성을 비교할 수 있다.
[ 문서 유사성 비교 방법 ]
- Term Vector Model (벡터 스페이스 모델)
- 문서를 Term Space의 벡터로 가정
- 문서벡터간 유사도를 계산하여 유사성을 비교한다.
- Cosine Similarity (코사인 유사도)
위의 식으로 유사도를 계산하는 방법으로 두 벡터간 각도의 코사인값을 이용하여 측정된 벡터간의 유사한 정도를 의미한다.
2. 문서 분류
문서 분류란 대량의 문서를 자동으로 분류해주는 것으로 다음과 같은 곳에 사용이 가능하다.
- 컨텐츠 필터링 (스팸 등)
- 의도 분석 (챗봇 등)
- 감성 분류 (영화, 상품 리뷰)
- 이메일 분류
[ 문서 분류 알고리즘 ]
- KNN
- Naive Bayes Classifier
- SVM
- CNN, RNN, BERT 등 (딥러닝 기반 알고리즘)
최근에는 딥러닝 기반 알고리즘이 더 좋은 성능을 보인다고 한다.
Naive Bayes Classifier (나이브 베이즈)
- 확률 기반 알고리즘으로 변형된 조건부확률을 통해 가장 큰 확률을 얻는 클래스로 분류해준다.
- 빈도수만을 고려하는 알고리즘이기 때문에 단어의 순서(문맥)는 중요하지 않다.
- 텍스트 분류에 많이 사용되는 알고리즘
자세한 설명은 여기서
'KT AIVLE School' 카테고리의 다른 글
(12주차 - 22.10.05) 언어지능딥러닝3 - CNN 기반 자연어처리 (0) | 2022.10.09 |
---|---|
(12주차 - 22.10.04) 언어지능딥러닝2 - 텍스트 마이닝, 워드 임베딩 (0) | 2022.10.05 |
(10주차 - 22.09.22-23) 시각지능딥러닝3 - 커스텀 이미지 데이터 Detection하기 + Annotation (0) | 2022.09.22 |
(10주차 - 22.09.20~21) 시각지능딥러닝2 - Object Detection (YOLO) (0) | 2022.09.22 |
(10주차 - 22.09.19) 시각지능딥러닝1 - BatchNormalization, Dropout, Conputer Vision (CNN) (0) | 2022.09.20 |