指導教員と専門が違う分野の研究で修士号をとる話(NLP)

はじめに

修論審査がおわり、おおよそ修士号を取れるだろうということでこれを機にまとめておこうかと。
 
以下の二つあたりのブログをなるほどと思いながら読んでいましたが、お二方ほど文才もないのでサクッとポエムを書きます。
 

置かれた環境

某大学で自然言語処理と全く関係ない専攻で自然言語処理の研究をしていました。

このようなことができる環境から分かる通り放置系の類の研究室です。

放置が必ずしも悪いことではないことはその類のラボに所属している方ならお分かりいただけると思いますが、軽くメリットとデメリットをまとめ直しておくと以下の通りです。

 
メリット
  • (一定の範囲内で)好き勝手に研究をできる
  • 研究室のことで拘束されることはほぼない
 
デメリット
  • 専攻内や研究室内に研究の相談ができる相手が(ほとんど)いない
  • 同じ分野内の少し違うところに関する知見が入ってきづらい
 

なんでそんな研究を?

そもそもなんで言語処理を始めようと思ったのか?
かいつまんでいってしまえば言語処理に興味が出たから
(今思えばあさはかだったのかもしれないし、大学なり専攻なりを変えるべきだったのかもしれない。)
 
私が所属していた研究室は学生がテーマを見つけそれを進めることが推奨される研究室だった。B4~M2の間同じ研究室に所属していたが概ね方針が変わることはなかった。
 
僕がB4として研究室に配属された時、先輩たちがJSAIの話をしていたことを覚えているし、一年後に僕もそういうところに行くのかな?とか思っていた。
B4当時、そもそも外で発表するということ、学会に行くということがどういったことがわかっていなかった。B4の僕はおそらく見込みがある卒論は指導教官からの指示のもとコンパクトにまとめて学会に行く、論文を出すものだと思っていた。
卒論が終わる頃になっても特にどこかへ出そうとか何も言われなかったので
僕の研究は屁のつっぱりにもならないものだったのだろうと思ったので、軽く鬱々とした気持ちになったことを今でも覚えている。
 
どうせ指導教員から見込みがないと思われているなら、好き勝手な研究をしようと思ったので修士からはちょうど興味のあった言語処理をしようと思った。
学部時代は、自然言語処理ひいては機械学習といった分野に(ほとんど)触れてこなかったので、そういった関連の授業を取ってみた、問題意識を持って授業に望んでいたので、疑問点が多々生まれたり、理解のしどころがわかったりした気分に浸った。
 
M1の夏に大まかなテーマを決めた、M1の冬まではその関連分野の理解を始めた。初めての分野にほぼ素っ裸で乗り込んだので論文を読むのは難航したりしたが、大元になる論文を読み終えて実装したりしてなんとか頑張り始めた。
M1の終わり頃から研究に行き詰まりを感じた、誰にもなんとも言えない相談ができないつらいみたいな心境で悶々とした。
 
M2の夏頃から色々なところ(勉強会とか)に顔を出してみることにした。こんな世界があったのかと思ったと同時に自分が今までやって来たことは……という気持ちになった。
M2の秋頃になんとかそれっぽさが見えてきたので冬に向けて実験したりしてなんとかまとめた。結果として全く関係ない専攻で自然言語処理に関する論文を出して学位を取ることになった。
 

おわりに

ここまで読んでしまった人ならお分かりかもしれないが、要は決断や行動をしなかった僕の責任がほとんどを占める。

こんな私でも修士号が取れてしまうことが本当に恥ずかしいので、今後はもっと頑張っていきたい・・・

周りに同じ分野の研究をしている人がいればこんな状況には陥らないだろうし、もし万が一私みたいな境遇の人がいたら頑張ってやっていって欲しいという反面教師としてまとめたみたいなところがあるので参考になる人がn人でもいれば幸いです。

 
 
 
 
 

gensimのPoincaré Embeddingsで本当に少しだけ遊ぶ

はじめに

 

gensimにPoincaré Embeddingsが入るなぁ〜って話を思い出したので軽く試したことをまとめておきます。

 

Poincaré Embeddingsとはユークリッド空間ではない双曲空間に埋め込む手法の一つで、NIPS2017で発表されたものです。*1

Poincaré Embeddings for Learning Hierarchical Representations

 

