SlideShare a Scribd company logo
1 of 154
Download to read offline
LDA와 3개월 함께한 자연어처리 시행착오기
코어닷 투데이에서 자연어처리를 하고 있는 도승헌입니다.
오늘 발표에 관하여
+ 3개월 동안 진행한 공공정보 알림서비스 개발기
+ 제품화를 위한 Auto-tagging Process
- 너무 디테일한 수식 정리 ( 깁스 샘플링 & Variational Inference과정, 디리클레 프로세스 등등 )
- 요즘 핫한 Word2vec, Doc2Vec
3개월 동안 진행한 공공정보 알림 서비스 개발기
Project Process
Understand
Current Service
User Research
Problem Define &
Solution
Development Visualization
Iteration
서비스 현황 : 관보 | 국가가 국민에게 알릴 사항을 발행하는 국가의 공고기관지
헌법개정·법률·조약·대통령령·총리령 및 부령의 공포와 헌법개정안·예산 및 예산외국고부담계약의 공고 수단입니다.
서비스 현황
대한민국 전자관보 사이트에 가면, 문서 종류, 날짜, 그리고 검색을 기반으로 정보에 접근 할 수 있습니다.
서비스 현황 : 하루 평균 74개의 관보가 발행됩니다.
헌법, 법률, 조약, 대통령령, 총리령, 부령, 훈령, 고시, 공고, 국회, 법원, 헌법재판소, 선거관리위원회, 인사국가인권위원회, 감사원,
지방자치단체, 상훈, 기타를 기반으로 Categorize 되어있습니다.
사용자들이 필요한 정보가 전달되는가?
사용자들이 필요한 양의 정보가 전달되는가?
사용자들이 필요한 질의 정보가 전달되는가?
사용자들이 필요한 정보에 접근이 효율적인가?
Customize
Information
Accessability
Information
Overload
Representative
Index
Information
Ineffectiveness
Notification
Problem
Solution
Ideation : Keyword Tagging
관보의 내용을 대표하는 주제를 찾아주자
- 문서집합 내부 정보로 모델링
- 주제는 숨어져 있는 latent한 요소
- Unsupervised & Clustering
관보의 내용을 연관된 산업을 찾아주자
- 산업이라는 외부의 정보를 가지고 있어야한다.
- 관보문서는 Classifier를 제작하는 feature를 제공한다.
- Supervised & Classification
Hypothesis : 숨겨진 패턴이 있을 것이다!
Government
- Department
Industry
Unfounded Pattern
User input
UserGwanbo
Industry
Definition
Topic
Development Process
Documents
Publish
Data Collect
PDF2Text
Data Base
MongoDB
Topic Modeling
LDA
Documents
Clasiffication-ML
Web
Application
My contribution
Data input : 아주 더러운 한글문서…
Data Input : 1년치 하면 14342개…
저 문서를 어떻게 표현해야하지??
데이터 분석을 위한 자연어 처리의 시작
Data Representation : 우리의 관보를 표현해보자
문단 안에 문장
(word Sentence)
문서 안에는 문단
(word Sentence)
문장안에 어절
(word phrase)
Data Representation : 우리의 관보를 표현해보자
그리고 어절 안에는 품사 ( part of speech )
한국어의 품사 체계는 5언 9품사로 되어있습니다.
품사란 단어를 문법적 성질의 공통성에 따라 몇 갈래로 묶어 놓은 것입니다.
https://ratsgo.github.io/korean%20linguistics/2017/04/21/wordclass/
문서를 품사 단위로 쪼개 버리고!
선형 자료 구조에 단어들을 넣어서 문서를 표현하자!
그런데 품사 단어를 그대로 넣으면, 정성적인 카테고리 데이터
정량화 시킬 순 없어?? 그러면 벡터로 표현이 되겠는데?
단어에는 의미가 Mapping 되어있을테니
그러면 단어가 등장하면 문장 내에 의미가 생기겠군!
= 빈도(frequency)를 기반으로 정량화 시키자!
Term-Documents Matrix (Local Representation)
“나는 학교에 간다”
“학교에 가는 영희”
“나는 영희가 좋다”
Term-Context Matrix (Co-Occurrence Matrix)
“I enjoy flying”
“I like NLP”
“I like deep learning”
토큰의 수만큼 feature space가 늘어난다.
그래서 분산표상하는 Word2vec이 엄청 핫합니다.
Feature engineering의 필요성!
Term-document matrix로 문서를 표현해 보자!
그런데 내 문서에는 이상한 애들이 많아..
Data input : 아주 더러운 한글문서…
Data input : 아주 더러운 한글문서…
목표는 문장을 대표하는 Keyword를 찾는 것!
문장의 의미를 이해하는데 필요 없는 요소들을 제거해 보자!
자연어 전처리의 시작
준비사항 : 내가 처리하고 싶은 한글 문서의 list 형태
리스트 안에는 (문장 단위 or 문단 단위가 좋을 듯!)
' 도로법 시행령 을 개정하는 데에 있어, 그 개정이유와 주요내용을 국민에게 미리 알려 이에 대한 의견을 듣기 위하여 행정절차법 제41조에 따라 다음과 같
이 공고합니다. 2017년 3월 16일 국토교통부장관 도로법 시행령 일부개정령(안) 입법예고 1. 개정이유 도로법 제68조 도로점용료 감면조항에「영유아보육법」
제2조제3호에 따른 어린이집 또는「유아교 육법」제2조제2호에 따른 유치원(민간어린이집과 민간유치원)에 출입하기 위하여 통행로로 사용하는경우가 신설
되었기에 이에 대한 하위법령을 마련하고자 함2. 주요내용 가. 도로점용료 감면 대상 추가(안 제73조제3항제1호가목) ㅇ 도로법 제68조(점용료 징수의 제한)
제9호 “「영유아보육법」제2조제3호에 따른 어린이집 또는「유아교육법」제2조제2호에 따른 유치원에 출입하기 위하여 통행로로 사용하는 경우” 신설에 따른
하위법령 마련 나. 도로점용료에 대한 경과규정 명확화(안 부칙 제6조) ㅇ 영 제27751호 도로법 시행령 일부개정령안 부칙 제6조에서 규정한 도로점용료에
대한 경과규정을 명확하게 하여 행정업무상 혼란 예방 3. 의견제출 이 개정안에 대해 의견이 있는 기관 단체 또는 개인은 2017년 3월 20일까지 통합입법예
고센터 (http://opinion.lawmaking.go.kr)를 통하여 온라인으로 의견을 제출하시거나, 다음 사항을 기재한 의견서를 국토교통부장관에게 제출하여 주시기 바
랍니다. 가. 예고 사항에 대한 찬성 또는 반대 의견(반대 시 이유 명시) 나. 성명(기관ㆍ단체의 경우 기관ㆍ단체명과 대표자명), 주소 및 전화번호다. 그 밖의
참고 사항 등※ 제출의견 보내실 곳 - 일반우편 : (30103) 세종특별자치시 도움6로 11 국토교통부 도로운영과- 전자우편 : jwsuh@korea.kr- 전화 : 044-201-
3920 / 팩스 : 044-201-5591'
혹시라도 mongodb가 안 익숙한 분들을 위해
우리를 도와줄 오픈소스 라이브러리
환경변수 지정입니다
가상환경
사실상 필요한 설치코드
~ pip install genism
~ pip install Jpype1
~ pip install konlpy
목표는 문장을 대표하는 Keyword를 찾는 것!
문장의 의미를 이해하는데 필요 없는 요소들을 제거해 보자!
1. 숫자 & 특수문자 & 영어
정규 표현식 : input을 문장을 요소로 하는 list형태의 문서로 받는다.
1. re.compile 을 이용하여 정규표현식( )을 컴파일하고 컴파일된 패턴객체를 제작
2. sub 메서드를 이용하면 정규식과 매치되는 문장 내 단어를st 공백 문자로 변환시킴.
3. String.strip() 매서드를 이용하여 문자열 양쪽에 있는 한 칸 이상의 연속된 공백들을 모두 지운다.
4. 잘린 단어들을 다시 docs3라는 빈 list에 append 시켜주자.
https://wikidocs.net/4308
그런데 문장 내에 모든 품사가 필수적인 문장의 의미를 형성하는 건가?
맞다 이분도 영어 지문
다 읽지 말라고 하시더라.
체언(명사,대명사), 용언(동사/형용사),
수식언 (관형사, 부사, 조사, 감탄사)
품사를 알아보자: 과연 문장의 의미를 좀더 대표하는 품사가 뭐지?
고인물이 되어버린 도승헌이 코어닷 테크 세미나에서 열심히 발표를 한다.
고인물이 되어버린 도승헌이 코어닷 테크 세미나에서 열심히 발표를 한다.
고인물이 되어버린 도승헌이 코어닷 테크 세미나에서 열심히 발표를 한다.
목표는 문장을 대표하는 Keyword를 찾는 것!
문장의 의미를 이해하는데 필요 없는 요소들을 제거해 보자!
1. 숫자 & 특수문자 & 영어
2. 품사 태깅을 통한 수식언, 독립언, 형식형태소 제거
품사태깅을 해보자. coredottext
1. 코어닷 투데이에서 만든 자연어처리 모듈, 하지만 아직 배포는 못했어요
2. unistAAA로 사용이 가능합니다.
3. Pos 태깅기능이 제공됩니다.
Bucket! 여기에 우리 문서 데이터를 넣어주시면 됩니다!
일반명사, 고유명사, 동사, 형용사
(NNG,NNP,VV,VA)
~ bin.tag_to_list : 문서에 품사를 태깅하고, 태깅한 문서를 list형태로 변환
??? 불용어를 제거 해야 합니다.
길이가 1이면 제거 해야 합니다.
Coredottext 어떤 기능이 있나요??
https://coredottoday.github.io/2018/09/08/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC/
https://www.slideshare.net/lucypark/py-con-2014-38531830
https://www.slideshare.net/lucypark/nltk-gensim?from_action=save
https://lovit.github.io/nlp/2018/04/01/pos_and_oov/
자바여도 파이썬에서 쓰고싶어
Konlpy!
~ pip install Jpype1
~ pip install konlpy
불용어? Stopword? : 분석에 큰 의미를 가지지 못하지만 빈출하는 단어
쓸모 없는 단어는 없다. 특정한 환경에 필요가 없다.
1. 도메인 지식을 활용하여 찾기
2. 전체 문헌집단의 관점에서 빈출하는 단어를 찾아서 없애자
불용어? Stopword?
쓸모 없는 단어는 없다. 특정한 환경에 필요가 없다.
1. 도메인 지식을 활용하여 찾기
2. 전체 문헌집단의 관점에서 빈출하는 단어를 찾아서 없애자
데이터가 나쁘지 않다면 굳이
제거할 필요는 없다
200개 문서
(Documents corpus)
160799개 단어
(word - term)
Term-document matrix로 문서를 표현해 보자!
음 아직 Categorical data인 단어와
그 단어의 list 로 구성된 문서
그 문서의 list형태야 (문서집합)
Term-document matrix로 문서를 표현해 보자!
음 아직 Categorical data인 단어와
그 단어의 list 로 구성된 문서
그 문서의 list형태야 (corpus, 말뭉치)
Term-document matrix로 문서를 표현해 보자!
Categorical data인 단어
단어가 품사단위로 쪼개져서,
혹은 너무 잘게 쪼개진 친구가 있지 않을까?
일반적인 연어collocation 에 대해서 처리를 못하지 않을까?
연어를 잡기 위한 단어 단위의 Bigram
품사 태깅에서 놓치게 되는 요소들을 잡아줍니다
빈번하게 같이 나오는 용어들을 하나로 묶어줍니다.
체언과 용언 사이의 관계가 명확한 것을 잡아줍시다.
160799개 단어
(word - term)
사전으로 만들어주자
그런데 우리는 중복된 단어도 포함되어 있고
단어의 frequency도 파악을 못했구나!
Dictionary (token string – id int)
Doc1 = (1,1,1,1,0,1,1,0)
Doc2 = (1,2,1,1,0,1,0,1)
Vector Representation
Local Representation
Spare matrix
Term-Documents Matrix (Local Representation)
어떤 형태로 mapping되었는가?
총 unique한 토큰이 몇개있는가?
(feature space)
Term-Documents Matrix (Local Representation)
문서의 고유성이 중요한 목적이라면
Filter_extremes를 통해 관보 전체에 사용되는
단어들을 제거해야한다.
- 너무 일반적인 주제
- 관보 전체 문서의 양식
Term-Documents Matrix (Local Representation)
Corpus 문헌 전체 집합을 나타냄
문서의 관점에서 (token id - frequency)를 표현함
드디어 만들었다 Term-documents matrix!
Term-Documents Matrix (Local Representation)
Doc1 = (1,1,1,1,0,1,1,0)
Doc2 = (1,2,1,1,0,1,0,1)
Vector Representation
Local Representation
Spare matrix
Gensim Dictionary
Corpus
Pos tagging & Stopword (Preprocessing)
Gensim.doc2.bow
Save & Load Data
1289개 unique한 토큰이 (단어)
202개의 문서에 존재한다. (문서)
0번째 문서를 조회했을 때,
0이라는 단어는 이 문서에 1번
1이라는 단어는 이 문서에 2번
2이라는 단어는 이 문서에 3번
3이라는 단어는 이 문서에 1번
4이라는 단어는 이 문서에 1번 등장함
Term-document matrix로 문서를 표현해 보자!
성공! 그런데 이걸로 뭐하지??
Ideation : Keyword Tagging
관보의 내용을 대표하는 주제를 찾아주자
- 문서집합 내부 정보로 모델링
- 주제는 숨어져 있는 latent한 요소
- Unsupervised & Clustering
여태까지는 단어, 문서를 표현하는 방식을 이야기했었다.
그렇다면 문헌집단을 표현하는 방법이 무엇이 있을까?
왜? 문헌집단의 관점에서 개별 문서를 본다면,
전체와 개별자의 관계를 나타낼 수 있을 것이다.
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
Assumption
문헌을 여러 개의 주제를 포함할 수 있다.
주제에는 여러 개의 단어가 포함될 수 있다.
문헌에 사용된 단어 하나하나는 어떤 주제에 포함된다.
글을 쓰는 과정
1. 먼저 문헌에 어떤 주제들이 들어갈지를 대략 생각해 놓는다. (문헌의 주제 분포 결정)
2. 주제들 중에서 하나를 고른다. (주제 선정)
3. 주제들에 포함된 단어들 중에서 하나를 고른다. (단어 선정)
4. 그 단어를 문헌에 추가한다.
5. 2로 돌아가 반복
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
문헌의 수 주제의 수
문헌에 속한 단어의 수
φ: 주제의 단어 분포 (topic-term)
(총 φ1~φK까지 K개의 단어 분포가 있을 겁니다)
θ: 문서의 주제 분포 (doc-topic)
(총 θ1~θd까지 D개의 주제 분포가 있겠죠.)
Z : 단어의 주제 분포 (term-topic)
( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다)
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
확률 생성 모형 (Generative Model)
특정 확률 분포와 그 파라미터가 있다고 가정할때,
특정한 Process에 의해서 데이터를 생성한다.
LDA
이미 관찰된 단어를 가지고, 단어가 주어졌을때,
주제가 assign될 확률을 계산하고,
전체 데이터에 대해
이때 P(Z|W)를 극대화 시키는 Z 를 찾는 과정
Z를 알면 나머지 θ, φ 는 찾기 쉽지!
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
A d번째 문서가 k번째 토픽과 맺고 있는 연
관성 정도
B d번째 문서의 n번째 단어(Wd,n)가 k번째 토
픽과 맺고 있는 연관성 정도
직접 한번 짜보자!
참된 머신러닝 엔지니어라면
모형정도는 math만 가지고 짜야지!
그래서 제가 아직 머신러닝 엔지니어가 아닌가봐요....
간단하게 시작한는 LDA
일단 파라미터 잠시 남겨두고
LDA로 무엇을 할 수 있나요?
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
문헌의 수 주제의 수
문헌에 속한 단어의 수
φ: 주제의 단어 분포 (topic-term)
(총 φ1~φK까지 K개의 단어 분포가 있을 겁니다)
θ: 문서의 주제 분포 (doc-topic)
(총 θ1~θd까지 D개의 주제 분포가 있겠죠.)
Z : 단어의 주제 분포 (term-topic)
( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다)
φ: 주제의 단어 분포 (topic-term)
주제 별 어떤 단어가 등장할 확률!
근데 하나의 주제만 볼 수 없을까?
φ: 주제의 단어 분포 (topic-term)
하나의 주제에 대해서 등장 확률이 높은 단어의 ID
ID값이 계산 효율은 좋은 건 알지만, 뭔지 궁금해!
φ: 주제의 단어 분포 (topic-term)
Print_topics는
주제 – 확률 – 단어
셋다 알려준다.
좀더 좋은 시각화는 없을까?
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
도로교통부의
건축과 관련된 주제구나
주제에 대한 해석은 사람이 추측해야한다!
도메인 지식이 필요한 이유!
도로 교통부 공무원과 코워킹하면 좋겠다,,,, 건축가나,,,
내가 잘하는건지,,, 에라이
더 정확히는 토픽이 주어졌을때 단어가 발생할 확률인 P(w|t)
1. salience P(w|t)
한 토픽의 키워드라면, 각 토픽에 속한 많은 문서들에서 등장해야 합
니다. 즉 P(w|t) 가 커야 합니다.
2. Discriminative power
하지만 그러면 너무 일반적인 단어들이 많이 등장하게 되겠죠
때문에 토픽 대비 자주 등장한다면 그 중요도를 낮추겠다는
패널티를 P(w|t)를 P(w)로 나누면서 적용했습니다. (IDF)
그리고 빈출단어와 특수단어를 나누는 것이 바로 Lamdba
https://lovit.github.io/nlp/2018/09/27/pyldavis_lda/
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
도로교통부의
건축과 관련된 주제구나
좀더 주제에 속하면서 관보 개별 문서에
특수단어들이 나오게 된다
Estimated term frequency within the selected topic
이 올라 가는 걸 확인할 수 있다.
그래 그러면 이제 문헌집단 전체의 관점이 아니라
문서 개별의 관점에서 LDA를 보자!
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
문헌의 수 주제의 수
문헌에 속한 단어의 수
φ: 주제의 단어 분포 (topic-term)
(총 φ1~φK까지 K개의 단어 분포가 있을 겁니다)
θ: 문서의 주제 분포 (doc-topic)
(총 θ1~θd까지 D개의 주제 분포가 있겠죠.)
Z : 단어의 주제 분포 (term-topic)
( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다)
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
θ: 문서의 주제 분포 (doc-topic)
(총 θ1~θd까지 D개의 주제 분포가 있겠죠.)
Corpus[1]은 1번과 4번 Topic이 지배적이군요!
θ: 문서의 주제 분포 (doc-topic)
(총 θ1~θd까지 D개의 주제 분포가 있겠죠.)
그래 그러면 이제 문서의 관점이 아니라
단어 개별의 관점에서 LDA를 보자!
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
문헌의 수 주제의 수
문헌에 속한 단어의 수
φ: 주제의 단어 분포 (topic-term)
(총 φ1~φK까지 K개의 단어 분포가 있을 겁니다)
θ: 문서의 주제 분포 (doc-topic)
(총 θ1~θd까지 D개의 주제 분포가 있겠죠.)
Z : 단어의 주제 분포 (term-topic)
( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다)
Z : 단어의 주제 분포 (term-topic)
( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다)
도로가 mapping된 ID값은 60입니다.
Z : 단어의 주제 분포 (term-topic)
( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다)
도로라는 term은 2번 토픽에
가장 빈번하게 등장하는 군요!
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
2번 토픽을 보니 있긴
하지만 음..
정말 잘 만들어진 모형인가?
뭔가 잘못한것 같은데....
그런데 파라미터를 저렇게 막 놔도 괜찮은건가?
최적점인게 확실해?
어떤 LDA가 좋은 LDA인가?
Measure?
조금 더 Advance로!
햇갈린다면 위에 꺼 가지고도 괜찮다!
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
Log perplexity is estimated every that many updates
그렇다면 coherence와 perplexity는?
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
그렇다면 무엇이 변할 때의 coherence와 perplexity를 찾아야할까?
관보의 내용을 대표하는 주제를 찾아주자
- 문서집합 내부 정보로 모델링
- 주제는 숨어져 있는 latent한 요소
- Unsupervised & Clustering
우리가 궁금한 것
= 주제 (를 대표하는 단어분포)
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
문헌의 수 주제의 수
문헌에 속한 단어의 수
φ: 주제의 단어 분포 (topic-term)
(총 φ1~φK까지 K개의 단어 분포가 있을 겁니다)
θ: 문서의 주제 분포 (doc-topic)
(총 θ1~θd까지 D개의 주제 분포가 있겠죠.)
Z : 단어의 주제 분포 (term-topic)
( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다)
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
사실 요놈만 알아도
Latent factor를
해석할 순 있다.
그 다음에 모형이 잘 작동하는지 최적에 수렴하는지를 봐야하지 않나?
= iteration!
Pass가 50 쯤에서 coherence도 가장 높고 perplexity 도 수렴하네!
50으로 고정하고 Topic number를 변화시켜보자!
토픽 개수 증가에 따라
급감하는 coherence
(높아야 좋다고 했는데!)
토픽 개수 증가에 따라
급증하는 perplexity
(낮아야 좋다고 했는데!)
토픽 개수 증가에 따라
급감하는 coherence
(높아야 좋다고 했는데!)
토픽 개수 증가에 따라
급증하는 perplexity
(낮아야 좋다고 했는데!)
Topic 10개로 선택하겠습니다!
LDA 모델을 만들었더니,
Topic : 주제를 대표하는 단어
Doc : 문서를 대표하는 주제
두가지를 알게 되었다.
그러면
Goal : 문서 내 단어와, 주제를 대표하는 단어를
문서 내 assign된 주제의 확률로 관계를 만들어주자
1. Doc을 대표하는 확률이 높은 주제를 뽑는다. (doc-topic)
2. 확률이 높았던 주제에 대해서 단어 분포를 받는다. (topic-term)
3. 상위 확률 단어와, Doc에 있는 단어를 비교한다. (topic-term & doc-term)
4. 교집합을 문서의 index로 tagging
이런
문제가 있다.
1. Doc을 대표하는 확률이 높은 주제를 뽑는다. (doc-topic)
2. 확률이 높았던 주제에 대해서 단어 분포를 받는다. (topic-term)
3. 상위 확률 단어와, Doc에 있는 단어를 비교한다. (topic-term & doc-term)
4. 교집합을 문서의 index로 tagging
φ: 주제의 단어 분포 (topic-term)
등장이 확률이 높다고
그 문서를 대표하는건 아니다
음 전체를 얼마나 잘
표현하는가? 일반적인가?
잠재디리클레할당(Latent Dirichlet Allocation, LDA)
람다로 Topic_term 분포를
바꿀 순 없을까?
φ: 주제의 단어 분포 (topic-term)
Gensim아 relevance 계산해서
리턴해주는건 있니?
그런거 없다 돌아가라
직접 한번 짜보자!
참된 머신러닝 엔지니어라면
모형정도는 math만 가지고 짜야지!
아 이건아니고..
내가 모른다 – 라이브러리 다큐먼트를 본다 – 소스코드를 본다
마지막으로 내가 짠다
내가 어플리케이션을 만든다면?
내가 모른다 – 라이브러리 다큐먼트를 본다 – 소스코드를 본다
마지막으로 내가 짠다
스택오버플로 스택오버플로 스택오버플로스택오버플로
스택오버플로
스택오버플로
스택오버플로스택오버플로
스택오버플로
남이 직접 짠걸 찾는다 - 내가 짠다 – 라이브러리 다큐먼트를 본다 – 소스코드를 본다
마지막으로 내가 모른다
내가 모형공부 중 이라면?
Source code를 보자..
Topic_term_dists, doc_topic_dists, doc_lengths
의 원형 데이터를 구하면 되겠다!
원형 데이터를 만질려면 다시 sparse matrix로
원형 데이터를 만질려면 다시 sparse matrix로
원형 데이터를 만질려면 다시 sparse matrix로
원형 데이터를 만질려면 다시 sparse matrix로
원형 데이터를 만질려면 다시 sparse matrix로
원형 데이터를 만질려면 다시 sparse matrix로
관보문서의 일반성에 집중해서 키워드를 받아낼 수 있다.
관보문서의 특수성에 집중해서 키워드를 받아낼 수 있다.
관보문서의 특수성에 집중해서 키워드를 받아낼 수 있다.
관보문서의 특수성에 집중해서 키워드를 받아낼 수 있다.
마무리
• 문서 집합을 정량화 하는 방법을 살펴보았다.
• Gensim을 Dictionary객체를 만들어보고 Corpus로 문서를 표현해 보았다.
• Gensim을 통해 LDA객체를 만들어 보았고 모델 아키텍처를 데이터로 받아보았다.
• LDA 파라미터 튜닝 도전!
• LDA를 가지고 auto-tagging한번 해보았다.
혹시나 자연어 처리에 관심있는 분들을 위해
• https://ratsgo.github.io/blog/categories/
• https://bab2min.tistory.com/568?category=673750
• https://www.lucypark.kr/courses/2015-dm/text-mining.html
• http://solarisailab.com/about
• https://lovit.github.io/nlp/2018/04/01/pos_and_oov/
• http://cs224d.stanford.edu/syllabus.html
• https://adeshpande3.github.io/adeshpande3.github.io/Deep-Learning-Research-Review-Week-3-Natural-Language-Processing
• http://lxmls.it.pt/2014/socher-lxmls.pdf
• https://media.wix.com/ugd/142eb4_7581cfcf090e4e31a52599315f77c648.pdf
문과도 했는데 못할 것 없다.
한걸음 나아가면 남에게 도움이 될 수도 있다.
(물론 꼰대도 될 수 있다!)
LDA와 3개월 함께한 자연어처리 시행착오기

More Related Content

What's hot

[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?
[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?
[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?ssuseraf7587
 
한국어 자연어처리 101
한국어 자연어처리 101한국어 자연어처리 101
한국어 자연어처리 101Junyoung Park
 
LDA : latent Dirichlet Allocation (Fairies NLP Series) - Korean Ver.
LDA : latent Dirichlet Allocation (Fairies NLP Series) - Korean Ver.LDA : latent Dirichlet Allocation (Fairies NLP Series) - Korean Ver.
LDA : latent Dirichlet Allocation (Fairies NLP Series) - Korean Ver.Adonis Han
 
[추천] 색인기법 김성현
[추천] 색인기법 김성현[추천] 색인기법 김성현
[추천] 색인기법 김성현Young-jun Jeong
 
제3장 색인어 추출을 위한 언어학적 처리
제3장 색인어 추출을 위한 언어학적 처리제3장 색인어 추출을 위한 언어학적 처리
제3장 색인어 추출을 위한 언어학적 처리Chang-yong Jung
 

What's hot (12)

파이썬을 활용한 자연어분석 기초
파이썬을 활용한 자연어분석 기초파이썬을 활용한 자연어분석 기초
파이썬을 활용한 자연어분석 기초
 
[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?
[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?
[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?
 
파이썬과 자연어 3 | 문장구조
파이썬과 자연어 3 | 문장구조파이썬과 자연어 3 | 문장구조
파이썬과 자연어 3 | 문장구조
 
파이썬을 활용한 자연어 분석
파이썬을 활용한 자연어 분석파이썬을 활용한 자연어 분석
파이썬을 활용한 자연어 분석
 
한국어 자연어처리 101
한국어 자연어처리 101한국어 자연어처리 101
한국어 자연어처리 101
 
자연어1 | 1차강의
자연어1 | 1차강의자연어1 | 1차강의
자연어1 | 1차강의
 
LDA : latent Dirichlet Allocation (Fairies NLP Series) - Korean Ver.
LDA : latent Dirichlet Allocation (Fairies NLP Series) - Korean Ver.LDA : latent Dirichlet Allocation (Fairies NLP Series) - Korean Ver.
LDA : latent Dirichlet Allocation (Fairies NLP Series) - Korean Ver.
 
Pycon2017 koreannlp
Pycon2017 koreannlpPycon2017 koreannlp
Pycon2017 koreannlp
 
[추천] 색인기법 김성현
[추천] 색인기법 김성현[추천] 색인기법 김성현
[추천] 색인기법 김성현
 
제3장 색인어 추출을 위한 언어학적 처리
제3장 색인어 추출을 위한 언어학적 처리제3장 색인어 추출을 위한 언어학적 처리
제3장 색인어 추출을 위한 언어학적 처리
 
파이썬을 활용한 자연어 분석 - 추가분
파이썬을 활용한 자연어 분석 - 추가분파이썬을 활용한 자연어 분석 - 추가분
파이썬을 활용한 자연어 분석 - 추가분
 
제5장 사전파일
제5장 사전파일제5장 사전파일
제5장 사전파일
 

Similar to CoreDot TechSeminar 2018 - Session3 Doh Seungheon

Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Taekyung Han
 
<Little Big Data #1> 한국어 채팅 데이터로 머신러닝 하기
<Little Big Data #1> 한국어 채팅 데이터로  머신러닝 하기<Little Big Data #1> 한국어 채팅 데이터로  머신러닝 하기
<Little Big Data #1> 한국어 채팅 데이터로 머신러닝 하기Han-seok Jo
 
GloVe:Global vectors for word representation
GloVe:Global vectors for word representationGloVe:Global vectors for word representation
GloVe:Global vectors for word representationkeunbong kwak
 
1910 tfkr3 warnikchow
1910 tfkr3 warnikchow1910 tfkr3 warnikchow
1910 tfkr3 warnikchowWarNik Chow
 
3주차 language
3주차 language3주차 language
3주차 language준혁 이
 
Brief hystory of NLP and Word2Vec
Brief hystory of NLP and Word2VecBrief hystory of NLP and Word2Vec
Brief hystory of NLP and Word2VecSilverQ
 
2주차: 뉴스 빅데이터 분석을 위한 자연어처리 이론
2주차: 뉴스 빅데이터 분석을 위한 자연어처리 이론2주차: 뉴스 빅데이터 분석을 위한 자연어처리 이론
2주차: 뉴스 빅데이터 분석을 위한 자연어처리 이론Daemin Park
 
Natural Language Processing.pptx
Natural Language Processing.pptxNatural Language Processing.pptx
Natural Language Processing.pptxYongHeeHan10
 
웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data
웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data
웹의 또 다른 모습, 글로벌 데이터베이스 Linked open dataHansung University
 
Linked open data
Linked open dataLinked open data
Linked open dataToby Yun
 
Hadoop 기반 문서 검색
Hadoop 기반 문서 검색Hadoop 기반 문서 검색
Hadoop 기반 문서 검색치완 박
 
자연어처리 소개
자연어처리 소개자연어처리 소개
자연어처리 소개Jin wook
 
2009 DevC Seongnam - NLP
2009 DevC Seongnam - NLP2009 DevC Seongnam - NLP
2009 DevC Seongnam - NLPWarNik Chow
 
Natural Language Processing(NLP) - Basic
Natural Language Processing(NLP) - BasicNatural Language Processing(NLP) - Basic
Natural Language Processing(NLP) - BasicKyeongUkJang
 
Word 2 Vec Algorithm
Word 2 Vec AlgorithmWord 2 Vec Algorithm
Word 2 Vec AlgorithmHyeongmin Lee
 

Similar to CoreDot TechSeminar 2018 - Session3 Doh Seungheon (20)

Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차
 
Nlp word2vec
Nlp word2vecNlp word2vec
Nlp word2vec
 
<Little Big Data #1> 한국어 채팅 데이터로 머신러닝 하기
<Little Big Data #1> 한국어 채팅 데이터로  머신러닝 하기<Little Big Data #1> 한국어 채팅 데이터로  머신러닝 하기
<Little Big Data #1> 한국어 채팅 데이터로 머신러닝 하기
 
Topic models
Topic modelsTopic models
Topic models
 
GloVe:Global vectors for word representation
GloVe:Global vectors for word representationGloVe:Global vectors for word representation
GloVe:Global vectors for word representation
 
1910 tfkr3 warnikchow
1910 tfkr3 warnikchow1910 tfkr3 warnikchow
1910 tfkr3 warnikchow
 
3주차 language
3주차 language3주차 language
3주차 language
 
Brief hystory of NLP and Word2Vec
Brief hystory of NLP and Word2VecBrief hystory of NLP and Word2Vec
Brief hystory of NLP and Word2Vec
 
2주차: 뉴스 빅데이터 분석을 위한 자연어처리 이론
2주차: 뉴스 빅데이터 분석을 위한 자연어처리 이론2주차: 뉴스 빅데이터 분석을 위한 자연어처리 이론
2주차: 뉴스 빅데이터 분석을 위한 자연어처리 이론
 
Natural Language Processing.pptx
Natural Language Processing.pptxNatural Language Processing.pptx
Natural Language Processing.pptx
 
웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data
웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data
웹의 또 다른 모습, 글로벌 데이터베이스 Linked open data
 
Linked open data
Linked open dataLinked open data
Linked open data
 
Hadoop 기반 문서 검색
Hadoop 기반 문서 검색Hadoop 기반 문서 검색
Hadoop 기반 문서 검색
 
자연어처리 소개
자연어처리 소개자연어처리 소개
자연어처리 소개
 
2206 Modupop!
2206 Modupop!2206 Modupop!
2206 Modupop!
 
DS_04
DS_04DS_04
DS_04
 
2009 DevC Seongnam - NLP
2009 DevC Seongnam - NLP2009 DevC Seongnam - NLP
2009 DevC Seongnam - NLP
 
Natural Language Processing(NLP) - Basic
Natural Language Processing(NLP) - BasicNatural Language Processing(NLP) - Basic
Natural Language Processing(NLP) - Basic
 
Word 2 Vec Algorithm
Word 2 Vec AlgorithmWord 2 Vec Algorithm
Word 2 Vec Algorithm
 
1.sos2010 tony
1.sos2010 tony1.sos2010 tony
1.sos2010 tony
 

More from Core.Today

Data analysis with python - for Ulsan science high school teachers
Data analysis with python - for Ulsan science high school teachersData analysis with python - for Ulsan science high school teachers
Data analysis with python - for Ulsan science high school teachersCore.Today
 
Python basic grammer
Python basic grammerPython basic grammer
Python basic grammerCore.Today
 
[울산과학고 SW/STEAM] 1주차 - 데이터 시각화 방법론 및 사례
[울산과학고 SW/STEAM] 1주차 - 데이터 시각화 방법론 및 사례[울산과학고 SW/STEAM] 1주차 - 데이터 시각화 방법론 및 사례
[울산과학고 SW/STEAM] 1주차 - 데이터 시각화 방법론 및 사례Core.Today
 
CoreDot TechSeminar 2018 - Session4 Park Eonyong
CoreDot TechSeminar 2018 - Session4 Park EonyongCoreDot TechSeminar 2018 - Session4 Park Eonyong
CoreDot TechSeminar 2018 - Session4 Park EonyongCore.Today
 
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCore.Today
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCore.Today
 

More from Core.Today (6)

Data analysis with python - for Ulsan science high school teachers
Data analysis with python - for Ulsan science high school teachersData analysis with python - for Ulsan science high school teachers
Data analysis with python - for Ulsan science high school teachers
 
Python basic grammer
Python basic grammerPython basic grammer
Python basic grammer
 
[울산과학고 SW/STEAM] 1주차 - 데이터 시각화 방법론 및 사례
[울산과학고 SW/STEAM] 1주차 - 데이터 시각화 방법론 및 사례[울산과학고 SW/STEAM] 1주차 - 데이터 시각화 방법론 및 사례
[울산과학고 SW/STEAM] 1주차 - 데이터 시각화 방법론 및 사례
 
CoreDot TechSeminar 2018 - Session4 Park Eonyong
CoreDot TechSeminar 2018 - Session4 Park EonyongCoreDot TechSeminar 2018 - Session4 Park Eonyong
CoreDot TechSeminar 2018 - Session4 Park Eonyong
 
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji DonghyunCoreDot TechSeminar 2018 - Session2 Ji Donghyun
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park Jihun
 

CoreDot TechSeminar 2018 - Session3 Doh Seungheon

  • 1. LDA와 3개월 함께한 자연어처리 시행착오기
  • 2. 코어닷 투데이에서 자연어처리를 하고 있는 도승헌입니다.
  • 3. 오늘 발표에 관하여 + 3개월 동안 진행한 공공정보 알림서비스 개발기 + 제품화를 위한 Auto-tagging Process - 너무 디테일한 수식 정리 ( 깁스 샘플링 & Variational Inference과정, 디리클레 프로세스 등등 ) - 요즘 핫한 Word2vec, Doc2Vec
  • 4. 3개월 동안 진행한 공공정보 알림 서비스 개발기
  • 5.
  • 6.
  • 7. Project Process Understand Current Service User Research Problem Define & Solution Development Visualization Iteration
  • 8. 서비스 현황 : 관보 | 국가가 국민에게 알릴 사항을 발행하는 국가의 공고기관지 헌법개정·법률·조약·대통령령·총리령 및 부령의 공포와 헌법개정안·예산 및 예산외국고부담계약의 공고 수단입니다.
  • 9. 서비스 현황 대한민국 전자관보 사이트에 가면, 문서 종류, 날짜, 그리고 검색을 기반으로 정보에 접근 할 수 있습니다.
  • 10. 서비스 현황 : 하루 평균 74개의 관보가 발행됩니다. 헌법, 법률, 조약, 대통령령, 총리령, 부령, 훈령, 고시, 공고, 국회, 법원, 헌법재판소, 선거관리위원회, 인사국가인권위원회, 감사원, 지방자치단체, 상훈, 기타를 기반으로 Categorize 되어있습니다.
  • 12. 사용자들이 필요한 양의 정보가 전달되는가? 사용자들이 필요한 질의 정보가 전달되는가? 사용자들이 필요한 정보에 접근이 효율적인가?
  • 13.
  • 15.
  • 16. Ideation : Keyword Tagging 관보의 내용을 대표하는 주제를 찾아주자 - 문서집합 내부 정보로 모델링 - 주제는 숨어져 있는 latent한 요소 - Unsupervised & Clustering 관보의 내용을 연관된 산업을 찾아주자 - 산업이라는 외부의 정보를 가지고 있어야한다. - 관보문서는 Classifier를 제작하는 feature를 제공한다. - Supervised & Classification
  • 17. Hypothesis : 숨겨진 패턴이 있을 것이다! Government - Department Industry Unfounded Pattern User input UserGwanbo Industry Definition Topic
  • 18. Development Process Documents Publish Data Collect PDF2Text Data Base MongoDB Topic Modeling LDA Documents Clasiffication-ML Web Application My contribution
  • 19.
  • 20. Data input : 아주 더러운 한글문서…
  • 21. Data Input : 1년치 하면 14342개…
  • 22. 저 문서를 어떻게 표현해야하지?? 데이터 분석을 위한 자연어 처리의 시작
  • 23. Data Representation : 우리의 관보를 표현해보자 문단 안에 문장 (word Sentence) 문서 안에는 문단 (word Sentence) 문장안에 어절 (word phrase)
  • 24. Data Representation : 우리의 관보를 표현해보자 그리고 어절 안에는 품사 ( part of speech ) 한국어의 품사 체계는 5언 9품사로 되어있습니다. 품사란 단어를 문법적 성질의 공통성에 따라 몇 갈래로 묶어 놓은 것입니다. https://ratsgo.github.io/korean%20linguistics/2017/04/21/wordclass/
  • 25. 문서를 품사 단위로 쪼개 버리고! 선형 자료 구조에 단어들을 넣어서 문서를 표현하자!
  • 26. 그런데 품사 단어를 그대로 넣으면, 정성적인 카테고리 데이터 정량화 시킬 순 없어?? 그러면 벡터로 표현이 되겠는데?
  • 27. 단어에는 의미가 Mapping 되어있을테니 그러면 단어가 등장하면 문장 내에 의미가 생기겠군! = 빈도(frequency)를 기반으로 정량화 시키자!
  • 28. Term-Documents Matrix (Local Representation) “나는 학교에 간다” “학교에 가는 영희” “나는 영희가 좋다”
  • 29. Term-Context Matrix (Co-Occurrence Matrix) “I enjoy flying” “I like NLP” “I like deep learning”
  • 30. 토큰의 수만큼 feature space가 늘어난다. 그래서 분산표상하는 Word2vec이 엄청 핫합니다. Feature engineering의 필요성!
  • 31. Term-document matrix로 문서를 표현해 보자! 그런데 내 문서에는 이상한 애들이 많아..
  • 32. Data input : 아주 더러운 한글문서…
  • 33. Data input : 아주 더러운 한글문서… 목표는 문장을 대표하는 Keyword를 찾는 것! 문장의 의미를 이해하는데 필요 없는 요소들을 제거해 보자!
  • 35. 준비사항 : 내가 처리하고 싶은 한글 문서의 list 형태 리스트 안에는 (문장 단위 or 문단 단위가 좋을 듯!)
  • 36.
  • 37. ' 도로법 시행령 을 개정하는 데에 있어, 그 개정이유와 주요내용을 국민에게 미리 알려 이에 대한 의견을 듣기 위하여 행정절차법 제41조에 따라 다음과 같 이 공고합니다. 2017년 3월 16일 국토교통부장관 도로법 시행령 일부개정령(안) 입법예고 1. 개정이유 도로법 제68조 도로점용료 감면조항에「영유아보육법」 제2조제3호에 따른 어린이집 또는「유아교 육법」제2조제2호에 따른 유치원(민간어린이집과 민간유치원)에 출입하기 위하여 통행로로 사용하는경우가 신설 되었기에 이에 대한 하위법령을 마련하고자 함2. 주요내용 가. 도로점용료 감면 대상 추가(안 제73조제3항제1호가목) ㅇ 도로법 제68조(점용료 징수의 제한) 제9호 “「영유아보육법」제2조제3호에 따른 어린이집 또는「유아교육법」제2조제2호에 따른 유치원에 출입하기 위하여 통행로로 사용하는 경우” 신설에 따른 하위법령 마련 나. 도로점용료에 대한 경과규정 명확화(안 부칙 제6조) ㅇ 영 제27751호 도로법 시행령 일부개정령안 부칙 제6조에서 규정한 도로점용료에 대한 경과규정을 명확하게 하여 행정업무상 혼란 예방 3. 의견제출 이 개정안에 대해 의견이 있는 기관 단체 또는 개인은 2017년 3월 20일까지 통합입법예 고센터 (http://opinion.lawmaking.go.kr)를 통하여 온라인으로 의견을 제출하시거나, 다음 사항을 기재한 의견서를 국토교통부장관에게 제출하여 주시기 바 랍니다. 가. 예고 사항에 대한 찬성 또는 반대 의견(반대 시 이유 명시) 나. 성명(기관ㆍ단체의 경우 기관ㆍ단체명과 대표자명), 주소 및 전화번호다. 그 밖의 참고 사항 등※ 제출의견 보내실 곳 - 일반우편 : (30103) 세종특별자치시 도움6로 11 국토교통부 도로운영과- 전자우편 : jwsuh@korea.kr- 전화 : 044-201- 3920 / 팩스 : 044-201-5591' 혹시라도 mongodb가 안 익숙한 분들을 위해
  • 39.
  • 40. 환경변수 지정입니다 가상환경 사실상 필요한 설치코드 ~ pip install genism ~ pip install Jpype1 ~ pip install konlpy
  • 41. 목표는 문장을 대표하는 Keyword를 찾는 것! 문장의 의미를 이해하는데 필요 없는 요소들을 제거해 보자! 1. 숫자 & 특수문자 & 영어
  • 42. 정규 표현식 : input을 문장을 요소로 하는 list형태의 문서로 받는다. 1. re.compile 을 이용하여 정규표현식( )을 컴파일하고 컴파일된 패턴객체를 제작 2. sub 메서드를 이용하면 정규식과 매치되는 문장 내 단어를st 공백 문자로 변환시킴. 3. String.strip() 매서드를 이용하여 문자열 양쪽에 있는 한 칸 이상의 연속된 공백들을 모두 지운다. 4. 잘린 단어들을 다시 docs3라는 빈 list에 append 시켜주자. https://wikidocs.net/4308
  • 43.
  • 44. 그런데 문장 내에 모든 품사가 필수적인 문장의 의미를 형성하는 건가?
  • 45. 맞다 이분도 영어 지문 다 읽지 말라고 하시더라.
  • 46. 체언(명사,대명사), 용언(동사/형용사), 수식언 (관형사, 부사, 조사, 감탄사) 품사를 알아보자: 과연 문장의 의미를 좀더 대표하는 품사가 뭐지?
  • 47. 고인물이 되어버린 도승헌이 코어닷 테크 세미나에서 열심히 발표를 한다.
  • 48. 고인물이 되어버린 도승헌이 코어닷 테크 세미나에서 열심히 발표를 한다.
  • 49. 고인물이 되어버린 도승헌이 코어닷 테크 세미나에서 열심히 발표를 한다.
  • 50. 목표는 문장을 대표하는 Keyword를 찾는 것! 문장의 의미를 이해하는데 필요 없는 요소들을 제거해 보자! 1. 숫자 & 특수문자 & 영어 2. 품사 태깅을 통한 수식언, 독립언, 형식형태소 제거
  • 51. 품사태깅을 해보자. coredottext 1. 코어닷 투데이에서 만든 자연어처리 모듈, 하지만 아직 배포는 못했어요 2. unistAAA로 사용이 가능합니다. 3. Pos 태깅기능이 제공됩니다. Bucket! 여기에 우리 문서 데이터를 넣어주시면 됩니다!
  • 52. 일반명사, 고유명사, 동사, 형용사 (NNG,NNP,VV,VA)
  • 53. ~ bin.tag_to_list : 문서에 품사를 태깅하고, 태깅한 문서를 list형태로 변환 ??? 불용어를 제거 해야 합니다. 길이가 1이면 제거 해야 합니다.
  • 54. Coredottext 어떤 기능이 있나요?? https://coredottoday.github.io/2018/09/08/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%B2%98%EB%A6%AC/
  • 56. 자바여도 파이썬에서 쓰고싶어 Konlpy! ~ pip install Jpype1 ~ pip install konlpy
  • 57. 불용어? Stopword? : 분석에 큰 의미를 가지지 못하지만 빈출하는 단어 쓸모 없는 단어는 없다. 특정한 환경에 필요가 없다. 1. 도메인 지식을 활용하여 찾기 2. 전체 문헌집단의 관점에서 빈출하는 단어를 찾아서 없애자
  • 58. 불용어? Stopword? 쓸모 없는 단어는 없다. 특정한 환경에 필요가 없다. 1. 도메인 지식을 활용하여 찾기 2. 전체 문헌집단의 관점에서 빈출하는 단어를 찾아서 없애자 데이터가 나쁘지 않다면 굳이 제거할 필요는 없다
  • 59.
  • 61. Term-document matrix로 문서를 표현해 보자! 음 아직 Categorical data인 단어와 그 단어의 list 로 구성된 문서 그 문서의 list형태야 (문서집합)
  • 62. Term-document matrix로 문서를 표현해 보자! 음 아직 Categorical data인 단어와 그 단어의 list 로 구성된 문서 그 문서의 list형태야 (corpus, 말뭉치)
  • 63. Term-document matrix로 문서를 표현해 보자! Categorical data인 단어 단어가 품사단위로 쪼개져서, 혹은 너무 잘게 쪼개진 친구가 있지 않을까? 일반적인 연어collocation 에 대해서 처리를 못하지 않을까? 연어를 잡기 위한 단어 단위의 Bigram
  • 64.
  • 65. 품사 태깅에서 놓치게 되는 요소들을 잡아줍니다 빈번하게 같이 나오는 용어들을 하나로 묶어줍니다. 체언과 용언 사이의 관계가 명확한 것을 잡아줍시다.
  • 66. 160799개 단어 (word - term) 사전으로 만들어주자 그런데 우리는 중복된 단어도 포함되어 있고 단어의 frequency도 파악을 못했구나!
  • 67. Dictionary (token string – id int) Doc1 = (1,1,1,1,0,1,1,0) Doc2 = (1,2,1,1,0,1,0,1) Vector Representation Local Representation Spare matrix
  • 68. Term-Documents Matrix (Local Representation) 어떤 형태로 mapping되었는가? 총 unique한 토큰이 몇개있는가? (feature space)
  • 69. Term-Documents Matrix (Local Representation) 문서의 고유성이 중요한 목적이라면 Filter_extremes를 통해 관보 전체에 사용되는 단어들을 제거해야한다. - 너무 일반적인 주제 - 관보 전체 문서의 양식
  • 70. Term-Documents Matrix (Local Representation) Corpus 문헌 전체 집합을 나타냄 문서의 관점에서 (token id - frequency)를 표현함 드디어 만들었다 Term-documents matrix!
  • 71. Term-Documents Matrix (Local Representation) Doc1 = (1,1,1,1,0,1,1,0) Doc2 = (1,2,1,1,0,1,0,1) Vector Representation Local Representation Spare matrix Gensim Dictionary Corpus Pos tagging & Stopword (Preprocessing) Gensim.doc2.bow
  • 72. Save & Load Data 1289개 unique한 토큰이 (단어) 202개의 문서에 존재한다. (문서) 0번째 문서를 조회했을 때, 0이라는 단어는 이 문서에 1번 1이라는 단어는 이 문서에 2번 2이라는 단어는 이 문서에 3번 3이라는 단어는 이 문서에 1번 4이라는 단어는 이 문서에 1번 등장함
  • 73. Term-document matrix로 문서를 표현해 보자! 성공! 그런데 이걸로 뭐하지??
  • 74. Ideation : Keyword Tagging 관보의 내용을 대표하는 주제를 찾아주자 - 문서집합 내부 정보로 모델링 - 주제는 숨어져 있는 latent한 요소 - Unsupervised & Clustering 여태까지는 단어, 문서를 표현하는 방식을 이야기했었다. 그렇다면 문헌집단을 표현하는 방법이 무엇이 있을까? 왜? 문헌집단의 관점에서 개별 문서를 본다면, 전체와 개별자의 관계를 나타낼 수 있을 것이다.
  • 75. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) Assumption 문헌을 여러 개의 주제를 포함할 수 있다. 주제에는 여러 개의 단어가 포함될 수 있다. 문헌에 사용된 단어 하나하나는 어떤 주제에 포함된다. 글을 쓰는 과정 1. 먼저 문헌에 어떤 주제들이 들어갈지를 대략 생각해 놓는다. (문헌의 주제 분포 결정) 2. 주제들 중에서 하나를 고른다. (주제 선정) 3. 주제들에 포함된 단어들 중에서 하나를 고른다. (단어 선정) 4. 그 단어를 문헌에 추가한다. 5. 2로 돌아가 반복
  • 76. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) 문헌의 수 주제의 수 문헌에 속한 단어의 수 φ: 주제의 단어 분포 (topic-term) (총 φ1~φK까지 K개의 단어 분포가 있을 겁니다) θ: 문서의 주제 분포 (doc-topic) (총 θ1~θd까지 D개의 주제 분포가 있겠죠.) Z : 단어의 주제 분포 (term-topic) ( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다)
  • 77. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) 확률 생성 모형 (Generative Model) 특정 확률 분포와 그 파라미터가 있다고 가정할때, 특정한 Process에 의해서 데이터를 생성한다. LDA 이미 관찰된 단어를 가지고, 단어가 주어졌을때, 주제가 assign될 확률을 계산하고, 전체 데이터에 대해 이때 P(Z|W)를 극대화 시키는 Z 를 찾는 과정 Z를 알면 나머지 θ, φ 는 찾기 쉽지!
  • 78. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) A d번째 문서가 k번째 토픽과 맺고 있는 연 관성 정도 B d번째 문서의 n번째 단어(Wd,n)가 k번째 토 픽과 맺고 있는 연관성 정도
  • 79. 직접 한번 짜보자! 참된 머신러닝 엔지니어라면 모형정도는 math만 가지고 짜야지!
  • 80. 그래서 제가 아직 머신러닝 엔지니어가 아닌가봐요....
  • 82. 일단 파라미터 잠시 남겨두고 LDA로 무엇을 할 수 있나요?
  • 83. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) 문헌의 수 주제의 수 문헌에 속한 단어의 수 φ: 주제의 단어 분포 (topic-term) (총 φ1~φK까지 K개의 단어 분포가 있을 겁니다) θ: 문서의 주제 분포 (doc-topic) (총 θ1~θd까지 D개의 주제 분포가 있겠죠.) Z : 단어의 주제 분포 (term-topic) ( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다)
  • 84. φ: 주제의 단어 분포 (topic-term) 주제 별 어떤 단어가 등장할 확률! 근데 하나의 주제만 볼 수 없을까?
  • 85. φ: 주제의 단어 분포 (topic-term) 하나의 주제에 대해서 등장 확률이 높은 단어의 ID ID값이 계산 효율은 좋은 건 알지만, 뭔지 궁금해!
  • 86. φ: 주제의 단어 분포 (topic-term) Print_topics는 주제 – 확률 – 단어 셋다 알려준다. 좀더 좋은 시각화는 없을까?
  • 87. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) 도로교통부의 건축과 관련된 주제구나 주제에 대한 해석은 사람이 추측해야한다! 도메인 지식이 필요한 이유! 도로 교통부 공무원과 코워킹하면 좋겠다,,,, 건축가나,,, 내가 잘하는건지,,, 에라이
  • 88. 더 정확히는 토픽이 주어졌을때 단어가 발생할 확률인 P(w|t) 1. salience P(w|t) 한 토픽의 키워드라면, 각 토픽에 속한 많은 문서들에서 등장해야 합 니다. 즉 P(w|t) 가 커야 합니다. 2. Discriminative power 하지만 그러면 너무 일반적인 단어들이 많이 등장하게 되겠죠 때문에 토픽 대비 자주 등장한다면 그 중요도를 낮추겠다는 패널티를 P(w|t)를 P(w)로 나누면서 적용했습니다. (IDF) 그리고 빈출단어와 특수단어를 나누는 것이 바로 Lamdba https://lovit.github.io/nlp/2018/09/27/pyldavis_lda/
  • 89. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) 도로교통부의 건축과 관련된 주제구나 좀더 주제에 속하면서 관보 개별 문서에 특수단어들이 나오게 된다 Estimated term frequency within the selected topic 이 올라 가는 걸 확인할 수 있다.
  • 90. 그래 그러면 이제 문헌집단 전체의 관점이 아니라 문서 개별의 관점에서 LDA를 보자!
  • 91. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) 문헌의 수 주제의 수 문헌에 속한 단어의 수 φ: 주제의 단어 분포 (topic-term) (총 φ1~φK까지 K개의 단어 분포가 있을 겁니다) θ: 문서의 주제 분포 (doc-topic) (총 θ1~θd까지 D개의 주제 분포가 있겠죠.) Z : 단어의 주제 분포 (term-topic) ( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다)
  • 93. θ: 문서의 주제 분포 (doc-topic) (총 θ1~θd까지 D개의 주제 분포가 있겠죠.) Corpus[1]은 1번과 4번 Topic이 지배적이군요!
  • 94. θ: 문서의 주제 분포 (doc-topic) (총 θ1~θd까지 D개의 주제 분포가 있겠죠.)
  • 95. 그래 그러면 이제 문서의 관점이 아니라 단어 개별의 관점에서 LDA를 보자!
  • 96. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) 문헌의 수 주제의 수 문헌에 속한 단어의 수 φ: 주제의 단어 분포 (topic-term) (총 φ1~φK까지 K개의 단어 분포가 있을 겁니다) θ: 문서의 주제 분포 (doc-topic) (총 θ1~θd까지 D개의 주제 분포가 있겠죠.) Z : 단어의 주제 분포 (term-topic) ( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다)
  • 97. Z : 단어의 주제 분포 (term-topic) ( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다) 도로가 mapping된 ID값은 60입니다.
  • 98. Z : 단어의 주제 분포 (term-topic) ( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다) 도로라는 term은 2번 토픽에 가장 빈번하게 등장하는 군요!
  • 99. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) 2번 토픽을 보니 있긴 하지만 음.. 정말 잘 만들어진 모형인가?
  • 100. 뭔가 잘못한것 같은데.... 그런데 파라미터를 저렇게 막 놔도 괜찮은건가? 최적점인게 확실해?
  • 101. 어떤 LDA가 좋은 LDA인가? Measure?
  • 102.
  • 103. 조금 더 Advance로! 햇갈린다면 위에 꺼 가지고도 괜찮다!
  • 104. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) Log perplexity is estimated every that many updates
  • 107. 그렇다면 무엇이 변할 때의 coherence와 perplexity를 찾아야할까?
  • 108. 관보의 내용을 대표하는 주제를 찾아주자 - 문서집합 내부 정보로 모델링 - 주제는 숨어져 있는 latent한 요소 - Unsupervised & Clustering 우리가 궁금한 것 = 주제 (를 대표하는 단어분포)
  • 109. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) 문헌의 수 주제의 수 문헌에 속한 단어의 수 φ: 주제의 단어 분포 (topic-term) (총 φ1~φK까지 K개의 단어 분포가 있을 겁니다) θ: 문서의 주제 분포 (doc-topic) (총 θ1~θd까지 D개의 주제 분포가 있겠죠.) Z : 단어의 주제 분포 (term-topic) ( d문서의 n 번째 단어가 n개의 주제 분포가 있을 것입니다)
  • 110. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) 사실 요놈만 알아도 Latent factor를 해석할 순 있다.
  • 111. 그 다음에 모형이 잘 작동하는지 최적에 수렴하는지를 봐야하지 않나? = iteration!
  • 112.
  • 113.
  • 114. Pass가 50 쯤에서 coherence도 가장 높고 perplexity 도 수렴하네! 50으로 고정하고 Topic number를 변화시켜보자!
  • 115. 토픽 개수 증가에 따라 급감하는 coherence (높아야 좋다고 했는데!) 토픽 개수 증가에 따라 급증하는 perplexity (낮아야 좋다고 했는데!)
  • 116. 토픽 개수 증가에 따라 급감하는 coherence (높아야 좋다고 했는데!) 토픽 개수 증가에 따라 급증하는 perplexity (낮아야 좋다고 했는데!) Topic 10개로 선택하겠습니다!
  • 117.
  • 118. LDA 모델을 만들었더니, Topic : 주제를 대표하는 단어 Doc : 문서를 대표하는 주제 두가지를 알게 되었다.
  • 119. 그러면 Goal : 문서 내 단어와, 주제를 대표하는 단어를 문서 내 assign된 주제의 확률로 관계를 만들어주자 1. Doc을 대표하는 확률이 높은 주제를 뽑는다. (doc-topic) 2. 확률이 높았던 주제에 대해서 단어 분포를 받는다. (topic-term) 3. 상위 확률 단어와, Doc에 있는 단어를 비교한다. (topic-term & doc-term) 4. 교집합을 문서의 index로 tagging
  • 120.
  • 121.
  • 122.
  • 123.
  • 124. 이런 문제가 있다. 1. Doc을 대표하는 확률이 높은 주제를 뽑는다. (doc-topic) 2. 확률이 높았던 주제에 대해서 단어 분포를 받는다. (topic-term) 3. 상위 확률 단어와, Doc에 있는 단어를 비교한다. (topic-term & doc-term) 4. 교집합을 문서의 index로 tagging
  • 125. φ: 주제의 단어 분포 (topic-term) 등장이 확률이 높다고 그 문서를 대표하는건 아니다 음 전체를 얼마나 잘 표현하는가? 일반적인가?
  • 126. 잠재디리클레할당(Latent Dirichlet Allocation, LDA) 람다로 Topic_term 분포를 바꿀 순 없을까?
  • 127. φ: 주제의 단어 분포 (topic-term) Gensim아 relevance 계산해서 리턴해주는건 있니? 그런거 없다 돌아가라
  • 128. 직접 한번 짜보자! 참된 머신러닝 엔지니어라면 모형정도는 math만 가지고 짜야지!
  • 130. 내가 모른다 – 라이브러리 다큐먼트를 본다 – 소스코드를 본다 마지막으로 내가 짠다 내가 어플리케이션을 만든다면?
  • 131. 내가 모른다 – 라이브러리 다큐먼트를 본다 – 소스코드를 본다 마지막으로 내가 짠다 스택오버플로 스택오버플로 스택오버플로스택오버플로 스택오버플로 스택오버플로 스택오버플로스택오버플로 스택오버플로
  • 132. 남이 직접 짠걸 찾는다 - 내가 짠다 – 라이브러리 다큐먼트를 본다 – 소스코드를 본다 마지막으로 내가 모른다 내가 모형공부 중 이라면?
  • 133. Source code를 보자.. Topic_term_dists, doc_topic_dists, doc_lengths 의 원형 데이터를 구하면 되겠다!
  • 134.
  • 135. 원형 데이터를 만질려면 다시 sparse matrix로
  • 136. 원형 데이터를 만질려면 다시 sparse matrix로
  • 137. 원형 데이터를 만질려면 다시 sparse matrix로
  • 138. 원형 데이터를 만질려면 다시 sparse matrix로
  • 139. 원형 데이터를 만질려면 다시 sparse matrix로
  • 140. 원형 데이터를 만질려면 다시 sparse matrix로
  • 141.
  • 142. 관보문서의 일반성에 집중해서 키워드를 받아낼 수 있다.
  • 143. 관보문서의 특수성에 집중해서 키워드를 받아낼 수 있다.
  • 144. 관보문서의 특수성에 집중해서 키워드를 받아낼 수 있다.
  • 145. 관보문서의 특수성에 집중해서 키워드를 받아낼 수 있다.
  • 146.
  • 147. 마무리 • 문서 집합을 정량화 하는 방법을 살펴보았다. • Gensim을 Dictionary객체를 만들어보고 Corpus로 문서를 표현해 보았다. • Gensim을 통해 LDA객체를 만들어 보았고 모델 아키텍처를 데이터로 받아보았다. • LDA 파라미터 튜닝 도전! • LDA를 가지고 auto-tagging한번 해보았다.
  • 148. 혹시나 자연어 처리에 관심있는 분들을 위해 • https://ratsgo.github.io/blog/categories/ • https://bab2min.tistory.com/568?category=673750 • https://www.lucypark.kr/courses/2015-dm/text-mining.html • http://solarisailab.com/about • https://lovit.github.io/nlp/2018/04/01/pos_and_oov/ • http://cs224d.stanford.edu/syllabus.html • https://adeshpande3.github.io/adeshpande3.github.io/Deep-Learning-Research-Review-Week-3-Natural-Language-Processing • http://lxmls.it.pt/2014/socher-lxmls.pdf • https://media.wix.com/ugd/142eb4_7581cfcf090e4e31a52599315f77c648.pdf
  • 149.
  • 150.
  • 151.
  • 152.
  • 153. 문과도 했는데 못할 것 없다. 한걸음 나아가면 남에게 도움이 될 수도 있다. (물론 꼰대도 될 수 있다!)
  • 154. LDA와 3개월 함께한 자연어처리 시행착오기