読者です 読者をやめる 読者になる 読者になる

xiangze's sparse blog

機械学習、ベイズ統計、コンピュータビジョンと関連する数学について

CVPRの論文タイトルの頻出単語と可視化

NLP cv R

コンピュータビジョン分野の査読つき国際会議であるCVPR(Conference on Computer Vision and Pattern Recognition)の論文題名を
http://www.cvpapers.com/
から取得し、その変遷をRのtmモジュールを使い分析、可視化してみました。
CVPR2007からCVPR2013までの論文タイトルが対象となります。


2014/12/9追記
http://colinlea.com/guides/cvpr2013.html
では本文の単語を用いたトピックモデルで論文が分類された結果を見ることが出来ます。
NIPS,ICMLのものもあります。

for i in `seq 2007 2013`;do
wget http://www.cvpapers.com/cvpr${i}.html
done

scrapingは以下のようにしました。

 grep '<dt>' $1 |sed 's/<[^>]*>//g'|sed 's/(.*PDF.*)//g' > $2

(タイトル部分のみ抽出し、(PDF)などの不要な文字列を削除しました。)

library(tm)
library(Snowball)

gencorpus <- function(dat,stemn=T){
  corpus <- Corpus(DataframeSource(data.frame(as.character(dat[,1]))))
  corpus <- tm_map(corpus, removePunctuation)
  corpus <- tm_map(corpus, tolower)
  corpus <- tm_map(corpus, stripWhitespace)
  corpus <- tm_map(corpus, function(x) removeWords(x,stopwords("english")))
  if(stemn==T){
    corpus <- tm_map(corpus, stemDocument)
  }
  tdm <- TermDocumentMatrix(corpus)
  ap.m <- as.matrix(tdm)
  ap.v <- sort(rowSums(ap.m),decreasing=TRUE)
  ap.d <- data.frame(word = names(ap.v),freq=ap.v)
}

gencorpus.fromfile <- function(fname,stemn=T){
  dat <-read.csv(fname,col.names=F,sep="\n")
  gencorpus(dat,stemn)
}

英単語のstemming, stop wordsの削除などを行っています。

years<-(2007:2013)

for( i in years ){ cvlist[[i]]<-gencorpus.fromfile(paste("cvpr",i,"_title.txt",sep=""))}

for( i in years ){ colnames(cvlist[[i]])<-c("word",i)}
for( i in years ){ tot<-sum(cvlist[[i]][,2])
		   cvlist[[i]]<-cbind(cvlist[[i]],cvlist[[i]][,2]/tot)}

for( i in years ){ colnames(cvlist[[i]])<-c("words",i,paste("rate",i,sep=""))}

cvlrate<-cvlist[[years[1]]][-2]
for( i in years[-1] ){ cvlrate<-merge(cvlrate,cvlist[[i]][,-2],all=T)}
cvlrate<-cvlrate[with(cvlrate,order(-cvlrate[,2])),]
cvlrate[is.na(cvlrate)]<-0

coefs<-c()
for(i in 1:nrow(cvlrate)){r<-lm(as.data.frame(cbind(years,t(cvlrate[i,-1]))));coefs<-c(coefs,r$coefficients[2])}
cvlrate<-as.data.frame(cbind(cvlrate,coefs))

#出現回数の少ない語の削除
calczeros<-function(a){p=0;for(i in 2:(length(a)-1)){p=p+(a[[i]]==0.)};p}
znum<-data.frame()
for(i in 1:nrow(cvlrate)){znum<-rbind(znum,calczeros(cvlrate[i,]))}
cvlrate.mt3<-cvlrate[which(znum<4),]

cvlrate<-cvlrate[with(cvlrate,order(-cvlrate$cc)),]
for(i in 1:nrow(cvlrate)){r<-lm(as.data.frame(cbind(years,t(cvlrate[i,-1]))));coefs<-c(coefs,r$coefficients)}

出現頻度は総単語数で規格化した値になります。
総数3064語 big dataというほどではありません。概要、全文を用いればトピックモデルなどを用いてより詳細な解析ができるかもしれません。

  • CVPR2013での出現回数上位の単語
words rate2007 rate2008 rate2009 rate2010 rate2011 rate2012 rate2013 cc
imag 0.0256 0.0312 0.0341 0.0309 0.0382 0.0277 0.0245 -45.4917
learn 0.0123 0.0201 0.0194 0.0154 0.0175 0.023 0.0228 388.176
detect 0.0113 0.0096 0.019 0.0158 0.0118 0.0166 0.0179 331.8485
object 0.0184 0.0158 0.0143 0.0171 0.0128 0.0155 0.0169 -315.6493
model 0.0189 0.0204 0.0167 0.0161 0.0157 0.0162 0.0159 -933.1417
use 0.0184 0.0254 0.0182 0.0217 0.0185 0.0115 0.0152 -316.6366
recognit 0.0154 0.0145 0.0131 0.0151 0.0121 0.0139 0.0146 -594.1153
video 0.0056 0.0056 0.006 0.0079 0.01 0.0095 0.0099 981.8036
segment 0.0123 0.0145 0.0083 0.0115 0.01 0.0098 0.0099 -593.2248
via 0.0056 0.0068 0.006 0.0053 0.0064 0.0105 0.0083 782.5329
estim 0.0056 0.0096 0.0103 0.0089 0.0078 0.0101 0.0083 414.1751
visual 0.0072 0.0068 0.0052 0.0069 0.0075 0.0084 0.0079 1205.6288
track 0.0118 0.013 0.0075 0.0079 0.0103 0.0084 0.0079 -633.2044
scene 0.0036 0.0053 0.0048 0.0076 0.0068 0.0098 0.0076 878.8559
structur 0.0077 0.0046 0.0052 0.0056 0.0082 0.0074 0.0076 678.7717
spars 0 0.0012 0.0032 0.0049 0.0078 0.0064 0.0076 659.9667
human 0.0041 0.0065 0.006 0.0046 0.0053 0.0037 0.0076 378.7
motion 0.0092 0.0114 0.0083 0.0069 0.0078 0.0064 0.0069 -955.5507
discrimin 0.0041 0.0059 0.0048 0.0039 0.0039 0.0068 0.0066 892.8704
pose 0.0026 0.0056 0.0052 0.0036 0.0053 0.0037 0.0066 735.3733


