[AI 101] 자연어 처리(NLP) – AI와 대화하기


핵심 요약

“인간의 언어를 기계가 이해하기 시작했습니다.” 자연어 처리(Natural Language Processing, NLP)인간 언어를 컴퓨터가 이해하고 생성하는 AI 분야입니다. 1950년대 “기계가 문장을 읽을 수 있을까?”라는 물음에서 시작된 이 분야는, 이제 감정 분석(정확도 96%), 기계 번역(BLEU 40+), 요약(ROUGE 60%), 챗봇(만족도 95%)에서 인간 수준을 넘었습니다. 토큰화라는 단순한 기술이 AI 언어 이해의 첫 걸음인데, “Hello world” 같은 단순한 문장을 [“Hello”, “world”]로 쪼개는 것부터 시작되며, 이 토큰들이 BERT, GPT 같은 거대 언어 모델의 입력이 됩니다. ChatGPT와 Gemini가 가능한 이유는 모두 “토큰화 → 임베딩 → Self-Attention → 생성” 이라는 NLP 파이프라인 때문입니다. 음성 인식(STT) 정확도 98%, 음성 합성(TTS) 품질 9/10까지 발전했으니, 이제 “말로 컴퓨터와 대화”하는 시대입니다.


📍 목차

  1. 자연어 처리의 개념과 역사
  2. 텍스트 전처리와 토큰화
  3. 감정 분석, 기계 번역, 텍스트 요약
  4. 챗봇과 대화형 AI
  5. 음성 인식(STT)과 음성 합성(TTS)
  6. NLP의 미래

1. 자연어 처리의 개념과 역사

1-1. NLP란?

정의:

"인간의 자연 언어(일상 언어)를 컴퓨터가 이해하고 처리하는 기술"

범위:
- 이해: 문장의 의미 파악
- 생성: 새로운 문장 작성
- 번역: 언어 간 변환
- 대화: 사람과 상호작용

NLP vs 언어학:

언어학: "언어를 어떻게 이해하는가?"
       문법, 의미론, 음운학 연구

NLP: "컴퓨터로 언어를 어떻게 처리하는가?"
     알고리즘, 통계, 딥러닝

1-2. NLP의 역사

고전 시대 (1950-1990):

1950: 튜링 테스트
     "기계가 인간처럼 대화할 수 있는가?"

1960s: ELIZA (최초 챗봇)
      의사 역할을 하는 챗봇
      사람들이 진짜 의사인줄 착각 (거의!)

1980s: 전문가 시스템
      특정 분야의 규칙 기반 처리
      예: 의료 진단 AI

한계: 모든 규칙을 손으로 만들어야 함

통계 시대 (1990-2010):

1990s: Hidden Markov Model (HMM)
      음성 인식의 기초
      "음성 신호 → 텍스트" 변환

2000s: 확률 기반 기계 번역
      구글 번역 초기 버전
      정확도: 60%

한계: 문법 구조만 보고 의미는 못 이해

딥러닝 시대 (2012-2020):

2012: Word2Vec
     각 단어를 벡터로 표현
     "king - man + woman ≈ queen" 발견!

2014: Seq2Seq 모델
     "나는 학생이다" → "I am a student" 번역

2018: BERT, GPT 등장
     양방향/단방향 이해

2020: GPT-3
     거의 완벽한 텍스트 생성

성능: 정확도 90%+

생성 AI 시대 (2022-현재):

2022: ChatGPT
     사람들이 "AI와 대화할 수 있다"는 걸 깨달음

2023: GPT-4, Gemini, Claude
     거의 모든 NLP 작업에서 인간 수준

2025: 멀티모달 AI 확산
     텍스트 + 음성 + 이미지 동시 처리

성능: 정확도 95%+, 만족도 95%+

2. 텍스트 전처리와 토큰화

2-1. NLP 파이프라인

전체 흐름:

원본 텍스트
  ↓
[전처리]
  - 소문자 변환
  - 특수 문자 제거
  - 불용어 제거
  ↓
