[DL] 자연어 처리를 시작하기 전에

jul ee·2025년 6월 12일

데이터 성장기

목록 보기
131/139

우리는 매일 수많은 문장을 읽고, 쓰고, 듣고, 말하며 살아간다.

아침에 스마트폰으로 보는 뉴스 기사, 친구에게 받은 메시지, 지금 이 블로그 글까지 모두 자연어(Natural Language)다. 자연어는 사람이 일상에서 자연스럽게 사용하는 언어를 뜻한다.

이처럼 자연어는 우리가 숨 쉬듯 사용하는 언어지만 정작 그 복잡성과 정체를 잘 인지하지 못한 채 살아간다. 대부분의 사람은 모국어를 '학습'했다기보다 '노출'을 통해 습득한다. 게다가 문법을 정확히 몰라도 말하고, 듣고, 쓸 수 있다.

그렇다면  "기계는 이 언어를 제대로 이해할 수 있을까?"

이 언어를 기계에게 가르치려고 할 때 인간의 언어는 생각보다 훨씬 더 복잡하다 것을 인지할 수 있다.




🖇  자연어 vs 인공어

기계에게 언어를 가르친다고 하면 프로그래밍 언어를 떠올릴 수 있다. 파이썬, 자바스크립트, C 같은 언어들은 사람이 만든 인공어(Artificial Language)다. 문법이 명확하고 애매함이 없어, 기계는 언제나 같은 방식으로 이해하고 처리할 수 있다.

이러한 인공어는 문맥자유 문법(Context-free Grammar)을 따른다. 이는 한 문장을 해석할 때 앞뒤 문맥에 의존하지 않아도 되는 구조다. 컴파일러는 이러한 규칙 덕분에 에러를 빠르게 감지하고, 코드 실행 흐름을 정확하게 이해할 수 있다.

반면 자연어는 문맥의존 문법(Context-sensitive Grammar)을 따른다. 단어의 의미나 문장의 구조가 앞뒤 맥락에 따라 달라지고, 문법 규칙도 예외가 많다. 인간에게는 당연한 이 특성은 기계에게는 큰 장벽이 된다.




🖇  자연어의 복잡성

예를 들어 보자.

Alice drove down the street in her car.

이 문장은 두 가지로 해석될 수 있다.

  1. 앨리스가 자동차를 운전해서 거리를 달렸다.
  2. 앨리스가 차 안에 있는 '거리'를 운전해 달렸다.

두 번째 해석은 현실적으로 말이 안 되지만, 문법적으로는 가능하다.

이럴 때 사람은 '차 안에 거리 같은 게 있을 리 없다'는 상식을 바탕으로 해석을 하나로 고정할 수 있다. 하지만 기계는 그렇지 않다. 기계에게 상식은 학습된 데이터로만 주어지며 그조차 부족하거나 왜곡되기 쉽다.

이처럼 자연어는 단어의 뜻, 문법, 문맥, 상황, 배경지식, 상식까지 모두 고려해야 정확히 이해할 수 있기 때문에 복잡한 것이다.




🖇  자연어의 어려움

자연어는 다음 네 가지 측면에서 기계 처리에 특히 어려움을 준다.

1. 중의성(Ambiguity)

  • 하나의 문장이 둘 이상의 의미로 해석될 수 있음
    "나는 그녀를 보고 웃었다"  →  내가 웃었는지, 그녀가 웃었는지 모호

2. 문맥의존성(Context-dependence)

  • 단어의 의미나 문장의 구조가 앞뒤 문맥에 따라 달라짐
    "배가 아파"  →  배(복부)? 배(선박)?

3. 탈문법성(Non-grammaticality)

  • 자연어는 종종 문법 규칙을 벗어난 표현을 포함함
    "그니까 그거 있잖아, 어... 그거 뭐더라?"

4. 비정형성(Unstructured)

  • 정해진 틀 없이 자유롭게 쓰이는 말과 표현
  • 메신저 대화, 댓글, 속어 등

이러한 특성 때문에 자연어처리는 문법 분석 수준에서 멈출 수 없고, 의미 분석, 문백 구조 파악, 도메인 지식 기반 추론까지 필요하다.




🖇  자연어 처리란 결국

여기서 자연어 처리를 왜 배우는가를 생각해 보게 되었다.

자연어를 처리하는 것은 굉장히 복잡하고 어려운 과정이라는 것을 알 수 있었다. 그렇다면 그저 문장을 처리하거나 번역하거나 챗봇을 만들기 위해서 사람들은 자연어 처리에 비용을 투자하고 있는 걸까? 하는 궁금증이 생겼다.

좀 더 넓게 보면 자연어 처리는 언어를 이해하는 시스템을 만드는 작업이고, 이는 인간의 사고방식을 기계에 담아내려는 시도라고 해석할 수 있을 것 같다.

이 관점에서 생각해 보면 결국 자연어 처리를 배우는 것은,

"기계가 어떻게 사람처럼 말하고, 듣고, 이해할 수 있을까?"
를 진지하게 고민해보는 일이지 않을까?

앞으로 공부해 나가다 보면 어딘가 결론에 도달할 수 있을 거라 기대한다.




🖇  기계는 어떻게 시작할까?

기계는 언어를 해석하려면 가장 먼저 문장을 잘게 나눠야 한다. 이때 토큰화(Tokenization)라는 개념이 등장한다.

토큰화란 문장을 의미 단위(보통 단어 또는 그 이하)로 쪼개는 작업이다. 이 단계가 정확하지 않으면 이후에 아무리 좋은 모델을 써도 원하는 결과를 얻기 어렵다.

예시로 살펴보자.

"나는 밥을 먹었다"
→  ["나는", "밥을", "먹었다"]
혹은 →  ["나", "는", "밥", "을", "먹", "었", "다"]

이처럼 문장을 어디서 자르고, 어떤 단위를 의미로 볼지 정하는 기준은 자연어 처리의 성능에 큰 영향을 미친다. 이 내용은 다음 글에서 자세히 다뤄 볼 예정이다.




인사이트 및 회고

이 글을 작성하면서 사람이 무의식적으로 사용하는 자연어가 기계에게 어떤 이유로 까다롭게 작용하는지 이해할 수 있었다.

당연한 사실이지만 기계 입장에서는 구조가 불명확하고 예외가 많은 복잡한 데이터라는 점을 생각하면서 자연어 처리에 어떤 어려움이 있을 수 있을지 생각해 보는 시간이 되었다.

동일한 문장도 상식이나 배경지식이 있어야 제대로 해석되는 것처럼 규칙 기반 처리만으로는 자연어를 이해할 수 없는 어려움을 어떻게 해결해 나갈 수 있을지 앞으로의 학습을 통해 확인해 보아야겠다.

profile
AI에 관심을 가지고, 데이터로 가치를 만들어 나가는 과정을 기록합니다.

0개의 댓글