こんな夢を見た

修士学生による自然言語処理研究の記録。主にDeep LearningやEmbedding関連論文の軽い自分用まとめとして。内容に誤りが含まれている場合があります。お気軽にご指摘ください。

Non-distributional Word Vector Representations

Non-distributional Word Vector Representations
Manaal Faruqui and Chris Dyer, 2015, ACL

分布じゃない単語ベクトル。
分布じゃない。素性は資源の丸写しで、つまりはそもそも学習もしない。
WordNet、FrameNet、Pen TreeBank (のPOSタグ)、Supersenses、Emotion、Sentiment、Connotation、Color、Synonymy、Antonymy等の資源を使って、Specificすぎる素性だとかそういうの関係なしにそっくりそのままバイナリベクトルを作成(各次元が、SYNSET.FILM.V.01とかVERB.FRAME.REGARDであるかどうかを表す)。
当然ながらかなりの次元数でかなりスパース。次元が17万でスパース率は平均99.98%くらい。語彙は12万。各次元が活性化(1になる)するのは平均して15個(0.01%)くらい。スパースなので次元数の割に計算量は低くて扱い易い模様。

類似度と極性分類と名詞句括弧付タスクで実験。比較手法は、Skip-Gram、Glove、LSA(共起行列にSVD)(それぞれ300次元)と、提案ベクトル、提案ベクトルにSVD(300次元)、提案ベクトルにSkip-Gramを結合(172,418次元+300次元)の6種類。
類似度はコサイン類似度で取っているようで心配したものの案外大丈夫らしい。データセットは3つあり、WS-353では惨敗。RG-67では勝利(SVD版は敗北)。SimLexに至ってはかなりの差で勝利。SVD版のほうがさらに少し勝っている。データセットの差が結構あるものだなあと、そっちの面の話が気になる。各データセットの「似ている」はどういう傾向があるのだろうか。
極性分類はSocherのSentiment TreeBankに対して、フレーズor文内単語の平均ベクトルを素性にしたL2回帰分類器で挑む。これではSkip-Gram+提案ベクトルが最もいい結果を出している。そしてSkip-Gram、LSA、提案、Glove、提案SVD。
名詞句括弧付タスクは、形容詞+名詞+名詞で構成された名詞句に対して意味的に適当になるように括弧をつける(パーズを行う)タスク。e.g., local (phone company), (blood pressure) medicine . こっちでは順番にベクトルつなげた素性でL2回帰分類。結果は、しっかり提案ベクトルの勝利。続いて、Skip-Gram+提案、Skip-Gram、LSA、Glove、提案SVD。
また、全てのタスクでSkip-Gramの性能をSkip-Gram+提案ベクトルが上回っている。

めちゃくちゃスパースだとしてもかなり役に立つものだなあと感心した。
欲を言えば、各資源(WordNet, FrameNet, ...)の素性としての出入り分析が欲しい。また、タスクを解くにあたってどれくらい語彙内にない単語に出会ったか、その場合の正解率はどうか、ということも知りたい。

Sparse Overcomplete Word Vector Representations

Sparse Overcomplete Word Vector Representations
Manaal Faruqui, Yulia Tsvetkov, Dani Yogatama, Chris Dyer, Noah Smith, 2015, ACL

単語ベクトルのovercompleteなスパース化。
スパースな単語ベクトルは各次元の成分の強さで解釈がしやすいことから好まれているが、この論文では一般的なSparse codingで単語ベクトルを作り出す際に、次元(構成要素)を増やすような行列分解を行う。
つまりは、語彙数V × 次元数N の元の行列を、語彙数V × 次元数M(>N) に変換してしまうということ。このようにして出来た行列はovercompleteと呼ばれ、画像とか通信?とかの他の分野では使われることもあるらしい。言語処理ではまず見ないので面白い。
変換元のベクトルはSkip-gram、GloVe、Global Context (Huangら, 2012)、Multilingual (Faruquiら, 2014) 等の出来合いのベクトル。素のままのPMIベクトルに対して使われる手法ではない。圧縮でなく冗長化(?)。

とりあえずこうして次元を増やしたら、色んなタスクでの精度が上がりましたし、解釈もしやすくなりました、という話。 試したタスクは、類似単語判定、極性分類、(質問)文のタイプ分類、新聞記事のカテゴリ分類、形容詞+名詞+名詞の括弧位置判定(e.g., local (phone company), (blood pressure) medicine)の5つ。
全体として確かに精度は上がっている。他に比べると類似度判定は少しいまいち。また、Skip-gramやGloVeではGlobal contextやMultiに比べて上がり幅が少なめ。 ただし、今回はあくまでシンプルな分類器(ロジスティック回帰)の素性として用いただけなので、より高度な分類手法(NNとか)ではこうはいかないかもしれないことについては留意。

