[파이썬] 자연어 처리를 위한 지도 학습과 비지도 학습

자연어 처리는 인간의 언어를 이해하고 처리하는 기술로, 컴퓨터가 자연어로 작성된 텍스트를 이해하고 분석할 수 있게 합니다. 자연어 처리는 많은 응용 분야에서 사용되며, 이를 위한 기술과 알고리즘은 계속해서 발전하고 있습니다. 이 중에서도 가장 널리 사용되는 학습 방법은 지도 학습과 비지도 학습입니다.

지도 학습 (Supervised Learning)

지도 학습은 레이블이 달린 입력 데이터를 사용하여 모델을 학습하는 방법입니다. 이 방법은 사전에 정의된 입력과 해당 출력의 관계를 학습하여 새로운 입력에 대한 출력을 예측하는 데 사용됩니다. 자연어 처리에서 지도 학습은 다양한 작업에 적용됩니다. 예를 들어, 텍스트 분류, 개체명 인식, 문장 감성 분석 등이 있습니다.

지도 학습을 위한 파이썬 라이브러리인 scikit-learn을 활용하여 자연어 처리 작업을 수행할 수 있습니다. 다음은 텍스트 분류를 위한 간단한 예제 코드입니다.

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline

# 데이터셋 로드
X_train = ["I love this movie", "This movie is great", "I dislike this movie", "This movie is terrible"]
y_train = ["positive", "positive", "negative", "negative"]

# 피쳐 벡터화 및 분류 모델 학습
pipeline = Pipeline([
    ('vectorizer', TfidfVectorizer()),
    ('classifier', MultinomialNB())
])
pipeline.fit(X_train, y_train)

# 새로운 입력에 대한 예측
X_test = ["I enjoy watching this movie"]
predicted = pipeline.predict(X_test)
print(predicted)

위 코드는 텍스트 분류를 위해 TfidfVectorizer를 사용하여 텍스트 데이터를 벡터화하고 MultinomialNB를 사용하여 분류 모델을 학습하는 과정을 보여줍니다.

비지도 학습 (Unsupervised Learning)

비지도 학습은 레이블이 없는 데이터를 사용하여 모델을 학습하는 방법입니다. 이 방법은 데이터의 구조, 패턴, 관계를 발견하고 해석하는 데 사용됩니다. 자연어 처리에서 비지도 학습은 텍스트 데이터를 클러스터링, 토픽 모델링, 단어 임베딩 등을 통해 구조화하는 데 활용됩니다.

비지도 학습을 위한 파이썬 라이브러리 중 하나인 gensim을 사용하여 텍스트 데이터를 토픽 모델링하는 예제 코드를 살펴보겠습니다.

from gensim.corpora import Dictionary
from gensim.models import LdaModel
from gensim import corpora

# 데이터셋 로드
documents = ["I love this movie", "This movie is great", "I dislike this movie", "This movie is terrible"]

# 문서를 토큰화하여 딕셔너리 생성
tokenized_docs = [doc.split() for doc in documents]
dictionary = Dictionary(tokenized_docs)
corpus = [dictionary.doc2bow(tokenized_doc) for tokenized_doc in tokenized_docs]

# LDA 모델 학습
lda_model = LdaModel(corpus=corpus, id2word=dictionary, num_topics=2, passes=10)

# 토픽 분포 확인
for idx, topic in lda_model.print_topics(-1):
    print(f'Topic: {idx}\nWords: {topic}\n')

위 코드는 gensim을 사용하여 텍스트 데이터의 토픽을 추출하는 과정을 보여줍니다. 문서를 토큰화하여 딕셔너리를 생성한 뒤, LdaModel 클래스를 사용하여 토픽 모델을 학습합니다. 각 토픽에는 해당하는 단어들이 출력됩니다.

결론

자연어 처리를 위한 지도 학습과 비지도 학습은 각각 텍스트 분류와 텍스트 구조화 등 다양한 작업에 사용됩니다. 이들의 조합과 다른 학습 방법들을 통해 보다 정교하고 효율적인 자연어 처리 시스템을 구축할 수 있습니다. 파이썬에서는 scikit-learngensim과 같은 오픈 소스 라이브러리들을 활용하여 자연어 처리 작업을 쉽게 수행할 수 있습니다.