[자연어 처리] 텍스트 데이터(text data)_1
0. 들어가면서
대부분 신경망이 원본을 입력르로 사용하지 못하는 것 처럼 텍스트도 텍스트 자체를 입력으로 사용할 수 없다. 딥러닝 모델은 수치형 텐서로만 다룰 수있다. 텍스트를 수치형 텐서로 변환하는 과정을 텍스트 벡터화(vectorizing text)라고 한다.
1. vectorizing text
텍스트 벡터화 하는 방법에는 크게 아래와 같이 3가지가 있다.
텍스트 => 단어 => 벡터
텍스트 => 문자 => 벡터
텍스트 => 단어나 문자의 n-그램 (연속된 단어나 문자를 하나씩 이동하면서 추출) => 벡터
위의 예를 보면 텍스트를 나누는 단위에는 단어, 문자, n-그램이 있음을 알 수 있다. 이런 단위(단어, 문자, n-그램)를 토큰이라 한다. 그리고 텍스트를 토큰으로 나누는 작업도 토큰화(tokenization) 이라고 한다. 정리하면 텍스트에 토큰화를 진행하면 수치형 벡터가 된다. 그리고 이러한 벡터가 시퀀스 텐서로 묶여져서 심층 신경망에 주입이 된다. 그리고 토큰과 벡터를 연결하는 방법에는 one-hot encoding 방법과 token embedding 방법이 있다. 각각의 설명과 코드는 아래의 링크를 타고 가서 보자.
즉, 핵심은 원본 텍스트를 케라스에서 사용할 수 있도록 넘파이 배열로 바꾸는 방법을 알아야 한다.
아래의 예시로 '텍스트=>토큰=>벡터'의 흐름을 파악해서 보자.
#텍스트
"The cat sat"
#=>토큰
"The", "cat", "sat"
#=>토큰의 벡터 인코딩
0.0 0.0 0.4
0.5 1.0 0.5
1.0 0.2 1.0
the cat sat
2. n-gram
n-gram은 순서가 없는 토큰화 방법인 BoW(Bag-of-Words)의 한 종류이다. 즉, 순서가 없는 토큰화 방법이기 때문에 시퀀스가 아니라 집합으로 간주되고, 딥러닝 모델보다 얕은 학습 방법의 언어 처리 모델에 사용된다. 쉽게 말해 옛날 방식이다. 그러나 로지스틱 회귀나 랜덤 포레스트 같은 얕은 학습 방법의 텍스트 처리 모델에서는 아주 강력하고 아주 유용한 방법임을 인지하자.
"The cat sat on the mat"이라는 문장을 2-gram과 3-gram으로 나눈 예를 보고 n-gram에 대해 이해를 해보자.
2-gram
{"The", "The cat", "cat", "cat sat", "sat", "sat on", "on", "on the".....}
3-gram
{"The", "The cat", "cat", "cat sat", "The cat sat", "sat", "sat on", "on", "cat sat on", "on the"}
쉽게 정리하면 단어 2개씩 세트로 만드는게 2-gram이고 3개씩 세트로 만드는게 3-gram이라고 생각하면 된다.
다음으로 할 내용은 [자연어 처리] 텍스트 데이터(text data)_2에서는 원 핫 인코딩을 구현해 볼 예정이다.