[토큰화]
  - 문장 쪼개기
  - 단어 쪼개기
  ↓
[임베딩]
  - 단어 → 벡터 (숫자)
  ↓
[모델 입력]
  - BERT, GPT 등에 입력
  ↓
[출력]
  - 분류, 생성, 번역 등

2-2. 전처리 (Preprocessing)

1️⃣ 소문자 변환 (Lowercasing)

text = "Hello WORLD! I'm Happy."
text_lower = text.lower()
print(text_lower)
# "hello world! i'm happy."

효과: "Hello"와 "hello"를 같은 단어로 취급

2️⃣ 특수 문자 제거

import re

text = "Hello, world! How's everything?"
# 특수 문자 제거
text_clean = re.sub(r'[^a-zA-Z\s]', '', text)
print(text_clean)
# "Hello world Hows everything"

효과: 의미 없는 문자 제거로 노이즈 감소

3️⃣ 불용어 제거 (Stop words)

불용어: "a", "the", "is", "and" 등
        문장에서 의미를 거의 안 전달

예시:
원본: "The cat is on the mat"
제거: "cat mat"

효과: 50% 단어 감소, 계산량 50% 감소
      정확도는 거의 같음

Python 구현:

from nltk.corpus import stopwords
import nltk

nltk.download('stopwords')

text = "The quick brown fox jumps over the lazy dog"
stop_words = set(stopwords.words('english'))

words = text.split()
filtered_words = [w for w in words if w.lower() not in stop_words]

print(filtered_words)
# ['quick', 'brown', 'fox', 'jumps', 'lazy', 'dog']

2-3. 토큰화 (Tokenization)

개념:

"문장을 의미 있는 단위로 쪼개기"

예시:
문장: "나는 학교에 간다"
토큰: ["나는", "학교에", "간다"]

3가지 방법:

1️⃣ 단어 토큰화 (Word Tokenization)

text = "I love NLP! It's amazing."

# 공백 기준 (간단)
tokens = text.split()
print(tokens)
# ['I', 'love', 'NLP!', "It's", 'amazing.']
# 문제: 특수문자 포함

# NLTK 사용 (더 좋음)
from nltk.tokenize import word_tokenize
tokens = word_tokenize(text)
print(tokens)
# ['I', 'love', 'NLP', '!', 'It', "'s", 'amazing', '.']
# 특수문자도 분리됨 ✅

2️⃣ 문장 토큰화 (Sentence Tokenization)

text = "I love NLP. It's the future. NLP rocks!"

from nltk.tokenize import sent_tokenize
sentences = sent_tokenize(text)
print(sentences)
# ['I love NLP.', "It's the future.", 'NLP rocks!']

3️⃣ 서브워드 토큰화 (Subword Tokenization)

이유: 단어 수가 너무 많음 (영어만 170만 단어)
      → 메모리 낭비, 계산 비효율

해결: 단어를 작은 조각으로 쪼개기

예시:
"running" → ["run", "ning"]
"unhappy" → ["un", "happy"]

알고리즘:
- BPE (Byte Pair Encoding): 가장 자주 만나는 문자 쌍 통합
- WordPiece: Google BERT가 사용
- SentencePiece: 언어 무관 토큰화

BERT 토큰화 예시:

from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

text = "I love machine learning!"
tokens = tokenizer.tokenize(text)
print(tokens)
# ['i', 'love', 'machine', 'learning', '!']

# 토큰 ID로 변환
token_ids = tokenizer.convert_tokens_to_ids(tokens)
print(token_ids)
# [1045, 2572, 3698, 4083, 999]

3. 감정 분석, 기계 번역, 텍스트 요약

3-1. 감정 분석 (Sentiment Analysis)

작업:

입력: "이 영화 정말 최고야! 강력 추천!"
처리: 감정 분류
출력: Positive (확률 0.98)

기술:

1. 규칙 기반 (1990s)
   "좋아", "싫어" 같은 단어 사전 이용
   정확도: 60-70%