上で述べたような単なるスパース制約でのベクトルと、さらにバイナリ成分になるような制約を加えたベクトルの2つで実験を行っている。タスクや元ベクトルによって精度がまちまちで、その2つの優劣はつけがたい。なお、バイナリ化の方法は雑(正の成分を1。0以下を0)。

成分のスパース率を90%以上として最適な次元数を探したら、元の10倍にしたときが精度ピークだった(ただしGloVeでしか検証していない)。 (スパース率が90%「=非ゼロが1/10」に対して「元の10倍」というのが出てきたのはなんとなく綺麗。スッキリした理由付けがあるのかも)

今述べたように、試したベクトルは、スパースで正負ありのもの と スパースで1か0のもの。
そして、Non-Negative Sparse Embedding (NNSE) やCNNSE は、スパースで正値のみのもの。つまりは完成後の性質としては提案ベクトル両者の真ん中に位置するようなベクトル(overcompleteはしていないが)。このような性質のものを提案手法のパターンになぜ入れなかったのか、とか、NNSEそのものを比較手法になぜ入れなかったのかという疑問が残る。あくまで「行列分解系でない単語ベクトルにもある制約を加えて解釈容易化&精度向上する方法」を提案するという土俵で話したいからだろうか。単に紙面の都合上かもしれない。

解釈容易性の定性的な評価として、いつものtop-rank words per dimensionをやって、さらに幾つかの単語のベクトル成分の可視化を行っている。しかし後者についてはなんだか納得のいかない半端な感じだ。

一度ある次元で表現されたものを再びスパースなovercompleteに再現することで解釈容易性が上がるのは当然として、たぶんそれぞれの次元が素性としての独立性が自ずと高まっていて精度が上がるのだろう。

余談。同じくFaruqui氏がACL2015に通している「Non-distributional Word Vector Representations」という論文がとても気になる。早くこれも出てほしい。

A Compositional and Interpretable Semantic Space

A Compositional and Interpretable Semantic Space
Alona Fyshe, Leila Wehbe, Partha Talukdar, Brian Murphy, Tom Mitchell, 2015, NAACL site

Non-Negative Sparse Embedding (Murphy, 2012) を改良。形容詞と名詞の重み付き和で作ったベクトルが、対応する2語フレーズに近くなるような制約を新たに加えて学習。

その制約の発想自体は自然なのだけどこれで上手くいっているのか、と少し驚いた。
学習時に実際のフレーズベクトルを学習しておかねばならないのだからスケール的に厳しいのではと思っていた。フレーズの数が少ないなら少ないで、その少ないパターンでの制約で全体にその性質が実ってくれるのかという不安がある。
しかし何はともあれ形容詞+名詞のフレーズでは上手くいっているようだ。

ベクトルの性質(非負でスパース)がコンセプト(解釈容易性)に結びついていることを、しっかりと実験によって実証していてよい。実験自体が実際のベクトルの解釈法のチュートリアル的にもなっていてうまい。

解釈の容易さにも重点がおかれていて、そこでもなかなか上手な評価を行っている。ある次元で成分が強い単語5個と、他の次元で成分が強い単語1個を混ぜたようなリストを作って、そこでの仲間はずれを人にあてさせたときの正解率で評価(メカニカルタークで5人の回答者)。正解率が高ければ高いほど次元ごとに自明にグループ分けがなされているという結論を確かに導けそう。正解率の他に回答者間のagreementでも評価。
結果はSVDに比べるとNNSEとCNNSEがどちらでも圧勝(正解率86.2, 88.9% & agreement 94, 90%)。
本題とはずれるけど、SVDが正解率17.6%(つまりほぼランダム)だったのにagreementは76%だったのが少し面白い。実質適当に選ばれたような単語リストからでも、人はある類似性をそこそこ共通に見つけるものなんだなあ。

他の実験として、フレーズ作って、かつ各次元ごとに高成分単語のリスト作って、そのフレーズの最高成分次元のリストを人が選べるかというのも行っている。interpretablityとcompositionabilityが両立しているのかを評価。かなりいい結果(CNNSE:54.5%, NNSE:29.5%)だったのだけど、幾つの(次元)リストから選ばせたのか分からなかった。全次元だったら1000個から選ばせたことになるので多分違うのだけど……。(次元数がそもそも本当に1000なのかという疑念もある)

最後の方で多義性のせいで類似度計算がうまくいかない件について触れているが、そこで(将来的な)解決策として「次元をある程度意味的に近いグループに分けておいて、類似度計算時には類似度最大となるグループ(だけ)で計算するようにする」というようなことを言っている。そういうものだろうか? ちょっとしっくりこない。

半分余談。
the majority と a majority で「多数(派)」と「過半数」を書き分けるような用法はあるのだろうか。先の評価指標の説明は、それぞれ

Intruders detected: % of questions for which the majority response was the intruder. Mturk agreement: % of questions for which a majority of users chose the same response.

