mots quotidiens. | |
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp | by hns, version 2.10-pl1. |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
この方法を拡張して, Researcher2Vecにもあるように, 各研究者の「研究者ベクトル」を計算することで, キーワードから研究者を検索できる"ACL2Vec-authors"をさらに公開しました。 「Score」とは, 検索キーワードから計算した仮想的な文書ベクトルと研究者ベクトルのコサイン距離のことです。(クリックで拡大)
![]() | ![]() |
これは元々は私がTACLのEditorとして査読者を見付けるのに, 何か自動化が必要だと感じて開発したものなので, キーワードを入れるだけでなく, 論文のPDFを指定すると, 内部でそれをアップロードしてテキストに直して解析し, その統計量から最も近い研究者を表示するシステムも含めました。
上記のインターフェースは一見簡単に見えますが,
HTMLの<input type="file">をそのまま使うと, submit後に指定したファイル名が消えてしまいます。
このため, 自前で別に赤いボタンの<input type="button">を用意し, それをクリックするとCSSで非表示にした見えない
<input type="file"> が起動され, その状態が変更されるとファイル文字列が書き換わるようにする, というようなJavascriptとCSSを書く必要があり, 年末にコーディングしましたが, 正しく動くまでかなり大変でした。(本職のwebデザイナーの方であれば, このくらいは余裕なのだと思いますが..。)
内部ではPythonのPDFminerでPDFをテキスト化して解析していますが, PDFによっては失敗することがあるため, その場合はそれを自動的に検出してPyPDFの方で処理する, というような仕組みになっています。PDFを解析した結果, 下記の方法で計算されるその論文の統計的なキーワードが表示されるため, その意味でも結構面白いと思います(右の画像)。
さらに, 単に研究者の名前が表示されるだけではどんな人かが分からないため, 予め研究者を表すキーワードを統計的に計算しておき, 上記の画像のようにそれを表示するようにしました。
これは, 各研究者ベクトルから予想される単語確率のNPMI (Normalized PMI)の上位を表示したものです。
具体的には, 研究者 a が単語 w を出力する確率 p(w|a) はモデルから求めることができますが, これをwの平均的な確率と比較して対数をとった log p(w|a)/p(w) は研究者aと単語wの自己相互情報量(PMI)を表しています。ただしこれは, wの確率p(w)が小さいと過敏に反応するため, PMIの最大値である -log p(w,a) との比をとったNPMIを用いるのが適しています。
今の場合, wとaが完全に相関していれば, p(w,a)=p(w)=p(a)なので, NPMIは
NPMI(w,a) = - (log p(w|a)/p(w)) / (log p(w))で求めることができます。
実際に計算してみると, これは研究者の特徴をかなり正確に表しており, 非常に面白い情報になりました。ACL anthologyに5本以上論文がある研究者8963人の統計的なNPMIキーワードを計算したものが
こちら
です。(論文数の多い順)
これは, 自然言語処理の研究者にとっては, いくら見ていても飽きないほどの情報な気がします。たとえば松本先生やグラムさんのNPMIキーワードは
Yuji Matsumoto japanese, method, dependency, word, pos, proposed, corpus, because, parsing, words Graham Neubig translation, bleu, nmt, languages, decoder, language, source, training, model, resourceとなっており, 確かにそういう気がします。 有名所では例えば
Dan Klein parsing, manning, petrov, parse, over, likelihood, collins, substantially, penn, model Kathleen McKeown summarization, summary, summaries, generation, views, sentences, content, sentence, document, produce Mark Steedman ccg, categorial, combinatory, parser, category, parsing, derivations, np, categories, derivationで, これも非常に妥当な結果に思えます。 なお, 私自身のキーワードは
Daichi Mochihashi bayesian, gram, probability, japanese, sampling, segmentation, dirichlet, distribution, gibbs, wで, ACL系の論文に限ってみれば確かにそうだろうなと思います。 実際には私はロボティクスなど他の分野の論文も出しているので, もし全体のデータセットで計算できたとすると, もう少し統計的なキーワードは変わるのではないかと思います。
選挙の結果はともかく, 終了後に
NHKの開票速報
を見て気付いたことは, リンク先のページで一番下の「開票所」をクリックした時に現れる, 区ごとの投票結果がかなり異なるということでした。
たとえば, 私の投票した港区では海老澤由紀氏が2位で11.3%の得票率があるのに対し,
新宿区では5位で9.2%にすぎません。一方で港区では山添拓氏は6位で8.2%なのに対し,
新宿区では2位で, 11.8%もの得票率があります。
中野区では, 共産党の山添拓氏が自民党の朝日健太郎氏を抜いて1位になっています。
一番わかりやすいのは, 公明党の竹谷とし子氏が大田区, 北区, 板橋区, 荒川区, 八王子市などでは1位になっているということでしょう。
区だけでなく市部や離島にも大きな違いがあり, 神津島や三宅島では生稲晃子氏が圧倒的な得票で1位, 小笠原村では山本太郎氏が1位になっています。
これは, ある程度は所得や基盤地域(創価学会が多摩地域に大きな基盤を持っているなど)で説明できますが, 2位以降も含めると, 市区の間にはかなり似ているもの,
あるいは違うものがあり, 選挙結果から統計的に地域の特徴が見えてきそうです。
そこで, 上のページから各市町村の選挙結果をテキストにコピペし,
Pythonでパーズしてデータを作り, 統計的に分析してみました。
*1
上のベクトルのままでも地域の特徴は表せますが, word2vec と同様に, これを 次元圧縮することで, 情報をよりコンパクトに凝縮したベクトルを得ることができます。具体的には, PMI(a,c) を縦横に並べた行列を X とおくと,
X = USVT = (U√S)(V√S)T
とXを特異値分解します。このとき, U√SおよびV√Sの各列が, 地域および候補者を表すベクトルになります。この内積が大きければ, 元のデータでPMIの値が大きい, つまりその地域とその候補者の相関が大きいことを意味しているわけです。この可視化は, あくまで最初の2個の固有ベクトルを用いたもので, 3個目以降にはもっと有益な情報が隠れている可能性があります。3個の固有ベクトルを用いれば, ベクトルを3次元にプロットすることができます。 これを行ったものが下の図です。
こうして特異値分解(=主成分分析)を使わず, 単に市区ベクトルを t-SNE で2次元に可視化することも可能ですが, その場合は結果は次のようになります。 この場合は非線形な可視化になるため, ベクトルの要素を全部使える一方で, 軸に上下左右の意味はなくなってしまいます。似た市区町村は確かに近い位置に配置されているものの, 本当に文京区と利島村が近いのかには, 疑問の余地がありそうです。なお, 上の分析は, すべての候補者34人の情報を等価に用いると, 泡沫候補の一致が不必要に高く評価されてしまうため, 得票数上位15人のデータを用いています( (PMI(a,c1),…,PMI(a,c15) )を実際の特徴ベクトルにしています)。この値を変えると結果が変わるため, PMI(a,c)をその候補者の得票確率p(c)で重みづけることが考えられますが, そうするとword2vecとの対応関係がなくなるため, 単語ベクトルに関して知られている様々な理論的な性質が保証されるかどうかについては, 検証が必要になりそうです。
なお, 分析に用いたデータおよびPythonスクリプトは, すべてGithubのレポジトリ https://github.com/daiti-m/tokyo2022 にて公開しています。
タイトル一覧 | |