AI study/potato's PJT (in dongguk)

[NLP] νŠΉν—ˆ λ°μ΄ν„°λ‘œ Topic Modeling을 μ§„ν–‰ν•΄λ³΄μž

감자 πŸ₯” 2021. 4. 29. 00:13
λ°˜μ‘ν˜•

μ‹œμž‘ν•˜λ©°

ν•™λΆ€μƒμ‹œμ ˆ μ§„ν–‰ν–ˆλ˜ Topic Modeling ν”„λ‘œμ νŠΈμ— λŒ€ν•΄ μž‘μ„±ν•˜λ €κ³  ν•œλ‹€.
NLP에 관심이 생기기 μ‹œμž‘ν•˜μ—¬ λ°μ΄ν„°μ–΄λ‚Όλ¦¬ν‹±μŠ€ μˆ˜μ—…μ„ μˆ˜κ°•ν–ˆλŠ”λ°, μš΄μ’‹κ²Œλ„ NLP에 λŒ€ν•œ κ°œλ…κ³Ό, μ‹€μŠ΅μ„ μ§„ν–‰ν•΄λ³Ό μˆ˜μžˆμ—ˆλ‹€. κ·Έ 지식을 λ°”νƒ•μœΌλ‘œ μ—¬λŸ¬κ°€μ§€ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆλŠ”λ°, κ·Έ 쀑 ν•˜λ‚˜μ΄λ‹€!

ν”„λ‘œμ νŠΈ 마무리 단계에 레포트둜 μž‘μ„±ν•˜μ—¬ 과제둜 μ œμΆœν•œ κ²½ν—˜μ΄ μžˆμ–΄μ„œ, μ‹œκ°„μ΄ μ§€λ‚œ μ§€κΈˆμ—λ„ μ΄λ ‡κ²Œ κΈ€λ‘œ 남길 수 μžˆκ²Œλ˜μ—ˆλ‹€. 자료의 λ¬Έμ„œν™”μ— λŒ€ν•œ μ€‘μš”μ„±μ„ λ‹€μ‹œκΈˆ κΉ¨λ‹«λŠ” μ‹œκ°„μ΄λ‹€ :) 

-- λ³Έ ν”„λ‘œμ νŠΈλŠ” 학ꡐ 과제 κ²Έ ν”„λ‘œμ νŠΈλ‘œ μ§„ν–‰ν•œ λ‚΄μš©μž…λ‹ˆλ‹€ :) 

 

1. μ£Όμ œμ„ μ •

1.1 ν”„λ‘œμ νŠΈ 주제

Quantum-dot Display 기술의 νŠΉν—ˆ 데이터에 λŒ€ν•œ LDA

 

1.2 ν”„λ‘œμ νŠΈ λͺ©ν‘œ

Quantum dot display에 κ΄€ν•œ 794개의 νŠΉν—ˆμ˜ Topic을 λΉ λ₯΄κ²Œ νŒŒμ•…ν•  μˆ˜μžˆλŠ” Topic Modeling을 μ§„ν–‰ν•˜κ³ μž ν•œλ‹€.

νŠΉν—ˆλ°μ΄ν„°λŠ” λ„ˆλ¬΄ λ„˜μ³λ‚˜κ³ , 기술적인 μš©μ–΄κ°€ μ–΄λ ΅κΈ° λ•Œλ¬Έμ— 이 Topic Modeling 이 μ‚°μ—…μ—μ„œ 널리 μ‚¬μš©λ  수 μžˆμ„ 것이라고 μƒκ°λœλ‹€!

 

2. 뢄석 κ³Όμ •

2.1 데이터 μˆ˜μ§‘

2.1.1 ν™œμš© 데이터

