2023. 5. 12. 01:44ㆍDATA PROGRAMMING/R
오늘은 R을 활용하여 Topic Modeling 그 중에서도 LDA알고리즘을 통해서 음식물 쓰레기 처리기 기술에 대해 분석해 보도록 하겠다.
R을 활용하여 LDA를 사용해 보자
(1) 주제 선정 과정
현재 2023년 캠퍼스 특허 유니버시아드가 시작하여 여러 문제들이 출제 되었다. IT, 전기, 전자, 조선, 기계, 금속, 환경, 화학, 생명, 에너지와 관련한 여러 주제들이 있는데 그 중에서 '음식물쓰레기처리기 기술' 이라는 주제를 활용해 개인적으로 분석해보고자 한다. ‘쓰레기’라는 주제는 이미 많은 분야에서 주목받고 있다. 우주 쓰레기, 바다 쓰레기, 생활 쓰레기 등등 각종 쓰레기는 전 세계적인 사회적 문제로 다가왔고, 이를 처리하는 기술에 대한 관심 또한 증폭되었다. 특히 ‘음식물 쓰레기’는 생활 쓰레기 중에서도 사람들이 느끼기에 가장 까다로운 골칫거리다. 다른 생활 쓰레기들과 다르게 가만히 두면 하루도 안되어서 악취가 나기 시작하고, 벌레가 꼬이며, 건강에도 직접적으로 악영향을 줄 수 있다. 이처럼 음식물 쓰레기는 커다란 사회적 문제이며, 이를 처리하는 기술에 관심을 기울일 수밖에 없었다.
(2) 분석 과정
1. 위즈 도메인 사이트를 통한 관련 특허 문서 다운로드
위즈 도메인은 검색 기능을 통해 전 세계의 논문 중 내가 관심 있는 키워드와 관련된 논문들의 정보를 얻을 수 있는 사이트이다. 먼저 내가 LDA를 통한 분석을 위해 선정한 주제인 ‘음식물 쓰레기’에 대한 논문 정보를 얻기 위해서 ‘Junk’, ‘Food Trash’라는 키워드를 활용해 검색하여. 약 500개 이상의 문서를 다운로드 받았고, 이를 분석하기 편하게 csv 파일로 저장하였다.
2. 데이터 전처리
csv 파일의 상태는 수많은 논문들에 대한, 일련번호, 번호, 명칭(번역), 요약(원문), 요약(번역), 출원인, 출원인 주소 등등 필요 없는 정보들을 포함해 너무 많은 Column들이 설정되어 있었다. 이를 간단하게 정리하기 위해 가장 위쪽 Row들에 자리 잡은 작성일, 검색 대상, 검색식 등의 내용을 행 삭제 하였다. 이제 쓸데없는 Column들을 지워주기만 하면 되는데 이는 csv 파일에서 필요한 Column들을 제외한 다른 모든 Column들을 열 삭제 하거나, 애초에 위즈 도메인 사이트에서 항목 선택 다운로드 기능을 통해 필요한 정보들을 선택하는 방법으로 해당 정보만 정리된 csv 파일을 얻을 수 있다. 위 방법을 통해 번호, 전체 청구항 column만으로 csv 파일을 정리했다.
3. R을 통한 LDA 수행
# install.packages('ldatuning')
# install.packages('topicmodels')
# install.packages('tm')
# install.packages('slam')
# install.packages('lda')
library(ldatuning)
library(topicmodels)
library(tm)
library(slam)
library(lda)
# Set working directory
setwd("C:\\Users\\user\\Desktop\\학교!~\\3학년 1학기\\데이터어낼리틱스\\데어낼_실습\\Project1")
lda_source<-read.csv("음쓰데이터.csv",stringsAsFactors = FALSE,header =TRUE, sep =",", fileEncoding ="euc-kr")
# Target column setting
target_doc<-lda_source[,2]
각종 패키지를 다운 받고 설정한 이후에 파일 경로를 설정한다.
분석의 Target이 되는 컬럼을 설정한다. csv파일은 위 사진처럼 정리되어 있으므로 lda_souce[,2]로 설정한다.
# Corpus construction
doc_vec<-VectorSource(target_doc)
corpus<-Corpus(doc_vec)
corpus <- tm_map(corpus, tolower) # convert all the capitals to lower cases
# Term document matrix
tdm = TermDocumentMatrix(corpus, control = list(removeNumbers = T,
removePunctuation = T,
stemming = FALSE,
omit_empty = T,
stopwords=T))
Encoding(tdm$dimnames$Terms) ='unicode'
# Extract frequently used words
word.count =as.array(rollup(tdm,2))
word.order = order(word.count, decreasing = T)[1:1000]
freq.word = word.order[1:1000]
# Document term matrix
dtm =as.DocumentTermMatrix(tdm[freq.word,])
dtm.matrix<-as.matrix(dtm)
ldaform=dtm2ldaformat(dtm, omit_empty =T) # transform dtm to LDA format
이제 코퍼스를 만들고, Term-Document Matrix와 Document-term Matrix를 만들어 준다.
본격적인 분석 이전 데이터들을 정리해주는 단계이다.
# -----hyperparameters-----
# K : An integer representing the number of topics in the model
# num.iterations : The number of sweeps of Gibbs sampling over the entire corpus to make
# alpha : The scalar value of the Dirichlet hyperparameter for topic proportions
# eta : The scalar value of the Dirichlet hyperparamater for topic multinomials
# -------------------------
result.lda = lda.collapsed.gibbs.sampler(documents = ldaform$documents,
K =10,
vocab = ldaform$vocab,
num.iterations =500,
burnin =100,
alpha =0.01,
eta =0.01)
가장 중요한 단계이다. 시행자가 직접 LDA의 Hyperparameter 값들을 설정해 주는 단계이다. 분석에 직접적으로 영향을 끼츠는 단계이다.
# LDA results
attributes(result.lda)
dim(result.lda$topics) # n(topic) * n(words) matrix
result.lda$topics # The matrix indicates the number of times a word (column) was assigned to a topic (row)
document_sums <- result.lda$document_sums
# Top 10 words most relavant to the topic
topic_word <- top.topic.words(result.lda$topics, num.words =10)
# Top 10 documents most relevant to the topic
num.documents =10
doc_topic <- top.topic.documents(document_sums, num.documents, alpha =0.01)
# Save results
write.csv(topic_word, "topic_word.csv")
write.csv(doc_topic, "doc_topic.csv")
분석을 마무리하고 각 분석의 내용을 표로 정리하여 보여주고 Topic-Word Matrix와 Document-Topic Matrix를 각각 csv 파일로 저장해 준다.
처음 파라미터를 Alpha=0.01, Eta=0.01로 설정하여 코드를 실행했을 때 토픽별 단어가 중복되는 경우가 많았다. Alpha 값을 크게 하면 각 문서 별로 가지는 토픽의 개수를 늘릴 수 있고, Eta 값을 늘리면 토픽 내 여러 단어가 분포해 있다고 가정할 수 있으므로 두 값을 모두 늘려 각각 값을 0.1로 설정한 이후 최종 결과를 산출하였다.
(3) 결과 및 시사점
분석 결과
LDA를 통해 각 토픽에 속하는 단어와 그 토픽들에 대한 대표 문서들을 알아낼 수 있었다. 예를 들어 토픽 V8에 속하는 단어인 waste, food, electronic, system, product 등의 단어를 통해 V8의 내용이 ‘waste food 들을 electronic system을 통해 처리하는 product에 대한 내용’이라고 해석할 수 있다. 또한 V8과 관련한 문서로는 502, 275, 554등이 있다.
(4) 결론
LDA는 대표적인 Topic Modeling 알고리즘이다. 말 그대로 사람이 직접 문서의 내용을 확인해 가며 주제를 선정하는 것이 아닌 기계의 힘을 빌려 계산적인 방법을 통해 수많은 문서들의 주제를 빠르고 효율적으로 뽑아내는데 그 의의가 있다. 하지만, LDA는 그 알고리즘을 실행하는 사람이 직접 K(토픽의 개수), Alpha, Eta 등의 Hyperparameter 값을 설정해 줘야 하고, 선정된 토픽들이 어떤 내용인지를 완벽히 설명해 주는 게 아니라 그저 수학적인 계산을 통해 토픽과 단어, 토픽과 문서를 연결해 주는 Unsupervised learning이기에 모델이 효과를 발휘하기 위해선 시행자가 직접 알고리즘을 이해하고 그에 맞는 LDA 객체를 선정하고 각종 Hyperparameter 값을 설정하는 등의 능력이 있어야 함을 시사한다.
'DATA PROGRAMMING > R' 카테고리의 다른 글
R을 통한 중심성 지수(degree, closeness, betweenness)를 활용한 Network Analysis와 Link Prediction (0) | 2023.05.29 |
---|