이 글은 파이썬 텍스트 마이닝 완벽 가이드를 읽고 작성되었습니다.
텍스트 마이닝은 정확히 무엇을 뜻하는 것일까요? 일단 제 생각을 풀어보겠습니다. 우선 '텍스트(text)'는 어떠한 문장, 글 등을 지칭하는 것 같고요. '마이닝(mining)'은 'minecraft'에서도 쓰인 'mine'에서 온 것 같습니다. 다시 말해 텍스트에서 무언가를 채광한다는 뜻인 거죠.
저자가 위키피디아에서 찾은 뜻도 비슷합니다. 위키피디아에서는 '텍스트 마이닝'을 '텍스트에서 고품질 정보를 추출하는 과정'이라고 정의하고 있습니다. 여기에서 고품질 정보는 텍스트로부터 패턴이나 트랜드를 분석해서 추출 정보를 의미합니다.
즉, 텍스트 마이닝은 텍스트에 숨어 잇는 패턴을 이용해 어떤 사건을 예측하는 것으로 정리할 수 있습니다.
그렇다면 어떻게 이런 패턴을 찾을 수 있을까요? 위키피디아에서는 이 질문에 대해 '통계적 패턴 학습'이라고 답했는데, 최근 가장 주목을 받는 머신러닝이 이에 해당한다고 합니다. 그러나 머신러닝은 정형적 데이터(structured data)를 대상으로 하는 방법론이므로 비정형적인 텍스트에 대해 바로 적용할 수 없습니다.
그렇다면 어떤 작업이 먼저 수행되어야 할까요? 바로 비정형 텍스트 데이터를 정형화하는 작업이 필요합니다. 이에는 다양한 자연어 처리 기법이 활용됩니다.
다시 말해 텍스트 마이닝은 '자연어 처리 기법'을 이용해 텍스트를 정형화된 데이터로 변환하고, 머신러닝 기법을 적용하여 관심있는 어떤 사건을 예측하고자 하는 방법입니다.
정형화된 데이터?
텍스트로부터 변환된 정형화된 데이터는 어떤 형태를 말하는 것일까요? 대부분의 경우, 이 데이터는 '일정한 길이의 벡터'를 말합니다. 여기에서 '일정하다'는 것은 주어진 텍스트에 따라 늘거나 줄지 않고 항상 같은 길이로 변환된다는 뜻입니다. 또한 벡터는 하나의 값이 아니라 차원의 수만큼의 여러 개의 값으로 구성됨을 의미합니다.
정형화?
예를 들어 "우리는 나보다 강합니다"와 같은 텍스트가 있다고 할 때, 이를 [3, 7, 4, 2, 5]와 같은 파이썬 리스트의 형태로 변환한 것을 '정형화'한다고 할 수 있습니다. 이렇게 되면 연속형 변수가 5개인 문제가 되어 대부분의 머신러닝 방법론을 정의할 수 있게 됩니다.
임베딩?
위와 같이 주어진 텍스트를 일정한 길이의 값으로 변환하는 것을 임베딩이라고 합니다.
기존에는 카운트 기반 방식 혹은 BOW 등의 방식을 사용했지만, 이제는 트렌스포머에 기반한 모형인 BERT를 쓰는 것이 일반화 되었다고 합니다.
그렇다면 카운트 기반 방식이나 BOW는 이제 쓸 일이 없는 것일까요? 꼭 그렇지는 않다고 합니다. 책 한 권 분량의 내용에 대해서 문서를 분류할 때에는 여전히 카운트 기반의 문서 표현이 BERT와 같은 최신 모형보다 낫다는 연구결과가 있다고 합니다.
그러면 잠시만요. 카운트 기반의 문서 표현은 무엇을 말하는 거죠?
텍스트 마이닝에서 주어진 텍스트를 정형화된 데이터로 변환하기 위해서는 텍스트를 이해하는 것이 중요할 것입니다. 사람은 문장을 순서대로 읽으면서 문맥을 파악하고 내용을 이해합니다. 하지만 딥러닝이 나오기 이전의 컴퓨터는 이러한 방식대로 내용을 이해할 수 있는 방법이 없었습니다. 따라서 나온 기법이 카운트 기반 문서 표현입니다.
카운트 기반 문서 표현은 문장에 있는 단어의 개수를 세고, 주로 사용한 단어들을 이용해 그 문장의 내용을 파악하는 것에 기반을 둡니다. 이에 따라 문서를 사용된 단어들의 빈도로 표현합니다. 이 과정에서 문맥에 대한 정보는 사라지고, 통계만이 남게 됩니다.
앗, 그렇다면 문맥에 대한 정보가 사라진다면 문제가 발생하지 않을까요?
아닙니다. 텍스트 마이닝의 원래 목적을 떠올려봅시다. 바로 '텍스트 내용을 기반으로 어떤 사건을 예측하는 것'이었죠. 이 정도의 정보 만으로도, 단어 빈도들을 이용하여 우리가 원하는 많은 작업들을 어느 정도 잘 수행할 수 있습니다.
시퀀스 기반의 문서 표현은 카운트 기반 문서 표현의 문제점-문맥 정보가 사라짐-을 해결하고, 사람이 글을 읽고 이해하는 것과 유사한 방법으로 텍스트의 문맥을 이해하고자 하는 방법입니다. 시퀀스 기반의 문서 표현은 1)각 단어를 먼저 벡터로 표현하고, 2)이러한 벡터의 연속된 나열 혹은 시퀀스로 문서를 표현합니다.
그렇다면 어떻게 벡터로 변환할 수 있을까요? 가장 쉬운 방법은 1)단어를 일정 규칙에 따라 정렬하고 2)단어 수만큼의 벡터를 만든 후 단어 3)자신의 위치만 1로 표현하는 것입니다. (이를 원핫 인코딩이라고 합니다.)
이렇게 하면 문제가 있습니다. 원인은 텍스트 마이닝이 하나의 문서가 대상이 아닌, 수많은 문서의 집합을 다룸에 있습니다. 즉, 단어를 벡터로 변환했을 때 변환했을 때 벡터가 지나치게 커지는 문제가 발생하는거죠. 따라서 이를 특별한 과정을 거쳐 긴 벡터를 길이가 보통 200 정도인 짧은 벡터로 변환하는데, 이러한 과정을 임베딩이라고 합니다.
임베딩? 위에서 나온 것과 같은 거 아닌가요?
아닙니다. 앞서 문서를 벡터로 변환하는 것은 '문서 임베딩', 긴 벡터를 짧은 벡터로 변환하는 것을 '워드 임베딩'이라고 칭합니다.
| 단어 | 뜻 |
|---|---|
| 문서 | 하나의 일관된 목적 혹은 주제를 갖고 쓰여진 글 |
| 문장 | 생각이나 감정을 말로 표현할 때 완결된 내용을 나타내는 최소 단위 |
| 텍스트 | 분석이 대상이 되는 문자열. 문서, 문장 등 길이를 가리지 않음 |
| 말뭉치(Corpus) | 언어 연구를 위해 컴퓨터가 텍스트를 가공/처리/분석할 수 있는 형태로 모아 놓은 자료의 집합. 또는 자연언어 연구를 위해 특정한 목적을 가지고 언어의 표본을 추출한 집합 |
텍스트 마이닝은 자언어 처리, 데이터 분석 및 시각화, 통계학, 머신러닝, 딥러닝 등 다양한 학문의 결합체라고 할 수 있다.
자언어 처리는 '컴퓨터를 이용해 사람의 자연어를 분석하고 처리하는 기술'로 요약 됩니다. 사실 자연어 처리를 넓게 보면, 텍스트 마이닝의 개념을 포함한다고 볼 수 있습니다. 이 책에서는 자연어 처리 기법 중 '전처리 기법'들을 활용하고자 합니다. 이러한 방법론은 텍스트를 전처리해 다양한 분석을 할 수 있는 형태로 변환하는 데 적용됩니다. 즉, 텍스트를 일정 길이의 벡터로 변환하기 위해 쓰이는 기법들이라고 할 수 있습니다.
앞으로 텍스트 전처리를 위한 기법으로 토큰화, 어간 추출과 표제어 추출과 같은 정규화, 그리고 품사 태깅에 대해 실습할 예정이며, 관련 자연어 처리 라이브러리는 NLPK, KoNLPy를 사용합니다.
텍스트로부터 고품질의 정보를 추출하는 데에는 다양한 통계적 분석방법이 쓰입니다. 회귀분석, SVM과 같은 머신러닝 방법론을 이해하기 위해서는 통계학에 대한 지식을 필요로 합니다. 또한 대용량이 데이터를 다루기 위해서는 행렬도 이해해야 합니다. 텍스트를 일정 길이의 '벡터'로 변환하고 다루어야 하는데, 이는 모두 선형대수의 영역에 속한다고 볼 수 있습니다.
그러나 통계학과 선형대수에 대한 깊은 지식이 없어도, 행렬에 대한 기본적인 연산과 구조를 이해하는 것 만으로도 텍스트 마이닝을 배우는 데에 큰 불편함은 없을 수 있다고 합니다.
행렬 연산과 관련해서는 Numpy와 CSV 형태로 된 텍스트 데이터를 쉽게 처리할 수 있는 Pandas를 활용한다고 합니다.
시각화는 전달하고자 하는 내용을 한눈에 쉽게 알아보게 하기 위해 사용합니다. 텍스트 마이닝과 관련해서는 막대그래프와 워드클라우드 같은 기법이 가장 많이 사용됩니다.
이 책에서는 그래프 등에 가장 많이 사용되는 matplotlib과 seaborn을 사용합니다.
머신러닝은 인공지능의 한 분야로 사람의 직접적 지시 없이 컴퓨터가 학습을 통해 문제를 해결하게 하는 알고리즘이나 통계적 모형에 관한 연구를 뜻합니다. 즉, 문제 해결 방법을 코딩으로 구현하는 것이 아닌, 공통적인 알고리즘을 데이터에 적용해 학습시켜 주어진 데이터에 적합한 문제해결 방안을 생성하는 방식입니다.
기계학습은 크게 1)지도학습(Supervised Learning), 2)비지도학습(Unsupervised Learning), 3)강화학습(Reinforcement Learning)으로 나뉩니다. 지도학습은 회귀와 분류로 나뉘며, 비지도학습은 클러스터링과 차원축소로 나뉩니다.
텍스트 마이닝에서는 지도학습의 분류 방법이 많이 사용되며, 상황에 따라 클러스터링과 차원축소 같은 방법이 사용되기도 합니다.
이 책에서는 Scikit-learn을 사용합니다.
딥러닝은 머신러닝의 한 분류에 속하는 인공신경망에서 은닉층을 깊게 쌓은 신경망 구조를 활용해 학습하는 알고리즘을 뜻합니다. 초기에는 RNN, LSTM, CNN 등의 비교적 단순하고 쉬운 방법론이 사용되었다면, 지금은 트랜스포머에 기반한 BERT, GPT 등의 복잡한 기법을 사용합니다. 둘은 전이학습, 또는 트랜스퍼 러닝이라고 해서 이미 학습된 모형을 이용하므로 학습의 부담도 크게 줄어들었습니다. 학습이 된 모형에 대해 나의 데이터를 이용해 미세조정학습을 수행하면 되는데, 이는 전체학습에 비해 자원의 소모가 훨씬 덜하다고 합니다.
딥러닝에서 가장 많이 사용되는 라이브러리는 Keras와 PyTorch입니다.
문서 분류는 주어진 문서에 대해 미리 정의된 클래스로 분류하는 작업을 뜻합니다. 예를 들어 문서의 내용이 호의적인지, 비호의적인지를 알아내는 것도 넓게 보면 문서 분류에 속합니다.
문서 생성은 사람이 쓴 것과 유사한 문장을 만들어내는 작업을 의미합니다. 다른 텍스트 마이닝 작업들이 주어진 입력이 있다면 해당 작업은 입력 데이터가 없습니다. 대신 시드(출발점)를 줄 수는 있습니다.
문서 요약은 주어진 문서에서 중요하고 흥미 있는 내용을 추출해 요약문을 생성하는 작업을 의미합니다. sequence-to-sequence 문제의 예로, 시퀸스 형태의 입력을 받아, 비록 길이는 훨씬 짧지만 다시 시퀸스 형태로 출력합니다.
질의응답은 주어진 문장을 읽고 문제에 대해 올바른 답을 생성하는 작업으로 공학적으로는 문서 요약과 유사하다고 볼 수 있습니다. 질의응답 또한 sequence-to-sequence 문제에 속합니다.
기계번역은 자연어 처리를 발견하게 한 출발점인 동시에 그와 같은 관점에서 볼 때 가장 중요한 분야이기도 합니다. 기계 번역은 '자연어 이해'를 전제로 합니다.
sequence-to-sequence 모형이 처음 도입 된 분야이며, 이 분야의 연구와 발전 덕분에 딥러닝 기법이 발전했다고 볼 수 있다고 합니다.
토픽 모델링은 여러 문서에서 공통으로 등장하는 토픽(주제)을 추출하는 방법으로, 다수의 문서에 잠재된 내용을 파악하는 데 활용됩니다. 해당 기법은 머신러닝과 딥러닝 기법을 사용한 것과 달리 통계에 기반한 방법론을 사용했으나, 점차 딥러닝을 활용한 방법론도 개발되고 있다고 합니다.