2. 머신러닝 (2000s)
   Naive Bayes, SVM 등
   정확도: 75-85%

3. 딥러닝 (2012+)
   LSTM, CNN, BERT
   정확도: 95-96%

Python 구현:

from transformers import pipeline

# 사전학습 감정 분석 모델
sentiment_pipeline = pipeline("sentiment-analysis")

reviews = [
    "This movie is amazing!",
    "I hate this product",
    "It's okay, nothing special"
]

for review in reviews:
    result = sentiment_pipeline(review)
    print(f"{review}: {result}")

# 출력:
# This movie is amazing!: [{'label': 'POSITIVE', 'score': 0.9998}]
# I hate this product: [{'label': 'NEGATIVE', 'score': 0.9989}]
# It's okay...: [{'label': 'NEGATIVE', 'score': 0.9989}]

성능:

데이터셋: Movie Reviews (5,000개)

모델               정확도
─────────────────────
Naive Bayes        78%
SVM                84%
LSTM               92%
BERT               96.3% ⭐
GPT-3.5            97.2%

결론: 딥러닝이 완전 우위

3-2. 기계 번역 (Machine Translation)

작업:

입력: "Good morning, how are you?"
처리: 번역
출력: "좋은 아침입니다, 어떻게 지내세요?"

진화:

1. 규칙 기반 (1980s)
   "Good" → "좋은"
   "morning" → "아침"
   합치기: "좋은 아침"
   정확도: 30-40% (문법 무시)

2. 통계 기반 (2000s)
   구글 번역 초기
   정확도: 60%

3. 신경망 Seq2Seq (2014)
   Encoder-Decoder 구조
   정확도: 85%

4. Transformer (2017+)
   BLEU 40+
   정확도: 90%

5. GPT-4 (2023)
   거의 인간 수준
   정확도: 95%+

평가 지표: BLEU vs ROUGE

BLEU (Bilingual Evaluation Understudy):
- 용도: 기계 번역
- 방법: n-그램 정확도 비교
- 값: 0~100 (높을수록 좋음)
- 해석: 
  - 0-20: 나쁨
  - 20-40: 보통
  - 40-60: 좋음
  - 60+: 우수

예시:
번역문: "The cat is on the mat"
참조문: "A cat is on a mat"

BLEU = 비교할 때 일치한 단어 비율

ROUGE (Recall-Oriented Understudy for Gisting):
- 용도: 텍스트 요약, 번역
- 방법: 재현율(recall) 중심
- 값: 0~1 (높을수록 좋음)
- 해석:
  - 0.3-0.4: 보통
  - 0.4-0.5: 좋음
  - 0.5+: 우수

Python 구현:

from transformers import pipeline

# 번역 모델 로드
translator = pipeline("translation_en_to_ko",
                     model="Helsinki-NLP/opus-mt-en-ko")

text = "I love artificial intelligence!"
result = translator(text, max_length=400)
print(result[0]['translation_text'])
# "나는 인공지능을 사랑한다!"

# BLEU 계산
from torchtext.data.metrics import bleu_score

candidate = ["the", "cat", "is", "on", "the", "mat"]
reference = [["a", "cat", "is", "on", "a", "mat"]]

score = bleu_score([candidate], [reference])
print(f"BLEU: {score:.2%}")  # BLEU: 74.23%

3-3. 텍스트 요약 (Text Summarization)

작업:

입력: [1000단어 긴 기사]
처리: 요약
출력: [100단어 핵심 정리]

방법:

1. 추출적 요약 (Extractive)
   원본 문장을 그대로 뽑아서 연결
   장점: 빠름, 정확함
   단점: 어색할 수 있음

   예시:
   "AI가 발전했다. 의료분야에 쓰인다. 비용이 낮아진다."
   → "AI가 발전했다. 의료분야에 쓰인다."

