자연어처리

DONGJIN IM·2022년 4월 4일
0

AI(NLP) 이론

목록 보기
18/18
post-thumbnail
post-custom-banner

자연어 처리

컴퓨터의 자연어 처리 과정

Encoder는 자연어를 숫자나 Vector로 변환하여 Decoder가 이해할 수 있게 하는 것이다.

Decoder는 컴퓨터가 학습한 지식을 바탕으로 Decoding 하는 Layer이다.

Encoding만 잘하면 Decoding을 통해 어떤 Task든 해결 가능한데, Encoding이 잘 되었다면 좌표평면에 Vector 형태로 자연어가 잘 분포되어 있을 것이기 때문에 Task 해결이 쉬워지기 때문이다.

Feature Extraction

분류 대상의 특징(Feature)을 파악하는 것으로써, 우리는 자연어를 처리하고 싶기 때문에, 자연어의 특징을 파악하는 것이 핵심이 될 것이다.

대부분의 자연어 처리 Task는 Classificatio이므로 더욱 중요한 개념이다.

옛날에는 사람이 수행했지만, 최근에는 컴퓨터가 Feature Extraction을 담당한다.

복잡한 문제에서 분류 대상의 특징을 컴퓨터가 스스로 파악(Feature Extraction)한 이후 분류(Classification)하는 과정을 거친다.

자연어 단어 Embedding

One-hot Encoding 방식
가장 간단한 방식으로, Sparse Representation 방식이다.

단어 벡터가 Sparse하여 단어가 가지는 의미를 벡터 공간에 표현 불가능하다는 단점을 가진다.

Word2Vec
자연어(단어)의 의미를 벡터 공간에 Embedding하여 주변 단어를 통해 단어 의미를 파악하는 모델이다.
단어에 대한 Dense Vector를 구할 수 있다.

단어간 유사도 측정, 관계 파악에 용이하며 벡터 연산을 통한 추론이 가능하다는 장점을 가진다.

하지만 단어의 Subword Infromation를 무시하고, OOV 문제 해결이 어렵다는 단점을 지닌다.
(OOV : Out Of Vocabulary. 학습이 진행될 때는 없던 단어가 Inference 때 나와 해당 단어를 인식하지 못하는 것)

FastText
Subword Information 활용하여 다양한 용언 표현을 동일한 Vocab에서 관리하는 기법을 말한다.

Word2Vec의 경우 다양한 용언 표현들이 독립된 Vocab으로 관리된다.
예를 들어Word2Vec은 Orange와 Oranges를 독립된 Vocab으로 관리한다.
하지만, Fasttext는 Orange와 s를 Vocab으로 관리하므로, Oranges = Orange + -s로 이해하게 되는 것이다.

중심 단어에서 주변 단어를 예측하는 방식을 활용하는데, 단어를 확인할 때 단어를 n-gram으로 나누어 학습을 진행한다.
즉, 단어를 n개씩 (알파벳으로) 쪼개서 확인한다는 것인데, n-gram으로 나눠진 단어는 Vocab에는 들어가지 않지만 n-gram Vector를 형성하게 된다.
n-gram으로 단어를 나눌 때 꺾쇠(<>)를 통해 n-gram에 포함되어 있다는 것을 명시해줘야 하는데, 이는 n-gram의 시작과 끝 부분을 나타내주기 위함이다.

Inference나 Train 과정에서 Vocab에 있을 경우 Word2Vec처럼 Word Vector를 Return하지만, OOV 문제가 발생할 경우 n-gram Vector들을 합산하여 해당 단어를 만든 이후 Return하는 방식을 활용한다.

오탈자, OOV, 등장 횟수가 적은 단어에 대해 강세를 보이는 알고리즘이다.

하지만, Word Embedding은 동형어, 다의어 등에 대해서는 Embedding 성능이 좋지 못하며 주변 단어를 통해 학습이 이루어지므로 문맥을 고려할 수는 없다는 단점이 존재하였고, 이런 단점을 해결하기 위하여 LM이라는 것이 등장했다.


LM(Language Model)

LM이란?

Word Embedding은 문맥을 고려할 수 없으므로 문맥을 고려할 수 있는 Embedding Algorithm이 필요했고, 이를 위해 나온 Model이 LM이다.

현재 State(Feature)를 활용하여 미래 State를 올바르게 예측하는 형식으로 학습이 가능해졌다.
(즉, Unsupervised Learning을 통해 학습이 가능해졌다)

Markov Chain Model(Markov 기반 언어 모델)

어절 단위로 단어를 쪼개고, N-gram 기반으로 다음에 나올 단어를 예측하는 모델로써, 특정 단어에 대해 다음 단어로 나올 확률이 존재하며, 이 확률에 기반하여 언어를 생성하는 것이다.

RNN 기반 언어모델

이전에 존재하는 모든 State 정보가 다음 State를 예측하는데 활용되는, 시계열 데이터 처리에 특화된 모델이다.

최종 출력은 앞선 단어들의 "문맥"을 고려해 만들어진 Context Vector로써 Context Vector에 Classification Layer를 붙이면 Classification Task에 활용하기도 했다.

Seq2Seq

  • Encoder Layer : RNN 구조를 활용해 Context Vector를 획득
  • Decoder Layer : Context Vector를 입력으로 출력(다음 단어)를 예측

RNN 구조의 문제점

입력 Sequence가 매우 길 경우 처음에 나온 Token에 대한 정보가 희석된다. 이를 Long-term Dependency 문제라고 한다.

모든 Token이 영향력을 가지므로 중요하지 않은 Token도 영향을 끼친다는 단점을 가지는 것이다.

또한 고정된 Context Vector 사이즈로 인해 긴 Sequence에 대한 정보를 함축하기 어렵다는 단점도 존재한다.
예를 들어 100 페이지가 있는데 20페이지로 무조건 요약하는 것은 매우 어려운 Task가 될 것이다.

이런 RNN 구조의 문제점을 해결하기 위해 Attention과 Transformer라는 Model이 등장했다.


한국어 토큰화

토큰화란?

Tokenizing(토큰화)란 주어진 데이터를 토큰(Token)이라 불리는 단위로 나누는 작업이다.

어절, 단위, 형태소, 음절, 자소 등 여러 기준으로 토큰화 가능하다.

한국어 토큰화

영어는 합성어와 줄임말 예외처리만 하면 잘 작동하지만, 한국어는 그렇지 않다.
한국어는 조사나 어미를 붙여 말을 만드는 교착어의 특징을 가지기 때문이다.
즉, 띄어쓰기만으로는 단어를 파악하는데 어려움을 지님

이러한 이유로 한국어에서는 "형태소"로 분리하여 Tokenizing을 수행하는 경우가 많다.

profile
개념부터 확실히!
post-custom-banner

0개의 댓글