자연어 처리는 컴퓨터가 인간의 언어를 이해하고 해석하고 생성하는 기술을 말한다.
NLP는 언어학과 컴퓨터 과학의 융합 분야로 언어를 처리하고 분석하는 다양한 작업을 포함한다..
그 목적은 컴퓨터 간의 상호작용을 원활하게 만들어 주는 것
자연어 처리의 주요 작업
1. 형태소 분석 : 문장에서 단어를 나누고 각 단어의 형태를 분석한다 예를 들어 한국어에서 사랑한다라는 단어는 사랑과 한다로 나누어진다.
2. 구문 분석 : 문장의 구조를 분석하고 문법적 관계를 파악한다. 예를 들어 나는 사과를 먹는다라는 문장에서 주어, 목적어, 동사 관계를 식별한다.
3. 의미 분석 : 문자이 전달하려는 의미를 추론한다. 예를 들어 배가 고프다는 단순히 배라는 단어가 아니라 배가 허기짐을 의미하는지를 이해한다.
4. 감전분석: 텍스트에 포함된 감정을 분석하여 긍정적, 부정적, 중립적 감정을 분류 한다. 예를 들어 이 영화는 정말 재미있다는 긍정적인 감정을 이영화는 지루하다는 감정을 나타낸다.
5. 기계번역: 한언어에서 다른 언어로 번역하는 작업이다. 예를 들어 영어에서 한국어로 번역하는 시스템을 개발하는 것
6. 질의 응답 : 사용자가 입력한 질문에 대해 적정한 답을 제공하는 시스템이다. 예를들어 파리의 수도는 어디인가요? 라는 질문에 대해 파리는 프랑스의 수도 입니다. 라는 답을 제공하는 것이다.
7. 텍스트 생성: 주어진 주제나 조건에 맞춰 텍스트를 자동으로 생성하는 작업입니다. 예를 들어 사용자가 제공한 주제에 대해 자동으로 기사를 작성하는 것이 이에 해당한다,
자연어 처리는 다양한 분야에서 활용된다. 예를 들어 검색엔지 ,음성인식 시스템, 챗봇, 자동 번역 시스템등에서 사용되며, 최근에는 대규모 언어 모델(GPT)등의 발전으로 자연어 처리 기술이 더욱 진화하고 있다.
코퍼스 (corpus, 말뭉치)
자연어 분야의 연구를 위해 '특정한 목적'을 가지고 언어의 표본을 추출한 집합.
이를 사용하여 텍스트 데이터 분석및 저연어처리 (NLP) 에서 모델을 학습시키게 되는 데이터로 활용된다.
■ 텍스트 전처리 (Text Preprocessing)
텍스트 전처리란? 주어진 문제를 해결하기 위해, 목적에 맞게 텍스트 데이터에 사전에 처리하는 작업입니다.
요리에 비유하자면, 아무리 조리방법과 장비가 좋다하더라도, 재료가 나쁘면, 혹은 재료가 제대로 손질되어 있지 않으면 좋은 요리가 나오기 힘듭니다.
텍스트 데이터 또한 적절한 전처리를 하지 않으면 앞으로 배울 자연어 처리 기법들이 제대로 동작하지 않습니다.
코퍼스 데이터는 사용하고자 하는 용도에 맞게 다양한 전처리 작업을 거치게 된다.
예를 들면.
- 토큰화(tokenization)
- 정제(cleaning)
- 정규화(normalization)
■ 토큰화(Tokenization)
- 주어진 코퍼스(corpus)에서 토큰(token)이라 불리는 단위로 나누는 작업을 토큰화(tokenization)라고 합니다
- 토큰의 단위는 상황에 따라 다르나, 보통 의미가 있는 단위로 토큰을 정의합니다.
🔹단어 토큰화(Word Tokenization)
토큰의 기준을 단어(word)로 하는 경우, 단어 토큰화(word tokenization)라고 합니다. 다만, 여기서 단어(word)는 단어 단위 외에도 단어구, 의미를 갖는 문자열로도 간주되기도 합니다. 예를 들어보겠습니다. 아래의 입력으로부터 구두점(punctuation)과 같은 문자는 제외시키는 간단한 단어 토큰화 작업을 해봅시다. 구두점이란 마침표(.), 컴마(,), 물음표(?), 세미콜론(;), 느낌표(!) 등과 같은 기호를 말합니다.
입력: Time is an illusion. Lunchtime double so!
이러한 입력으로부터 구두점을 제외시킨 토큰화 작업의 결과는 다음과 같습니다.
출력 : "Time", "is", "an", "illustion", "Lunchtime", "double", "so"
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os
import re
토큰화 중 생기는 선택의 순간
NLTK 사용
sentence = "Don't be fooled by the dark sounding name, Mr. Jone's Orphanage is as cheery as cheery goes for a pastry shop."
# 대표적인 영어문자 패키지
import nltk
nltk.download('punkt_tab')
from nltk.tokenize import word_tokenize
from nltk.tokenize import WordPunctTokenizer
# ↓우선 word_tokenize를 사용해봅시다.
print('단어 토큰화1 :', word_tokenize(sentence))
# 단어 토큰화1 : ['Do', "n't", 'be', 'fooled', 'by', 'the', 'dark', 'sounding', 'name', ',', 'Mr.', 'Jone', "'s", 'Orphanage', 'is', 'as', 'cheery', 'as', 'cheery', 'goes', 'for', 'a', 'pastry', 'shop', '.']
print('단어 토큰화2 :', WordPunctTokenizer().tokenize(sentence))
# 단어 토큰화2 : ['Don', "'", 't', 'be', 'fooled', 'by', 'the', 'dark', 'sounding', 'name', ',', 'Mr', '.', 'Jone', "'", 's', 'Orphanage', 'is', 'as', 'cheery', 'as', 'cheery', 'goes', 'for', 'a', 'pastry', 'shop', '.']
토큰화에서 고려해야할 사항
구두점과 특수문자
구두점과 특수문자를 무조건 제외하는게 답은 아니다
예]
단어 자체에 구두점 : m.p.h 나 Ph.D 나 AT&T
$, / 같은 특수문자 : $45.55 나 01/02/06
숫자 사이의 컴마: 123,456,789
띄어쓰기
줄임말과 단어 내에 띄어쓰기가 있는 경우.
예]
what're는 what are의 줄임말, we're는 we are의 줄임말
"New York" 이나 "rock 'n' roll" 는 띄어쓰기가 있지만 한 단어로 토큰화 할 필요도 있다.
한국어 토큰화는 어렵다
이유1) 한국어는 교착어이기 때문에
교착어의 의 특성
- 조사
- 띄어쓰기 단위
- 형태소 (morpheme)
영어 '그' he/him 정도 뿐일텐데
한국어는 '그가', '그에게', '그를', '그와', '그는' ... 다양한 조사가 붙는다.
★ 대부분의 한국어 NLP 에선 조사는 분리해줄 필요가 있다.
한국어 토큰화 --> '형태소' 란 개념 반드시 이해
형태소(morpheme) : 뜻을 가진 가장 작은 말의 단위
문장 : "에디가 책을 읽었다"
▶이 문장을 띄어쓰기 단위 토큰화를 수행한다면
['에디가', '책을', '읽었다']
▶ 형태소 단위로 분해하면
자립 형태소 : 에디, 책
의존 형태소 : -가, -을, 읽-, -었, -다
이유2) 한국어의 띄어쓰기는 영어보다 잘 지켜지지 않기 때문에
인용구 추가
EX1) 제가이렇게띄어쓰기를전혀하지않고글을썼다고하더라도글을이해할수있습니다.
EX2) Tobeornottobethatisthequestion
품사 태깅 (Part-Of-Speech tagging)
'fly' 명사 - 파리
'fly' 동사 - 날다
'못' 명사 - 못 박는다.
'못' 부사 - 못한다.
단어 토큰화 과정에서 각 단어가 어떤 품사로 쓰였는지를 구분해놓기도 하는데,
이 작업을 품사 태깅(part-of-speech tagging)이라고 합니다.
NLTK와 KoNLPy를 이용한 영어, 한국어 토큰화 실습
# NLTK에서는 Penn Treebank POS Tags라는 기준을 사용하여 품사를 태깅합니다
from nltk.tag import pos_tag
nltk.download('averaged_perceptron_tagger_eng')
text = "I am actively looking for Ph.D. students. and you are a Ph.D. student."
tokenized_sentence = word_tokenize(text)
print('단어 토큰화 :', tokenized_sentence)
print('품사 태깅 :', pos_tag(tokenized_sentence))
# 품사 태깅 : [('I', 'PRP'), ('am', 'VBP'), ('actively', 'RB'), ('looking', 'VBG'), ('for', 'IN'), ('Ph.D.', 'NNP'), ('students', 'NNS'), ('.', '.'), ('and', 'CC'), ('you', 'PRP'), ('are', 'VBP'), ('a', 'DT'), ('Ph.D.', 'NNP'), ('student', 'NN'), ('.', '.')]
# Penn Treebank POG Tags에서 PRP는 인칭 대명사, VBP는 동사, RB는 부사, VBG는 현재부사,
# IN은 전치사, NNP는 고유 명사, NNS는 복수형 명사, CC는 접속사, DT는 관사를 의미합니다.
# KoNLPy 코엔엘파이 http://konlpy.org/ko/latest/
# 코엔엘파이를 통해서 사용할 수 있는 형태소 분석기로 Okt(Open Korea Text), 메캅(Mecab),
# 코모란(Komoran), 한나눔(Hannanum), 꼬꼬마(Kkma)가 있습니다.
pip install konlpy
# konlpy : 한국여형태소분석기 (+품사태깅)
import konlpy
from konlpy.tag import Okt
from konlpy.tag import Kkma
okt =Okt()
kkma = Kkma()
text = "열심히 코딩한 당신, 연휴에는 여행을 가봐요"
print('OKT 형태소 분석 :', okt.morphs(text))
print('OKT 품사 태깅 :', okt.pos(text))
print('OKT 명사 추출 :', okt.nouns(text))
print('꼬꼬마 형태소 분석 :', kkma.morphs(text))
print('꼬꼬마 품사 태깅 :', kkma.pos(text))
print('꼬꼬마 명사 추출 :', kkma.nouns(text))'AI > ML' 카테고리의 다른 글
| 인코더 디코더 Seq2Seq (0) | 2026.04.18 |
|---|---|
| Word2Vec (1) | 2026.04.17 |
| LSTM(2) (1) | 2026.04.15 |
| LSTM(1) (1) | 2026.04.14 |
| 순환 신경망으로 IMDB 리뷰 분류하기 - Word embedding (단어 임베딩) (0) | 2026.04.13 |