2020年読んで良かった本

2020年はそこそこ本を読んだつもりなので備忘録的に記録をば。

新 企業の研究者をめざす皆さんへ

色々な企業・組織を渡り歩いてきた著者による様々な視点からの企業研究者の姿が描かれていて参考になる。数ヶ月に一回読み返している。実践はできていない。

新 企業の研究者をめざす皆さんへ

新 企業の研究者をめざす皆さんへ

  • 作者:丸山宏
  • 発売日: 2019/12/21
  • メディア: 単行本(ソフトカバー)
 

 

自走プログラマー ~Pythonの先輩が教えるプロジェクト開発のベストプラクティス120

Python開発で今まで気にしていなかったところとかが知れてよかった。後半はDjangoの話で馴染みがなかったが前半だけでも価値があった。

 

会計クイズを解くだけで財務3表がわかる 世界一楽しい決算書の読み方

 お金周りの知識が無いなと思って購入。財務3表に関してクイズ形式で興味を持ちながら読み進めることができた。著者はtwitterでもクイズを出しており時々覗くと面白い。

 リモートワークの達人

 Twitterで見かけて購入。仕事におけるハック的な本は色々読んできたが(実践はできていない)この本は結構コンパクトにまとまっていてよかった。

 ブルーピリオド

美大受験を目指す高校生の話。数年前に美大の学祭を覗いたこととかも思い出してエモかった。作品としては非常に丁寧に描かれていて良い。

放課後さいころ倶楽部

女子高生がボードゲームをする話。ライトなゲーム(ニムトなど)からヘビーなゲーム(ツォルキンなど)まで手広くゲームを扱いつつキャラクターの成長も描かれていて良い。

 

トピックモデルを俯瞰して学ぶ

本記事は,自然言語処理 Advent Calendar 2019 - Qiita です.

はじめに

本記事ではトピックモデルと呼ばれるモデル・分野の中で最も有名なLatent Dirchlet Allocation, 通称LDA*1 とその周りのトピックモデルに関して,どんな資料があるのか?,どういった研究があるのか? といったことに主眼をおいてトピックモデルの研究とかを昔していた私の独断と偏見によるリストアップを行いました.

私の頭は2017年くらいで止まっているので、間違っている点があったり、今の主流とは異なる可能性もありますが、 暖かくご指摘いただけると助かります.

Latent Dirchlet Allocation[Blei+,03]を始めとするトピックモデルを学ぶに当たって

  • 何が参考になるのか
  • どういった研究があるのか?
  • 実際にどうやって使うのか?(まだ出来てないよ・・・)

といったことに焦点をあててサクッと解説していきたいと思います.

  

トピックモデルとは

トピックモデルとは生成モデルの一種であり,各文書は複数のトピックから確率的に生成されたものとして捉えるモデルのことで, ニュース記事から「政治」「経済」「スポーツ」などのトピックを抽出することができるモデルとして説明されることがあります. トピックモデルに関する説明はあらゆるところでされているので自分の腑に落ちる捉え方をしていただくのがいいと思います.

以下では,参考となる書籍・Webページを紹介します

参考資料

書籍

機械学習自然言語処理に関する入門的な書籍であれば,トピックモデルについて数ページ割いて説明がされることがあると思いますが, トピックモデルだけを扱った書籍は以下の2つだけかと思います.

  • トピックモデル (機械学習プロフェッショナルシリーズ)岩田 具治*2

    • LDAに入る前の導入(ユニグラムモデル,混合ユニグラムモデルにも触れています)が丁寧な本でさーっと目を通すことができるため, 軽く勉強したい人にはおすすめです.
  • トピックモデルによる統計的潜在意味解析 (自然言語処理シリーズ)佐藤 一誠*3

    • 東大の佐藤さんによる書籍です。上の本よりも少し難しいですが、自分で手を動かしたりする際にはこちらの書籍の方が参考になりました。

Webページ

H24:Introduction to Statistical Topic Models