뢄석 λ°μ΄ν„°λŠ” λ―Έκ΅­ νŠΉν—ˆμ²­ νŠΉν—ˆ DB λ‚΄ 전체 κΈ°κ°„λ™μ•ˆ μΆœμ›, 곡개 및 등둝 λ˜μ–΄μžˆλŠ” νŠΉν—ˆλ“€ 쀑에 μ„ μ •ν•˜μ˜€λ‹€. λ™κ΅­λŒ€ν•™κ΅μ—μ„œ μ§€μ›ν•˜λŠ” νŠΉν—ˆ 검색 μ‚¬μ΄νŠΈ( 무슨 μ‚¬μ΄νŠΈμ˜€λŠ”μ§€ κΉŒλ¨Ήμ—ˆλ‹€... μ°ΎλŠ”λŒ€λ‘œ μ—…λ‘œλ“œ ν•˜κ² μŠ΅λ‹ˆλ‹€.!) 에 Quantum-dot display와 μœ μ‚¬ν•œ 의미둜 μ“°μ΄λŠ” 단어λ₯Ό μ•„λž˜ <ν‘œ1>κ³Ό 같이 μ •λ¦¬ν•˜μ—¬ 검색식을 μž‘μ„±ν•˜μ˜€λ‹€.

Quantum - dot display κ΄€λ ¨ νŠΉν—ˆ 검색식
TI = ("Quantum*" or "QD") AND ("display*") or ("QLED" or "QLCD")

<ν‘œ 1> Quantum-dot display νŠΉν—ˆ 검색식

νŠΉν—ˆ 검색 κ²°κ³Ό 총 794건의 νŠΉν—ˆκ°€ κ²€μƒ‰λ˜μ—ˆκ³ , ν•΄λ‹Ή νŠΉν—ˆμ˜ 번호, λͺ…μΉ­, μš”μ•½, μΆœμ›λ²ˆν˜Έ, 전체청ꡬ항을 κΈ°μ€€ 등을 csv ν˜•νƒœμ˜ λ°μ΄ν„°λ‘œ λ‹€μš΄λ°›μ•˜λ‹€. λ³Έ λ ˆν¬νŠΈμ—μ„œλŠ” λ‹€μš΄λ°›μ€ 데이터λ₯Ό λŒ€μƒμœΌλ‘œ LDAλ₯Ό μˆ˜ν–‰ν•œλ‹€. <κ·Έλ¦Ό 2>λŠ” νŠΉν—ˆ 검색 κ²°κ³Όλ₯Ό λ‚˜νƒ€λ‚Έ 것이고, <κ·Έλ¦Ό 3>은 λ‹€μš΄λ°›μ€ λ°μ΄ν„°μ˜ μ˜ˆμ‹œλ₯Ό λ‚˜νƒ€λ‚Έ 것이닀.

<κ·Έλ¦Ό 2> νŠΉν—ˆ 데이터 검색 κ²°κ³Ό
<κ·Έλ¦Ό 3> λ‹€μš΄λ°›μ€ 데이터 μ˜ˆμ‹œ

2.2 LDA Topic Modeling

R studio ν”„λ‘œκ·Έλž¨μ„ μ΄μš©ν•˜μ—¬ 2.1μ—μ„œ μˆ˜μ§‘ν•œ 데이터λ₯Ό 기반으둜 Topic Modeling을 μˆ˜ν–‰ν•˜μ˜€λ‹€. LDA Topic Modeling의 전체적인 ν”„λ‘œμ„ΈμŠ€λŠ” LDA ν™˜κ²½ ꡬ성, λ§λ­‰μΉ˜ (Corpus) 생성, Term-doc Matrix 생성, LDA계산, LDA κ²°κ³Ό 계산 λ„μΆœ 순으둜 μ§„ν–‰ν•˜μ˜€λ‹€.

2.2.1 LDA ν™˜κ²½κ΅¬μ„±

R studioμ—μ„œ LDA Topic Modeling에 ν•„μš”ν•œ ldatuning, topicmodels, tm, slam, ida νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ ν›„ 라이브러리둜 λΆˆλŸ¬μ™€ LDA Topic Modeling을 μœ„ν•œ ν™˜κ²½μ„ κ΅¬μ„±ν•˜μ˜€λ‹€. 이후 “quntum_dot_data.csv”νŒŒμΌμ„ 뢈러였고 전체 청ꡬ항열에 λŒ€ν•œ 뢄석을 μ§„ν–‰ν•˜κΈ° μœ„ν•΄ 이λ₯Ό target_doc으둜 μ§€μ •ν•˜μ˜€λ‹€.

