mots quotidiens.
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp by hns, version 2.10-pl1.

先月 2023年09月 来月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

2023年01月07日() [n年日記]

#1 ACL2Vec & ACL2Vec-authors

2022年の年末に, 自然言語処理の実質的に全論文が集まる ACL anthologyの論文を「内容」で検索できるニューラル検索システム, "ACL2Vec" を公開しました。これは, 2021年の言語処理学会年次大会で発表した "Researcher2Vec" [PDF] の方法を, 2022年秋までのACL anthologyの内容が全て含まれている新しいデータセット, https://github.com/shauryr/ACL-anthology-corpus に対して適用したものです。 この方法は完全に統計的に動いており, 内部的には1000次元のニューラル文書ベクトルをSVDで効率的に計算し, 基本的な線形代数を用いて最適解を返すものになっています。

この方法を拡張して, 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系の論文に限ってみれば確かにそうだろうなと思います。 実際には私はロボティクスなど他の分野の論文も出しているので, もし全体のデータセットで計算できたとすると, もう少し統計的なキーワードは変わるのではないかと思います。
なお, ACL2Vec-authorsと同様な研究者推薦システムは, 私が分析研究員を務める日本学術振興会の学術情報分析センターですでに稼働していますが, キーワードや論文PDFに基づいて動的に推薦を行うシステムの実装は, 今回が初めてとなります。


2022年07月15日(金) [n年日記]

#1 参院選からみる東京の「市区ベクトル」

先週, 全国で参議院議員選挙が行われました。今回は特に, 投票を呼びかける動きが多く見られたように記憶しています。私も, 出張先の名古屋で街頭演説を耳にしつつ, 日曜日に東京に戻って投票所に足を運びました。

選挙の結果はともかく, 終了後に NHKの開票速報 を見て気付いたことは, リンク先のページで一番下の「開票所」をクリックした時に現れる, 区ごとの投票結果がかなり異なるということでした。
たとえば, 私の投票した港区では海老澤由紀氏が2位で11.3%の得票率があるのに対し, 新宿区では5位で9.2%にすぎません。一方で港区では山添拓氏は6位で8.2%なのに対し, 新宿区では2位で, 11.8%もの得票率があります。 中野区では, 共産党の山添拓氏が自民党の朝日健太郎氏を抜いて1位になっています。 一番わかりやすいのは, 公明党の竹谷とし子氏が大田区, 北区, 板橋区, 荒川区, 八王子市などでは1位になっているということでしょう。 区だけでなく市部や離島にも大きな違いがあり, 神津島や三宅島では生稲晃子氏が圧倒的な得票で1位, 小笠原村では山本太郎氏が1位になっています。

これは, ある程度は所得や基盤地域(創価学会が多摩地域に大きな基盤を持っているなど)で説明できますが, 2位以降も含めると, 市区の間にはかなり似ているもの, あるいは違うものがあり, 選挙結果から統計的に地域の特徴が見えてきそうです。
そこで, 上のページから各市町村の選挙結果をテキストにコピペし, Pythonでパーズしてデータを作り, 統計的に分析してみました。 *1

・ 投票率の違い

まず, そもそも投票率が利島村の77.74%から瑞穂町の48.44%まで, かなり違いがあることに気づきます。この投票率の違いは, 自然に説明できる程度の分散なのでしょうか。
こういった場合には, 投票率そのものではなく, 各市町村の投票率の, 全体の投票率(56.55%)に対する比率を見るのが有効です。 *2 比が1であれば全体と同じということですので, 対数をとれば, 比が1のときに値は0になります。 地域 a での投票率を p(v|a), 全体での投票率を p(v) (=0.5655) とおくと, これは log p(v|a)/p(v) を計算することになります。これをプロットしたものが以下です。

これからわかるように, 投票率の差はほぼ正規分布で分布しているといってよいでしょう。ただし, 上位の3市町村, つまり利島村, 御蔵島村, 青ヶ島村は正規分布からの外れ値といえます。また, 外れ値とはいえませんが, それに続いて投票率の高い文京区, および逆に投票率の低い瑞穂町, 武蔵村山市, 足立区は正規分布のかなり裾の方に位置しており, 特異度が高い地域であることがわかります。

・ 「市区ベクトル」と相互情報量

さて, それでは本論の, 各市区の特徴を分析してみましょう。 これも同様に, それぞれの候補の, 東京都全体の平均得票率に対する比を計算すればよさそうです。各候補を c, 地域を a としたとき, 地域aでのcの得票率を p(c|a) と 表し, 東京都全体でのcの得票率を p(c) と表すと,

log p(c|a)/p(c)

を計算します。上でも計算したこの量は, 自己相互情報量(PMI)とよばれている量で, 地域 a と候補 c との相関を表す量 PMI(a,c) になっています。 各地域 a (たとえばa=千代田区) についてこれを34人の候補者について並べたベクトル, つまり

( PMI(a,c1), PMI(a,c2), …, PMI(a,c34) )

が, その地域の特徴ベクトルになります。 これは, 実は自然言語処理で知られている word2vec が計算している量と数学的に等価であることが示されています (Levy et al. 2014)。

上のベクトルのままでも地域の特徴は表せますが, word2vec と同様に, これを 次元圧縮することで, 情報をよりコンパクトに凝縮したベクトルを得ることができます。具体的には, PMI(a,c) を縦横に並べた行列を X とおくと,

X = USVT = (U√S)(V√S)T

とXを特異値分解します。このとき, U√SおよびV√Sの各列が, 地域および候補者を表すベクトルになります。この内積が大きければ, 元のデータでPMIの値が大きい, つまりその地域とその候補者の相関が大きいことを意味しているわけです。
特に, 特異値分解で上位2個の固有値および固有ベクトルをとれば, 最も違いの大きな直交する2次元で市区ベクトルを可視化することができます。 これを行ったのが下の図です。(クリックで拡大)

この方法では候補者も, 市区ベクトルと同じ空間に埋め込むことができます (ベクトルが似ていれば, そこで大きな支持があることを意味します)ので, 青字で示したのが候補者ベクトルです。
上の図は中心部にベクトルが集中していますので, 拡大したものが下の図です。 (クリックで拡大)

これを見ると, 図の上部に文京区, 千代田区, 武蔵野市といった文教的な市区が集まっている一方で, 郊外の市区は下の方に配置されていることがわかります。 また, 港区や渋谷区が最も左に, 青梅町や武蔵村山市 (および檜原村や神津島)が右に来ているのは, 横軸は「都会度」を表しているのかもしれません。この分析には, 各市町村の人口や位置はまったく用いていないことに注意してください。

この可視化は, あくまで最初の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 にて公開しています。


*1: NHKのページでは選挙結果はJavascriptで生成されていますが, それを解読して元データを得ることは, 少し見た限りでは容易ではないようでしたので, 地道に手作業でテキスト化することにしました。
*2: 投票率は確率ですが, 確率の対数は情報量としての意味を持ちますから, 情報量の引き算を行って差を見ることは, 確率の比を計算してから対数をとることと等価になります。

2 days displayed.
タイトル一覧
カテゴリ分類
 なかのひと
Powered by hns-2.10-pl1, HyperNikkiSystem Project