統計数理研究所の持橋さんと当時NTTCS研の石黒さんによるトピックモデルに関するチュートリアルスライドです. 非常に網羅的な資料であり,トピックモデルとその拡張,そして言語データ以外への適用についても触れられており, どういった研究が行われてきたのかを把握するのに便利です.

https://shuyo.hatenablog.com/category/LDA

サイボウズの中谷さんによるブログです. 複数回に渡りトピックモデルについて記されており,研究を始めた頃に式の気持ちを把握するのにたいへん助かった記憶があります.

http://www.ccs.neu.edu/home/jwvdm/teaching/cs6220/fall2016/assets/pdf/blei-kdd-tutorial.pdf

Latent Dirchlet Allocationの著者であるDavid Blei氏によるチュートリアル資料です. こちらもトピックモデルについて網羅的な記載があります.

Vol.27 No.3 (2012/05) Latent Topic Model (潜在的トピックモデル) – 人工知能学会 (The Japanese Society for Artificial Intelligence)

上記の本の著者でもある東大の佐藤さんの私のブックーマーク(人工知能学会)でのトピックモデルについての特集です. いろいろな論文や注目学会が列挙されています.

トピックモデルの研究

トピックモデルの研究は大きく分けて3つに分けられます.

  1. モデルの学習方法と省メモリ化・高速化
  2. 対象のモデル化
  3. 結果の見せ方

モデルの学習方法と省メモリ化・高速化

学習の仕方の理論的解析から,学習をいかに時間計算量的, 空間計算量的に効率よく学習するのかという改良まで,幅広い研究が存在していて,トピックモデルの学習に関しては大きく2つに分けられます.

  • 変分ベイズ
  • ギブスサンプリング

変分ベイズ法に関連した研究

変分ベイズ法はベイズ学習において事後分布が解析的に求められない時などに用いられる手法で,LDA の原著でも用いられているものです.

事後分布を計算が容易な分布(近似事後分布)で仮定しますが,因子分解が可能であるという仮定を置くことが多いです. 近似事後分布の推定を行うために,近似事後分布と本来の事後分布とのKL 情報量を最小化を試みる際に,イェンセンの不等式を用い,対数周辺尤度に関する 変分下限に落とし込むことで解ける形にします.

また変分ベイズ法における一部の変数を積分消去することでより簡略的な推論が行えるcollapsed Variational Bayse(CVB)を 用いたものなども提案されています.

ギブスサンプリングに関連した研究

ギブスサンプリングそのものを使うことは少なく,collapsedGibbs Sampling(CGS)を用いることが多いです.

CGSでは, 目的の事後分布からのサンプル生成の代わりに、より計算コストの低い条件付き確率分布を構成することで確率変数らを交互にサンプル生成することで、 目的の事後分布からのサンプルを生成を可能にするギブスサンプリングにおいて、ある確率変数を経てサンプリングされていた確率変数に関して、 周辺化を行うことでより簡便なサンプリングを行う手法です.

LDA に関しても変分ベイズ法の後にその有用性が示されており,これは後続のモデルらでも実装の容易さゆえによく採用されています。

一般的にCGSは変分ベイス法に比べ性能が良いことが知られていますが, 各文書の各単語についてそれぞれサンプリングを行わなければならず,CGSはその計算量がボトルネックとなってしまいます.

このボトルネックの要素として基本的に各単語のサンプリングとは各単語に割り当てられるトピックのサンプリングであり, これは多項分布からのサンプリングになり一般的にトピック数に比例して計算量が増えてしまいます.

この部分に対する効率化として

が挙げられます。

上記の他にも大規模データのバッチ学習時の並列化やオンライン学習などの改良も提案されています. 

対象のモデル化

対象の性質をどうモデル化をするかという点に着目して,モデルの潜在変数を増やしたり,分布を変更したりすることによってこれを実現しています.

この拡張のしやすさがトピックモデルがあらゆる研究に波及していった理由の一つでもあります.

いくつかのモデルに関して箇条書き形式で記してみます,興味があるものがあれば論文を読んでみてください. (論文の引用元urlに一貫性がないのはご容赦ください.)

