• mksong8

[데이터 분석] 머신러닝과 자연어 처리 (NLP)




이번 글에서는 인간의 언어를 이해하기 위해 어떻게 자연어 처리(NLP) 분석을 진행하는지 설명해 보겠습니다. ​ ​ | 자연어 처리(NLP, Natural Language Processing) ​ NLP란 인간의 언어를 이해, 분석, 계산하여 인간의 언어를 생성해 내는 머신러닝의 한 분야입니다. ​ ● 실생활에서의 NLP ​ - 정보 검색 (Google은 관련성이 높고 유사한 결과를 찾습니다.) - 정보 추출 (Gmail은 이메일의 이벤트를 구성합니다.) - 번역 (Google은 자동으로 번역을 해 줍니다.) - 텍스트 단순화 (Rewordify는 문장의 의미를 단순화합니다.) - 감정 분석 (뉴스는 저자의 논조가 포함되어 있습니다.) - 텍스트 요약 (Smmry 또는 Reddit의 autotldr은 문장을 요약해 줍니다.) - 스팸 필터 (Gmail은 스팸 메일을 필터링해 줍니다.) - 자동 예측 (Google은 사용자 검색 결과를 예측해 줍니다.) - 자동 고침 (Google은 문법을 자동으로 수정해 줍니다.) - 음성 인식 (Google WebSpeech, Vocalware가 있습니다.) - 자동 응답 (IBM Watson의 답변 기능이 있습니다.) - 자연어 생성 (이미지 또는 영상에서 언어를 텍스트화) ​ ​ NLTK: NLTK는 파이썬의 오픈소스 패키지입니다. NLP 작업을 쉽게 할 수 있도록 여러 가지 기능을 제공합니다. ​ NLTK 설치와 임포트 하기 ​ NLTK 응용프로그램을 설치하면 Stopwords Corpus를 이용해 반복되는 단어를 제거하는 데 도움이 됩니다. 다른 유용한 프로그램도 제공됩니다. ​



| 데이터 세트 살펴보기텍스트 데이터를 읽고 정리해야 하는 이유는 무엇일까요? ​ 데이터에는 구조화된 형식, 비구조화된 형식과 이 두 가지 형식의 중간인 반구조화된 형식의 데이터가 있습니다. 반구조화된 형식의 데이터는 해석에 어려움이 많이 때문에 판다스를 이용하겠습니다. ​ ​ | 데이터 정제 ​ 머신 러닝으로 텍스트를 분석하려면 데이터 정제는 꼭 필요합니다. 일반적으로 데이터 정제는 다음과 같은 단계로 진행합니다. ​ 1. 문장부호 제거 ​ 문장부호는 문장의 의미와 맥락을 이해하는 데 도움이 됩니다. 그러나 단어를 벡터화하고 단어 수를 세기 위해 제거되어야 합니다. 예) 안녕? -> 안녕 ​ 2. 토큰화 ​ 토큰화란 텍스트를 문장이나 단어를 각각 분리하는 것을 말합니다. 토큰화 단계를 마치면 텍스트가 단어 단위로 분리된 것을 확인할 수 있습니다. ​ 3. 불용어 제거 ​ 불용어는 많이 등장하는 단어를 말합니다. 분석과 관계없이 많이 등장하는 단어이므로 제거합니다. 예) 또는, 위해, 하다 ​ ​ - 어간 추출 ​ 어근을 중심으로 규칙에 기반하여 단어를 요약하여 개수를 줄일 수 있습니다. 동일한 규칙을 적용하기 때문에 문제가 생기는 경우가 간혹 있습니다. ​ ​ - Lemmatizing (정리) ​ Lemmatizing은 단어를 정규형(‘lemma’)으로 정리합니다. 사전 기반으로 데이터를 정제할 경우에는 stemming 어간 추출 방식이 유리합니다. ​ 간단히 설명하면, 단어의 문맥을 이해하지 않고 단어의 끝을 자르는 형태소 분석이 일반적으로 더 속도가 빠릅니다. Lemmatizing은 단어의 맥락을 고려하여 분석을 하기 때문에 느리지만 더 정확합니다. ​ ​ | 벡터화 ​ 벡터화는 머신러닝 알고리즘이 데이터를 이해할 수 있도록 텍스트를 연속형 변수로 인코딩 합니다. ​ - 단어 가방 Bag-Of-Words ​ 단어 가방, CountVectorizer는 텍스트 내 단어의 빈도수를 계산합니다. 문장에서 특정 단어가 존재하면 1, 그렇지 않으며 0을 가지게 됩니다. ​ - N-그램 ​ N 그램은 길이가 n인 인접한 단어의 모든 조합을 말합니다. 길이가 1인 죽, n=1인 N-그램을 유니그램이라고 합니다. bigrams (n=2), trigrams (n=3) 도 있습니다. N-그램이 길수록 많은 컨텍스트를 다뤄야 합니다. N-그램 정보는 문서 행렬에 저장됩니다. ​ - TF-IDF ​ 단어가 문서에 나타나는 '상대 빈도'를 계산합니다. 단어의 중요도를 알기 위한 방법으로 '용어 빈도'보다 유용하게 사용됩니다. 검색 엔진의 순위 계산, 텍스트 요약, 문서 클러스터링에 사용됩니다. TF-IDF 정보는 문서 행렬에 저장됩니다. ​ - Feature Engineering ​ Feature Engineering은 머신 러닝 알고리즘을 위해 해당 도메인 지식을 활용하여 Feature를 만들어내는 과정을 말합니다. ​ ● 성능 확인 ​ 두 데이터 셋의 단어 수 분포를 알 수 있습니다. 두 데이터 셋은 비슷한 문장 부호수를 갖고 있으나 비율에서 약간의 차이가 있습니다. ​