と書かれていた(bold強調は原文になし)。
agreementの方は「過半数が一致回答した率」だとは思う("多数派"が一致回答なのは必然なので)が、正解率の方は「過半数が正解できた率」なのか「多数派が正解できた率」なのか解釈に迷うところ。interpretablity……。
なお、面白いことに類似度計算が多義性とかのせいで難しくなっている事例を考察している章(3.3.1)で取り上げられている単語もmajorityだった。

Logical Inference on Dependency-based Compositional Semantics

Logical Inference on Dependency-based Compositional Semantics
Ran Tian, Yusuke Miyao, Takuya Matsuzaki

DCSを使った論理推論。
DCSで表現された文からabstract denotationを得る方法の提案、そして、それを用いて新たな(DCS形式)文を自動作成するような枠組みの提案。それで文の含意関係認識タスクを行っている。

詳細はさておいて、abstract denotationについてのみまとめる。

abstract denotationは、ある条件を満たすようなentityの集合を指し示せる表現になっている。具体的には、関係代数の演算子で構成されたような式。これを使えばあるDCS形式の文をデータベースへのクエリ表現にできる。というかこの式自体がほぼクエリそのものになっている。
例えば、students read booksは read∩(studentSUBJ×bookOBJ)となる。式中のstudent, bookはそれぞれの単語が示せるようなentity集合で、下添字がついていればそのsemantic roleを満たすentityにさらに限られた集合。readも同様だが、こっちはrelationを示すために、entityペアの集合(e1×e2 の集合)。そして、「∩」演算子によって「readのrelationを満たすようなentityペアで、かつ、SUBJがstudentの要素でOBJがbookの要素であるペア の集合」が得られる、といった具合。これを合成していけば色んな表現ができる。
演算子は、デカルト積×、交差∩、射影πr(relationのeペアのrのroleの方のみ)、商。他にrelabelingというbookをbookrのように変える演算子(これは割と形式的なものだと思う)。
あるentityについて表すこともできるし、文そのままの形でrelationとして表すこともできる。つまりは、基本的には「文」は「relation名 と ペア集合」で表される(表せるという世界観の)ようだ。
ちょっとそこからは外れるけど、negationやantonymを表すために || という演算子?もある。riseとfallの排他的公理をrise || fall としたり、no dogs are hurt というような否定文を dog || πOBJ(hurt) と表したりするようだ。ある種、"矛盾"というrelation表を特殊な形式で書き表しているようにも受け取れるかもしれない。

時制等の説明は特にしていないけど、この世界観でもタスク用のデータセットでは十分いけるのかもしれない。 論理推論等の説明は触れない。確かにいけそうという納得感はあった。

Two/Too Simple Adaptations of Word2Vec for Syntax Problems

Two/Too Simple Adaptations of Word2Vec for Syntax Problems
Wang Ling, Chris Dyer, Alan Black, Isabel Trancoso, 2015, NAACL

word2vecの統語性のための、2つの単純な改造。
謙虚と洒落を兼ね備えたタイトルかっこいい。

word2vecはskip-gramにせよCBOWにせよ、窓範囲内の文脈(単語)を語順考慮なく扱って学習するし予測する。それだと意味的な分布は捉えやすくとも、統語性を捉える作用が悪い。品詞タグ付けや構文解析の素性とかにword2vec使う場合は、統語性が強く入るようなもっと良い学習法があるのでは、という話。

タイトルで言っているとおりで、ものっすごいシンプルなアイデア。というか、これ今までやられていなかったのか……?という感じ。自分が最初word2vecを知ったときにモデルを誤解していたがその誤解モデルこそがこのモデルだった、というくらい自然も自然なモデル。

以下説明。(文脈窓を+-2として説明)

CBOWの改造→CWINDOW:
周辺単語(w-2,w-1,w+1,w+2)から中心単語(w0)を予測するときに、各周辺単語ごとに(位置によって)異なる重み行列をかけて、その和を予測w0'とする。(実装上は、各重み行列を1つに連結したようなものを、周辺単語ベクトルの連結にかける)

Skip-(N)gramの改造→Structured Skip-Ngram:
中心単語(w0)から周辺単語(w-2,w-1,w+1,w+2)を予測するときに、各周辺単語の位置ごとに異なる重み行列で、それぞれw-2',w-1',...のように予測ベクトルを作成する。中心に近い単語の方が正確な予測が行えるようになってほしいため、学習事例の周辺単語を適当に(中心側の事例が多くなるように)サブサンプリングしているらしい。

なお、学習速度というか、単語を処理する速度はどちらも元祖に比べて半減〜1/3ほどになっていた。

実験では品詞タグ付け(Collobertら(2011)の多層パーセプトロン)とDependency Parsing(Chenら(2014)のNN)をやって、確かに少し精度が上がっていた。ただし、少し。データセットによってはかなり微量。意味的な方への実験は、幾つかの単語に対してk-近傍の単語をリストアップして定性的な分析をちょろっとしているだけ。意味的性質は結構悪くなっているように見える。そのせいかいつものアナロジータスクとかはやっていない。残念。