こちらに実装をされている方がいるのですごい......

異空間への埋め込み!Poincare Embeddingsが拓く表現学習の新展開 - ABEJA Tech Blog

 

こちらの方は双曲空間上での学習についてより詳しく触れられています。(18/01/10 追記)

 

Poincare Embeddingの実装について - にっき

 

こちらの方は論文紹介の形でわかりやすい説明をしています。(18/01/10 追記)

 

Poincaré Embeddings for Learning Hierarchical Representations // Speaker Deck

 

数式よりの話は上記のいずれかを見た方が良いですし、原論文を読んだ方がいいと思います。

 

やったこと

原論文ではWord Netのデータを与えていたと思いますが、他のデータを食わせるとどうなるんだろう?みたいなことを思ったので都道府県の隣接を関係とみなして与えてみました隣接の定義は都道府県隣接関係一覧を参考にした上で沖縄県は省きました。

 

注:こういった地図の隣接関係のようなものはスケールフリー性を満たさず、木構造でもないので双曲空間への埋め込みに適した構造ではないようですので、あくまでやったらこうなった系のお話だと思ってください(時間ができたらちゃんとデータ見繕ってやります......)(18/01/10 追記)

 

 

 

入力と出力は端的に言うと以下

  • 入力:関係データのタプル(Word Netであっても上位下位とかは明示的に与えないようです。)
  • 出力:各々の項目の座標(これに基づき類似度などの計算がされる)

 

 

コードは本当にたいしたものではないのでgistにちょろっと載せました。

gensimではpoincare embeddings用の可視化の実装までされていたのでその結果を付します。

 

f:id:cl_hair:20180109181208p:plain

 

この図を見ての雑な考察としては、

  • 気持ち、日本地図が丸まったような感じに見えないことはない気がする......
  • 九州や四国といった隣接県関係がそこでほぼほぼ閉じているところは固まっている......

です。

 

おわりに

gensimを使うことで関係データや木構造に対して簡単にpoincare embeddingsが試せることがわかりました。

双曲空間への理解が浅いので原論文を読み返すなりなんなりしようと思います......

色々なご指摘を受けて自分の浅学さを知りました......ご指摘下さった方に感謝します。(18/01/10 追記)

 

 

 

*1:それ以前に確かarxivに挙げられていたはずですが

グラフィカルモデルを綺麗に書く(未完成)

あらまし

「グラフィカルモデルを綺麗に描きたい」
という欲求は誰にでも存在する [要出展]

毎度のごとく、ペイントソフトやパワーポイントを使ってグラフィカルモデルを描くのはなんとももどかしい。

そんな悩みを吐露したら、綺麗に書けるライブラリを教えていただいた。

それがdaftと呼ばれるpythonで使えるライブラリで、日本語ではこちらで紹介されている。

nzw0301.github.io

各関数の定義などはこちらのブログの方が詳しいので割愛させていただく。

やったこと(やりたいこと)

以下を用意した時に自動的にグラフィカルモデルを描いて欲しいと思ったので、 それが行えるようなクラスを作った。

(自分的には以下の要素が最低限構築に必要な要素かな?と思っている。)

  • ノードに付するラベル(αとかwとか)
  • ノードの位置関係
  • 各エッジの始点ノード、終点ノードの関係
  • 各プレートで囲むノードの集合  

現状出来ていないのはプレートを囲むノードの集合からうまく落とし込むところ、 というのも単純なモデルならなんとかなるが、複雑な図を描こうとするとちょっと面倒臭くなる。

プレートは大きく分けて二つに分けられて、

  • 他のプレートと独立しているもの(LDAの場合、Kに相当)
  • 他のプレートと関係があるもの(LDAの場合、DやNに相当)

となるので今回は明示的にこれを定義してしまっている。  

コードはこれ

コードの説明

LDAを例にとって軽く説明を付します。

上記の定義をどうしたか

  • ノードに付するラベル(αとかwとか)

辞書で定義、tex記法(と呼んでいいのかしら?)で文字は書けるので、各種文字や下付き上付きなどが表現できる。良い。

node_list = {"alpha":r"$\alpha$",
             "theta": r"$\theta$",
             "z":r"$z$",
             "w":r"$w_i$",
             "phi": r"$\phi$",
             "beta": r"$\beta$"}
  • ノードの位置関係