use,viaなどはstop wordでは除去されませんでしたが、その他の単語は分野特有のものと言えそうです。この中ではvideo,visual,scene,discmiminationなどの言及が多くなってきているようです。

  • 単語出現頻度の変遷

3年分以上出現した単語の頻度の変動を線形回帰でfittingし、上昇率の高いもの順にソートしました。

words rate2008 rate2009 rate2010 rate2011 rate2012 rate2013 cc
handl 0.000619 0.000397 0.000657 0.000713 0.000676 0.000662 11754.562549
auxiliari 0 0 0.000328 0.000357 0.000338 0.000331 10287.960558
extens 0 0 0.000328 0.000357 0.000338 0.000331 10287.960558
product 0 0 0.000328 0.000357 0.000338 0.000331 10287.960558
epitom 0.000309 0.000397 0.000328 0.000357 0.000338 0.000331 9561.668921
vari 0.000309 0.000397 0.000328 0.000357 0.000338 0.000662 8951.218631
grammar 0 0 0.000328 0.000357 0.000338 0.000662 7906.299359
reidentif 0 0 0.000328 0.000357 0.000338 0.000662 7906.299359
superpixel 0.000309 0 0.000328 0.000357 0.000338 0.000662 7620.173933
groupwis 0 0.000397 0 0.000357 0.000338 0.000331 7425.987594
imagenet 0 0.000397 0 0.000357 0.000338 0.000331 7425.987594
convolut 0.000309 0.000397 0.000657 0.000357 0.000676 0.000662 7216.027657
leverag 0 0 0.000328 0.000357 0.000676 0.000662 6773.2128
egocentr 0 0 0.000328 0.000713 0.000338 0.000662 5884.774022
fisher 0 0 0.000657 0.000357 0.000338 0.000331 5360.434432
spheric 0 0 0.000657 0.000357 0.000338 0.000331 5360.434432
relationship 0 0.000397 0.000328 0 0.000676 0.000662 5325.600243
link 0.000309 0.000397 0.000328 0.000713 0.000338 0.000331 5273.502525
quantiz 0.000309 0 0.000328 0.000357 0.000338 0.000993 5153.547134
topic 0.000619 0.000397 0.000328 0.000357 0.000676 0.000993 5120.518252
intrins 0.000309 0.000397 0.000657 0.00107 0.000676 0.000993 5048.845481
crfs 0.000309 0 0.000328 0 0.000676 0.000662 5025.904292
network 0.000619 0.00119 0.000985 0.000713 0.001014 0.001324 5017.29978
unlabel 0 0.000397 0.000328 0.000357 0 0.000662 4911.436736
consensus 0.000619 0.000397 0.000328 0.000357 0.000338 0.000662 4840.023755
wild 0 0.000397 0.000328 0 0.000676 0.000331 4832.980156
partbas 0 0.000397 0 0.000357 0.000338 0.000993 4731.53994
confid 0.000309 0 0.000328 0.000357 0 0.000662 4572.652372
hand 0.000309 0 0.000328 0 0.000676 0.000331 4499.789422
window 0.000309 0 0.000328 0 0.000676 0.000331 4499.789422

出現頻度が1桁台のものが多いため分散が大きいのですが、以下のような傾向が読み取れます。

  • handle,extension,auxiliaryなど割合一般的な単語が上昇率が高いようです。
  • productは製品という意味と積という意味があるので、分離が必要かもしれません。
  • grammar,superpixel,egocentricなどは特筆すべき単語かと思われます。
  • link, relationship, networkなどは似たような意味で、関係性に関する研究が多くされていることを示しているようです。
  • imagenetはdatasetの名称です。利用している人が多くなっているのだと思います。
  • fisherはfisher計量、fisher情報量のことかと思われます。
  • crfsはConditional Random Fieldの略かと思われます。

最後にWordCloud化したものです。
stemming前版
単語の見栄えは良いですが単数、複数が重複したりしてしまっています。
CVPR2013

CVPR2012

stemming後版
語幹だけになってしまっています。
CVPR2013

CVPR2012

library(tm)
library(wordcloud)
library(RColorBrewer)
source("gencorpus.R")

wcimage <- function(imagename,ap.d){
  pal2 <- brewer.pal(8,"Dark2")
  png(imagename, width=1280,height=800)
  wordcloud(ap.d$word,ap.d$freq, scale=c(8,.2),min.freq=3,
            max.words=Inf, random.order=FALSE, rot.per=.15, colors=pal2)
  dev.off()
}

genwc <- function(dat,imagename,stemn){
  cp <- gencorpus(dat,stemn)
  wcimage(imagename,cp)
}

genwc.fromfile <- function(fname,imagename,stemn=T){
  dat <-read.csv(fname,col.names=F,sep="\n")
  genwc(dat,imagename,stemn)
}