# νŒ¨ν‚€μ§€ μ„€μΉ˜ 및 호좜
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)

# 데이터 뢈러였기 및 μ „μ²˜λ¦¬
setwd("C:\\Users\\my\\Desktop")
lda_source<-read.csv("quantum_dot_data.csv",stringsAsFactors = FALSE, header = FALSE)
target_doc<-lda_source[,6]

 

2.2.2 λ§λ­‰μΉ˜ (Corpus) 생성

tmνŒ¨ν‚€μ§€μ˜ VectorSource ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ Corpusλ₯Ό μƒμ„±ν•œλ‹€. 이후, TermDocumentMatrix ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ μˆ«μžλ‚˜ 기호, 빈 데이터λ₯Ό μ œκ±°ν•΄μ£Όμ—ˆλ‹€. λ˜ν•œ 많이 μ“°μ΄λŠ” 톡사ꡬ쑰인 claim, comprising, including, includesλ₯Ό stop words 둜 μ²˜λ¦¬ν•΄ μ£Όμ—ˆλ‹€.

# corpus 생성
doc_vec<-VectorSource(target_doc)
corpus<-Corpus(doc_vec)
# term document matrix
tdm = TermDocumentMatrix(corpus, control = list(removeNumbers = T,
                                                removePunctuation = T,
                                                stemming = FALSE,
                                                stopwords = c(stopwords('SMART'),
                                                              'comprising','including',
                                                              'includes'),
                                                omit_empty = T))
word.count = as.array(rollup(tdm,2))
word.order = order(word.count, decreasing = T)[1:1000] ## 많이 쓰인 λ‹¨μ–΄λŒ€λ‘œ 올림차순
freq.word = word.order[1:1000]

 

2.2.3 Term-Doc Matrix 생성

λΆ„μ„λœ λ°μ΄ν„°μ˜ 크기가 크기 λ•Œλ¬Έμ— LDA λ₯Ό κ³„μ‚°ν•˜λŠ”λ°μ— μ‹œκ°„μ΄ 많이 μ†Œμš”λœλ‹€. 이λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄ μƒμœ„ 1000개의 λ‹¨μ–΄λ§Œ μ‚¬μš©ν•˜κ²Œλ” Term-Doc Matrixλ₯Ό μƒμ„±ν–ˆλ‹€.

# dtm 생성
dtm = as.DocumentTermMatrix(tdm[freq.word,])
dtm.matrix<-as.matrix(dtm)
dtm

 

2.2.4 LDA 계산

lda νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•žμ„œ μ€€λΉ„ν•œ lda 데이터λ₯Ό 기반으둜 lda 뢄석을 μ‹€ν–‰ν•œλ‹€. 뢄석 μ‹œ Gibbs Sampling을 μ‚¬μš©ν–ˆλ‹€. ν† ν”½ 개수 KλŠ” 50개둜 μ§€μ •, interation 값은 500, burninκ°’ 100, λ¬Έμ„œ λ‚΄ ν™•λ₯ λΆ„ν¬λŠ” 0.01, ν•˜λ‚˜μ˜ topic μ•ˆμ—μ„œμ˜ hyper parameterλŠ” 0.01둜 κ΅¬μ„±ν•˜μ˜€λ‹€.

ldaform=dtm2ldaformat(dtm, omit_empty=T) ## dtm을 LDA 포멧의 λ°μ΄ν„°λ‘œ λ³€ν™˜

result.lda = lda.collapsed.gibbs.sampler(documents = ldaform$documents,
                                         K = 50,
                                         vocab = ldaform$vocab,
                                         num.iterations = 500,
                                         burnin = 100,
                                         alpha = 0.01,
                                         eta = 0.01)
