자연어처리(NLP; Natural Language Processing)는 사람의 자연어를 컴퓨터가 이해하고 처리할 수 있도록 하는 인공지능의 한 분야
자연어처리 역사와 영역
자연어처리 활용 사례
인공지능 번역기
딥러닝을 이용해 국가 간 언어를 번역하는 서비스
기존 번역 서비스보다 정확도가 한층 높아졌으며, 전후 문맥을 파악하여 자연스러운 번역이 가능해짐
최근에는 딥러닝 음성인식 기술과 융합하여 통역 서비스에 활용
인공지능 챗봇
챗봇(Chatbot)은 채팅(Chatting)과 로봇(Robot)이 합성어로 인공지능 기반의 커뮤니케이션 소프트웨어
사람과의 문자 대화를 통해 질문에 알맞은 답변이나 각종 연관 정보를 제공하며, 다양한 비즈니스 도메인 분야에 활용
인공지능 스피커
음성인식 기능과 인공지능 자연어 처리 기술 등을 활용한 스피커
인공지능 스피커는 사용자의 음성 명령을 스피커가 서버로 전송하고, 인공지능 플랫폼이 의미분석 및 서비스를 제공
인공지능 리걸 테크(Legal Tech)
인공지능 자연어처리, 빅데이터 기술 등을 활용한 법률서비스
기존이 판례나 법령, 변호사들의 자문 빅데이터를 활용
이용자가 기본적인 정보만 입력하면 자동으로 법률 문서가 작성되고 법률 상담 서비스를 제공
인공지능 저널리즘(Journalism)
인공지능 기술을 활용해 기사를 작성하는 로봇 저널리즘
머신러닝, 딥러닝 등을 활용한 자연어처리 기술을 활용
방대한 빅데이터에서 중요한 정보를 편집해서 기사화하는 데이터 저널리즘 등에 활용
기사 및 정보의 사실 여부를 평가하여 가짜 뉴스 판별에도 활용함
인공지능 컨택서비스(Contact Service)
고도화된 AI 음성 로봇을 활용한 고객 상담센터를 제공
고객들의 상담 대기시간을 획기적으로 줄일 수 있으며, 고객의 문의 사항에 대한 신속한 답변과 안내 사항 등 각종 정보를 제공
1-3. 자연어처리를 위한 텍스트 전처리
자연어처리를 위한 텍스트 전처리
Corpus : 여러 문장으로 구성된 문서의 집합, 자연어처리에 사용되는 데이터
정제, 불용어 제거, 어간 추출, 토큰화 및 문서 표현 등의 작업을 수행
정제(Cleaning) : 특수문자 등과 같은 불필요한 노이즈 텍스트를 제거, 대소문자 통일 시킴
불용어 제거(Stop word Elimination) : 전치사, 관사 등 문장이나 문서의 특징을 표현하는 데 불필요한 단어를 제거
토큰화(Tokenizer) : 코퍼스(Corpus)에서 분리자(Separator)를 포함하지 않는 연속적인 문자열 단위로 분리(nltk, konlpy 사용)
워드 임베딩(Word Embedding)
주어진 문서나 문장의 하나의 벡터로 표현
단어들을 인덱싱하고 주어진 문서에 존재하는 단어의 빈도수를 사용하여 문서를 표현
문서 표현 방법은 One-hot 인코딩, TF-IDF, Word2Vec 등이 있음
형태소 분석
NLTK(Natural Language Toolkit, https://www.nltk.org/)
인간의 언어 데이터를 파이썬 언어로 분석할 수 있도록 만들어진 패키지
분류, 토큰화, 형태소 분석, 품사 태깅, 구문 분석 및 의미론적 추론을 위한 텍스트 처리 라이브러리와 WordNet과 같은 50개가 넘는 말뭉치를 제공
KoNLPy(http://konlpy.org/)
Hannanum, Kkma, Komoran, Mecab, Okt 형태소 분석기 지원
내부 품사 태깅 클래스들의 성능 비교 : https://konlpy.org/ko/latest/morph/
임베딩
문자열을 숫자로 변환하여 벡터(Vector) 공간에 표현하는 방법
빈도 기반 : 문서에 등장하는 단어의 빈도를 계산해서 행렬로 표현하거나 가중치를 부여
TF(Term Frequency), DTM(Document Term Matrix), TF-IDF(Term Frequency-Inverse Document Frequency)
토픽 기반 : 문서에 잠재된 주제(Latent Topic)를 추론(Inference)하기 위한 임베딩
LSA(Latent Semantic Analysis, 잠재 의미분석)
예측(Prediction) 기반 : 다음 단어, 주변 단어, 마스킹 된 단어의 예측 등을 위한 임베딩
Word2Vec, FastText, BERT, ELMo, GPT
1-4. 워드 임베딩
워드 임베딩(Word Embedding)
단어를 컴퓨터가 이해할 수 있도록 벡터(숫자들의 배열)로 변환하는 기법
자연어(텍스트)를 수치화하여 기계 학습 모델이 처리할 수 있도록 만드는 자연어 처리(NLP)의 핵심 기술 중 하나
워드 임베딩 방법
이진 인코딩(Binary Encoding) 또는 원-핫 인코딩
TF 인코딩(TF Encoding)
TDM(Term Document Matrix)
TF-IDF 인코딩(TF_IDF Encoding)
잠재 의미분석 인코딩(Latent Semantic Analysis Encoding)
Word2Vec 임베딩(Word2Vec Embedding) : 구글에서 개발. CBOW, Skip-gram이라는 두 가지 학습 방식 존재
Glove(Global Vectors) : 전체 말뭉치의 동시 등장 통계를 기반으로 학습
FastText : 단어를 문자 단위 n-그램으로 나누어 처리. 신조어나 오탈자에도 강함
ELMo, BERT : 문맥을 고려하는 워드 임베딩 (동일 단어라도 문맥에 따라 벡터가 다름)
Term Frequency : 문서에서 용어가 나타나는 총 회수로 정의
text = "John likes to watch movies. Mary likes movies too.\
Mary also likes to watch football games."
words = text.replace('.', '').split()
print(words)
corpus = [
"John likes to watch movies. Mary likes movies too.",
"Mary also likes to watch football games."
]
from sklearn.feature_extraction.text import CountVectorizer
vector = CountVectorizer()
dtm_array = vector.fit_transform(corpus).toarray()
tf_dic = vector.vocabulary_
print(dtm_array)
print(tf_dic)
also football games john likes mary movies \
0 0.000000 0.000000 0.000000 0.323699 0.460629 0.230315 0.647398
1 0.446101 0.446101 0.446101 0.000000 0.317404 0.317404 0.000000
to too watch
0 0.230315 0.323699 0.230315
1 0.317404 0.000000 0.317404
Word2Vec
워드 임베딩 모델을 생성하는 데 사용되는 얕은 2계층 신경망
많은 어위 기반 데이터 세트를 입력으로 수집하고 사전의 각 단어가 고유한 벡터에 대응되도록 벡터 공간을 출력하는 방식으로 작동
CBOW(Continuous Bag of Words)와 Skip-Gram의 두 가지 모델이 있음
CBOW는 주변 단어를 임베딩하여 중심 단어를 예측
Skip-Gram은 중심 단어를 임베딩하여 주변 단어를 예측
윈도우와 슬라이딩 윈도우
윈도우 : 중심 단어(Target Word)를 기준으로 해서 참조하고자 하는 주변 단어(Context Word)의 범위
만일 윈도우 크기가 2인 경우 "quality is more important than quantity"에서
중심 단어가 'quality'인 경우 주변 단어는 'is'와 'more'이며, 중심 단어가 'more'인 경우 앞의 두 단어 'quality'와 'is', 뒤의 두 단어 'important'와 'than' 이렇게 4개 단어가 주변 단어가 됨
슬라이딩 윈도우(Sliding Window)는 전체 학습 문장에 대해 윈도우를 이동하며 학습하기 위해 중심 단어와 주변 단어 데이터셋을 추출하는 과정
CBOW(Continuous Bag-of-Words)
주변 단어(Context Word)를 임베딩하여 중심 단어(Target Word)를 예측
CBOW는 소규모 데이터베이스 작업에 적합한 모델
RAM 메모리 요구사항도 필요하지 않음
Skip-gram
중심 단어(Target Word)를 임베딩 하여 주변 단어(Context Word)를 예측
min_count : 사용할 단어의 최소 빈도입니다. 3이면 3회 이하 단어는 무시합니다.
corpus = ["John likes to watch movies. Mary likes movies too",
"Mary also likes to watch football games."]
word_list = []
for word in corpus:
word_list.append(word.replace('.', '').split())
from gensim.models import Word2Vec
model = Word2Vec(word_list, sg=0, vector_size=100,
window=3, min_count=1)
print(model.wv.most_similar('likes'))
print(model.wv.similarity('movies', 'games'))