二次元arrayで定義した、上で定義した辞書のkeyを位置と対応させて配置する。 この表現でいいのかは疑問だけど、とりあえずこれで。

node_pos = np.array([["alpha","" ],
                     ["theta",""],
                     ["z",    ""],
                     ["w",    ""],
                     ["phi"   ,""],
                     ["",     "beta"]])
  • 各エッジの始点ノード、終点ノードの関係

(始点,終点)といった形で表現されたエッジをリストで保持

edge_list = [("alpha", "theta"),
            ("theta", "z"),
            ("z", "w"),
            ("beta", "phi"),
            ("phi", "w")]
  • 各プレートで囲む変数の集合

これまたこの表現でいいのかわからない。。。 上で述べたようにプレートは大きく二つに大分されるので、 それぞれを"人手"で判断して定義する(ここをどうにかしたい)

plate_list = {"depend":[[r"$D$",["theta","z","w"]],[r"$N$",["z","w"]]],
              "independ":[[r"$K$",["phi"]]]}

To Do

  • プレートの包含関係とかを(半)自動的に識別する。
  • プレートの配置を""いい感じ""にする。(どうするのか?)

まとめ

気が向いたら、改良しようかなと思ってるけど、図の描画は一回限りのことが多かったりもするので、 そこまで使用頻度は結局のところ高くないのかもしれない。。。

こんなことはもう◯◯で既に出来る!みたいなご指摘があったら是非教えていただきたいです。