結果の見せ方

トピックモデルの説明をする際に、「スポーツ」「経済」「政治」などのトピックが〜と言った説明をされることが多いため、 トピックモデルを使うと勝手にトピックごとにラベルをつけてくれるものと思い込んでしまいますが、実際はそうではありません. *4

そこで結果を解釈しやすくするため,画像を用いるもの*5,ワードクラウドなどトピックの魅せ方の比較*6などの研究が行われていたりします.

また上記に加えて評価に関しても焦点があたることがあります.

定量的な評価としては, * Perplexity * Coherence に基づく評価が行われます. これらに関しては,以下のslideshareの資料を読むとなんとなくはつかめると思います. 上記で上げた本などでも触れられているので参考にしてみてください.

www.slideshare.net https://www.slideshare.net/hoxo_m/coherence-57598192

上記ではまったく触れませんでしたがニューラルネットを用いたトピックモデルも複数*7提案されています, 他のモジュールとくっつけたいなどの欲求がある方はそちらを掘ってみることをおすすめします.

実験(あとで追記します)

ACL anthologyから取ってきた論文のabstractを対象に実験をしているのですが、結果をまとめていないので後日載せます・・・(年内には・・・)

*1:NLPer外でLDAと呼ぶときはLinear discriminant analysisを指す場合もあるので注意しましょう.

*2:https://www.amazon.co.jp/dp/4061529048

*3:https://www.amazon.co.jp/dp/4339027588

*4:トピックは単語の多項分布として表現されるので

*5:https://www.aclweb.org/anthology/N13-1016.pdf

*6:https://www.aclweb.org/anthology/Q17-1001.pdf

*7:http://proceedings.mlr.press/v70/miao17a/miao17a.pdf

Why Didn’t You Listen to Me? Comparing User Control of Human-in-the-Loop Topic Models (ACL2019)を読んだ

Why Didn’t You Listen to Me? Comparing User Control of Human-in-the-Loop Topic Models *1 を読んだので軽くまとめようかと。

読もうと思った理由はトピックモデルだったからです、自分の守備領域なのでさらっと読めるかなと。

本論文はACL2019のshort paperで、論文の流れに沿ってまとめます。 (出てくる図は論文からの引用です)

論文

  • タイトル: Why Didn’t You Listen to Me? Comparing User Control of Human-in-the-Loop Topic Models
  • 著者(所属): Varun Kumar(Amazon Alexa), Alison Smith-Renner(University of Maryland), Leah Findlater (University of Washington), Kevin Seppi(Brigham Young University), Jordan Boyd-Graber(University of Maryland)
  • コード: 公開無し

