Natural Language Processing
자연언어처리란?
1. 자연언어처리(Natural Language Processing)
Computer Science + Linguistics
인공지능(AI)의 하위분야
자연언어 : 사람들이 일상생활에서 자연스럽게 사용하는 언어
인공언어 : 사람이 인위적으로 만든 언어 (프로그래밍 언어, python)
자연언어처리
컴퓨터가 자연언어의 의미를 분석하여 이해하고 생성할 수 있도록 만들어주는 기술
자연언어처리가 어려운이유
1. 자연언어처리가 어려운 이유
1.1 자연언어처리의 어려움
- 다른 단어지만, 뜻이 같은 경우
- 다른 표현이지만, 뜻이 같은 경우
- 같은 단어지만 뜻이 다른 경우
- 문법적 순서가 다르지만, 뜻이 같은 경우
또한 형태소를 이용해서 자연언어가 구성되기 때문에, 중의성, 고유 명사 처리, 사전 미등록어 처리가 형태소 분석이 어렵게 된다.
1.2 한국어에서 자연언어처리
교착어 : 한국어는 교착어라서 어근과 접사에 의해 단어의 의미와 기능이 정해진다.
ex. ‘그녀’ + ‘가’/’를’/’의’/’에게’
단어 순서 및 주어 생략
한국어는 단어의 순서가 문장의 의미를 결정하는 결정적인 요소가 아님
따라서 순서를 바꾸어도 전체 맥락을 이해하는데 전혀 문제가 없음
또한 주어가 생략되어도 이전 맥락을 토대로 이해할 수 있음
단, 영어는 완전한 생략이 아니라 대명사를 사용함
띄어쓰기
한국어에서 띄어쓰기는 아직 정착단계이고, 표준이 계속 변화한다.
일반적으로는 띄어쓰기가 없어도 어느 정도의 의미전달이 가능하기 때문에 띄어쓰기가 올바른 문장과 틀린 문장이 존재한다.
평서문과 의문문
한국어는 의문문과 평서문이 같은 형태의 문장구조를 갖는 경우가 매우 많음
일상 속의 자연언어처리
1. 일상 속의 자연언어처리
1.1 자연언어처리 활용
문법 교정
문법적으로 올바르지 않은 문장 및 문구를 수정하는 task
음성 인식(Speech Recognition)
발화된 음성을 인식하고 이를 올바른 텍스트 형태로 변환하거나 음성 기반 상황인지를 통해 업무, 일상을 보조
ex. TTS, STT
기계번역
다양한 국가의 언어를 원하는 타겟 언어로 번역
Real-Time Translation
음성과 감지됨과 동시에 다국어로 통역하여 사용자에게 제공
정보 추출 - 검색(Information Extraction)
주어진 쿼리를 기반으로 관련 문서, 정보들을 추출
질의응답 (QA)
사용자의 질문을 이해하고 관련 문서를 찾아 올바른 정답을 추출하거나 내재된 지식을 통해 생성
문서요약 (Text Summarization)
문서에 나온 텍스트에서 핵심 내용을 기반으로 요약
AI Chat-bot
사용자와 일상 주제, 새오할 등의 다양한 주제에 대해 자연스럽게 대화
AI X Creation
AI를 활용해 문학작품, 이미지 등의 창작물을 생성
1.2 산업군에서의 활용
자동완성
입력되는 텍스트들을 기반으로 이후 입력될 단어를 추론해 사용자의 의도 파악을 통한 편리성을 강화
검색 엔진
다량의 데이터로부터 목적에 부합하는 주요 문서들을 검색
정보 요약
대량의 정보를 사용자의 니즈에 따라 원하는 방향으로 요약해서 실시간으로 제공
문서 질의응답
사용자 니즈에 따른 지식기반의 질의응답을 서비스로 제공
Chat-bot
많은 회사에서 챗봇을 통해 고객 서비스 문제를 처리하고 직원을 지원하는 가상 Agent로 사용
AI Assistant
음성을 기반으로 자연언어 처리를 통해 사용자의 의도를 분류, 적절한 기능을 수행해 사람을 보조
MS Copilot
대량의 코드 학습을 바탕으로 개발자에게 유용한 툴을 지원
ChatGPT Plugin
ChatGPT를 기반으로 여러 도메인에 접목할 수 있는 유용한 플러그인을 제공
언어학과 전산언어학
1. 언어학과 전산 언어학
1.1 언어학과 전산 언어학
언어학 : 인간 고유의 정신적인 능력인 언어를 과학적으로 연구하는 학문 분야
인간의 언어 행태를 연구하는 분야
전산언어학 : 컴퓨터를 이용하여 언어를 자동으로 분석하며, 언어 자료를 자동 처리하는 데에서 나타나는 언어학적 문제를 연구하는 학문
언어학의 접근 방법
- 규칙기반 접근 :
이론언어학적인 연구를 통해 얻어진 형식화된 문법을 이용 - 통계기반 접근 :
실제 사용된 언어 자료에 기반을 둔 접근 방식으로 전자화된 텍스트(Corpus)의 분석을 통해 얻어진 언어 단위의 분포와 빈도에 관한 정보를 이용 - 딥러닝기반 접근 :
인공 신경망이 많은 양의 자료를 통해 학습한 결과를 바탕으로 산출되는 규칙, 정보들을 활용
전통적인 자연언어처리 파이프라인
형태소 분석, 구문 분석, 의미 분석, 화용 분석, 담화 분석으로 이루어져있다.
1.2 음절, 형태소, 품사
음절 : 언어를 말하고 들을 때, 하나의 덩어리로 여겨지는 가장 작은 말소리의 단위
한국어에서는 하나의 글자가 하나의 음절
ex. 이 + 현 + 진 = 3음절 단어
형태소 : 언어에서 의미를 가지는 가장 작은 의미
형태소를 쪼개게되면 더이상 기능이나 의미를 갖지 않는다.
일반적으로 자연언어처리에서는 분석의 기본이 되는 토큰으로써 형태소를 이용한다.
어절 : 한 개 이상의 형태소가 모여 구성된 단위. 자연언어는 어절 단위로 띄어쓰기 되어 발화/서술
품사 : 단어를 문법 상 의미, 형태, 기능에 따라 분류한 종별을 의미
품사의 구분
- 역할에 따라 : 체언, 용언, 관계언, 독립언, 용언
- 의미에 따라 : 명사, 대명사, 수사, 관형사, 부사, 조사, 감탄사, 동사, 형용사
- 형태에 따라 : 가변어, 불변어
텍스트 전처리
1. 텍스트 전처리란?
1.1 전처리
컴퓨터가 텍스트를 이해할 수 있도록 하는 Data Preprocessing 방법
- HTML 태그, 특수 문자, 이모티콘
- 정규표현식 등등
KoNLPy
한국어 자연언어처리를 위한 대표적인 python Library
NLTK
영어로 된 텍스트의 자연언어처리를 위한 Library
1.2 토큰화
주어진 데이터를 토큰(Token) 단위로 나누는 작업
토큰이 되는 기준은 다를 수 있음 (어절, 단어, 형태소, 음절, 자소 등)
문장 토큰화, 단어 토큰화 등으로 사용한다.
왜 해야하는가
단어 의미를 밀집 벡터로 표현하기 위해 단어들을 사전화하기 때문
고려사항
- 구두점이나 특수 문자를 단순 제외
- 줄임말과 단어 내 띄어쓰기
- 문장 토큰화 : 단순 마침표를 기준으로 자를 수 없음
한국어 토큰화의 어려움
영어는 띄어쓰기를 기준으로 하는 띄어쓰기 토큰화를 수행해도 단어 토큰화가 잘 작동
그러나 한국어는 조사가 존재헤서 같은 단어임에도 서로 다른 조사가 붙어서 다른 단어로 인식한다.
한국어는 또한 띄어쓰기가 명백하게 나뉘어지지 않는다.
1.3 정제
코퍼스 내에서 토큰화 작업에 방해가 되거나 의미가 없는 부분의 텍스트, 노이즈를 제거하는 작업
불용어 : 분석에 큰 의미가 없는 단어, 실질적으로 의미를 갖고 있지 않은 용어
전처리시 불용어를 정제하는 작업이 필요하다.
1.4 정규화
Stemming vs Lemmatization
Stemming이라고 하면 단어에 붙은 어미(은/는/이/가, ing/ed/s 등)을 지우는 작업(어간 찾기)을 의미하고
Lemmatization은 단어의 원형(표제어)을 찾아내는 작업을 의미한다.
1.5 편집거리
Levenshtein Distance
한 string s1을 s2로 변환하는 최소 횟수를 거리로 표현하는 것, 거리가 낮을수록 유사한 문자열로 판단함
1.6 정규 표현식
특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식언어