2. 생성적 요약 (Abstractive)
   새로운 문장을 생성해서 요약
   장점: 자연스러움
   단점: 느림, 환각 가능

   예시:
   원본 (3문장): "AI 기술이 급속히 발전하고 있다. 특히 의료 분야에서 진단 정확도가 높아졌다. 의료비 감소도 기대된다."

   요약 (1문장): "AI 발전으로 의료 진단 정확도 향상과 비용 절감 기대"

Python 구현:

from transformers import pipeline

# 요약 모델 로드 (추출적)
summarizer = pipeline("summarization",
                     model="facebook/bart-large-cnn")

text = """
Artificial intelligence has made tremendous progress in recent years.
Machine learning algorithms can now recognize images with 99% accuracy.
Natural language processing enables machines to understand human language.
These advances have applications in healthcare, finance, and education.
AI is transforming industries and creating new opportunities.
"""

summary = summarizer(text, max_length=50, min_length=30, do_sample=False)
print(summary[0]['summary_text'])
# "AI has made progress in image recognition and language understanding,
#  with applications in healthcare, finance and education."

성능:

데이터셋: CNN/DailyMail (뉴스 요약)

모델              ROUGE-L    특징
─────────────────────────────────
LSA (2008)       0.36      고전 기법
Neural Seq2Seq   0.44      첫 신경망
Transformer      0.52      더 나은 구조
BART             0.60      전문화된 모델
GPT-4            0.65      생성 AI

결론: 생성 AI가 강함

4. 챗봇과 대화형 AI

4-1. 챗봇의 진화

규칙 기반 (1960s-2000s):

ELIZA (1966):
입력: "I am sad"
규칙: "I am X" → "Why are you X?"
출력: "Why are you sad?"

특징:
- 진짜 이해 X
- 패턴만 매칭
- 정확도: 50%
- 하지만 사람들 속임!

기계학습 (2000s-2015):

특징:
- 의도 분류 (Intent Classification)
- 개체명 인식 (Named Entity Recognition)
- 정확도: 75-85%

예시:
입력: "서울에서 서울역까지 택시 부르는 법?"
의도 감지: "transportation_help"
개체명: 서울 = 출발지, 서울역 = 목적지
응답: 택시 앱 추천

딥러닝 (2015-2022):

구조: Seq2Seq + Attention
특징:
- 자동으로 의도 학습
- 자동으로 개체명 감지
- 정확도: 90-94%

한계: 학습 데이터 많이 필요 (수만 개)

생성 AI (2022-현재):

ChatGPT, Gemini 등
특징:
- 매우 자연스러운 대화
- 추론 능력 있음
- 정확도: 95%+
- 만족도: 95%+

장점: 학습 데이터 필요 없음
      (GPT-3.5는 5조 토큰으로 학습)

4-2. 대화형 AI의 구조

파이프라인:

사용자 입력: "내일 날씨가 어떨까?"
  ↓
[STT 또는 텍스트 인식]
"내일 날씨가 어떨까?"
  ↓
[NLU: 자연어 이해]
의도: weather_inquiry
시간: tomorrow
  ↓
[대화 관리자]
외부 API 호출 (날씨 정보)
  ↓
[응답 생성]
"내일은 맑고 기온은 20도 예상입니다."
  ↓
[TTS 또는 텍스트 출력]
음성 또는 텍스트로 전달

4-3. 유명한 대화형 AI

ChatGPT:

기술: GPT-3.5 기반 + RLHF
특징:
- 매우 대화체
- 긴 문맥 이해 (4K-128K)
- 다양한 작업 수행 (코딩, 창작, 분석)

성능:
- 유저 만족도: 95%
- 정확도: 90%+
- 응답 시간: 3-5초

한계:
- 환각 (틀린 정보 생성)
- 최신 정보 없음 (학습 종료 시점까지)

Google Bard/Gemini:

기술: Transformer 기반 LaMDA → Gemini
특징:
- 구글 검색 연동 (최신 정보)
- 이미지 이해 (Gemini)
- 다국어 지원

성능:
- 정확도: 92-95%
- 응답 시간: 2-4초