概要

  • Human-in-the-Loopなトピックモデル(HLTM)に関して3つのアプローチを試し、比較評価を行った
    • 知識の入れ込み方( 制約条件を入れ込む or 事前情報を入れ込む
    • 推論方法(Collapsed Gibbs Sampling or Variational Inference)
  • ユーザのFeedBackを反映できたかの指標の提案
  • 制約条件の追加と事前情報の加味による、トピックの質と操作性の違いに関して検証を行った

そもそもHLTMとは?

トピックモデルと言うと、Latent Dirichlet Allocation(LDA)を指すことが多いと思いますが、 LDAのような通常のトピックモデルを用いると一貫してないトピックを含むことが往々にしてあります。

(トピックの一貫性といった話題に興味がある方はMachine Reading Tea Leaves: Automatically Evaluating Topic Coherence and Topic Model Quality (EACL2014)*2 に一度は目を通すことをお勧めします。)

これを改善するために"人の知識"を入れ込むことを試みられています。 例えば以下のような操作を行うことが挙げられます。

  • トピックへの単語の追加
  • トピックのマージ
  • 文書の除去

一方でユーザのFeedBack(FB)の入れ込み方として

  • {つながる|つながらない}といった制約条件
  • 事前情報
  • 文書のラベル

などの活用が挙げられます。

しかし、上記のような操作や活用を適切に比較・評価できるような枠組みは存在していないので、本論文ではその部分に焦点を当てています。

このあたりの問題意識は "Interactive Topic Modeling (ACL2011)"*3が詳しかったりします。*4

比較アプローチ(3つ)

  1. モデルが学習したものを一部忘却させ、トピックからワードの割り当てを除く 2.新たな情報(ユーザFB)を挿入する

1の観点に関しては、ギブスサンプリング(Gibbs Sampling)と変分推論(Variational Inference)といった2つのアプローチが考えられる

2の観点に関しては、非対称な事前分布[informed](LDAに置ける\alpha\betaといったディリクレ分布のハイパーパラメータに相当)*5と制約の追加[constraint](この文書のこの単語はこのトピックに属するといった情報)が考えられる。

上記を踏まえて3つの比較手法を挙げている。

比較手法 知識の入れ方 推論方法
info-gibbs 事前情報 ギブスサンプリング
info-vb 事前情報 変分推論
const-gibbs 制約条件 ギブスサンプリング

ユーザの操作

ユーザがトピックモデルをいじる上で行う操作を既存研究にのっとり7つ挙げられています。

  • Remove word トピックtから単語wを除去する操作
  • Add word トピックtに単語wを割り当てる
  • Remove document トピックtから文書dを除去する
  • Merge topics トピックt1とトピックt2とトピックt1にする
  • Split topics トピックtとseed words sが与えられた時、sを含むトピックt _ nと含まないトピックtに分割する
  • Change word order トピックtにおける単語w2のランクをw1より上にする
  • Create topic seed words sが与えられた時にt _ nを作成する

操作性(Control)の評価尺度

トピックモデルの一般的な評価尺度は

などがあげられるけどこれらはモデル自体についての良さの指標であって、 人からのFBを反映できているかといった観点の評価としてみると不十分である。*6

なので新たな評価尺度(Control)を提案するというお話で上記7つの操作に関して各々提案されています。

単語レベルの操作に関しての評価

Remove word・Add word・Change word orderがこれに該当し、

  •  {r ^ {M _ 1}}  _ {w _ t} : モデルM1(ユーザのFB前)におけるトピックtのワードwのランク
  •  {r ^ {M _ 2}}  _ {w _ t} : モデルM2(ユーザのFB後)におけるトピックtのワードwのランク

とした時に  {r ^ {M _ 1}}  _ {w _ t} - {r ^ {M _ 2}}  _ {w _ t}といった実際の変化と、期待される変化の比率で計算される。

文書レベルの操作に関しての評価

Remove documentがこれに該当し、Remove wordとほぼほぼ同様であるが、トピックを文書のランクリストとして捉える

トピックレベルの操作に関しての評価

Create topic・Merge topic・Split topicがこれに該当し、

  • Create topic: seed wordsのうちどれだけの単語が新しいトピックに含まれるかの割合
  • Merge topic: 結合元のトピックの単語のうちどれだけ、マージされたトピックに含まれるかの割合
  • Split topic: 分離前後トピックにおけるcreate topicと同様の計算によって得られる指標の平均

比較実験と結果

コーパス

14のトピックについて各500文書、累計7000文書のニュース記事(ビジネス、法律、・・・)

ユーザシミュレーション

実際の人手を集めるのはコストがかかるので、

  • ランダムに操作するユーザ
  • 良い操作をするユーザ

をそれぞれシミュレーションで作り上げる*7

方法

元となるモデルはLDAでトピック数10・20で学習する。 評価に関しては上記のcontrolという指標とCoherenceに関して行う。

結果

f:id:cl_hair:20190721123653p:plain

  • remove wordとmerge topicはどのシステムでも良いcontrolである
  • informed priorにおいては add wordとcreate topicも良いcontrolである
  • change word orderの項目はどのシステムもcontrolに乏しい

実験結果からinformed priorの方がconstraintよりもcontrolabelであることがわかる。 (constraintはあくまで制約条件であり、十分に共起が起きていなければadd wordしてもトピックに含まれにくいが、 informed priorはそもそも事前分布をいじるので共起以上の関係をおりこめる(意訳))

所感

数年前にInteractive Topic Modelを読んだ時からHuman-in-the-Loopなトピックモデルは人が見るトピックモデルにおいては需要があるなと思っていたので、ちゃんと評価まで提案してくれて良い論文だと思った一方で、具体的な例が載ってないのが少し残念な論文だった。。。 (トピックモデルの論文はトピックをちゃんと例示してほしい・・・)

ちゃんとしたツールとして出てきたらもっと普及するのかなと思ったり、pyLDAvisみたいに視覚的に見れると嬉しいと思ったり・・・

*1:https://arxiv.org/abs/1905.09864

*2:https://www.aclweb.org/anthology/E14-1056

*3:https://www.aclweb.org/anthology/P11-1026

*4:日本語だとここで軽く解説されています。https://qiita.com/kenchin110100/items/4e4ba972fea4690bf9e8

*5:余談ですけど、gensimのLDAでも\alphaが更新できることはあまり知られていない・・・?

*6:だけど、上記の評価は行わない論文はトピックモデルにおいてはほぼほぼない気がする...

*7:具体的な方法はappendixに載ってる

Jointly Optimizing Diversity and Relevance in Neural Response Generation (NAACL2019) 読んだ

Jointly Optimizing Diversity and Relevance in Neural Response Generation*1 を読んだので軽くまとめようかと (久々にまとまった文章を書く・・・。)

論文の流れに沿ってまとめます(断りがない限り図は論文からの引用)。

f:id:cl_hair:20190714175427p:plain

論文

(コード公開のところに著者スライドがあった・・・、これを読めば簡単に理解できた・・・)

概要

  • Neural Conversation Modelにおける問題点は {bland|generic} responseを生成する点
  • responseの多様性を考慮したモデルもあるけど、そのためにcontextとの関連性が犠牲になることも・・・
  • そこで、 "SPACE FUSION"という提案モデルにより多様性と関連性を同時に捉えられるような潜在空間を導入
    • 基となるresponse vectorとの距離と方向により直感的にわかる
  • 提案モデルは、自動評価・人手評価どちらでもベースラインに勝る

関連研究

Grounded Conversation Models

  • ペルソナ
  • 知識
  • 対話行為
  • 感情ラベル

を利用した対話モデルが提案されている。

=> 提案モデルでは、上記のような補情報を用いず、対話文のみから学習を行う

VAE

VAE/CVAEを用いたテキスト生成も提案されていますが2点ほど問題点が挙げられています。

  • vanishing latent variable problem

    • word dropping とKL annealingによる対処
    • bag-of-word lossを用いる対処
  • ガウス分布のような単純な潜在表現に制限されている点

=> 提案モデルでは幾何学的なアプローチをとるから上記のような確率的アプローチとは異なる

Decodingとランキング

A diversity-promoting objective function for neural conversation models(NAACL2016) の話です。

マルチタスク学習

機械翻訳に置いてモノリンガルデータの活用でマルチタスク学習がうまくいき、対話にも似たアイディアが提案されており、

  1. Seq2Seqで対話対の学習
  2. AutoEncoderで特有の話者の対話文ではないデータからの学習

上記2つのモデルでdecoderは共有し、交互に学習する

SPACE FUSION MODELとは?

f:id:cl_hair:20190714180859p:plain

モデルアーキテクチャ

図が全てです。

  • src-tarの間のmappingを学習するSeq2Seq
  • tarについて学習するAutoEncoder
  • 両者の潜在変数の内挿に当たる潜在変数の導入

といったことをしており、最後の項目が提案モデルの新規性の1つだと言えます。 Seq2SeqとAutoEncoderのlossに、この新しく導入した潜在変数にまつわるLoss(2項分)を正則化項として追加して学習を行います

  • interpolation loss

f:id:cl_hair:20190714181343p:plain

この項の役割は「同じ方向に並ぶ点(潜在変数)から異なる応答が生成されることを防ぐ」ことです。 z _ {interp} = uz _ {S2S} + (1-u)z _ {AE} (uは[0,1]の一様分布から)と表現され、まさしく内挿を表現しています。

  • fusion loss

f:id:cl_hair:20190714181358p:plain

この項の役割は「各対話対におけるSeq2SeqとAutoEncoderの潜在変数をなるべく近づけ、かつ全体的に潜在変数が散らばる」ことです。

上記2つのlossを合わせたモデル全体のlossは以下のようになっており、\alpha\betaは各lossの重みに相当します。

f:id:cl_hair:20190714181417p:plain

 実験

データ

f:id:cl_hair:20190714183719p:plain

上図がデータに関する情報です。*2

モデルパラメータ

Category Item Value
Encoder(GRU*2) dimention 128
Decoder(GRU*2) dimention 128
Noise Layer σ 0.1
Loss Weight α 1
β 30
Optimizer method Adam
learning rate 0.001

評価指標

  • 自動評価: BLEU(4-gram)のF1
  • 人手評価: 関連性・面白さの2項目について3人の評価者に1~5のリッカート尺度

ベースライン

  • Seq2Seq+Sampling

vanilla seq2seqの利用

  • CVAE+BOW

Learning discourse-level diversity for neural dialog models using conditional variational autoencoders (ACL2017)

  • MTask

Multi-task learning for speaker-role adaptation in neural conversation models(IJCNLP2017)

結果と分析

潜在空間に対する考察

  1. 関連性と多様性がちゃんとdisentangleされたような空間になっているか?
  2. 意味が滑らかに変化する際に穴があるような空間になっていないか?(よくわからない表現になってしまったorz

f:id:cl_hair:20190714185400p:plain

3つの方向(今回はNo I don't などの各発話が方向に相当)と距離(今回はパラメータuにより操作されている)に関しての事例が上図。 概ね、各方向ごとの多様性、距離ごとの関連性の変化が意図通りに見て取れている。

方向と多様性

正則化項のある、なしでどう変わるかを見るために、1つのcontext(x_k)に対して複数の参照があるresponse(y _ {k,0},y _ {k,1} ... )について、 異なるresponse間の潜在変数でのcos類似度を見た結果、正則化を入れない場合はほぼ類似しているが、入れると類似してないことが見て取れる

=>正則化により方向が異なるように学習されていると言える!

距離と関連性

(Perplexityをみていたけど、なんで良いと言えるかはよくわからなかった・・・orz)

 自動評価

評価項目は前章参照

f:id:cl_hair:20190714190419p:plain

ベースラインより良い(それはそう)

人手評価

評価項目は前章参照

f:id:cl_hair:20190714190536p:plain

提案モデルが、最も良いが人手とはまだ1pt程度の開きがある。 Seq2Seq+Samplingもそこそこいい感じの結果に見える。

ちなみに、各手法の生成結果例は以下

(this movieという文脈が挟まるような例を出すのはどうなんだろうかと思わなくもない)

f:id:cl_hair:20190714190827p:plain

所感

最初の図のような感じで応答の多様性と関連性が理解できるのは良いなと思いつつ、 距離に関しての変数uがどれくらいピーキに効いてくるのかをPerplexiy以外の尺度で見られると嬉しいかな。

(方向ごとにuの効き具合がどう異なるのかを定性的に見たいくらいの意味合い)

また、多様性毎(?)に方向が散らばってくれるのはわかったが、 どの程度の方向の幅ごとに大まかな意味合いの異なるものが存在するのかとかも気になった。

*1:https://www.aclweb.org/anthology/N19-1125

*2:実験では、1つのcontextに対して複数のresponseがあるような対話データを用いていますが、これが完全な1対1のデータを用いた場合になるのか気になります。

指導教員と専門が違う分野の研究で修士号をとる話(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/)に触れた時は力学モデル?を用いてノードを配置する(レイアウトって呼ばれてた)。 みたいなのがあったけどグラフィカルモデルの場合は出来なさそうだなぁと思ったりなどした。