#alpha = λ¬Έμ„œλ‚΄μ˜ ν™•λ₯ λΆ„포 / eta = λ¬Έμ„œλ‚΄ μ£Όμ œλ³„ ν™•λ₯ λΆ„포

 

2.2.5 LDA 계산 κ²°κ³Ό λ„μΆœ

μ£Όμ œλ³„ ν‚€μ›Œλ“œ 20κ°œμ™€, μ£Όμ œλ³„ 핡심 λ¬Έμ„œ 10개λ₯Ό λ„μΆœν•΄μ„œ 각각의 파일둜 μ €μž₯ν•˜μ˜€λ‹€.

# 뢄석 κ²°κ³Ό 확인
attributes(result.lda)
dim(result.lda$topics)
result.lda$topics
document_sums <- result.lda$document_sums

# μ£Όμ œλ³„ ν‚€μ›Œλ“œ λ„μΆœ 및 μ €μž₯
topic_word <- top.topic.words(result.lda$topics, num.words = 20)
write.csv(topic_word, "topic_word.csv")

# μ£Όμ œλ³„ 핡심 λ¬Έμ„œ λ„μΆœ 및 μ €μž₯
num.documents = 10
doc_topic <- top.topic.documents(document_sums, num.documents, alpha = 0.1)
write.csv(doc_topic, "doc_topic.csv")

 

3. κ²°κ³Ό 및 μ‹œμ‚¬μ 

3.1 κ²°κ³Ό

λ„μΆœλœ 결과의 일뢀λ₯Ό λ°œμ·Œν•˜μ—¬ μ£Όμ œλ³„ μƒμœ„ ν‚€μ›Œλ“œ 및 λ¬Έμ„œμ˜ 일뢀λ₯Ό 해석해 λ³΄μ•˜λ‹€. λ„μΆœλœ 결과의 두 개의 νŒŒμΌμ€ μ•„λž˜ <κ·Έλ¦Ό 4> 와 <κ·Έλ¦Ό 5> 에 μ²¨λΆ€ν•˜μ˜€λ‹€.

<κ·Έλ¦Ό 4> Topic_word.csv : μ£Όμ œλ³„ μƒμœ„ ν‚€μ›Œλ“œ 20
<κ·Έλ¦Ό 5> doc_topic.csv : μ£Όμ œλ³„ 핡심 λ¬Έμ„œ μƒμœ„ 10개

 

3.2 해석

μ•„λž˜ <ν‘œ 2> λ₯Ό 보고 λ‹€μŒκ³Ό 같이 해석할 수 μžˆμ—ˆλ‹€. μ–‘μžμ (Quantum dot) display의 pixel structure의 ꡬ성(comprises)에 λŒ€ν•œ νŠΉν—ˆλΌλŠ” 것을 μœ μΆ”ν•΄ λ³Ό 수 μžˆλ‹€. pixel이 각자(respective) λ‹€λ₯Έ diode둜 configured λ˜μ–΄ 있고, pixel이 겹겹이 μŒ“μΈ layer κ΅¬μ‘°μž„μ„ μ•Œ 수 μžˆλ‹€. 이 주제λ₯Ό κ°–κ³  μžˆλŠ” νŠΉν—ˆλŠ” 303번 νŠΉν—ˆ, 656번 νŠΉν—ˆ, 420번 νŠΉν—ˆ, 265번 νŠΉν—ˆ 등이 있으며, <ν‘œ 3>에 이 주제λ₯Ό κ°€μ§„ νŠΉν—ˆ μƒμœ„ 10개λ₯Ό ν‘œν˜„ν•΄ λ†“μ•˜λ‹€.

Topic 4 pixel plurality computational layers type
display diode defined configured polygon
claim pixels structure system portion
comprise respective regions coupled method

<ν‘œ 2> Topic 4의 μ£Όμ œλ³„ μƒμœ„ ν‚€μ›Œλ“œ 20개

Topic 4 303 656 420 265 418
271 434 597 261 612

