텍스트 데이터 처리

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 Python 의 인기 머신러닝 라이브러리인 scikit-learn 을 사용하여 텍스트 데이터를 다루는 방법을 탐색합니다. 텍스트 데이터를 로드하고 전처리하며, 특징을 추출하고, 모델을 학습시키고, 성능을 평가하는 방법을 배울 것입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습용 Jupyter Notebook에 접근합니다.

때때로 Jupyter Notebook 이 로드되는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.

학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

텍스트 데이터 로드

먼저, 작업할 텍스트 데이터를 로드해야 합니다. 20 개의 서로 다른 주제의 뉴스 기사를 포함하는 20 개 뉴스그룹 (20 Newsgroups) 데이터셋을 사용할 것입니다. 데이터셋을 로드하려면 scikit-learn 의 fetch_20newsgroups 함수를 사용할 수 있습니다.

from sklearn.datasets import fetch_20newsgroups

## 데이터셋 로드
categories = ['alt.atheism', 'soc.religion.christian', 'comp.graphics', 'sci.med']
twenty_train = fetch_20newsgroups(subset='train', categories=categories, shuffle=True, random_state=42)

이제 데이터를 로드했으므로 데이터의 구조와 내용을 살펴볼 수 있습니다.

텍스트 데이터 전처리

머신러닝에 텍스트 데이터를 사용하기 전에 전처리가 필요합니다. 이는 구두점 제거, 모든 텍스트를 소문자로 변환, 텍스트를 개별 단어로 토큰화하는 등 여러 단계를 포함합니다. scikit-learn 의 CountVectorizerTfidfTransformer를 사용하여 이러한 전처리 단계를 수행할 수 있습니다.

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer

## 텍스트 데이터 전처리
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(twenty_train.data)

tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)

이제 텍스트 데이터가 전처리되어 특징 추출 준비가 완료되었습니다.

특징 추출

텍스트 데이터를 특징 벡터로 표현하기 위해 단어 빈도수 (bag of words) 표현을 사용할 수 있습니다. 이 표현은 학습 데이터셋의 각 단어에 고정된 정수 ID 를 할당하고 각 문서에서 각 단어의 출현 횟수를 계산합니다. scikit-learn 의 CountVectorizer를 사용하여 이러한 특징 벡터를 추출할 수 있습니다.

from sklearn.feature_extraction.text import CountVectorizer

## 특징 벡터 추출
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(twenty_train.data)

이제 특징 벡터를 추출했으므로 이를 사용하여 모델을 학습시킬 수 있습니다.

모델 학습

이제 특징 벡터를 얻었으므로 텍스트 데이터를 분류하는 모델을 학습시킬 수 있습니다. 이 예제에서는 텍스트 분류에 널리 사용되는 다항분포 나이브 베이즈 (Multinomial Naive Bayes) 알고리즘을 사용합니다.

from sklearn.naive_bayes import MultinomialNB

## 모델 학습
clf = MultinomialNB().fit(X_train_tfidf, twenty_train.target)

이제 모델이 학습되어 예측 준비가 완료되었습니다.

모델 평가

모델의 성능을 평가하기 위해 별도의 테스트 데이터셋을 사용합니다. 학습 데이터셋과 동일한 방법으로 테스트 데이터셋을 로드합니다.

twenty_test = fetch_20newsgroups(subset='test', categories=categories, shuffle=True, random_state=42)

이제 테스트 데이터셋을 전처리하고 특징 벡터를 추출합니다.

X_test_counts = count_vect.transform(twenty_test.data)
X_test_tfidf = tfidf_transformer.transform(X_test_counts)

마지막으로, 학습된 모델을 사용하여 테스트 데이터셋에 대한 예측을 수행하고 정확도를 계산합니다.

predicted = clf.predict(X_test_tfidf)
accuracy = np.mean(predicted == twenty_test.target)

요약

이 실습에서는 scikit-learn 을 사용하여 텍스트 데이터를 처리하는 방법을 배웠습니다. 텍스트 데이터를 로드하고, 전처리하여 특징 벡터를 추출하고, 모델을 학습시키고, 성능을 평가했습니다. 텍스트 데이터를 다루는 것은 어려울 수 있지만, scikit-learn 은 강력한 도구와 알고리즘을 제공하여 이 과정을 더욱 쉽게 만들어줍니다.