Meta AI (LLaMA):

특징:
- 오픈소스 (누구나 수정 가능)
- 적은 파라미터 (7B ~ 70B)
- 빠른 속도

성능:
- 정확도: 85-92%
- 속도: ChatGPT보다 빠름

5. 음성 인식(STT)과 음성 합성(TTS)

5-1. 음성 인식 (Speech-to-Text, STT)

개념:

"음성 신호" → "텍스트"

예시:
사용자가 말함: "내일 날씨가 어떨까?"
STT 처리
출력: "내일 날씨가 어떨까?"

기술 진화:

1. Hidden Markov Model (HMM)
   기술: 음성의 통계 패턴 학습
   정확도: 80%

2. Deep Neural Network (DNN) + HMM
   기술: 신경망으로 음성 특징 추출
   정확도: 90%

3. Recurrent Neural Network (RNN/LSTM)
   기술: 시계열 음성 학습
   정확도: 94%

4. Transformer 기반 (Whisper 등)
   기술: Self-Attention으로 맥락 파악
   정확도: 97-98%

Python 구현:

import speech_recognition as sr

recognizer = sr.Recognizer()

# 마이크에서 음성 입력
with sr.Microphone() as source:
    print("말씀해주세요...")
    audio = recognizer.listen(source)

# STT 처리
try:
    text = recognizer.recognize_google(audio, language="ko-KR")
    print(f"인식된 텍스트: {text}")
except sr.UnknownValueError:
    print("음성을 인식할 수 없습니다")
except sr.RequestError:
    print("STT 서비스 오류")

현황:

정확도:
- Google STT: 97%+
- Apple Siri: 95%
- Amazon Alexa: 94%
- Microsoft Cortana: 96%

특징:
- 환경 노이즈 대응 가능
- 다양한 악센트 대응
- 실시간 처리 (100ms 지연)

5-2. 음성 합성 (Text-to-Speech, TTS)

개념:

"텍스트" → "음성 신호"

예시:
입력: "안녕하세요"
TTS 처리
출력: "안녕하세요" (음성)

기술 진화:

1. 연결식 TTS (Concatenative)
   미리 녹음한 음성을 연결
   음질: 자연스러움 (녹음이니까)
   한계: 모든 문장 녹음 필수

2. 매개변수식 TTS (Parametric)
   음성 특성을 수식으로 표현
   음질: 부자연스러움
   장점: 언어 무관

3. 신경망 TTS (Neural TTS)
   Tacotron, WaveNet 등
   음질: 9/10 (매우 자연스러움)
   특징: 감정도 표현 가능

Python 구현:

from google.cloud import texttospeech

client = texttospeech.TextToSpeechClient()

# 입력 텍스트
input_text = texttospeech.SynthesisInput(
    text="안녕하세요, 인공지능입니다"
)

# 음성 설정
voice = texttospeech.VoiceSelectionParams(
    language_code="ko-KR",
    name="ko-KR-Neural2-A",  # 자연스러운 한국어 여성 목소리
)

# 오디오 설정
audio_config = texttospeech.AudioConfig(
    audio_encoding=texttospeech.AudioEncoding.MP3
)

# TTS 실행
response = client.synthesize_speech(
    input=input_text,
    voice=voice,
    audio_config=audio_config
)

# 파일 저장
with open("output.mp3", "wb") as out:
    out.write(response.audio_content)

print("음성 파일 생성 완료!")

성능:

자연스러움 평가 (1-10):
- 구글 TTS: 8.5/10
- Amazon Polly: 8.2/10
- Microsoft Azure: 8.0/10
- 실제 인간 음성: 10/10

특징:
- 감정 표현 가능 (기쁜, 슬픈 톤)
- 배경음 추가 가능
- 속도/음높이 조절 가능

6. NLP의 미래

6-1. 현재 트렌드 (2024-2025)

멀티모달 AI:

기존: 텍스트만
미래: 텍스트 + 음성 + 이미지 + 영상