<ν‘œ 3> Topic 4의 μ£Όμ œλ³„ 핡심 μƒμœ„ λ¬Έμ„œ 10개

 

3.3 μ‹œμ‚¬μ 

νŠΉν—ˆ 데이터에 LDAλ₯Ό μ μš©ν•¨μœΌλ‘œμ¨, μˆ˜λ§Žμ€ νŠΉν—ˆ 쀑 μ‚¬μš©μžκ°€ κ΄€μ‹¬μžˆλŠ” νŠΉμ • νŠΉν—ˆ λ¬Έμ„œλ₯Ό κ΅°μ§‘ν™” ν•  수 μžˆλ‹€. 이λ₯Ό 톡해 νŠΉμ • μ£Όμ œμ— λŒ€ν•œ ν˜„ν™©, 문제점, 해결책을 νŒŒμ•…ν•  수 μžˆλŠ” μΈμ‚¬μ΄νŠΈλ₯Ό 얻을 수 μžˆλ‹€. 또 νŠΉμ • 주제 및 κ΄€λ ¨μ„± 높은 단어듀을 λΆ„μ„ν•˜λ©΄μ„œ ν•΄λ‹Ή 기술의 ν˜„ν™© νŒŒμ•…, 연ꡬ 동ν–₯을 νŒŒμ•… ν•  수 μžˆμ„ 것이닀.

4. κ²°λ‘ 

TV 및 κ°€μ „ μ œν’ˆ μ‹œμž₯에 μ°¨μ„ΈλŒ€ 기술둜 μ£Όλͺ©λ°›κ³  μžˆλŠ” quantum-dot display κΈ°μˆ μ€ 높은 μ„±μž₯λ₯ μ„ 보이고 μžˆλ‹€. λ”°λΌμ„œ quantum-dot display에 κ΄€ν•œ νŠΉν—ˆ 데이터λ₯Ό LDA둜 λΆ„μ„ν•˜μ—¬ topicλ³„λ‘œ clustering ν•˜μ˜€λ‹€. λ˜ν•œ ν•΄λ‹Ή topic에 λŒ€ν•œ 핡심 λ¬Έμ„œλ„ λ„μΆœν•˜μ˜€λ‹€. 이λ₯Ό 톡해 quantum-dot display에 λŒ€ν•œ ꡬ쑰λ₯Ό μ‚΄νŽ΄λ³Ό 수 μžˆμ—ˆλ‹€. νŠΉν—ˆ 데이터에 λŒ€ν•œ LDAλ₯Ό μˆ˜ν–‰ν•¨μœΌλ‘œμ¨ ν•΄λ‹Ή μ£Όμ œμ— λŒ€ν•œ 연ꡬ동ν–₯, ν˜„μž¬ ν˜„ν™©μ„ νŒŒμ•…ν•˜κ³ , 핡심 μ£Όμ œλ³„λ‘œ λ¬Άμ–΄μ„œ μ‚΄νŽ΄λ³Ό 수 μžˆμ—ˆμœΌλ©°, κ²°κ³Όλ₯Ό λ°”νƒ•μœΌλ‘œ ν•΄λ‹Ή μ£Όμ œμ— κ΄€ν•œ 연ꡬ λ°©ν–₯κΉŒμ§€ 섀계할 수 μžˆμ„ 것이닀.

 

 

마치며

처음으둜 NLP에 관심을 κ°–κ²Œλœ κ³„κΈ°μ˜€λ‹€. λ‚΄μš©μ„ λͺ¨λ‘ 훑어보지 μ•Šκ³ , λ‚΄μš©μ„ μœ μΆ”ν•  수 μžˆλ‹€λŠ” 것은 ꡉμž₯ν•œ 혁λͺ…μœΌλ‘œ λ‹€κ°€μ™”λ‹€. NLPλ₯Ό λ§ˆμŠ€ν„°ν•˜λŠ” κ·Έλ‚ κΉŒμ§€......... 기초적인 지식뢀터 μŒ“κ³  곡뢀해야징

λ°˜μ‘ν˜•