본문 바로가기

NPL with ML

(12)
Python 머신러닝, 한글 감정분석을 위한 리뷰 분석 : 프로그램부터 실전적용까지 (rhinoMorph이용 한국어 감정분석 관련하여 가장 많이 사용되고 있는 Naver Sentiment Movie Corpus에 대해 알아보겠습니다. 테스트 파일은 아래와 같습니다. 1. 데이터를 원하는 곳에 위치 리뷰는 data_text에 점수는 data_senti에 입력합니다. data_senti의 값이 1이면 긍정입니다. import os def read_data(filename): with open(filename, 'r', encoding="cp949") as f: data = [line.split('\t') for line in f.read().splitlines()] data = data[1:] return data data = read_data(r'C:\Users\HANA\PycharmProjects\HANATOU..
Python에서 SpaCy를 사용한 텍스트 분류를 위한 기계 학습 SpaCy 는 인기 있고 사용하기 쉬운 Python의 자연어 처리 라이브러리입니다. 정확도와 속도가 매우 높은 라이브러리이지만 상대적으로 새로운 NLP 라이브러리이기 때문에 NLTK 만큼 널리 채택되지 않고 있습니다. Spacy 수행을 위해 Data Sample은 아래와 같습니다. 1. Data 알아보기 error_bad_lines=False Option을 이용하여 문제가 되는 Line을 무시한다. import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt import base64 import string import re from collections import Counter from nltk...
텍스트 분석 실습 - Mercari Price Suggestion Challenge 관련 Raw Data를 내려받습니다. 약 100메가 정도됩니다. [링크] 데이타 전처리 관련 Library를 import하고 피처 타입과 Null여부를 확인하기 위해 info()를 실행합니다. from sklearn.linear_model import Ridge, LogisticRegression from sklearn.model_selection import train_test_split, cross_val_score from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer import pandas as pd mercari_df = pd.read_csv(r'C:\Users\HANA\PycharmProjects\HANATOU..
토픽 모델링 [Topic Modeling] - LDA기법 소스포함 토픽 모델링(Topic Modeling)이란 문서 집합에 숨어 있는 주제를 찾아내는 것입니다. 많은 양의 문서가 있을 때 사람이 이 문서를 다 읽고 핵심 주제를 찾는 것은 매우 많은 시간이 소모됩니다. 이 경우에 머신러닝 기반의 토픽 모델링을 적용해 숨어 있는 중요 주제를 효과적으로 찾아낼 수 있습니다. 사람이 수행하는 토픽 모델링은 더 함축적인 의미로 문장을 요약하는 것에 반해, 머신러닝 기반의 토픽 모델은 중심 단어를 통해 함축적으로 추출합니다. 머신러닝 기반의 토픽 모델링의 대표는 LSA(Latent Semantic Analysis)와 LDA(Latent Dirichlet Allocation)이 있습니다. LDA기법에 대한 예시를 보겠습니다. LDA는 Count기반의 벡터화만 적용이 됩니다. fro..
감성 분석 (Sentiment Analysis) - 비지도학습 기반, VADER 비지도 감성 분석은 Lexicon을 기반으로 합니다. 많은 감성 분석용 데이터는 이러한 결정된 레이블 값을 가지고 있지 않습니다. 이러한 경우에 Lexicon은 유용하게 사용될 수 있습니다. (검색을 통해 여러가지 한글 Lexicon을 찾아볼 수 있습니다.) 텍스트 분석(Text Analytics)을 하다보면 시맨틱(Semantic)이라는 용어를 자주 접하게 될 것입니다. '문맥상 의미'입니다. 이 문맥상 의미에 따라 동일한 단어라도 완전하게 달라지기 떄문에 제공되는 감성사전은 이 문맥을 파악하는데 가장 중점을 두고 있습니다. 감성사전을 위한 몇가지 사전은 하기와 같습니다. 1. NLTK: 시맨틱을 프로그램적으로 인터페이스화 할 수 있게 제공합니다. 제공되는 WordNet은 다양한 상황에서 같은 어휘라도..
감성 분석 (Sentiment Analysis) - 지도학습 기반 감성 분석에 있어 지도 학습은 학습 데이터와 타깃 레이블 값을 기반으로 감성 분석 학습을 수행한 뒤 이를 기반으로 다른 데이터의 감성 분석을 예측하는 방법으로 일반적인 텍스트 기반의 분류와 거의 동일합니다. 실습데이타는 이곳에서 다운로드합니다. [링크] labeledTrainData.tsv 이 화일을 다운로드하면 됩니다. 1. 화일 다운로드 후 불필요한 내용을 정리하기 위한 string 정리를 합니다. import pandas as pd import re review_df = pd.read_csv('C:\\Users\\HANA\\PycharmProjects\\HANATOUR\\NLP\\TEXT_Example\\labeledTrainData.tsv', header=0, sep="\t", quoting=3)..
문서 유사도 측정 - 코사인 유사도(Cosine Similarity)와 실전 연습 코드 문서와 문서 간의 유사도 비교는 일반적으로 코사인 유사도(Cosine Similarity)를 사용합니다. 코사인 유사도는 벡터와 벡터 간의 유사도를 비교할 때 벡터의 크기보다는 벡터의 상호 방향성이 얼마나 유사한지에 기반합니다. 즉 코사인 유사도는 두 벡터 사이의 사잇각을 구해서 얼마나 유사한지 수치로 적용한 것입니다. 코사인 유사도가 문서의 유사도 비교에 가장 많이 사용되는 이유는 문서를 피처 벡터화 변환하면 차원이 매우 많은 희소 행렬이 되기 쉽습니다. 이러한 희소 행렬 기반에서 문서와 문서 벡터간의 크기에 기반한 유사도 지표는 정확도가 떨어지기 쉽습니다. 또한 문서가 매우 긴 경우 단어의 빈도수도 더 많을 것이기 때문에 이러한 빈도수에만 기반해서는 공정한 비교를 할 수 없습니다. - 코사인 유사도(..
한글 텍스트 처리 위한 KoNLPy를 이용한 네이버 영화 평점 감정 분석 일반적으로 한글 언어 처리는 영어 등의 라틴어 처리보다 어렵습니다. 그 주된 원인은 '띄어쓰기'와 '다양한 조사'때문입니다. 잘 알다시피 한글은 띄어쓰기를 잘못하면 의미가 왜곡되어 전달될 수 있습니다. 또 하나 한글 언어 처리의 어려움은 '조사'처리입니다. 조사는 주어나 목적어를 위해 추가되며, 워낙 경우의 수가 많기 때문에 어근 추출(Stemming/Lemmatization)등의 전처리시 제거하기가 까다롭습니다. KoNLPy는 파이썬의 대표적인 한글 형태소 패키지입니다. 형태소의 사전적인 의미는 '단어로서 의미를 가지는 최소 단위'로 정의할 수 있습니다. 형태소 분석(Morphological Analysis)이란 말뭉치를 이러한 형태소 어근 단위로 쪼개고 각 형태소에 품사 태깅을 부탁하는 작업을 일반적..
문서 군집화 실전 예제 - Opinion Review Data Set 문서 군집화는 비슷한 텍스트 구성의 문서를 군집화(Clustering)하는 것입니다. 문서 군집화는 동일한 군집에 속하는 문서를 같은 카테고리 소속으로 분류할 수 있으므로 앞에서 소개한 텍스트 분류 기반의 문서 분류와 유사합니다. 하지만 텍스트 분류 기반의 문서 분류는 사전에 결정 카테고리 값을 가진 학습 데이터 세트가 필요한 데 반해, 문서 군집화는 학습 데이터 세트가 필요없는 비지도학습 기반으로 동작합니다. 예제는 UCI의 Opinion Review의 데이타를 이용합니다. 하기 화일을 다운로드 후 압축을 풀어도 됩니다. import pandas as pd import glob, os path = r'C:\\Users\\HANA\\PycharmProjects\\HANATOUR\\NLP\\TEXT_Exa..
텍스트 분류 실전 예제 - 뉴스그룹 분류 [추천시스템 구축을 위한 텍스트 분석 이해 #2 - BOW]에서 설명했듯 텍스트를 피처 벡터화로 변환하면 일반적으로 희소 행렬 형태가 됩니다. 그리고 이러한 희소 행렬에 분류를 효과적으로 잘 처리할 수 있는 알고리즘은 로지스틱 회귀, 선형 서포트 벡터 머신, 나이브 베이즈 등입니다. 텍스트를 기반으로 분류를 수행할 때는 먼저 텍스트를 정규화한 뒤 피처 벡터화를 적용합니다. 이 후 적합한 머신러닝 알고리즘을 적용해 분류를 학습/예측/평가합니다. 실습을 위해 사이킷런의 fetch_20newsgroups() API를 이용해 뉴스그룹의 분류를 수행해 볼 수 있는 예제 데이터를 Download합니다. from sklearn.datasets import fetch_20newsgroups from sklearn.fe..
추천시스템 구축을 위한 텍스트 분석 이해 #2 - BOW Bag of Words - BOW Bag of Words 모델은 문서가 가지는 모든 단어(Words)를 문맥이나 순서를 무시하고 일괄적으로 단어에 대해 빈도 값을 부여해 피처 값을 추출하는 모델입니다. Bag of Words란 단어들의 순서는 전혀 고려하지 않고, 단어들의 출현 빈도(frequency)에만 집중하는 텍스트 데이터의 수치화 표현 방법입니다. Bag of Words를 직역하면 단어들의 가방이라는 의미입니다. 단어들이 들어있는 가방을 상상해봅시다. 갖고있는 어떤 텍스트 문서에 있는 단어들을 가방에다가 전부 넣습니다. 그러고나서 이 가방을 흔들어 단어들을 섞습니다. 만약, 해당 문서 내에서 특정 단어가 N번 등장했다면, 이 가방에는 그 특정 단어가 N개 있게됩니다. 또한 가방을 흔들어서 단어를 ..
추천시스템 구축을 위한 텍스트 분석 이해 #1 텍스트 분석은 비정형 데이터인 텍스트를 분석하는 것입니다. ML모델은 주어진 정형 데이터 기반에서 모델을 수립하고 예측을 수행했습니다. 그리고 머신러닝 알고리즘은 숫자형의 피처 기반 데이터만 입력받을 수 있기 때문에 텍스트를 머신러닝에 적용하기 위해서는 비정형 텍스트 데이터를 어떻게 피처 형태로 추출하고 추출된 피처에 의미 있는 값을 부여하는가 하는 것이 매우 중요한 요소입니다. 텍스트를 word(또는 word의 일부분) 기반의 다수의 피처로 추출하고 이 피처에 단어 빈도수와 같은 숫자 값을 부여하면 텍스트는 단어의 조합인 벡터 값으로 표현될 수 있는데, 이렇게 텍스트를 변환하는 것을 피처 벡터화(Feature Vectorization)또는 피처 추출(Feature Extraction)이라고 합니다. 대..