余談

  • コードを見てもらうとお分かりかもしれないが、Plateの位置調節の値は経験的に決めているのでdependの方のplate数が増えるとうまく行かないです
  • 先輩や同輩には、keynoteinkscapeの方が綺麗と言われたorz...。
  • グラフの描画としてigraph(http://igraph.org/python/)に触れた時は力学モデル?を用いてノードを配置する(レイアウトって呼ばれてた)。 みたいなのがあったけどグラフィカルモデルの場合は出来なさそうだなぁと思ったりなどした。

 

NIPS2017、気になる論文リストアップ

NIPSのAccepted Papersの一覧が出てたことに気づいた。

https://nips.cc/Conferences/2017/AcceptedPapersInitial

Abstとかはまだ上がってないので、現時点でタイトル見て気になる論文をピックアップしておく(備忘録として)

採択数めっちゃ多い気がする、このうち何本を読むのだろうか......(ピックアップしたのは17件)

  • Probabilistic Models for Integration Error in the Assessment of Functional Cardiac Models
    Chris Oates (Newcastle University) · Steven Niederer (Kings College London) · Angela Lee (King's College London) · François-Xavier Briol (University of Warwick) · Mark Girolami (Imperial College London)
  • Structured Embedding Models for Grouped Data
    Maja Rudolph (Columbia University) · Francisco Ruiz () · David Blei (Columbia University)
  • Best of Both Worlds: Transferring Knowledge from Discriminative Learning to a Generative Visual Dialog Model
    Jiasen Lu (Georgia Tech) · Anitha Kannan () · Jianwei Yang (Georgia Tech) · Dhruv Batra () · Devi Parikh (Georgia Tech / Facebook AI Research (FAIR)) 
  • Universal Style Transfer via Feature Transforms
    Yijun Li (University of California, Merced) · Chen Fang (Adobe Research) · Jimei Yang (Adobe Research) · Zhaowen Wang (Adobe Research) · Xin Lu (Adobe) · Ming-Hsuan Yang (UC Merced)
  • Multimodal Learning and Reasoning for Visual Question Answering
    Ilija Ilievski (National University of Singapore) · Jiashi Feng (National University of Singapore)
  • Question Asking as Program Generation
    Anselm Rothe (New York University) · Brenden Lake (New York University) · Todd Gureckis (New York University)

  • A Dirichlet Mixture Model of Hawkes Processes for Event Sequence Clustering
    Hongteng Xu (Duke University) · Hongyuan Zha (Georgia Tech)
  • Parallel Streaming Wasserstein Barycenters
    Matthew Staib (MIT) · Sebastian Claici (MIT) · Justin M Solomon (MIT) · Stefanie Jegelka (MIT)

  • Deep Voice 2: Multi-Speaker Neural Text-to-Speech
    Andrew Gibiansky (Baidu Research)
  • Sparse k-Means Embedding
    Weiwei Liu (UTS) · Xiaobo Shen (NJUST) · Ivor Tsang (University of Technology, Sydney)

  • Collecting Telemetry Data Privately
    Bolin Ding (Microsoft) · Janardhan Kulkarni (Microsoft Research) · Sergey Yekhanin (Microsoft)
  • Visual Interaction Networks
    Nicholas Watters (Google DeepMind) · Daniel Zoran (DeepMind) · Theophane Weber (DeepMind) · Peter Battaglia (DeepMind) · Razvan Pascanu (Google DeepMind) · Andrea Tacchetti (MIT)
  • Q-LDA: Uncovering Latent Patterns in Text-based Sequential Decision Processes
    Jianshu Chen (Microsoft Research, Redmond, W) · Chong Wang () · Lin Xiao (Microsoft Research) · Ji He (University Washington) · Lihong Li (Microsoft Research) · Li Deng (Citadel)
  • Learning from Complementary Labels
    Takashi Ishida (Sumitomo Mitsui Asset Management, The University of Tokyo, RIKEN) · Masashi Sugiyama (RIKEN / University of Tokyo) · Gang Niu (The University of Tokyo / RIKEN)
  • Discriminative State Space Models
    Vitaly Kuznetsov (Google Research) · Mehryar Mohri (Courant Institute and Google)
  • Conic Scan Coverage algorithm for nonparametric topic modeling
    Mikhail Yurochkin (University of Michigan) · Aritra Guha (University of Michigan) · XuanLong Nguyen (University of Michigan)
  • Interpretable and Globally Optimal Prediction for Textual Grounding using Image Concepts
    Raymond Yeh (University of Illinois at Urbana–Champaign) · Jinjun Xiong (IBM Research) · Wen-Mei Hwu () · Minh Do (University of Illinois) · Alexander Schwing (University of Illinois at Urbana-Champaign)

 

ちょい別枠

  • Deep Sets
    Manzil Zaheer (Carnegie Mellon University) · Satwik Kottur (Carnegie Mellon University) · Siamak Ravanbakhsh (CMU/UBC) · Barnabas Poczos (Carnegie Mellon University) · Ruslan Salakhutdinov () · Alexander Smola (Amazon - We are hiring!)

寝ぼけ眼で見ていても所属のところにWe are hiring! って書いてあったから、どういうことなんだろう...(そういうことなんだろうか?)ってなったのでメモしておく。

 

YANS2017に参加してきました。

2017年9月3日〜9月5日に沖縄で開催されたNLP若手の会(通称YANS)に初めて参加および発表をしてきたので、その感想について軽くまとめます。

参加に至る経緯

 僕が所属している専攻および研究室は(おそらく)どこへも研究発表をしないでも卒業ができてしまう環境にあるが、僕はどこへも発表しないで、また言語処理の人の意見を聞かずにそのまま卒業して行くことに危機感を持っていたし、今年の言語処理学会には何も出せなくてより一層危機感が強まっているなか、適当に調べていたらYANSの存在を知ったので参加を決めた。

 僕自身、こういった対外的な発表は初めてな上に普段は言語処理をしている人が周りにいないので言語処理をしている人への研究の話も初めての経験だったのですこぶる緊張したが思い切って参加して良かったと思う。

全体的な所感

  • 有名な研究室関係の人が多い

東北大乾研・NAIST松本研・首都大小町研・東大鶴岡研・東大喜連川研・東工大奥村研・京大黒橋研etc...といったようなNLPの研究をしている学生なら聞いたことある研究室の方々が多く参加されていた。これは、学生や教員というだけでなく企業の方でも上記の研究室出身の方が多かったように感じた。

  • 若い方が多い

僕自身M2なので、お前が若いとか言うなと言われるかもしれないけれど、M1にB4さらにはB2の方までいてさらには発表までしていたりして、自分がB4だったりB2だったりした時を思い出すととてもすごいことだと感じた。

  • 年齢とか所属を気にせず会話できる

研究に関する話をするときにあまり上下関係を気にしすぎても話が滞るというのが僕の持論なので、そういった意味ではすごくお話させてもらいやすい環境でした。これは発表や懇親会、二次会などあらゆるところでそうだったので良かったです。

  • 名刺

企業の方だけでなく学生の方も名刺を持っていて交換していたりしてすごいなぁと思った、一方的に名刺をもらったので少し申し訳なかったり思う。 

  • 部屋のランダム性

合宿形式であり、ほとんどの方が同じ宿に泊まるわけだが、部屋割りはランダムらしく僕の部屋は僕以外社会人の方の部屋だったので普段とは違った新鮮な体験だった。

 

あまり真面目ではない話

切符を買うということを最近あまりしなくなったが、沖縄ではSuicaが使えないっぽいので切符を購入。改札を通ろうと切符の差し込み口を探すも見つからない。ゆいレールの切符はQRコードをかざすということを駅員の説明で理解。

(使い終わった切符の回収箱があったりしてなんとも言えなかった)

初日の交流会でビーチ行くやつに参加しようとしたけど雨が降っていると聞いたので突如現れたボドゲ組に参加した。「コードネーム」*1と「ピタンゴ」*2というゲームをやった。

ざっくり言うと前者は二つのチーム戦でチームリーダーが自分のチームのカードに書かれた名詞の共通項で味方にどれが自分のチームのカードかを当てるゲーム

後者はしりとりの亜種みたいな感じでカードに書かれた「◯◯な」といったものに続けて単語を発してそれをしりとりの一塊として続けて行くゲーム

僕はボキャ貧なので後者のゲームの方が苦手だった。

  • 沖縄の締めはステーキ

オープンニングの際に委員長の中澤さんが

「沖縄では締めにラーメンではなくステーキを食べるそうですよ」(意訳)

と言ったことをおっしゃっていたが、嘘だと思ってたし、食べに行くつもりもあまりなかったが、二日目の夜にステーキを食べに行く流れに見事に乗ってしまった。

ホテルの近くの有名店らしいステーキ屋*3に行ったら23時くらいだったのにめちゃくちゃ混んでるので本当に締めはステーキなのかもと思ってしまった。(実際ステーキはやわらかくて美味しかった)

自分の発表について

上記の通り、僕にとっては初めての対外発表かつポスター発表かつ初日ということでかなり緊張した。

普段、周りに自然言語処理について相談できる相手がいないので、根本的なところで勘違いをしているのではないか?そもそもこういったモデルで本当にいいのか?みたいなところを悩んでいたし、そもそもこういった研究発表をして他人に興味を持ってもらえるか?と不安だった。口頭発表みたいな感じのものであれば卒論の審査などで類似したものは行われるので、一応聞いてはもらえるが、ポスター発表は興味があるものを人が聞いて回るといったものだと思うので人が来なかったどうしようとも考えていた。

結果としては、色々な人に聞きにきてもらえて、素朴な疑問から鋭い質問までぶつけてくださって感謝です。特に企業の方々からの指摘は実問題に置き換えた話をしてくださるので身につまされました。以下ざっくりとした質問への所感。 

・ポスターに表示されているものの意味について

何も考えずにポスターにグラフィカルモデルを載せたのだが、それぞれのノードの意味とかを何も書いていなかったので、それぞれが何を表すのかが伝わりづらかったので反省。グラフィカルモデルで生成過程を示すくらいなら生成過程のイラストを作った方がわかりやすかったのかなと感じた。

・モデルの妥当性

各種パラメーターの決め方について、無意識下の拘束をしていたりしたことに気付かされたので少しはっとさせられた。 

 発表中の反省点としては以下二つ

  • ポスター発表の時にメモをとる習慣をつけたほうがいいことを学んだ。(メモ取らなかったせいで頭が少しパンクしてしまった)
  • ペットボトルの飲料を持ったほうがいいことを学んだ。(口がパサパサになる)

 ポスター発表はyoutubeで配信されていたらしいが、配信を見ていた弊研の人曰く僕の背中しか写っていなかったと言われたので僕の発表が配信されていたのかは定かではない......。

 

 他の方々の発表

自分の発表時の他の人の発表が聞けなかったのでどこかしらにポスターなりがあがってくれると嬉しいなと思ったり...。

個々の発表については取り上げないけれど、全体的に対話の話が多かった気がする。

僕が興味を持ったのは対話と意味表現的な話題が含まれているものが多かった。

僕の中で意外だったのはコーパスづくりといったことを学生の方が取り組んでいることでした。(僕自身研究でデータを自分で集めたりはするけれどそれとは規模感が違うなぁというニュアンスです)

最後に

昨年のうちに言語処理のコミニュティの人と交流をしていれば良かったなぁと思ったりしたのでとりあえず昨年の自分に会えたらとりあえずどこでもいいから外の人と交流してみろと言ってあげたい。

来年度以降も言語処理はやっているはずだし是非参加したいけれど参加できるかは今のところ未定。

(沖縄の観光を殆どできなかったので前泊か後泊をすれば良かった。)

 

言語処理学会第23回(NLP17)、気になる論文ピックアップ

結構時間が空いてしまったけれども、言語処理学会で発表されたもので気になるものをリストアップしておく。(時間が空いたら軽く読む

 

・変換規則と文章の分散表現に基づく自動文章生成手法の提案

・類似度と連想度を用いた隠喩表現判定に関する研究

マイクロブログを対象とした形態素解析誤りの自動検出と誤り分析
・用例文拡張辞書を利用したトピックモデルに基づく新語義検出

ソーシャルメディアにおける俗語の検出
・従属性に基づく事態間関係知識の粒度調整
・鉄道トラブルに関する tweet の自動抽出手法

・マルチモーダル情報に基づく見守りシステム開発への取り組み
・賛否表明パターンと行列分解に基づく賛否モデリング

モンテカルロ木探索を用いた早口言葉生成
・時系列数値データからの概況テキストの自動生成
・Sentence Embeddingsを導入した潜在トピックモデル
・用例文拡張辞書を利用したトピックモデルに基づく新語義検出
・抽出型文書要約における分散表現の学習
・単語分かち書き辞書 mecab-ipadic-NEologd の実装と情報検索における効果的な使用方法の検討

Semantic Connection based Topic Evolution (AAAI17) を読んだ

AAAI17の中で、以前気になる候補として挙げた論文のうちの1つを読んだので軽いまとめ。

2Pなので軽く読めるはず(僕は論文読むの苦手なので時間がかかった)

Semantic Connection based Topic Evolution (AAAI17) 

概要

 従来の手法はトピックモデルに基づいてトピック数を与えたり制約があったが、

 本手法ではsemantic-connection(文章の類似度や時間減衰由来)に基づき、適切なトピック数を決められるのでベースラインよりもトピックの質の面でも、変化の感度の点でも勝っている。 

手法

手法については多くは書かれていないが、アルゴリズムは載っている。

端的に言うと文章を時間毎に区切って、窓幅を設けて、LDAを回してみたいなことをやっている。

 

与えられるものとしては、

  • 文章データセット(D)
  • (文章データの)窓幅(wz)
  • (KLdivの)閾値(T)

 

アルゴリズムに基づくと大まかに分けて3つのシーケンスを踏む。

  1. LDAを用いて文章のトピック分布(θ)を得る。
  2. 各文章に対して得られたトピック分布(θ)のsymmetricalなKLdivを計算し,Semantic Connection Graph(SCG)を作成する
  3. 2.で得られたSCGをSemantic Connection Feature(SCF)へと変換する。この際にDeepWalkと呼ばれる教師なし深層学習を用いる。

実験

対称とするデータ:Twitter(2014年12月のデータ)

比較手法:On−Line LDA

結果の画像とかは元論文見てください。

トピックの二次元平面上での距離がトピックの差異(類似度?)をそのまま表しているらしい。

結論

 semantic-connectionに基づく可視化はトピック数の制約により引き起こる欠陥を解決した。

 Twitterのデータでの有用性が下記の点で示された。

  • トピックの発展の可視化
  • トピック数の決定
  • 冗長なトピックの回避

僕の所感

LDAはトピック数givenだからなんとかして結合しようみようというアプローチは何個か見たことある。

その際はトピック単語分布(Φ)のcos類似度だったりと様々だった気がする。

今回は既存研究のDeepWalkとかいうのを用いているのが新規性なのかなと感じた。

従来手法と本手法の結果がどちらも載っていたが、どう優れているのかが一見わかりにくい

(本手法の結果は二次元平面でトピックが図持されているけどわかりにくい)

可視化に関しても結局その知識がない人がみるとわからないのでは?と思ってしまう一面がある。

(僕は無知なので対称的なKLdivという概念を初めて知った)