IR研究者をスコアリングしてみた

前回の記事に対するブックマーク,コメントありがとうございます.

最初の四天王は考えてみれば,アルゴリズムと検索アーキテクチャにかなり寄っていました.情報検索の中でも「全文検索システム」という観点で見ていたからです.
IRと一言でいっても(人工知能ほど大きな分野ではないかもしれませんが)自然言語処理データマイニングくらい広い分野です.四天王なんて枠組みではとうてい語ることなぞできませんでした.そしてIR四天王という名称は語弊を招く表現でした.言ってみたかっただけです,すみません.

分野ごとにあれば面白いという意見を頂いたり,具体的な研究者も紹介していただきました.ありがとうございます.

そんなコメントを頂いたにもかかわらず,ゆとりなんで自動的に研究者リストをつくれないかなぁということを考えていました.DBLPのデータを解析すれば,単純にトップ会議に沢山論文通している研究者取得できるじゃん,と思ったのが2時間ほど前.

とりあえずこんなことをやってみました.

  1. DBLPの各会議のデータを取得
  2. データから著者を切り出す
  3. 各著者に点数を付与する
  4. 合計数でソートして表示

以下,順番に説明していきます.

DBLPの各会議のデータを取得

DBLPでは,会議ごとに発表一覧のリストを取得することができます.例えばSIGIR2008の場合,

てな感じで,${confname}/${confname}${yaer}.htmlとなっています.

90年代になると,yyyyではなくてyy表示になります.


というわけでこんな感じのスクリプトで自動的に取得しました.
部分文字列を取得するのにbashって便利なんですね.

#!/usr/local/bin/bash

if [ $# -lt 3 ]; then
    echo "Input NAME FROM and TO"
    exit 1
fi

confname=$1;
for n in `gseq $2 $3` # Linuxな人はseqに書き換えてください
do
    year=$n
    if [ $n -lt 2000 ]; then
        year=${n:2}   # 90年代はyy.htmlになるから
    fi
    wget http://www.informatik.uni-trier.de/~ley/db/conf/${confname}/${confname}${year}.html
    sleep 3
done

こんな感じで使います.

% ./autowget.sh sigir 1978 2008
% ./autowget.sh www 2001 2008

データから著者を切り出す

正規表現でざっくり切り出しました.Invited paperなのか,regular paperなのかPoster paperなのか区別していません.

各著者に点数を付与する

今回はふたつのスコア方法を考えました.登場回数と著者順位重みづけ手法です.

  • 登場回数は1st authorだろうが,last authorだろうが名前が出れば1回とカウント
  • 著者順位重みづけは1st authorの重要度をそれ以外の著者よりも重くしてスコアづけ

具体的には,以下のコードのように論文の著者リストが与えられた際,1st authorに$FIRST_AUTHOR_SCORE(=0.8)を与えて,残りの著者に残りの点数(1-$FIRST_AUTHOR_SCORE)を分配するというものです.今回は0.8点を使いました.理由は特にありません.

# e.g., $FIRST_AUTHOR_SCORE = 0.8
# Receive author list and return score of them
sub divide_score {
  my ($score_of_ref, $count_of_ref, $author_list_ref) = @_;

  my $author_num = scalar @$author_list_ref;
  return 0 if ($author_num < 1);

  # If there is only one author, give her 1.0 and return
  if ($author_num == 1) {
    $score_of_ref->{ $author_list_ref->[0] } += 1.0;
    $count_of_ref->{ $author_list_ref->[0] } += 1;
    return 1;
  }

  # Add first author's score
  $score_of_ref->{ $author_list_ref->[0] } += $FIRST_AUTHOR_SCORE;
  $count_of_ref->{ $author_list_ref->[0] } += 1;

  # Calculate other authors' score
  my $rest_score = (1 - $FIRST_AUTHOR_SCORE) / ($author_num - 1);
  for (my $i = 1; $i < $author_num; $i++) {
    $score_of_ref->{ $author_list_ref->[ $i ] } += $rest_score;
    $count_of_ref->{ $author_list_ref->[ $i ] } += 1;
  }

  return 1;
}

合計数でソートして表示

というわけでSIGIR78-2008, WWW2001-2008のデータに対して分析を行いました.結果は以下においておきます.


以下,上位20件ずつ見てみましょう.結果は<名前 頻度 スコア>となっています.Croft先生最強すぎワロタww
けっこう結果が変わりますね.神々をスコアリングするだけで罪な行為のような気がするので,細かい考察はパス.

登場回数順

W. Bruce Croft 62 20.6566666666667
Wei-Ying Ma 30 1.76714285714286
Zheng Chen 29 2.83047619047619
James Allan 28 9.95
ChengXiang Zhai 28 6.31666666666667
James P. Callan 22 7.47333333333333
C. Lee Giles 21 2.16666666666667
Mark Sanderson 20 7.51666666666666
Susan T. Dumais 20 6.13333333333333
Clement T. Yu 19 5.55
Chris Buckley 19 8.36666666666667
Justin Zobel 19 4.05
Norbert Fuhr 18 13.05
Ophir Frieder 18 2.02333333333333
Maarten de Rijke 18 2.08333333333333
Jian-Yun Nie 17 4.75666666666667
Charles L. A. Clarke 17 6.7
Alistair Moffat 17 4.61666666666667
Ryen W. White 16 8.83333333333333
Douglas W. Oard 16 3.16666666666667

スコア順

W. Bruce Croft 62 20.6566666666667
Norbert Fuhr 18 13.05
Gerard Salton 16 11.2
Ellen M. Voorhees 15 10.1
James Allan 28 9.95
K. L. Kwok 10 9.8
Abraham Bookstein 13 9.46666666666667
Yiming Yang 14 9.4
Tetsuya Sakai 14 9.19871794871795
Javed A. Aslam 14 9.05
Ryen W. White 16 8.83333333333333
Chris Buckley 19 8.36666666666667
Edward A. Fox 15 8.24
C. J. van Rijsbergen 14 8.2
Donna Harman 9 7.8
Peter G. Anick 9 7.6
Mark Sanderson 20 7.51666666666666
James P. Callan 22 7.47333333333333
Nicholas J. Belkin 15 7.19523809523809
Ian Soboroff 13 7.04

まとめとFuture work

思いつきでこんなことをしてみました.お見せした結果はSIGIRとWWWだけですが,DBLPにページがあれば他分野でも同じことができます.今回使ったツールを以下においておきますので,もしよかったら改良して使ってみてください.簡単な使い方とダウンロードしたデータが中に含まれています.

future workとしては,セッション名や共著者情報使って分野クラスタリングすることが考えられますが,誰かやってくれないかなぁ...