4 부머신러닝 (Machine Learning) Text Mining
2 1 장텍스트마이닝및영문텍스트분석기법
문서분류 (Document Classification) 개본개념 분류 ( 예측 ) 모델 3
문서분류 (Document Classification) 누구의연설문인가? 4
자동분류시스템구성과정 데이터수집 데이터가공 분류모델구축 분류및평가 DB 구성 노이즈제거 데이터변환 5
문서를표현하는데이터모델 문서를직접적으로모델링못함 Vector Space Model Vector Space Model 텍스트문서를단어색인등의식별자로구성된벡터로표현하는모델 The Vector Space Model (VSM) is a way of representing documents through the words that they contain Each document is broken down into a word frequency table Each document is represented as a vector based against the vocabulary 6
Vector Space Model Document A A dog and a cat. Document B A frog. a dog and cat 2 1 1 1 a frog 1 1 The vocabulary contains all words used a, dog, and, cat, frog Document A: A dog and a cat. Vector: (2,1,1,1,0) Document B: A frog. Vector: (1,0,0,0,1) a and cat dog frog 2 1 1 1 0 a and cat dog frog 1 0 0 0 1 7
Text data loading Scikit-learn 의 load_files 기능 Load text files with categories as subfolder names text 와 label 을자동적으로붙여준특별 bunch 타입객체를반환 레이블은 subdirectrory 의알파벳순서에따라 0 부터숫자부여함 subdirectrory 에서만데이터를읽음. ( 바로아래파일들은무시 ) Bunch 리스트타입의 data 와 target 속성이부여되는데, data 는 text 파일하나당원소하나가입력되며, target 은 subdirectrory 의알파벳순서에따라 0, 1, 2,. 와같은 label 이부여됨 data: [file_1.txt, file_2.txt,, file_43.txt, file_44.txt, ] target: [0, 0, 0,, 1, 1, 1, ] 실제로는 random 하게 suffle 됨 8
Text data loading 예 ) 영어영화평예제링크 : http://ai.stanford.edu/~amaas/data/sentiment/./data./data/aclimdb./data/aclimdb/test./data/aclimdb/test/neg./data/aclimdb/test/pos./data/aclimdb/train./data/aclimdb/train/neg./data/aclimdb/train/pos 예 ) reviews_train = load_files("./data/aclimdb_v1/aclimdb/train") Data list: reviews_train.data./data/aclimdb/train/neg/ 와./data/aclimdb/train/pos/ 의 text 파일을들을읽어, 문자열형태의리스트구성 Target list: reviews_train.target./data/aclimdb/train/neg 와./data/aclimdb/train/pos 에는각각 0 과 1 을부여한리스트구성 9
Text data loading Shuffling 디렉토리구조 10
Text data loading Text data 중에서 <br /> 삭제 11
Text data loading 클래스별샘플수확인 np.bincount Count number of occurrences of each value in array of non-negative ints 12
Text data loading Full code 13
Bag Of Words(BOW) Vector Space Model로텍스트를표현하는방법 단어들의출현횟수로표현 과정 토큰화 (tokenization) 문서를공백이나구두점을기준으로단어 ( 토큰 ) 들로분리 어휘사전구축 모든문서에나타나는단어들을수집하여사전구축 인코딩 어휘사전의각단어가문서마다몇번나타나는가를계산하여벡터로표현 14
Bag Of Words 15
BOW 로표현하기 Scikit-learn 에서제공하는 BOW 표현라이브러리 CountVectorizer Term Frequency (TF) 문서집합으로부터단어의수를세어카운트행렬을생성 TfidfVectorizer Term Frequency - Inverse Document Frequency (TF-IDF) 문서집합으로부터단어의수를세고 TF-IDF 방식으로단어의가중치를조정한카운트행렬을생성 16
어휘사전생성및확인 17
BOW 생성 입력데이터에대한 BOW 는 transform method 를이용 "The fool doth think he is wise," "but the wise man knows himself to be a fool" 18
영화리뷰에대한 BOW 학습데이터의 BOW 생성및특성출력 19
영화리뷰에대한 BOW 학습데이터의 BOW 생성및특성출력 20
영화리뷰의분류성능평가 나이브베이즈이용 21
영화리뷰의분류성능평가 분류기법중의하나인 LogisticRegression 이용 22
영화리뷰의분류성능평가 LogisticRegression 과교차검증을이용한예 여기서는학습데이터만을갖고 5 개의그룹으로분리하여테스트함 23
차원수를축소한성능개선 전체문서에서각토큰이출현하는최소의문서개수를지정할수있음 자주등장하지않는토큰을제외하여특징수를줄임 CountVectorize의인자로 min_df를부여 (df는 document frequency의약자 ) 차원수 : 74,849 -> 27,271 로줄어듬 24
차원수를축소한성능개선 min_df = 5 를사용할경우의성능 분류정확도는개선되지않으나, 차원축소로인한실행시간단축효과 참고로 max_df 도설정가능. 너무자주출현하는단어도분류에는도움이안됨 25
LogisticRegression 을이용한 full code 26
성능개선 ( 불용어제거 ) 불용어 (stopwords) 의미없는단어 (eg. the, of, all 등 ) 불용어로인해분류가정확히되지않을수있으므로제거해야함 Scikit-learn에서는 feature_extraction.text에불용어목록을갖고있음 27
성능개선 ( 불용어제거 ) 28
TF-IDF(Term Frequency - Inverse Document Frequency) 단어를갯수그대로카운트하지않고모든문서에공통적으로들어있는단어의경우문서구별능력이떨어진다고보아가중치를축소하는방법 29
TF-IDF(Term Frequency - Inverse Document Frequency) 30
단어의쌍으로구성하는 n-gram 방식 단어쌍으로표현하면단어의순서나결합하는단어의의미를표현할수있음 하나의단어만으로표현한경우 31
단어의쌍으로구성하는 n-gram 방식 Bigram 32
단어의쌍으로구성하는 n-gram 방식 1-gram 부터 trigram 까지모두포함 33
고급토큰화 ( 어간추출 -stemming) 어간 (stem) 활용어가활용할때변하지않는부분 예 ) 보다, 보니, 보고 -> 보 먹다, 먹은, 먹고 -> 먹 drawer, drawing -> draw 어간추출 (stemming) 어미를제외하고어간만을추출하는방법 참고 고급토큰화의다른방법 ( 표제어추출 ) 사전이표준말을추출하는방법 ( 먹다, 보다등 ) 34
어간추출에필요한패키지설치 nltk() Natural Language Toolkit a platform for building Python programs to work with human language data 설치 pip install nltk http://www.nltk.org/ 그리고다음코드를수행하여사전을다운로드 ( 시간이다소소요 ) 설치시오류가발생할경우 JDK 가설치되어있지않거나, 또는 JAVA_HOME 환경변수미설정 35
Stemming test 단어별 stemming 36
Stemming test 문장전체를 stemming 37
Stemming test 38
Stemming 기능을추가한 BOW 생성 39
영문자만을추출 ( 숫자및구둣점제거 ) 구두점및하나의문자로구성된단어제거 CountVectorizer(token_pattern =u'(?u)\b\w\w+\b') unicode 단어끝 단어시작 두문자이상 ( 영단어또는숫자 ) 구두점제거의다른방법 import re # Use regular expressions to do a find-and-replace review_text = re.sub("[^a-za-z]", " ", review_text) 40
Full code 실행시간이다소소요됨 41
Full code 42
43 2 장한글텍스트처리기법
KoNLPy 다양한버전의한글형태소분석기를사용할수있도록도와주는도구 http://konlpy.org/ko/latest/ 설치절차 JDK 설치 JPype1 설치 64bit OS 의경우다음사이트에서 JPype1-0.6.2-cp36-cp36m-win_amd64.whl 을다운로드한후에설치 Konlpy 설치 https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype pip install JPype1-0.6.2-cp36-cp36m-win_amd64.whl pip install konlpy 44
KoNLPy 가지원하는형태소분석기종류 Hannanum Kkma Komoran Mecab Twitter 45
Sample 한글데이터 ( 영화평 ) ratings_train.txt ratings_test.txt 구분자는 tab 으로구별함 빈문자열을 NaN 으로저장하지않고빈문자열자체로저장 46
Sample 한글데이터 ( 영화평 ) 47
문자열과평점추출 48
사용예 49
트위터형태소분석기사용법 50
나이브베이즈를이용한 full code 51
나이브베이즈를이용한 full code 실행시간이오래소요됨텍스트처리는특징수가너무많아서이를줄이는노력이필요하다.( 차원축소, 특징선택기법이용 ) 52
53 3 장 WordCloud
WordCloud 설치 : pip install wordcloud
WordCloud 예제 55
WordCloud 예제 56
WordCloud 예제 (more options) 57
WordCloud 예제 (more options) 58
한글 WordCloud 59
한글 WordCloud 60
한글 WordCloud(more options) 61
한글 WordCloud(more options) 62