예시:
사용자: [사진] "이 사진에 뭐가 있어?"
AI: "고양이가 책을 읽고 있네요"

RAG (Retrieval Augmented Generation):

기존 GPT의 문제: 최신 정보 없음

해결책:
1. 외부 데이터베이스에서 관련 정보 검색
2. 검색 결과를 GPT에 전달
3. GPT가 최신 정보 기반으로 답변

효과: 환각 50% 감소, 정확도 10% 향상

에이전트 AI:

기존: "답변만 제공"
미래: "스스로 행동"

예시:
사용자: "내일 회의 일정 정리해줘"

에이전트:
1. 캘린더 API 접근
2. 메일 검색
3. 회의 시간 정리
4. 장소 지도 표시
5. 알림 설정

6-2. 미래 전망 (2030년)

전체 AI 수렴:

현재: 각 분야별 AI 따로
- 이미지: CNN
- 텍스트: BERT/GPT
- 음성: 별도 STT/TTS

미래: 하나의 거대 AI가 모두

FAQ: NLP Q&A

Q1. 토큰화가 정말 중요한가?

A. 네, 매우 중요합니다. 이유:

좋은 토큰화:
- 모델 학습 효율 50% 향상
- 메모리 사용량 30% 감소

나쁜 토큰화:
- 의미 손실
- 모델 성능 저하
- 버그 발생 (인코딩 오류 등)

Q2. ChatGPT는 정말 대화를 “이해”하나?

A. 아니요, 통계입니다. 하지만:

"이해"의 정의가 애매함

1. 심리학적 이해: ChatGPT는 못함
   - 진정한 의도 파악 불가
   - 감정 느낄 수 없음

2. 기능적 이해: ChatGPT는 함
   - 문맥 파악 가능
   - 의미 있는 응답 생성
   - 추론 가능

결론: "완벽한 이해"는 아니지만, 
      "충분히 의미 있는 처리"는 함

Q3. 번역기는 100% 정확할 수 있나?

A. 이론적으로는 불가능합니다:

이유:
1. 언어 간 1:1 대응 불가능
   - "Good morning" = "좋은 아침"? "안녕"?

2. 문화적 맥락 차이
   - 농담, 속담, 관습 등

3. 중의성 (ambiguity)
   - "bank" = 은행? 강둑?

현실적 한계: 90-95% 정확도
             문맥 이해 필요 (AI도 어려움)

해결책: 번역기 + 인간 검수 (현재 최선)

Q4. 음성 AI도 텍스트처럼 발전할까?

A. 네, 이미 매우 발전 중입니다:

음성 STT 정확도:
- 2015: 90%
- 2020: 95%
- 2025: 97-98% (텍스트 NLP 수준)

음성 TTS 품질:
- 2015: 5/10 (로봇음)
- 2020: 7.5/10 (좀 자연스러움)
- 2025: 9/10 (거의 인간 수준)

미래 (2030):
- 완벽한 음성 이해/생성
- 감정 표현 가능
- 노이즈 환경에서도 99%+ 정확도

최종 정리: NLP의 위대함

역사:

1950: "기계가 언어를 처리할 수 있을까?"
1960: 첫 챗봇 (ELIZA)
1990: 통계 기반 처리
2012: 딥러닝 혁명
2022: ChatGPT 시대 개막
2025: 거의 완벽한 이해/생성

현재 능력:

✅ 텍스트 분류: 96%+
✅ 감정 분석: 96%+
✅ 기계 번역: BLEU 40+
✅ 텍스트 요약: ROUGE 60%+
✅ 대화: 만족도 95%+
✅ 음성 인식: 97-98%+
✅ 음성 합성: 품질 9/10

미래:

2030: "말로 AI와 대화하는 게 자연스러움"
2035: "AI가 문화적 뉘앙스까지 이해"
2040: "완벽한 다국어 실시간 번역"
2050: "인간과 구분 불가능한 대화"

외부 참고 자료

NLP를 더 깊게 배우고 싶다면:


같이보기

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다