🤔 새로운 공부의 시작
AI의 분야 중 하나인 자연어 처리에 대해 공부하고 이론과 실습을 진행하며 정리해보려고 합니다.
가장 먼저 자연어 처리의 개요를 알아보겠습니다.
작성하기에 앞서 [ICT COG Academy] 인공지능 고급(언어)과정을 수강하며 복습을 위해 작성한 글임을 명시합니다.
🔎 자연어(Natural Language)
자연어란 프로그래밍 언어와 같이 사람이 인공적으로 만든 언어가 아닌, 사람이 일상생활과 의사소통에 사용해 온, 한국어, 영어와 같이 오랜 세월에 걸처 자연적으로 만들어진 언어라는 의미입니다.
자연어라고 부르는 까닭은 컴퓨터 공학 등에서 언어라고 하면 우선적으로 C 등의 프로그래밍 언어를 떠올리기 때문입니다.
🔎 자연어 처리(NLP)
자연어 처리는 컴퓨터가 인간의 언어를 알아들을 수 있도록 인간의 언어를 분석하고 해석하여 처리하는 인공지능의 한 분야입니다.
즉 자연어를 컴퓨터로 해석하고, 의미를 분석하여 이해하고, 자동으로 생성하는 것 등에 관련된 분야입니다.
자연어 처리의 가장 기본적인 문제는 "어떻게 자연어를 컴퓨터에게 인식시킬 수 있을까?"라는 것입니다.
기존의 컴퓨터 관련 기술에서는 컴퓨터에게 일을 시키기 위하여 사람이 컴퓨터의 언어를 학습했다면,
AI 기술을 사용했을 때는 컴퓨터에게 일을 시키긱 위하여 컴퓨터가 사람의 언어를 학습합니다.
현재까지도 아직 컴퓨터가 자연어를 사럼처럼 이해하지는 못하지만 언어에 대한 깊은 이해 없이 피상적인 확률 및 통계를 이용하여 대량의 정보를 처리하는 기술은 많이 발전한 상태입니다.
대표 사례로는 인간의 언어를 깊이 이해하지 않고, 단어 간의 통계적 유사성에 바탕을 두고 문서를 겁색하는 '검색 엔진'이 있습니다.
자연어 처리에서는 '인공지능 기술', '컴퓨터 공학 기술', '언어학적 지식'등의 기술을 요합니다.
자연어 처리의 대표적인 주제를 아래와 같이 4가지로 크게 나누어 볼 수 있는데 어떤 문제를 해결하고자 하는가와 상통합니다.
• 텍스트 분류
• 텍스트 유사도
• 텍스트 생성(자연어 생성)
• 텍스트 이해(기계 이해)
4대 문제를 이해하려면 먼저 단어 표현에 대하여 이해하여야 합니다.
🔎 단어 표현
단어 표현은 모든 자연어 처리 문제의 기본이며 자연어를 어떻게 표현할 것인지 결정하는 것이 모든 문제에 대한 해결의 출발점입니다.
컴퓨터는 자연어를 이해하지 못합니다.
컴퓨터가 인식할 수 있는 것은 구성요소인 전자 소재의 on/off 상태 뿐입니다.
즉 0과 1만을 인식할 수 있다는 것입니다.
따라서 언어의 기본단위가 되는 단어의 수치화가 필요합니다.
예를 들어 "언어"라는 단어를 컴퓨터는 아래와 같이 인식합니다.
'언' : 1100010110111000 (UTF 8 코드 : C5B8)
'어' : 1100010110110100 (UTF 8 코드 : C5B4)
즉, 언어의 특징이 모두 사라진다는 것입니다.
따라서 자연어 처리 모델을 위한 데이터로 사용이 불가능해집니다.
이를 해결하기 위해 단어의 수치화 결과를 벡터(단어 임베딩, 단어 벡터)로 표시합니다.
단어의 수치화를 위한 대표적인 방법을 소개하겠습니다.
원-핫 인코딩
원-핫 인코딩은 각 단어에 인덱스를 부여하는 방법입니다.
각 단어의 벡터에서 해당 인덱스를 1, 나머지는 0으로 부여합니다.
예를 들어 아버지, 어머니, 삼촌, 이모, 고모의 길이 5의 벡터가 존재한다면 각각 아래와 같이 나타낼 수 있습니다.
→ (1,0,0,0,0), (0,1,0,0,0), (0,0,1,0,0), (0,0,0,1,0), (0,0,0,0,1)
원-핫 인코딩은 간편하고 쉽다는 장점이 있습니다.
하지만 처리할 단어의 수가 많을수록 벡터의 크기가 급증하여 매우 비효율적입니다.
또한 단어가 무엇인지만 확인이 가능하여 단어의 의미, 특성, 관계 등의 정보는 표현되지 않습니다.
분포가설 기반의 인코딩
분포가설이란 같은 문맥의 단어, 즉 비슷한 위치에 나오는 단어는 비슷한 의미를 가진다는 것입니다.
즉 어떤 글에서 비슷한 위치에 존재하는 단어는 단어 간의 유사도가 높다고 판단하는 것입니다.
이는 두 가지 방법으로 나눌 수 있는데 '카운트 기반 방법'과 '예측 방법'입니다.
• 카운트 기반 방법
특정 문맥 안에서 단어들이 동시에 등장하는 횟수를 직접 세는 방법입니다.
동시에 등장한 횟수를 행렬로 나타내고, 그 행렬을 수치화하여 단어벡터를 만드는 방법입니다.
특잇값 분해 , 잠재 의미 분석 , Hyperspace Analogue to Language(HAL), Hellinger PCA(Principal Component Analysis, 주성분 분석 ) 등이 있습니다.
• 예측 방법
신경망 또는 통계 모델 등을 통해서 문맥 안의 단어들을 예측하는 방법입니다.
Word2Vec, NNLM(Neural Network Language Model), RNNLM(Recurrent NNLM) 등이 있습니다.
대표적인 방법인 Word2Vec 은 CBOW(Continuous Bag of Words), Skip Gram 모델로 구분됩니다.
분포가설 기반의 인코딩은 각 단어 사이의 유사도 및 관계성, 특징 등을 표현할 수 있습니다
특히 예측 방법의 경우 성능이 뛰어나므로 가장 많이 활용됩니다.
위의 방법들에 대해서는 알아보는 시간을 가지고 따로 공부해보려고 합니다.
🔎 텍스트 분류
텍스트 분류 문제는 자연어 처리 문제 중 가장 대표적이고 많이 접하는 문제입니다.
자연어 처리 기술을 활용해 특정 텍스트를 사람들이 정한 몇 가지 범주 중 어느 범주에 속하는지 분류하는 문제입니다.
스팸(SPAM) 분류, 감정 분류, 뉴스 기사 분류 등이 있습니다.
텍스트 분류 방법은 지도학습을 통한 분류와 비지도학습을 통한 분류로 나눌 수 있습니다.
지도학습을 통한 분류는 선형분류 (Linear Classifier), 신경망(Neural Network), 나이브 베이즈 분류 (Naive Bayes Classifier), 서포트 벡터 머신 (Support Vector Machine, SVM), 로지스틱 분류 (Logistic Classifier), 랜덤 포레스트 (Random Forest) 등이 있습니다.
비지도 학습을 통한 분류는 k-평균 군집화(k-means Clustering), 계층적 군집화(Hierarchical Clustering) 등이 있습니다.
🔎 텍스트 유사도
두 가지의 문장을 읽어보겠습니다.
"이 노래 누가 만들었어?"
"지금 나오는 노래의 작곡가가 누구야?"
위의 두 문장은 사람이 읽었을 때는 같은 뜻이라는 것을 쉽게 이해할 수 있는 반면 컴퓨터는 이해하지 못합니다.
예시와 같은 두 만장이 얼마나 유사한지 정량화 하여 수치로 표현하는 모델을 만드는 것이 중요합니다.
유사도 측정을 위해 정량화 하는 방법은 '같은 단어의 개수를 사용하여 판단하는 방법', '형태소로 나누어 형태소를 비교하는 방법', '문장, 단어를 자소 단위로 나누어 각 단어를 비교하는 방법', '딥러닝을 기반으로 측정하는 방법' 등이 있습니다.
다음 글에서는 자연어 처리에 대한 기본 지식을 더 알아보도록 하겠습니다.
'AI > 자연어 처리' 카테고리의 다른 글
[AI] 자연어 처리 - 전처리와 토큰화(2) (2) | 2022.08.05 |
---|---|
[AI] 자연어 처리 - 전처리와 토큰화(1) (2) | 2022.08.01 |
[AI] 자연어 처리 - PyTorch 실습 (0) | 2022.07.30 |
[AI] 자연어 처리 - 기본지식(3) (0) | 2022.07.29 |
[AI] 자연어 처리 - 기본지식(2) (0) | 2022.07.28 |