| 머신 러닝 분류 모델 선택 ​ 여러 모델을 사용하는 머신 러닝의 앙상블 방법을 사용하며 단일 모델 (Support Vector Machine / Naive Bayes)보다 좋은 결과를 만들어 보겠습니다. 앙상블 방법은 많은 Kaggle Competition에서도 최우선으로 사용됩니다 랜덤 포레스트 모델이 구축되고 각각의 의사결정 나무 모델은 최종 예측에 이용됩니다. 회귀분석과 분류 문제에도 이용됩니다. 무작위 배깅 전략을 따릅니다. ​ 그리드 검색 : 주어진 그리드에서 전체 파라미터의 조합을 모두 검색하여 최고의 모델을 만들어 냅니다. ​ 교차 검증 : 데이터 세트를 K 개로 나누고 테스트를 K 번 반복합니다. ​ 포레스트의 수가 150이고 결정 트리의 최대 수준이 90일 때 최고의 결과를 보여주었습니다. ​ ​ 향후 과제: GradientBoosting, XgBoost를 사용할 수도 있으나 GradientBoosting의 적용에 시간이 너무 많이 걸려 제외하였습니다. GradientBoosting은 결과가 좋지 않은 학습자를 결합하여 강력한 학습자를 만들기 때문에 시간이 많이 걸립니다. 병렬 방식이 아닌 순차적 방식을 따르기 때문입니다. ​ ​ | 분류 모델 생성 ​ NLP 작업을 수행하여 머신 러닝 분류기 모델을 생성해 보았습니다. 구현한 랜덤 포레스트 모델은 97.7 %의 정확도를 보여 주었습니다.

조회 73회

​고객센터

Tel: 02-596-8900  Fax : 02-6930-5709

10시 - 오후 7시(토, 일요일 및 공휴일은 휴무)

개인정보관리책임자 : 황재준   상호 : 유펜솔루션   대표자 : 김재훈   사업자등록번호 : 426-86-00939
주소 : (본사)대전광역시 유성구 엑스포로446번길 38, 3층 302호 / (지사 및 연구소)서울시 성동구 연무장 15길 11, B동 2층
​ⓒ 2019 UpennSolution Co., Ltd. All rights reserved.