-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
1425 lines (907 loc) · 123 KB
/
Copy pathatom.xml
File metadata and controls
1425 lines (907 loc) · 123 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[a lonely miner]]></title>
<link href="http://conditional.github.io/atom.xml" rel="self"/>
<link href="http://conditional.github.io/"/>
<updated>2015-07-28T21:50:23+09:00</updated>
<id>http://conditional.github.io/</id>
<author>
<name><![CDATA[Koji Matsuda]]></name>
</author>
<generator uri="http://octopress.org/">Octopress</generator>
<entry>
<title type="html"><![CDATA[DBpedia についてすこし調べてみた]]></title>
<link href="http://conditional.github.io/blog/2015/07/28/an-introduction-to-dbpedia/"/>
<updated>2015-07-28T21:33:00+09:00</updated>
<id>http://conditional.github.io/blog/2015/07/28/an-introduction-to-dbpedia</id>
<content type="html"><![CDATA[<p>先日、<a href="https://sites.google.com/site/sigswo15/papers/36program">第36回セマンティックウェブとオントロジー研究会-DBpediaシンポジウム</a>に出席する機会を得た。最も大きな目的は<a href="http://www.ousia.jp/ja/">Studio Ousia</a>の山田さんによるエンティティリンキングに関する招待講演を聴講することだったのだが、DBpediaやその周辺環境についての研究発表やディスカッションにも興味をひかれた。</p>
<p>その後、DBpediaについてしばらく調べていたのだが、すこしだけまとまったので、メモとして公開することにした。</p>
<h2>What is DBpedia?</h2>
<p>Wikipediaを自動的に、RDFトリプルに変換する仕組み、あるいはそのプロジェクト。</p>
<p>できるだけ多くの項目を「あらかじめ決められた語彙」へマップすることによって、その語彙を使う他のリソースとの相互利用を進めたい、という意図がある(この動きを Linked Open Data と言うらしい)。</p>
<p>「自動的に変換する」と言っても、NLPの人たちが想像するような「テキストデータからの自動獲得」ではなく、Wikipediaの編集者によって構造化されたデータ(Infobox)からの取得がメイン。</p>
<h3>RDFトリプル?</h3>
<p>主語(subject) 述語(predicate) 目的語(object) の組の集合(大きな有向グラフとみなすことができる)で情報を表現するしくみ。詳しくはググってくだしあ。</p>
<h2>どのように変換が行われるか</h2>
<p>以下の図のようなイメージ。</p>
<p><img class="center" src="http://conditional.github.io/images/dbpedia/1.png" width="650"></p>
<p>DBpediaを構築するには”Mapping”, “Ontology”, “Wikipedia Dump”の三つの情報が必要である。</p>
<p>先ほど述べたように、DBpediaでは、Wikipediaの項目内の情報(ほとんどはInfoboxの情報)が、主語、述語、目的語の組にマップされる。</p>
<p>テンプレートの各スロットが、DBpediaオントロジーの語彙のどれにあたるか、という情報が整理されたものが “Mapping” である。Mappingには、例えば、 <code>会社</code> テンプレートの <code>代表者</code>というスロットに記載されている情報がオントロジーで定められた <code>keyPerson</code>という関係の目的語になる、といった情報が書かれている。</p>
<p>語彙を定めるのは “Ontology”。こちらには、大別すると以下の三種類の知識が書かれている:</p>
<ol>
<li>会社は組織のサブクラスである、といったカテゴリ階層に関する知識 例) <a href="http://mappings.dbpedia.org/server/ontology/classes/#Company">http://mappings.dbpedia.org/server/ontology/classes/#Company</a></li>
<li>会社はスタッフ数やCEOといった属性を持つ、といったプロパティに関する知識 例) <a href="http://mappings.dbpedia.org/server/ontology/classes/Company">http://mappings.dbpedia.org/server/ontology/classes/Company</a></li>
<li><code>スタッフ数</code>は組織に対して定義される「非負の整数」で、<code>CEO</code>は組織に対して定義される「人」である、といった、定義域&値域に関する知識</li>
</ol>
<p>メタな、特定のエンティティや言語に依存しない(オントロジカルな)知識が整理されている。</p>
<p>これらの情報は誰でも編集ができるが、Mapping wikiにアカウントを作る、メーリングリストに挨拶メールを送る、といった手続きが必要らしい。</p>
<p>DBpediaにおいてマッピングが定義されていないInfobox内の情報には、適当に項目名が付与される。たとえば、<a href="https://ja.wikipedia.org/wiki/%E7%A9%BA%E6%B5%B7">空海 - Wikipedia</a> は <code>Buddhist</code> という比較的マイナーなInfoboxを用いて書かれているが、現在(2015/07)はこのInfoboxに関するマッピングはDBpediaには存在しない。そのため、 <code>http://ja.dbpedia.org/property/宗派</code> <code>http://ja.dbpedia.org/property/法名</code> などといったプロパティが生成される。当然ながら、これらのプロパティは「野良プロパティ」とも呼べるようなもので、意味的な裏付けはあまりないと思う。</p>
<p>Infoboxが使われていない記事の情報は、カテゴリやリンク先などの(取れそうな情報)はとられるが、それ以外の情報は入らない。記事が指すエンティティのカテゴリも特にデータベース化はなされない。</p>
<h3>自分の手元で変換したい</h3>
<p><a href="https://github.com/dbpedia/extraction-framework/wiki/Extraction-Instructions">github wiki上のインストラクション</a>に従うことで変換できる。ほとんど clone してビルドして実行するだけ。必要なデータのダウンロードも面倒をみてくれる。</p>
<h2>DBpediaを使うにはどうすればよいか</h2>
<p>手元にホストする必要が無い場合は、公開されているSPARQLエンドポイントを使うのがよさそう。SPARQLは、SQLライクな文法をもった問い合わせ言語。主語、述語、目的語のトリプルに対して、パターンマッチや集約を行うことができる。</p>
<p>手元にRDFストアを構築したい、という場合は、<a href="https://github.com/openlink/virtuoso-opensource">Openlink Virtuoso</a>がデファクト・スタンダードみたい。導入には以下の記事が参考になった。他にもぐぐるとけっこう出てくる。</p>
<ul>
<li><a href="https://joernhees.de/blog/2014/11/10/setting-up-a-local-dbpedia-2014-mirror-with-virtuoso-7-1-0/">Setting up a local DBpedia 2014 mirror with Virtuoso 7.1.0 | Jörn’s Blog</a></li>
<li><a href="http://d.hatena.ne.jp/next49/20140408/p2">Virtuoso Open Source Edition 7.1 on Ubuntu 12.10 - 発声練習 </a></li>
</ul>
<h2>類似プロジェクトとの差異</h2>
<p>よく比較される Freebase との比較をすこしだけ。Freebase はオワコンらしいが、おそらくこれらの特徴の一部はWikidataにも引き継がれるだろう。</p>
<table>
<thead>
<tr>
<th align="center"> </th>
<th align="left"> DBpedia </th>
<th align="left"> Freebase </th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">データ元</td>
<td align="left"> Wikipedia。データの更新を行いたいときは、Wikipediaを更新しようという立場。 </td>
<td align="left"> かならずしもWikipediaにのる必要はないという立場。直接いじることができる。</td>
</tr>
<tr>
<td align="center">運営 </td>
<td align="left"> ライプツィヒ大学とベルリン自由大学が起源だが、現在はDBpedia財団という組織があるらしい。日本版はNIIの武田研究室が中心となってホストしている。 </td>
<td align="left"> MetaWeb => Google(シャットダウン)</td>
</tr>
<tr>
<td align="center">クエリ言語</td>
<td align="left"> SPARQLエンドポイントが提供される </td>
<td align="left"> MQLなるクエリ言語がサポートされているらしいが、少し調べて見た限りではあまり使われていない印象を受ける(RDFのダンプをRDFストアに突っ込んでSPARQL等で問い合わせるか、KVSで力技、というケースが多い印象)</td>
</tr>
</tbody>
</table>
<h2>その他の関連プロジェクト</h2>
<ul>
<li><a href="http://schema.org/">schema.org</a> : ウェブ企業が主体となって作っている語彙体系</li>
<li><a href="https://www.wikidata.org/wiki/Wikidata:Main_Page">Wikidata</a> : Freebaseの後継?</li>
<li><a href="http://www.wikipediaontology.org/">日本語Wikipediaオントロジー</a> : 慶応大の山口研究室によって半自動構築されたオントロジー</li>
</ul>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[「モデル」とは何か,について考えていたことを,DSIRNLP(データ構造と情報検索と言語処理勉強会)で発表してきました]]></title>
<link href="http://conditional.github.io/blog/2014/01/13/report-of-dsirnlp5/"/>
<updated>2014-01-13T15:32:00+09:00</updated>
<id>http://conditional.github.io/blog/2014/01/13/report-of-dsirnlp5</id>
<content type="html"><![CDATA[<!--Model-View-Controllerの'model'を想定して-->
<p>先日, <a href="http://twitter.com/overlast">@overlast</a> さんから,<a href="http://partake.in/events/572bb762-87ed-490a-b993-8b864137e7e1">DSIRNLP(データ構造と情報検索と言語処理勉強会 )</a>という会にお誘いを頂きまして,以前から考えていたことをちょこっとお話してきました.当日の様子は, <a href="http://twitter.com/mamoruk">@mamoruk</a> さんが togetter にまとめてくださっていますので,そちらもご覧ください.</p>
<ul>
<li><a href="http://togetter.com/li/615110">第5回 データ構造と情報検索と言語処理勉強会 #DSIRNLP - Togetterまとめ</a></li>
</ul>
<p>私の発表スライドは slideshare に置いておきました.いくつか直したいところがあるので,そのうち差し替えるかも.</p>
<iframe src="http://www.slideshare.net/slideshow/embed_code/29901388" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen> </iframe>
<p> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/koji_matsuda/ss-29901388" title="いまさら聞けない “モデル” の話 @DSIRNLP#5" target="_blank">いまさら聞けない “モデル” の話 @DSIRNLP#5</a> </strong> from <strong><a href="http://www.slideshare.net/koji_matsuda" target="_blank">Koji Matsuda</a></strong> </div></p>
<p>他の方々がものっそい最先端な話ばかりのなか,私一人だけがひどくぼんやりとした内容でたいへん恐縮でしたが,問題意識を共有するきっかけを頂けたことに感謝しています.</p>
<p>そもそもこの話をしようと思ったきっかけは,ふだん学生さんと話していて,今回取り上げた「モデル」といった,<strong>漠然とした概念について理解が共有されていなかったり</strong>,学生さんと研究室スタッフで,<strong>研究における目標が違っていたりする</strong>のではないか,という事例をいくつか目にしてきたことでした.(後者の問題については今回は触れなかったのですが,いろいろ思うところはありますので,いずれ機会をみつけて何か書けたらと思っています)</p>
<p>そのなかでも,今回取りあげた「モデル」という言葉はなかなかに凶悪でして,たとえば言語処理学会全国大会の予稿集をみると,含まれていない論文のほうが少ないのでは(言いすぎ)というくらい多用されているのですが,それらに<strong>内包されている意味をつかむのがむずかしい</strong>状況だと感じていました.</p>
<p>発表資料はあちらこちらに行って発散しているきらいがありますが,おちついて考えてみると,今回言いたかったことは以下の二点に要約されます.</p>
<ul>
<li>モデル(仮定) と アルゴリズム,パラメータはそれぞれ<strong>別のものだということをまずはじめに押さえておくことで,見通しが良くなる</strong>ということ</li>
<li>モデルを計算機上に実現するということのハードルは,<strong>さまざまなドメイン特化言語やツールキットによって下がりつつある</strong>,ということ</li>
</ul>
<p>会場では,以下のようなご指摘をいただきました:</p>
<ul>
<li>これまで「libSVMを使えるかどうかを考える」であったところが,「TorchなりHBCなりを使えるかどうかを考える」という問題にすりかわっているだけではないのか,</li>
<li>そもそも「モデル化」というものは問題を解くためにするものではなくて,現象を浮き彫りにするために行うものであるので,ちょっとモチベーションが違うのでは,</li>
<li>モデル化,というところだけに目を向けてしまうと,実際の応用において必要になってくる効率化であるとか,モデル解釈の容易さのような点に目が向かなくなってしまうのではないか,</li>
<li>「モデルもデータも(問題も)」一度に新しい設定に入れ替える,というのは無理があるので,まずはどちらかを固定して取り組むべきではなのか,</li>
<li>ちょっと話が概念的にすぎるので,実際に手を動かしてもらうタイプのチュートリアルの方が有用なのでは,</li>
</ul>
<p>いずれもごもっともなご指摘であり,私の発表は工学側にもサイエンス側にも倒しきれていない,中途半端な内容になってしまった感じはしています.もうちょっと練ります.</p>
<p>渡邊澄夫先生の書籍から一節だけ引用して,このエントリを締めたいと思います.最後になりましたが,快適な会場を提供してくださったスマートニュース株式会社のみなさま,勉強会をオーガナイズしてくださった @overlast さん,ありがとうございました.</p>
<blockquote><p>よいアルゴリズムを思いつくための系統的な方法があるということはないと思いますが,あなたがこれからさまざまなことを探求するなかで思い出される可能性が高いのは,それまでに出会って美しいと思ったことや面白いと思ったことだろうと思います.ベイズ統計学に現れるアルゴリズムは一つは解析力学に基礎があるものです.もう一つは統計力学です.どちらも美しくとても面白い学問ですから,なにかに役立てようとは考えず,学問そのものを学ぶことをおすすめします.</p><footer><strong>渡邊澄夫</strong> <cite><a href='http://www.amazon.co.jp/dp/4339024627'>ベイズ統計の理論と方法</a></cite></footer></blockquote>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[[MLAC 2013 7日目] Torch7でお手軽ニューラルネットワーク]]></title>
<link href="http://conditional.github.io/blog/2013/12/07/an-introduction-to-torch7/"/>
<updated>2013-12-07T21:29:00+09:00</updated>
<id>http://conditional.github.io/blog/2013/12/07/an-introduction-to-torch7</id>
<content type="html"><![CDATA[<h2>はじめに</h2>
<p>この記事は <a href="http://qiita.com/advent-calendar/2013/machinelearning">Machine Learning Advent Calendar 2013</a> の 7日目の記事です.</p>
<p>2013年,<em>Deep Learning</em> もアカデミックレベルではさまざまな分野への浸透が進み,バズワードの域を脱したように思えます.
これまでは,機械学習というと,応用分野においては(分類/回帰といった)タスクを決めてしまった上でブラックボックスとして
扱うもの,という空気がありましたが,
<em>Deep Learning</em> に代表される柔軟な,いかようにも組み上げられるモデルは,問題の性質を積極的に(特徴量としてではなく,モデル自体に)組み込むことを容易にする,大きな武器になるのではないかと感じています.</p>
<p>素性エンジニアリング vs モデルパラメータエンジニアリング の不毛な戦いが幕を上げた,という見方もできちゃいそうですが・・・..</p>
<p>さて今回は, <a href="http://torch.ch/">Torch7</a> という,Neural Networkを中心とした機械学習向けの環境をごくごく簡単に紹介します.
Torch7自体は,比較的最近公開されたソフトウェアですが,”7”という文字から伺えるとおり,
主開発者の Ronan Collobert 氏が中心となって,かれこれ10年以上継続的に開発されているパッケージのようです.</p>
<p>論文としては, <a href="http://data.neuflow.org/pubs/biglearn11.pdf">NIPS’11 BigLearn Workshop のもの</a>が初出でしょうか.
Neural Network向けのソフトウェアパッケージというと,
<a href="http://deeplearning.net/software/theano/">Theano</a>/<a href="http://deeplearning.net/software/pylearn2/">Pylearn2</a> が主流ですが(要出典),Torch7の特徴をいくつか挙げてみましょう.</p>
<ul>
<li>スクリプティング言語として, Lua が採用されています.
そのため,他のアプリケーションにおけるスクリプティング環境としての組み込みが容易になっているそうです.
試していないのですが,iOSアプリへの組み込みも可能だとか・・・?</li>
<li>テンソルのサポートが手厚く,次元を変えたりメモリ上の配置を変えたり,四則演算を行ったり,がらくちん</li>
<li>NNを構成するモジュールが大量に備わっており,ブロックを組み立てる感覚でモデルを作ることができる</li>
<li>独自のオブジェクトシステムが備わっており,OOPっぽいプログラムが可能</li>
<li>BLAS, CUDAなどのサポート</li>
<li><strong>なぜかIDEがついてくる!!</strong> (<code>torch -ide</code>で起動できます)</li>
</ul>
<p>Theano/Pylearn2との比較については,Theano開発チームによる以下の資料(とくに Table 1)が参考になります.</p>
<ul>
<li><a href="http://arxiv.org/pdf/1211.5590v1.pdf">Theano: new features and speed improvements</a></li>
</ul>
<p><img class="center" src="http://conditional.github.io/images/torch/features.png" width="650"></p>
<p>Theano は Deep Learning の総本山であるモントリオール大のチームが強力に推進しているプロジェクトだけあって,
機能面での対抗はなかなか厳しそうですが,頑張ってます,,,頑張っています!</p>
<h2>Torch7のセットアップ</h2>
<p><a href="http://torch.ch/">Torch7</a> よりどうぞ.</p>
<p>インストールしたのがしばらく前なので記憶が曖昧なのですが,私の環境(MacOS X 10.9)では,特に引っかかるところはなかったように思います.要<code>cmake</code>.</p>
<p>私は使いませんでしたが,<code>apt</code>が動くLinuxか,<code>homebrew</code>が動くMacなら,インストールスクリプトも用意されています.
しかし,こちらのインストールスクリプト,若干お行儀が悪い気もするので,気になる方は実行前に一度眺めてみてください.</p>
<p>各種の拡張機能(カメラへのアクセスなど)は,<code>luarocks</code>というパッケージマネージャ(Rubyにおける<code>gem</code>,Pythonにおける<code>pip</code>のようなもの)を用いて管理するようです.</p>
<h2>Torch7で多層パーセプトロン</h2>
<h3>ネットワークの構築</h3>
<p>Torch7 における Neural Network の構築は非常に簡単です.
たとえば,基本的な中間層1層のネットワークは,以下のようなコードで表現できます.</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='lua'><span class='line'> <span class="nb">require</span> <span class="err">“</span><span class="n">nn</span><span class="s2">"</span>
</span><span class='line'> <span class="n">mlp</span> <span class="o">=</span> <span class="n">nn</span><span class="p">.</span><span class="n">Sequential</span><span class="p">()</span> <span class="c1">-- Multi Layer Perceptron</span>
</span><span class='line'> <span class="n">mlp</span><span class="p">:</span><span class="n">add</span><span class="p">(</span> <span class="n">nn</span><span class="p">.</span><span class="n">Linear</span><span class="p">(</span><span class="mi">1000</span><span class="p">,</span> <span class="mi">25</span><span class="p">)</span> <span class="p">)</span> <span class="c1">-- 1000 input, 25 hidden units</span>
</span><span class='line'> <span class="n">mlp</span><span class="p">:</span><span class="n">add</span><span class="p">(</span> <span class="n">nn</span><span class="p">.</span><span class="n">Tanh</span><span class="p">()</span> <span class="p">)</span> <span class="c1">-- hyperbolic tangent transfer function</span>
</span><span class='line'> <span class="n">mlp</span><span class="p">:</span><span class="n">add</span><span class="p">(</span> <span class="n">nn</span><span class="p">.</span><span class="n">Linear</span><span class="p">(</span><span class="mi">25</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span> <span class="p">)</span> <span class="c1">-- 10 output</span>
</span><span class='line'> <span class="n">mlp</span><span class="p">:</span><span class="n">add</span><span class="p">(</span> <span class="n">nn</span><span class="p">.</span><span class="n">SoftMax</span><span class="p">()</span> <span class="p">)</span> <span class="c1">-- softmax output</span>
</span></code></pre></td></tr></table></div></figure>
<p>このネットワークを,トレーニングデータに対する負の対数尤度を目的関数として訓練するには,</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='lua'><span class='line'> <span class="n">criterion</span> <span class="o">=</span> <span class="n">nn</span><span class="p">.</span><span class="n">ClassNLLCriterion</span><span class="p">()</span>
</span><span class='line'> <span class="n">trainer</span> <span class="o">=</span> <span class="n">nn</span><span class="p">.</span><span class="n">StochasticGradient</span><span class="p">(</span><span class="n">mlp</span><span class="p">,</span> <span class="n">criterion</span><span class="p">)</span>
</span><span class='line'> <span class="n">trainer</span><span class="p">:</span><span class="n">train</span><span class="p">(</span><span class="n">dataset</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
<p>とするだけです.明解ですね.</p>
<p><code>“nn"</code>パッケージには,約80種類のさまざまな Module (NNの層や目的関数に相当)が用意されており,これらを自由に組み合わせてネットワークを作ることが可能です.
行う価値や効率的な最適化法があるかどうかは別にして, <code>add()</code> を用いてどんどん繋げていけばいくらでも <em>Deeeeeeeeeep</em> にすることも簡単にできそうです.</p>
<h3>学習過程の制御</h3>
<p>基本的には以上なのですが,最近の Neural Network の訓練で必須になってきている mini-batch や momentum のような技術を用いたり,
準ニュートン法や共役勾配法などのより高度な最適化を行うために,より細かく学習の制御を行う方法も用意されています.</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='lua'><span class='line'> <span class="n">parameters</span><span class="p">,</span><span class="n">_</span> <span class="o">=</span> <span class="n">mlp</span><span class="p">:</span><span class="n">getParameters</span><span class="p">()</span>
</span><span class='line'> <span class="n">feval</span> <span class="o">=</span> <span class="k">function</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</span><span class='line'> <span class="c1">-- input : 入力事例テンソル , target : inputに対する正解ラベル(一般にはテンソル)</span>
</span><span class='line'> <span class="kd">local</span> <span class="n">output</span> <span class="o">=</span> <span class="n">mlp</span><span class="p">:</span><span class="n">forward</span><span class="p">(</span><span class="n">input</span><span class="p">)</span> <span class="c1">-- 前向きに伝播させて,出力を得る</span>
</span><span class='line'> <span class="kd">local</span> <span class="n">f</span> <span class="o">=</span> <span class="n">criterion</span><span class="p">:</span><span class="n">forward</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span> <span class="c1">-- 決められた Criterion の元での目的関数の値を計算</span>
</span><span class='line'> <span class="kd">local</span> <span class="n">df</span> <span class="o">=</span> <span class="n">criterion</span><span class="p">:</span><span class="n">backward</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span> <span class="c1">-- 勾配を計算</span>
</span><span class='line'> <span class="k">return</span> <span class="n">f</span><span class="p">,</span> <span class="n">df</span> <span class="c1">-- 目的関数の値と,その勾配を返す</span>
</span><span class='line'> <span class="k">end</span>
</span><span class='line'> <span class="n">optim</span><span class="p">.</span><span class="n">lbfgs</span><span class="p">(</span><span class="n">feval</span><span class="p">,</span> <span class="n">parameters</span><span class="p">)</span> <span class="c1">-- parametersを更新</span>
</span><span class='line'> <span class="c1">--(注意)細かい部分を省いた擬似コードなので,このままでは動かないと思います XD</span>
</span></code></pre></td></tr></table></div></figure>
<p>というように,現在のパラメータの元での目的関数の値と,その勾配を返すようなクロージャを作ることで,
<code>“optim”</code> パッケージで用意されているさまざまな最適化アルゴリズム(SGD, AdaGrad, L-BFGSなど・・・)を用いることも可能です.</p>
<p>本稿では触れませんが,<code>module:forward()</code>, <code>criterion:backward()</code> でネットワークの出力,勾配を得て <code>module:gradUpdate()</code> で直接更新するという手段も用意されています.</p>
<h2>ためしてみる(数字認識タスク)</h2>
<p>ここでは, <a href="http://code.cogbits.com/wiki/doku.php?id=start">Machine Learning with Torch7</a> で用いられているチュートリアルコードを実際に動かしてみます.</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='lua'><span class='line'> <span class="n">git</span> <span class="n">clone</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">github</span><span class="p">.</span><span class="n">com</span><span class="o">/</span><span class="n">clementfarabet</span><span class="o">/</span><span class="n">torch</span><span class="o">-</span><span class="n">tutorials</span><span class="p">.</span><span class="n">git</span>
</span></code></pre></td></tr></table></div></figure>
<p>でお手元にクローンして, <code>2_supervised</code> の下にもぐってみてください.</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='lua'><span class='line'> <span class="n">torch</span> <span class="p">.</span><span class="o">/</span><span class="n">doall</span><span class="p">.</span><span class="n">lua</span>
</span></code></pre></td></tr></table></div></figure>
<p>でデータセットのダウンロードを含めた実験スクリプト全体の実行が始まります.初回は 300MB くらいのファイルをいきなり <code>wget</code> しはじめるのでご注意ください.</p>
<p>ここで扱っているのは, <a href="http://ufldl.stanford.edu/housenumbers/">Street View House Numbers (SVHN)Dataset</a>という,
カラー画像から数字を認識するタスク,Format 2(32x32の画像)のほうです.</p>
<p><img class="center" src="http://conditional.github.io/images/torch/SVHN32x32eg.png" width="480"></p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='lua'><span class='line'> <span class="n">torch</span> <span class="p">.</span><span class="o">/</span><span class="n">doall</span><span class="p">.</span><span class="n">lua</span> <span class="o">-</span><span class="n">size</span> <span class="n">small</span> <span class="o">-</span><span class="n">model</span> <span class="n">linear</span> <span class="o">-</span><span class="n">batchSize</span> <span class="mi">100</span> <span class="o">-</span><span class="n">plot</span>
</span></code></pre></td></tr></table></div></figure>
<p>とかすると,ごく普通の線形モデルでの最適化が始まり,その過程が <code>gnuplot</code> でプロットされていきます.</p>
<p><code>2_model.lua</code> には線形モデル(<code>linear</code>),隠れ層1層のニューラルネット(<code>mlp</code>),<a href="http://arxiv.org/abs/1204.3968">2-stageのたたみこみニューラルネット</a>(<code>convnet</code>)
が定義されており, <code>-model</code> オプションで切り替えることが可能です.
おフロに入っている間,40分くらい回した結果は以下のような感じです.</p>
<ul>
<li><code>mlp</code>モデル</li>
</ul>
<p><img class="center" src="http://conditional.github.io/images/torch/test_mlp_15epoch.png" width="480"></p>
<ul>
<li><code>convnet</code>モデル</li>
</ul>
<p><img class="center" src="http://conditional.github.io/images/torch/test_convnet_13epoch.png" width="480"></p>
<p>うーん,<code>mlp</code>はまだまだ伸びそうだなぁ.<code>convnet</code>は局所解につかまってしまったのでしょうか.時間切れにつき,あまり直感に沿った結果は出せませんでしたが,学習によって正解率が向上している,ということは一応みてとれます.</p>
<h2>Torch7 をより深く知るために</h2>
<p>最後に,いくつか資料へのリンクをまとめておきます.</p>
<ul>
<li><a href="http://ronan.collobert.com/pub/matos/2012_implementingnn_springer.pdf">Implementing Neural Networks Eciently</a></li>
</ul>
<p>メイン開発者の Ronan Collobert 氏による Torch7 の解説です.ソフトウェア全体のアーキテクチャや, Lua を採用した理由,実際のパフォーマンスなどがまとめられています,</p>
<ul>
<li><a href="http://code.cogbits.com/wiki/doku.php?id=start">Machine Learning with Torch7</a></li>
</ul>
<p>上に挙げたチュートリアル資料です.Auto-Encoder のサンプルや,新しいモジュールのプログラミング方法など,本稿では触れられなかったトピックが盛りだくさんです.これを遊んでみるだけで年を越せるかも・・・</p>
<ul>
<li><a href="https://groups.google.com/forum/#!forum/torch7">torch7 - Google グループ</a></li>
</ul>
<p>流量はさほど多くありませんが,盛んに開発中のソフトウェアですので,こちらを追うことも重要かと思います.</p>
<ul>
<li><a href="http://www.slideshare.net/yurieoka37/ss-28152060">実装ディープラーニング - slideshare</a></li>
</ul>
<p>@0kayu さんによる,Pylearn2を中心としたディープラーニングの実装に関するよいまとめスライドです.</p>
<ul>
<li><a href="http://kiyukuta.github.io/2013/09/28/casualdeeplearning4nlp.html">自然言語処理まわりのDeep Learningを自分なりにまとめてみた — KiyuHub</a></li>
</ul>
<p>そもそもなんで自然言語処理においてニューラルネットが流行ってるの?というあたりに焦点を当てた資料です.ガッツリ!</p>
<h2>まとめ</h2>
<p>Lua を用いて Neural Network を簡単に構築できる, Torch7 というソフトウェアを紹介いたしました.</p>
<p>Theano ひとり勝ちというのはいかにもつまらないので,皆様にお手にとって頂くきっかけになれば幸いです.</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Deep Learning : Bengio先生のおすすめレシピ]]></title>
<link href="http://conditional.github.io/blog/2013/09/22/practical-recommendations-for-gradient-based-training-of-deep-architectures/"/>
<updated>2013-09-22T10:09:00+09:00</updated>
<id>http://conditional.github.io/blog/2013/09/22/practical-recommendations-for-gradient-based-training-of-deep-architectures</id>
<content type="html"><![CDATA[<p>先日,身内の勉強会(&ラボの勉強会)で,Deep Learningについてお話してきました.これまで興味がなさそうだったのに何故急に?というのはおいておいて.</p>
<p>紹介したのは,Deep Learningの第一人者のひとり, <a href="http://www.iro.umontreal.ca/~bengioy/yoshua_en/index.html">Yoshua Bengio先生</a>自身が執筆された,以下の論文.</p>
<ul>
<li>Yoshua Bengio, <a href="http://arxiv.org/abs/1206.5533">Practical recommendations for gradient-based training of deep architectures</a>, arXiv:1206.5533v2, 2012</li>
</ul>
<p>どうやら書籍の草稿のようで,<strong>Bengio先生の長年の研究で得られたさまざまなノウハウ</strong>(最近の手法まで)がぎっしり詰め込まれています.すごい.</p>
<p>以前から気にはなりつつも,ちょっと分量が多い(30ページくらいある)ので,なかなか手を出すことができなかったのですが,ようやくヤル気が出てきたので,ちょっとがんばって読み込んでみました.</p>
<p>スライドも置いておきます.50枚くらいあります(作るのしんどかった・・・.</p>
<iframe src="http://www.slideshare.net/slideshow/embed_code/26420875" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe>
<p> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/koji_matsuda/practical-recommendation-fordeeplearning" title="ractical recommendations for gradient-based training of deep architectures" target="_blank">ractical recommendations for gradient-based training of deep architectures</a> </strong> from <strong><a href="http://www.slideshare.net/koji_matsuda" target="_blank">Koji Matsuda</a></strong> </div></p>
<p>Deep Learningは,その性能の高さから各所でブームになっていますが,実際に手を出してみると<strong>ハイパーパラメータがやたらと多く,最適化も難しい</strong>,ということで,使いこなしにくい技術になってしまっている感があります.</p>
<p>この記事では,Bengio先生が長年蓄積されたきたノウハウをもとに,</p>
<ul>
<li>どんなハイパーパラメータがあるか</li>
<li>どのように最適化すればよいか</li>
<li>うまく動かないときは,何をチェックすればよいか</li>
<li>学習の結果得られたネットワークを解釈するための可視化の方法</li>
</ul>
<p>など,実問題に適用する場合に役立つ,様々なアドバイスがまとめられています.</p>
<p>特に興味深かったのは,<strong>ハイパーパラメータはグリッドサーチするのではなく,ランダムサンプリングしたほうが性能が出る場合が多い</strong>よ,という知見.</p>
<p>何故なのか,というのは,スライドを見ていただいたり,以下の文献</p>
<ul>
<li>James Bergstra, Yoshua Bengio, <a href="http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf">Random Search for Hyper-Parameter Optimization</a>, Journal of Machine Learning Research, 13(Feb):281−305, 2012.</li>
</ul>
<p>を読んで頂ければ合点がいくのではないかと思います.</p>
<p>これが機械学習一般に対して言えるか,というと必ずしもそうではなく,SVMのようにハイパーパラメータが少ないモデルでは成り立たないのではないかとは思いますがが,なかなか衝撃的な事実です.は〜グリッドサーチとは一体なんだったのか.</p>
<p>この論文を読めばDeep Learningが自在に使えるようになる,ということは無さそうですが,上手くいかず悩んでいる方がいらっしゃいましたら,少しでも参考にしていただければ幸いです.</p>
<hr />
<p>ところで,ふだんはPowerPointを使ってスライドを書いているのですが,今回は<a href="https://bitbucket.org/rivanvx/beamer/wiki/Home">Beamer</a>を使って作ってみました.まじめに使ったのは初めて.</p>
<p>PowerPointと比較すると,以下のような感想を持ちました.</p>
<ul>
<li>あらかじめ用意されたスタイルから逸脱したことは非常にやりにくくなっているので,よくある「文字が小さすぎてギッシリ」みたいな読みにくいスライドは作りにくく,結果として読みやすいものができあがる</li>
<li>タイプセット&PDF生成に時間がかかるので(今回の場合,最終的に20秒くらいかかるようになってしまいました),枚数がふえるとけっこうイライラ(要素の位置をちょっと調整する,とかで20秒かかるのはアホらしい)</li>
<li>図を入れるのがめんどい.PPTならコピペでよいところが,キャプチャしてバウンディングボックス作ってincludegraphics…</li>
<li>要素の入れ子の嵐になる(PPTならタブ一個でいいところが,itemize環境の追加になる)ので,可読性に劣る
<ul>
<li>Markdownとかから変換できればいいな〜</li>
</ul>
</li>
<li>TeXの(バッド)ノウハウ・・・</li>
</ul>
<p>全体的に,準備に時間がかけられて,かつソコソコ長いプレゼン(20枚〜)であれば,使う価値はあると思います(ただしTeX慣れしてるのが大前提)</p>
<p>ただ,長すぎるとタイプセットの時間でイライラするようになるので,一長一短ですね.</p>
<p><a href="ftp://ftp.u-aizu.ac.jp/pub/tex/CTAN/macros/latex/contrib/beamer/doc/beameruserguide.pdf">公式のリファレンスマニュアル</a>は異様に詳しいのですが,どう見ても入門向きではないですし,読む気も起きないと思いますので,まずは<a href="http://www.uncg.edu/cmp/reu/presentations/Charles%20Batts%20-%20Beamer%20Tutorial.pdf">A Beamer Tutorial in Beamer</a>あたりを参考にされるとよいのではないかと思います.</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[第5回 最先端NLP勉強会に参加してきました]]></title>
<link href="http://conditional.github.io/blog/2013/09/08/report-of-snlp5/"/>
<updated>2013-09-08T14:29:00+09:00</updated>
<id>http://conditional.github.io/blog/2013/09/08/report-of-snlp5</id>
<content type="html"><![CDATA[<p>もう一週間ほど前になってしまうのですが,<a href="http://www.logos.t.u-tokyo.ac.jp/snlp5/">最先端NLP勉強会</a> という会に参加させていただきました.</p>
<p>じつは昨年も参加するべく申し込みまでは行ったものの,事情があって参加できず.今年はなんとかリベンジを果たせました.</p>
<p>二日間で30本もの論文を読むこの勉強会,<strong>読む論文の選出プロセスにも工夫が凝らされて</strong>います.</p>
<ol>
<li>参加者全員が,対象となる会議の予稿集に目を通し,面白そうだと思った論文数本(今年は12本)に対して投票を行う.<!--例年は,ACL, NAACL, EMNLPが対象らしいのですが,今年はEMNLPの開催が遅いので,そのかわりに,新しく創刊されたTACL.--></li>
<li>多くの票を集めた論文,上位30本ほどを候補とし,参加者はその中から自分が紹介する論文を選ぶ.</li>
</ol>
<p>という二段階をとっているので,いわゆる「ハズレ」な論文が少なくなっており,どの発表もたいへん勉強になりました.</p>
<hr />
<p>私が紹介したのは以下の論文,</p>
<ul>
<li>Mohammad Taher Pilehvar, David Jurgens and Roberto Navigli, <a href="http://aclweb.org/anthology-new/P/P13/P13-1132.pdf"><em>Align, Disambiguate and Walk</em> : A Unified Approach for Measuring Semantic Similarity</a>, ACL2013</li>
</ul>
<iframe src="http://www.slideshare.net/slideshow/embed_code/25994117" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe>
<p> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/koji_matsuda/snlp5-matsuda" title="Align, Disambiguate and Walk : A Unified Approach forMeasuring Semantic Similarity" target="_blank">Align, Disambiguate and Walk : A Unified Approach forMeasuring Semantic Similarity</a> </strong> from <strong><a href="http://www.slideshare.net/koji_matsuda" target="_blank">Koji Matsuda</a></strong> </div></p>
<p>発表スライドはそのうち公開されるような気もしますが,今のところ認証が必要みたいなので,私のぶんだけ.
他の方の発表がすばらしいものばかりで,ちょっと手抜きすぎな感じがしたので,発表時のものから大幅に加筆しています.英語がおかしいのには,目をつぶってください・・・.</p>
<p><a href="http://conditional.github.io/blog/2013/04/01/unsupervised-wsd-with-graph-connectivity/">以前紹介したGraph Connectivityに基づくWSDの論文</a>と同じ,Roberto Navigliのチームによる論文です.</p>
<p>WSDの論文というよりは,<strong>文間の意味的な類似度を精度良く求めるために,WSDを活用する</strong>,という主旨.いちおう,WSDのための新たなアルゴリズムも提案していますが,そちらは限定的な状況を想定しているため,直接一般のWSDに適用するのは難しいかも.</p>
<p>この論文の優れているところは,語義(WordNet上の一つのSynset),単語,一つの文,(論文中では書かれていませんが,おそらくドキュメント全体も)といった,<strong>さまざまな粒度の言語的要素を,ひとつの表現</strong>(WordNet Synset上の確率分布)で表すことができる,というところ.</p>
<p>アイデアは単純で,文(とか単語とか,意味表現を求めたい言語要素)を語義の集合にバラして,それを種として,<strong>WordNetのグラフ上をランダムウォークさせる</strong>,というもの.
ただ,多義語が含まれる場合は種にノイズが混ざってしまうので,それをWSDで解決してから,グラフにつっこむという解決策を提案しています.</p>
<p>WSDのアルゴリズムは,<a href="http://en.wikipedia.org/wiki/Yarowsky_algorithm">Yarowskyのアルゴリズム</a>などと同様に”one sense per discourse”仮説に立脚したもので,二文それぞれが近い意味になるような語義の組み合わせを二文間のアラインメントで探索する,というもの.べつにこの方法でなければならない,ということもなさそうですが,もともとの目的が”文間の意味的な類似度”ですので,対になる文が意味的にだいたい似ている,ということが仮定できる状況下では,有効な方法に思えます.</p>
<p>ツッコミどころはいっぱいあって,例えば<strong>語順とか構文のような,文全体の意味を決めるのに重要な要素を捨象してしまっている</strong>とか,マルチシードのランダムウォークって,それシード一つのランダムウォーク単純に重ねあわせただけなのでは,とか,</p>
<p>勉強会での説明のときは,この論文が主に「文間の意味的な類似度」に最もフォーカスを当てていることがうまく説明できなかったのですが,帰りの電車でうんうん唸りながら考えて,ここに焦点をあてて説明すれば良かったな,と帰宅してからチマチマスライドなおすなど.</p>
<hr />
<p>その他,勉強会で紹介していただいたものの中で,いくつか気になった論文を.</p>
<ul>
<li>Mike Lewis and Mark Steedman, <a href="http://aclweb.org/anthology/Q/Q13/Q13-1015.pdf">Combined Distributional and Logical Semantics</a>, TACL Vol.1</li>
</ul>
<p>CCGパーシングに,distributional semanticsを結合する,という話.CCGのpredicateに,大きなコーパスをクラスタリングして得られたentity(項)とrelation(述語)を統合する,という研究.LogicとDistributional Semanticsは,それぞれ別個に発展してきているので,それらを一度まとめて考えてみよう,というモチベーションがありそう.組み合わせることで何が新しく解けるようになるのか,というのはまだオープンプロブレムみたい(そもそも,評価に使えるデータがない?)だけれど,今後が楽しみ.</p>
<ul>
<li>Dan Garrette and Jason Baldridge, <a href="http://aclweb.org/anthology/N/N13/N13-1014.pdf">Learning a Part-of-Speech Tagger from Two Hours of Annotation</a>, NAACL2013</li>
</ul>
<p>ルワンダ語とかマダガスカル語のような,電子的に扱える言語リソースが限られている語に対して,いかに小さな労力で品詞タガーを学習できるか,という問題を扱った研究.<a href="http://d.hatena.ne.jp/mamoruk/20130612">小町さんの日記</a>に大まかなストーリーが書いてあるのでそちらもご参照ください.個人的には,生のコーパスにアノテーションを付与するよりも,同じ時間であれば辞書のエントリ数を充実させたほうが若干性能が良い,つまり,語間のマルコフ性に関するデータよりも,語自体の品詞情報のほうが(人手のラベル付けにおいては),時間に対するコストパフォーマンスが良い,というのがなかなか興味深く感じました.</p>
<ul>
<li>Kai Zhao and Liang Huang, <a href="http://aclweb.org/anthology/N/N13/N13-1038.pdf">Minibatch and Parallelization for Online Large Margin Structured Learning</a>, NAACL 2013</li>
</ul>
<p>オンライン学習を並列化するためには,それぞれのノード間でパラメータを共有する必要があるのだけれど,そのタイミングをうまく調節することで,スケーラブルにしよう,という研究.とくに構造学習においては,デコード(新しいデータを評価してみて,パラメータの更新が必要かどうか判断する)というフェーズに時間がかかることが多いのだけれど,これはそれぞれのデータに対しては独立に行える(並列化できる).しかしながら,間違えたたびにパラメータの更新を行っていてはオーバーヘッドが大きすぎるので,途中で間違えたとしても気にせず数事例まとめて評価する(ミニバッチ)ことで,パラメータの更新回数を少なくしよう,というアイディア.うーんうまく説明できないのですが,ミニバッチ,という考え方は Deep Learning でも重要とされていて,完全なオンライン(SGDとか)安定して収束しない,完全なバッチ(BFGSとか)だとメモリがキツい,みたいなときによく使われているので,おさえておいて損はなさそう.</p>
<ul>
<li>Carina Silberer, Vittorio Ferrari and Mirella Lapata, <a href="http://aclweb.org/anthology/P/P13/P13-1056.pdf">Models of Semantic Representation with Visual Attributes</a>, ACL 2013</li>
</ul>
<p>実世界の物体(クマとか,カップとか)と,テキスト上に現れる Bear, Cup などをうまく結びつけよう,という研究.SIFTとかHOGといった,CVの研究においてよく用いられている特徴量ではなく,「クマは茶色い」「クマは四本足だ」などといったような,より高レベルな特徴量(Visual Attributeと呼ばれています)を用いる方法を提案.この高レベルな特徴量は,人手で用意する必要があるようなのですが,画像の特徴と,テキストの特徴を結びつける,という話はなかなか興味深く感じました.</p>
<hr />
<p>全体としては, Grounding(実世界との対応付け?うまい日本語訳が分かりませぬ) がジャンルとして大きな注目を集めているという印象を受けました.マルチモーダル!</p>
<p>道具としては,CCGはもう何処にでも出てくる感じ.CFGなどの伝統的な文法に比べて,どの辺に利点があるのかイマイチ分かっていないので,よく勉強する必要がありそうです.</p>
<p>かなりムシムシする部屋に二日間缶詰になっていたので,汗かきな私にはちょっとシンドイ感もありましたが,みなさま質の高い発表ばかりで,とても楽しい時間を過ごすことができました.幹事のみなさま,発表者のみなさま,どうもありがとうございました.</p>
<p>あわせて読みたい:</p>
<ul>
<li>持橋先生の日記 : <a href="http://chasen.org/~daiti-m/diary/?201309a&to=201309020#201309020">第5回最先端NLP勉強会</a></li>
</ul>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[ACL2013 マイ・リーディングリスト(1)]]></title>
<link href="http://conditional.github.io/blog/2013/08/19/acl2013-reading-list-part-1/"/>
<updated>2013-08-19T13:20:00+09:00</updated>
<id>http://conditional.github.io/blog/2013/08/19/acl2013-reading-list-part-1</id>
<content type="html"><![CDATA[<p>自然言語処理に関する最高峰の国際会議 <a href="http://www.acl2013.org/site/">ACL</a> が先日開催されました.
発表された論文をいくつか眺めてみたのでメモ.</p>
<p>ほんとうはもっといっぱい紹介したい論文があるのだけれど,時間の都合上,5本だけ.気がむいたら続編あるかも.</p>
<p>すべての論文は,<a href="aclweb.org/anthology/">ACL Anthology</a>で入手することができる.</p>
<hr />
<h3><a href="http://aclweb.org/anthology/P/P13/P13-1044.pdf">“Nonconvex Global Optimization for Latent-Variable Models”</a> Matthew R. Gormley and Jason Eisner, ACL 2013</h3>
<p>分枝限定法(評価関数の上限を推定しながら,探索木を刈りこむ)を用いて,隠れ変数モデルの大域解を求めよう,という話.
実験にはDMV(Dependency Model with Valence)というわりと有名な Unsupervised Dependency Parsingのモデルを用いている.
グラフを見る限り,劇的に性能が良くなっているわけではなさそう,というか,線がつぶれてよく分からないw</p>
<p>正直さっぱり分かっていないんだけど,分枝限定法についてのぼくの限られた知識から推測すると,
隠れ変数が離散値をとる場合しか使えないような気がする.
(正確にmarginalを計算しているのではなく,MAP解だけを数え上げているようにみえる)</p>
<p>実は,EMのような局所解に縛られる問題を,メタヒューリスティクスを使ってなんとかしよう,というのは,学部時代の恩氏が時々
言っていた話なのだけれど,当時は(いまも)能力が追いつかなくてぜんぜん歯が立ちませんでした.</p>
<p>すぐにどうこうする話ではなさそうだけれど,むかしから微妙に興味はあった話ではあるので,
(小さな局所解がいっぱいあるような)モデルを扱うときのためにいちおう記憶にとどめておきたい.</p>
<hr />
<h3><a href="http://aclweb.org/anthology/P/P13/P13-1034.pdf">“Scaling Semi-supervised Naive Bayes with Feature Marginals”</a> Michael R. Lucas and Doug Downey, ACL 2013</h3>
<p>Semi-supervised Naive Bayesというと,EMと組み合わせたNigamの有名な論文以来,きれいな構造とシンプルなアルゴリズムのため,
よく使われるのだけれど,データ全体を何度もなめないといけないため,計算量が問題だった.あと,EMを使う以上,モデルが変な方向へ飛んでいってしまう(局所解につかまる)ため,性能が安定しないという問題があって,ちょっと扱いづらい.</p>
<p>そこで,featureの各クラスにおける出現確率だけをunlabeledデータから求める,というアイディアに基づいて高速化をはかったのがこの論文.
ラベルつきデータが少数しか利用できない場合,featureの出現回数の”信頼性”が無くなってしまうので,大量に用意できるunlabeledデータを用いてパラメータを補正する,という感じ.</p>
<p>このとき,データが正例か負例かのどちらかに属する,という仮定を用いて,学習データにおける正例負例の割合をうまく取り込むことで精度を上げている.</p>
<p>Semi-supervised NBだと,わりと最近では<a href="http://www.icml-2011.org/papers/93_icmlpaper.pdf">Semi-supervised Frequency Estimate</a>(Su+ ICML’11)という,ワンパスで解いちゃう劇的に速い方法が提案されていて,
アイディアもとても似ている.精度では今回提案された手法が優れているよう.計算時間の比較はなかったけど,同じくらい?</p>
<p>Naive Bayesは超有名なので,バリエーションも超大量にあるのだけれど,NBの良いところの一つはマルチクラス分類が自然に行えるところだと思っているので,
データが2クラス限定になっちゃうこれはどうかなーと思ったりする部分もある.
もちろん,one-versus-allのような仕組みでいくらでもマルチクラスに拡張できるのですが.</p>
<p>このへんは,2010年代っぽくない,とか言う人もいるけど,最近でも時々掘って成果を出している人がいるみたい.</p>
<hr />
<h3><a href="http://aclweb.org/anthology/P/P13/P13-1021.pdf">“Unsupervised Transcription of Historical Documents”</a> Taylor Berg-Kirkpatrick, Greg Durrett and Dan Klein, ACL 2013</h3>
<p>このあいだ草津にいったときに,ちょっと趣きのある看板をみつけたので,</p>
<blockquote class="twitter-tweet"><p>そういや白根山でみつけたこの看板、自然言語処理に対する挑戦っぽい <a href="http://t.co/ps3qgUCGfO">pic.twitter.com/ps3qgUCGfO</a></p>— Koji Matsuda (@conditional) <a href="https://twitter.com/conditional/statuses/349186418167406593">June 24, 2013</a></blockquote>
<script async src="http://conditional.github.io//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p></p>
<p>とか言ってたら,マジで論文が出てきた・・・.主に,むかしのタイプライターとか活版印刷で印刷された,
現在では読みにくくなってしまっている文書をいかにOCRするか,という題材.</p>
<p>モデルは, 言語モデル × typesettingモデル(文字のレイアウト:右にこれくらいズレてる,とか) × inkingモデル(インクのつけすぎで太くなっちゃってるとか) × ノイズモデル(経時変化による文字の欠けとか)を一つひとつ丁寧に組み上げて,Jointしている.
学習はEM.ちゃんと動くのか心配だけど,一つ一つの変数がちゃんと意味を持つよう工夫しているからか(むやみに変数が多くなりすぎないように工夫しているようにみえる),
ちゃんと学習できているらしい.</p>
<p>学習したモデルでは,人工的にインクをダバ〜っとこぼした原稿も解読できたりするようで,このへんもなかなか興味深い.モデル自体の解釈も面白そう.</p>
<hr />
<h3><a href="http://aclweb.org/anthology/P/P13/P13-1036.pdf">“Scalable Decipherment for Machine Translation via Hash Sampling”</a> Sujith Ravi, ACL 2013</h3>
<p>暗号解読のノリで,言語モデル+サンプリングを使って対訳コーパスなしで翻訳をしちゃうお話の続編.
2011年の初出以来,年々進化を続けていて,今回は主に高速化がテーマになっている.</p>
<p>最初はword-to-wordの置換に基づく翻訳だけだったのが,これまでの研究で,さまざまなfeatureが使えるようになったのだけれど,
ちょっと計算に時間がかかりすぎるようになってきたので,Hash Samplingという手法で高速化を行っている.</p>
<p>Hash Samplingというのは,あんまりよくわかっていないのだけれど,ベクトル同士の類似度をはかる
(指数分布族からのサンプリングに用いる尤度項のテイラー近似は,パラメータベクトルと事例ベクトルの内積を用いて表せるらしい)
ときに,feature vectorの空間で直接内積をとる代わりに,適当なハッシュ関数を通して,その間の差分(ハミング距離とか)を用いる方法のよう.</p>
<p>この手法によって,現在のパラメーターに近い語は高い確率でサンプルされ,そうでない語は低い確率,というサンプリングを高速に実現している.
{0,1}ベクトルのハミング距離は最近のCPUだとかなり高速に計算できるようで,BLEU値をほとんど落とさずに,2桁くらいの高速化を実現したらしい.</p>
<p>Hash Samplingは,かなり汎用性が高い高速化手法っぽいので,そのうちじっくり読む機会があればいいなと思っている.
テイラー展開による近似 + ハッシュによる近似,という2段階の近似を経ているあたりが少し気になったりはする.</p>
<hr />
<h3><a href="http://aclweb.org/anthology/P/P13/P13-1127.pdf">“From Natural Language Specifications to Program Input Parsers”</a> Tao Lei, Fan Long, Regina Barzilay, and Martin Rinard, ACL 2013</h3>
<p>ICPCなどのプロコンの問題を,コンピュータに解かせよう!というモチベーションがありそうな研究.
といっても,今回はまだ問題を解くところまでは行っていなくて,入力データの解析部分に対する挑戦.
プロコンの問題では,たいてい,</p>
<blockquote><p>入力は複数のデータセットからなる. 各データセットは2つの整数 a0 と L が1個のスペースで区切られた1行であり,
a0 が最初の整数を, L が桁数を表す. ただし, 1 ≤ L ≤ 6 かつ 0 ≤ a0 < 10L である.</p>
<p>from <a href="http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1180&lang=jp">AIZU ONLINE JUDGE</a></p></blockquote>
<p>というような入力データのフォーマット指示がなされているので,これを構文解析して,パーサーを構成するC++プログラムを自動で生成しよう,というテーマ.</p>
<p>用いることの出来るデータは,上に挙げたようなフォーマット指示の問題文(英語)と,実際にプロコン主催者から与えられる入力データ.
直接プログラムそのものへの変換を考えるのではなく,フォーマット指示文から,データ構造を表す “specification tree”を生成し,
それを通してparsingプログラム(より正確には,yaccやbisonに入力するような形式文法)の生成を行っている.</p>
<p>モデルは,
テキスト中のそれぞれの要素が,他の要素とどのような関係を持っているかを当てるための dependency parsing と,
それぞれのノードがプログラム内でどのような役割をもつか当てるための role labeling のふたつの要素で構成されている.</p>
<p>学習は,だいたい次のような流れ.</p>
<ol>
<li>現在のモデルから specification tree をサンプリングする</li>
<li>サンプリングされたtreeからプログラムを生成し,テスト用データをすべてパースできるか調べる(feedbackと呼ばれている)</li>
<li>treeがどれくらい良いか,に応じて,Metropolis-Hasting ruleで次の状態を定める</li>
</ol>
<p>このfeedbackと呼ばれる学習手法によって,F値が54から80程度に向上したらしい.
<a href="http://people.csail.mit.edu/taolei/papers/acl2013-slides.pdf">著者による発表スライド</a>もあるので,興味をもって頂けましたら,ぜひそちらも.</p>
<p>つづく・・・かも?</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[コンピュータが政治をする時代(あるいは,行列とテキストの結合モデル)について]]></title>
<link href="http://conditional.github.io/blog/2013/08/03/joint-modeling-of-a-matrix-with-associated-text-via-latent-binary-features/"/>
<updated>2013-08-03T14:12:00+09:00</updated>
<id>http://conditional.github.io/blog/2013/08/03/joint-modeling-of-a-matrix-with-associated-text-via-latent-binary-features</id>
<content type="html"><![CDATA[<p>前回のVanishing Component Analysisに関する記事が思いのほか好評だったようで,
なんか自分に対してのハードルあげちゃった感あったり,記事冒頭でデブとか書くんじゃなかった・・・(ハハハ)と後悔してたり...</p>
<p>いつもどおり肩肘はらずに書きますね.例によって,マンスリー読み会で紹介した論文について.</p>
<ul>
<li><a href="http://books.nips.cc/papers/files/nips25/NIPS2012_0733.pdf">“Joint Modeling of a Matrix with Associated Text via Latent Binary Features”</a> XianXing Zhang and Lawrence Carin
, NIPS 2012.</li>
</ul>
<iframe src="http://www.slideshare.net/slideshow/embed_code/24888804" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe>
<p> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/koji_matsuda/joint-modeling-ofamatrixwithassociatedtext" title="Joint Modeling of a Matrix with Associated Text via Latent Binary Features" target="_blank">Joint Modeling of a Matrix with Associated Text via Latent Binary Features</a> </strong> from <strong><a href="http://www.slideshare.net/koji_matsuda" target="_blank">Koji Matsuda</a></strong> </div></p>
<p>行列と,その列or行に紐づいたテキストが存在するときに,行列をいかによくモデル化するか,というお話です.推薦システム界隈ではわりとよくある感じの話ではあると思うのですが,適用しているデータが面白かったので紹介.</p>
<p><img class="center" src="http://conditional.github.io/images/joint_modeling_matrix_and_text.png" width="650"></p>
<p>なんと,<strong>アメリカ下院議員の(法案に対する)投票行動</strong>をモデル化しています.この問題ならではの面白い性質を使っているのかと思いながら読み進めたら実はそんなことも無くて肩透かしを食らった感じではあるのですが.</p>
<p>法案が議会を通過するか(採択されるか)を予測する,というタスクでは,<strong>法案のテキストだけ</strong>が与えられた状況で,<strong>90%以上の正解率</strong>を達成しています.
この数値が高いのか低いのか私には判断がつきかねる(そもそも,提出された法案がほとんど採択されるような状況では予測の意味が無い)ものの,かなり工夫の施された他手法に比べてもそれなりに高い性能を達成しているようです.
特に政治ドメインならではのモデリングを行っているわけではなく,かなりGeneralなモデルなのですが,たとえば,政治に特化した工夫がなされたIdeal Point Topic Model(IPTM)のような既存手法に比べても高い性能,というのはなかなか面白いところです.</p>
<p>割とよくある推薦システムの技術が,<strong>議会という,民主主義の根幹を担うおそらく極めて高度なシステムを,表面的にではあるもののエミュレーションできてしまう</strong>,というのはなかなか考えさせられるものがあります.</p>
<p>今回の論文では,「議員の過去の投票行動と,法案のテキスト」の間の関係をモデル化しているだけなのですが,外部の情報,たとえば経済指標だとかパブリックコメントだとか,を組み込むことができるとすると(能力のある研究者がその気になれば不可能ではないとはおもいます),<strong>コンピュータが政治を行う,という時代も意外と近づいてきているのかも</strong>しれません.</p>
<p>は〜ディストピアっぽい.</p>
<hr />
<p>以下,テクニカルな部分について.私は推薦システムだとかベイズモデルだとかはあんまり詳しくないので,色々間違っているかも.</p>
<p>この論文では,テキストを<strong>Focused Topic Model</strong>というトピックモデル,賛否を表す行列を<strong>Binary Matrix Factorization</strong>という行列分解モデルで表現しています.</p>
<p>そのうえで,<strong>全体を繋ぎあわせる</strong>ようなバイナリの変数を導入して,<strong>全体を一気にMCMCで推定</strong>する,という流れ.スライドの最後にも載せておきましたが,グラフィカルモデルにいろいろアノテーションしたものを貼っておきます.小さくて見づらい場合は「名前をつけて保存」とか,よしなに扱って頂いてかまいません.青四角はハイパーパラメータです.</p>
<p><img class="center" src="http://conditional.github.io/images/joint_modeling_matrix_and_text_model.png" width="650"></p>
<p>そもそも,何故Focused Topic Modelなのか,何故Binary Matrix Fctorizationなのか,という部分には,論文中にはあまり説明がなかったのですが,ちょっと考えてみたらいくつか理由付け,というか動機の推察ができたのでメモしておきます.</p>
<p>一つは,Focused Topic Modelの性質として,IBPから生成されるバイナリベクトルをトピック分布のサブセット選択に用いているため,トピック分布をスパースになる,というものがあります.スパースであること自体はさほど重要ではないのですが,<strong>IBPから出てくるバイナリのベクトルが,Binary Matrix Factorizationのバイナリ表現とうまくマッチする</strong>,というのは考えられそうです.両者が等価なものだとはあまり思えないのですが,<strong>複数のモデルの間にインタラクションを持たせる</strong>ための確率変数としては,なかなかよい選択に思えます.</p>
<p>あとは,Focused Topic Modelの論文でも述べられている,<strong>コーパスレベルでのトピック生起確率と,個々のドキュメントでのトピック生起確率の相関</strong>に関する問題が,”法案”というドメインにおいては顕著に現れるという可能性もあります.私はアメリカの法律なんて読んだことないのですが,もし一つ一つの法案が(互いに語彙の重なりが少ないという意味で)専門的な文書になっているとすれば,Focused Topic Modelの利点が効いてくるのかもしれません.</p>
<p>しかし,これくらいごちゃごちゃしたグラフィカルモデルをまじめに読み解くのは初めてで,なかなか骨が折れました.低ランク近似の周辺なんかは未だにイマイチつかめていませんし,Inferenceのところは理解を諦めてほぼ眺めただけですが,それでもたいへん勉強になりました.</p>
<p>さて,読んでばっかいないで実装しろ,という声が聞こえたので今日はこのへんにて.とりあえず,ビールでも飲みに行ってきます.</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[どんなデータでも(※)線形分離可能にしてしまう技術,Vanishing Component Analysis(ICML 2013)を紹介してきました]]></title>
<link href="http://conditional.github.io/blog/2013/07/10/vanishing-component-analysis/"/>
<updated>2013-07-10T11:30:00+09:00</updated>
<id>http://conditional.github.io/blog/2013/07/10/vanishing-component-analysis</id>
<content type="html"><![CDATA[<p>急に蒸し暑くなってきましたね.でぶちんなのでけっこうこたえます.タイトルはちょっと釣り気味.ビビっと来た方は是非論文に目を通してみてください:)</p>
<p>例によって,仲間内でやっている小さな勉強会で論文紹介をしてきましたので,そのご紹介です.ぼくの専門というか興味の中心は自然言語処理なので,ふだんはそっち方面を追っているのですが,勉強会では機械学習方面を中心にいろいろ読んでみてます.</p>
<p>今回は岡野原さんのこのツイートで興味を持った以下の論文を読ませていただきました.名前もかっこいい.<strong>ヴァニッシングコンポーネントアナリシス!</strong></p>
<blockquote class="twitter-tweet"><p>ICML2013のbestpaper。データ中の集合(例えば画像中の8の字など)が0になるような生成多項式を求める(=集合のコンパクトな表現)効率的なアルゴリズムを提案し教師有学習時の特徴生成などに使える。すごい <a href="http://t.co/DedSoyLaJR">http://t.co/DedSoyLaJR</a></p>— 岡野原 大輔 (@hillbig) <a href="https://twitter.com/hillbig/statuses/347504853205000193">June 20, 2013</a></blockquote>
<script async src="http://conditional.github.io//platform.twitter.com/widgets.js" charset="utf-8"></script>
<ul>
<li><a href="http://jmlr.org/proceedings/papers/v28/livni13.pdf">“Vanishing Component Analysis”</a> Roi Livni et al, ICML 2013 (Best Paper)</li>
</ul>
<iframe src="http://www.slideshare.net/slideshow/embed_code/24079705" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe>
<p> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/koji_matsuda/vanishing-component-analysis" title="Vanishing Component Analysis" target="_blank">Vanishing Component Analysis</a> </strong> from <strong><a href="http://www.slideshare.net/koji_matsuda" target="_blank">koji_matsuda</a></strong> </div></p>
<p>タイミングよく,<a href="http://partake.in/events/0ae21389-aa2a-42c1-a247-f93582127216">ICML2013読み会</a>という企画に乗っかるチャンスを頂けたので,今回はそちらでもお話させていただきました.会場には40人ほどいらっしゃったでしょうか.思いのほか多くの方が集まっており,演台から会場をみたときにちょっと圧倒されちゃいました・・・.外部でお話するのはとても久しぶりだったのですが,たいへん楽しい会でした.主催の <a href="http://twitter.com/sla">@sla</a> さん,会場を提供してくださった中川先生,ありがとうございました.</p>
<p>この論文は,PCAやICAに代表される<strong>Component Analysis</strong>に,これまでとはまったく別の角度からアタックした論文です.</p>
<p>PCA,ICAというと,特徴量抽出とか信号分離などによく使われているイメージですね.多くの「なんとかComponent Analysis」はデータの成分がある種の確率分布(多くの場合,正規分布)にしたがって生成されているという仮定に立脚しています.また,見つけることのできる成分(基底といいます)は線形なものに限られることがほとんど.</p>
<p>対してこの論文では,<strong>「多項式」で表現されるような基底を抜き出す</strong>ことに焦点を当てています.無理やり1ページで説明しようとするとこんな感じ.</p>
<p><img class="center" src="http://conditional.github.io/images/VCA.png" width="650"></p>
<p>で,興味をもっていただけましたらスライドを眺めていただきたいのですが,この「多項式集合」を特徴量抽出に使うと,いい感じに<strong>組み合わせを考慮した素性を抽出</strong>することができるようです.しかも,(※多少の前提条件は必要ですが)この方法で抽出した特徴ベクトルを分類問題に適用すると,<strong>線形分離できることが保証される</strong>,というありがたさ.多項式カーネルを直接用いる分類に比べ,精度がほとんど落ちることなく,分類において最大100倍ほどの高速化を達成しています.</p>
<p>今後もいろいろな展開が考えられる,読んでいて楽しい論文でした.手法や達成した性能自体が凄い,というよりは,これまで機械学習で殆ど用いられてこなかった<strong>代数幾何の概念を完成度の高い形で既存の問題設定に組み込んだ</strong>.というのがBest Paperとして評価された一因なのかなとも思います.</p>
<p>ICML読み会での発表後にTwitterを眺めていたら,</p>
<blockquote class="twitter-tweet"><p>さっきグレブナー基底とか何とか言ったけど、これはむしろ自由度の高い単なる多項式回帰な気がするので、今からちゃんと読むです… [要出典]</p>— ぽよ子 (@tara_nai) <a href="https://twitter.com/tara_nai/statuses/354593532855590912">July 9, 2013</a></blockquote>
<script async src="http://conditional.github.io//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>とのご指摘が・・・.これはすずかけ台の勉強会でも指摘されて,ちょっとアレレってなっていた部分でもありました.説明できなくてスミマセン.</p>
<p>未だにアレレってなっているのですが,たしかに問題自体は多項式回帰の枠組みで考えることもできそうです.ただ,効率的にかつ冗長性を抑えながら,できるだけ小さい次数からFilterしていくということを考えると,イデアルのもつ吸収律を活用する,VCAのような枠組みが有効に働いてくるのではないかと思います.(スミマセン,イデアルとはいったい何なのか,グレブナー基底とはいったい何なのか,未だにあんまりわかってないので自信はありません・・・)</p>
<p>ちなみにこのチーム,すでに<strong>Deep Learningへの応用</strong>を考えていらっしゃるみたいで,そちらの<a href="http://arxiv.org/abs/1304.7045">プレプリント</a>も出てたりします.なんともはや.</p>
<p>他の方の発表も興味深い話が盛りだくさんで,すずかけの方では元同期の <a href="http://twitter.com/tma15">@tma15</a> くんが<a href="http://tma15.github.io/blog/2013/7/it-takes-a-long-time-to-become-young.html">オンラインコミュニティにおける参加者の寿命を言語的特徴から推測する話(WWWのベストペーパー)</a>を紹介してくれたり,ICML読み会のほうは.</p>
<ul>
<li>超多クラスのロジスティック回帰の分散学習</li>
<li>オンラインのマルチタスク学習(Lifelong Learningというらしいです)の爆速化</li>
<li>重みベクトルのビット数をAdaptiveに調節して省メモリに</li>
<li>ローカルには線形なSVMを多数組み合わせることで非線形分類を高速化</li>
<li>Deep LearningにおけるRectifierに代わる活性化関数Maxoutの提案</li>
<li>高次の共起を考慮にいれたタグの補完に基づいた高速画像タギング</li>
<li>ビデオ映像からの人間の動作認識</li>
<li>複数の目的関数をパレート最適に持っていくようなActive Learning</li>
<li>あんまり確率的ではないTopic Modelとその特徴付け</li>
</ul>
<p>などなど(発表の要旨をつかめてなかったらすみません),何でもありな感じでワクテカ.実際の現場で機械学習を応用されてるPFIの方の発表が多かったこともあり,<strong>精度を下げずにいかに高速化するか</strong>,という方向性の論文が多かったように思います.</p>
<p>個人的には, @sla さんがオープニングで話してくださった,「<strong>なんでもi.i.dを仮定するのはそろそろ脱却して,時間/空間に沿って変化するような動的なデータに対しても理論を作っていくべき</strong>」というコメントがたいへん興味深く感じました.</p>
<p>機械学習が実世界に浸透していくにしたがって,これからはひとつのモデルなり分類器なりがそれなりに長く使われることを考えなければならない時期にきているのかなとも思います.そういう状況のもとでは,(たとえば言語の話でいえばその時々で流行語があるように)<strong>入力の分布がどんどん変わっていく</strong>ような状況に対してうまく適応していくような問題設定を明確に意識していく必要がありそうです.
<a href="http://twitter.com/unnonouno">@unnonouno</a> さんが紹介してくださった,Lifelong Learningも,そういうモチベーションを含んでいるのかな.</p>
<p>私個人としましては,もう長いこと途絶えてしまっている外部へのアウトプットを再開するよい機会になりましたので,今後は知識を頂くだけではなく,自分の学んだことを共有することを心がけていきたいと感じた会でした.</p>
<p>久しぶりにお会いした方もいらっしゃったので,ゆっくりお話できれば良かったのですが,ちょっと事情がありまして早々と帰宅.また近いうちにお会いできる機会があれば幸いです(人生相談にのっていただきたいのでした・・・)</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Programming by Exampleに対する機械学習からのアプローチ(あるいは,「重い」処理を機械学習で「軽く」する,という視点)について]]></title>
<link href="http://conditional.github.io/blog/2013/06/01/machine-learning-framework-for-programming-by-example/"/>
<updated>2013-06-01T15:26:00+09:00</updated>
<id>http://conditional.github.io/blog/2013/06/01/machine-learning-framework-for-programming-by-example</id>
<content type="html"><![CDATA[<p>およそひと月ぶりに,仲間内で行っている小さな勉強会で論文紹介をしてまいりました.ICML2013の予稿がちょっとづつ出てきているので,本日はその中から一本.</p>
<ul>
<li><a href="http://jmlr.csail.mit.edu/proceedings/papers/v28/menon13.pdf">“A Machine Learning Framework for Programming by Example”</a> Aditya Menon et al, ICML 2013</li>
</ul>
<iframe src="http://www.slideshare.net/slideshow/embed_code/22279251" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe>
<p> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/koji_matsuda/a-machine-learning-framework-for-programming-by-example" title="A Machine Learning Framework for Programming by Example" target="_blank">A Machine Learning Framework for Programming by Example</a> </strong> from <strong><a href="http://www.slideshare.net/koji_matsuda" target="_blank">koji_matsuda</a></strong> </div></p>
<p>機械学習を使って,Programming by Example(PbE)をしようという論文です.PbEというのは私も初耳だったのですが,ざっくり言うと,<strong>人間が「例」を与えることで,その例をうまく再現するようなプログラムを自動的に生成する</strong>,というタスクのようです.</p>
<p>それを部分的に実現している(らしい)のが,Excel2013に新しく搭載されたという<a href="http://blogs.office.com/b/microsoft-excel/archive/2012/08/08/flash-fill.aspx">“Flash Fill”</a>という機能.<strong>ユーザーの意図を推測して,ルールにしたがったセルの補完</strong>なんかをしてくれるみたいです.百聞は一見にしかず,以下の動画をご覧ください.</p>
<iframe width="480" height="270" src="http://www.youtube.com/embed/YPG8PAQQ894?feature=oembed" frameborder="0" allowfullscreen></iframe>
<p>Flash Fillは一行から一行(というよりは,セルからセル)への変換のみがターゲットでしたが,本論文では<strong>集計であるとか,重複の削除のように,複数の行にまたがった処理</strong>をうまく解く枠組みを提案しています.</p>
<p>具体的には以下の例が分かりやすいかもしれません.</p>
<p><img class="center" src="http://conditional.github.io/images/programming_by_example_menon2013.png" width="650"></p>
<p>「書き換え前」「書き換え後」の文字列を与えると,それらをうまく繋ぐようなプログラムを生成する,というイメージです.Perlいらず?</p>
<p>手法としてはさほど難しいことはしておらず,無理やり一言でまとめてしまうと,<strong>「書き換えプログラム」の生成モデルをPCFGでモデル化して,それぞれの生成ルールの確率をlog-linearで書き,そのパラメータをPCFGのn-best導出を延々と求めながら更新していく</strong>,というだけ.見方によっては,あまりICMLっぽくは無いかも.</p>
<p>もちろん,書き換えルールの元になるような基礎的な関数セット(最低限チューリング完全なものがあれば原理的には可能ですが,現実的には重複除去とかカウントとかを用意しておくみたいです)はあらかじめ定義しておかなければならないのですが,あとは<strong>探索時間さえ掛ければ任意の書き換えを行うプログラムが生成可能</strong>である,というのがポイントです.</p>
<p>ただ,現実的な時間で探索を行うためには<strong>探索に優先順位</strong>をつける必要があります.そこで,効率的に探索を行うために<strong>機械学習を用いて「書き換え」の集合をあつめたコーパスからPCFGのパラメータを学習</strong>しましょう,というのがこの論文の本旨のようです.実際,探索が難しいプログラムほど高速化が期待でき,brute forceな方法にくらべると40倍ほど速くなる場合もあるとのこと.</p>
<p>機械学習は「適応的なシステム」を作るのに使われる「重い」手法,というイメージがありますが,<strong>もともと原理的に解ける問題を「高速化」するために用いる</strong>,という意味で面白い視点を与える論文だと思いました.</p>
<p>ビッグデータ感もなければ,ディープラーニングでもなく,曼荼羅のようなグラフィカルモデルもなんとかダイバージェンスも出てこない論文ですが,なかなか面白かったです.実用に近そうなのもいい.</p>
<p>話は変わりまして,先日大学の同期とのプチ同窓会で10人ばかり集まったのですが,誰一人結婚してなくて笑.もちろん,ある種の集合バイアスもあるとは思いますが,おいおい俺らそろそろみそじやで.</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[統計データに基づくGoogle各種サービスの生存予測]]></title>
<link href="http://conditional.github.io/blog/2013/05/06/predicting-google-closures/"/>
<updated>2013-05-06T11:53:00+09:00</updated>
<id>http://conditional.github.io/blog/2013/05/06/predicting-google-closures</id>
<content type="html"><![CDATA[<p>先日Prismaticを眺めていたら,興味深い記事を見つけたので紹介.</p>
<ul>
<li><a href="http://www.gwern.net/Google%20shutdowns">Predicting Google closures</a></li>
</ul>
<p>Google Readerの停止がアナウンスされたのは記憶に新しいですね.はじまりあるものは,すべて終わりもあるもの.実際,最近のGoogleはビジネスにならないと判断したプロダクトを大胆に切っていっているような印象をうけます.</p>
<p>この記事では,これまでGoogleが運営してきた<strong>350のサービス/プロダクト</strong>のデータを,疫学統計でよく用いられる(らしい)Coxモデルとよばれる統計モデルによって解析し,<strong>どのようなサービスが今後停止されるおそれが高いのか</strong>,分析を行っています.</p>
<h2>特徴量</h2>
<p>特徴量として用いているのは以下のような情報.詳細な基準は元記事を参照いただくとして,簡単に抜粋してみます.</p>
<ul>
<li>プロダクト名をクエリとしたGoogleのヒット数(そのまま使うのは不公平なので,サービスのリリース時期に応じて補正を加えているそうです)</li>
<li>プロダクトのタイプ.サービスなのか,プログラムなのか,モノ(Chrome Bookとか)なのか,それ以外(SoCとかI/Oのようなイベント等)なのか</li>
<li>そのプロダクトが,直接Googleに収入をもたらしているか</li>
<li>そのプロダクトが,FLOSSであるか,またはFLOSSに直接関係したものであるか</li>
<li>そのプロダクトは,他社から買収したもの,またはそれをもとにしたものであるか</li>
<li>そのプロダクトが,ソーシャルな要素を含んでいるか</li>
<li>そのプロダクトは,Googleが2005年以前にリリースされたものであるか</li>
</ul>
<p>元記事の著者はこれらの情報をまとめたCSVファイルを公開してくださっていますが,そのままではちょっと見にくいので,<a href="https://docs.google.com/spreadsheet/ccc?key=0ApJZf-tS-BfedDJ4NmxFaEpMYVVPV2FTQ0RsaXZsbnc&usp=sharing">Google Docsに転載&ちょっと整形してみました</a>のでよろしければご覧ください.ライセンスは元記事のとおり,<a href="http://creativecommons.org/about/cc0">CC0</a>で.</p>
<h2>分析結果</h2>
<p>このデータをCoxモデルにフィットさせた結果,以下のような要素がシャットダウンの<strong>リスクを低減させる</strong>ことが分かったそうです.</p>
<ol>
<li>Googleが他社から<strong>買収したプロダクトではない</strong>こと</li>
<li>FLOSS<strong>ではない</strong>こと</li>
<li>Googleに直接収益をもたらすこと</li>
<li>ソーシャルネットワークと<strong>関係ない</strong>こと</li>
<li>Google検索でのヒット数が多いこと</li>
<li>2005年以前にリリースされたものであること</li>
</ol>
<p>2番,4番の要素がちょっと意外.</p>
<p>その結果,以下のようなプロダクトがシャットダウンのリスクが高い,という予測を行っています.</p>
<ol>
<li>Schemer</li>
<li>Boutiques</li>
<li>Magnifier</li>
<li>Hotpot</li>
<li>Page Speed Online API</li>
<li>WhatsonWhen</li>
<li>Unofficial Guides</li>
<li>WDYL search engine</li>
<li>Cloud Messaging</li>
<li>Correlate</li>
</ol>
<p>あまり聞いたことないプロダクトが並びます.あれ,Google Boutiquesって閉鎖したんじゃなかったっけ?Google Correlateも,生きていたのが意外です.
逆にシャットダウンのリスクが低いプロダクトは以下の通り.</p>
<ol>
<li>Search</li>
<li>Translate</li>
<li>AdWords</li>
<li>Picasa</li>
<li>Groups</li>
<li>Image Search</li>
<li>News</li>
<li>Books</li>
<li>Toolbar</li>
<li>AdSense</li>
</ol>
<p>まぁこちらは妥当な感じ.PicasaやToolbarは微妙な感じもしますが.</p>
<p><a href="http://www.gwern.net/Google%20shutdowns#TOC">元記事</a>には,いくつかの有名プロダクトの5年生存率を計算した表もありますので,そちらもあわせてご覧ください.<strong>Google Glassの5年生存率は37%</strong>,とか,ちょっぴりセンセーショナルな結果もあります.</p>
<h2>まとめ</h2>