2016年1月23日土曜日

2015年振り返り

あけましておめでとうございます、というには日が経ちすぎました。 年末年始は京都と愛知を訪問しつつ、慌ただしく帰ってきました。 毎年書いている、昨年の振り返りをしてみます。

YANSシンポジウム

2014年から準備していたYANSのシンポジウム合宿を9月に開催できました。 記念すべき10回目であり、10年間続けてこられたということ自体も素晴らしいとおもいます。 100人にも登る参加者と、10社以上のスポンサー企業が参加と随分大規模なものになりましたが、大きな問題もなく無事に開催できて良かったです。 エンジニアと研究者をうまく橋渡しするというゴールがどれくらいうまくいったのかはまだちょっとわかりませんが、YANSでの経験が参加者やスポンサー企業の皆様にとっての今後の成果に繋がると嬉しいです。

仕事をして感じるのは、2015年から急激に自然言語処理に対する期待が、特にロボットブームに乗る形で高まっていることを感じます。 スポンサーの皆様の話から、そうしたトレンドを感じ取ってもらえたら良いなぁ。

Chainer

年の半分くらいから、Chainerを随分やっていた気がします。 年始のブログを読むと、年初はtheanoを、そのあとTorchをやっていました。 普通に関数呼び出しするタイミングで履歴をスタックに積めばいいんじゃないのかと思っていたら、ちょうど得居さんが考えていたようで、ちょっと話しているうちに1週間位で作ってしまった。すごいなぁ。 NLPに関わるあたり、型チェック、テスト自動化などの環境整備を主にやっていました。 可変な入力に対して書きやすい一方で、GPUによるミニバッチ化にまだ難があって、ミニバッチ化しようとするとどうしてもテクニックが必要なのがまだ気がかりです(一応Recursive Netのミニバッチ化は完成したんですが)。 それでも、周りのNLP系の方々には随分使ってもらえているようで嬉しいですね。

書籍

講談社の機械学習プロフェッショナルシリーズで、「オンライン学習」を出版しました。 私は最初応用ということで言語処理の手法などを書いていたんですが、途中でCRFがなくなったりしてごっそり消えてしまった。 4人の文体がバラバラだよねというのはよく言われるんですが、ちょっとムック本みたいになったかもしれません。 「本」を書くというのはやっぱり大変なもので、この表現でほんとうに正しいのかとか、説明の抜けがないかとか、細かいところも含めて悩まされました。 評判はいいような悪いような、微妙なところかな。 オンライン学習という切り口で、理論から実装まで幅広く扱っていて、ちょっとユニークな立ち位置になったんじゃないかとは思っています。

ところで実は年末に、何故か2冊目のお誘いが来てしまって、同じシリーズでもう1冊書くことになりました。そのうち情報が出るとおもいます。

講演・講義・学会

昨年は随分と講演にいったような気がします。 特に9月は、他の人も含めて毎週何かしら講演があって、Chainerの開発自体が進まないみたいな状態になりました。 例年の首都大、東北大の講義に加えて、日経の機械学習講義や、深層学習周りの講演など。 中でも、認知科学会のサマースクールはいつも合わないような方とお話出来たのでとても貴重でした。 ちょうど、子供の言語獲得に調べていたので、そのタイミングで今井先生や岡田先生とお話出来たのは良かったです。

昨年に続き言語処理学会のプログラム委員をやりつつ、加えて人工知能学会のプログラム委員も引き受けました。 1回しか参加したことないんですけどね。 今年は北九州だそうで、NLPに比べると予算も規模も巨大ですね。

カメラ

一眼は春のフルサイズまで取っておいて、RICHOのThetaを買いました。 試しに色々取ってみましたが、普通のカメラとは違う発想が必要ですね。 本当は360度写真をうまく編集するソフトウェアの開発をする予定でしたが何もしていません。 今後の課題ということで。

0 件のコメント:

コメントを投稿

'},ClipboardSwf:null,Version:'1.5.1'}};dp.SyntaxHighlighter=dp.sh;dp.sh.Toolbar.Commands={ExpandSource:{label:'+ expand source',check:function(highlighter){return highlighter.collapse;},func:function(sender,highlighter) {sender.parentNode.removeChild(sender);highlighter.div.className=highlighter.div.className.replace('collapsed','');}},ViewSource:{label:'view plain',func:function(sender,highlighter) {var code=dp.sh.Utils.FixForBlogger(highlighter.originalCode).replace(/'+code+'');wnd.document.close();}},CopyToClipboard:{label:'copy to clipboard',check:function(){return window.clipboardData!=null||dp.sh.ClipboardSwf!=null;},func:function(sender,highlighter) {var code=dp.sh.Utils.FixForBlogger(highlighter.originalCode).replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&');if(window.clipboardData) {window.clipboardData.setData('text',code);} else if(dp.sh.ClipboardSwf!=null) {var flashcopier=highlighter.flashCopier;if(flashcopier==null) {flashcopier=document.createElement('div');highlighter.flashCopier=flashcopier;highlighter.div.appendChild(flashcopier);} flashcopier.innerHTML='';} alert('The code is in your clipboard now');}},PrintSource:{label:'print',func:function(sender,highlighter) {var iframe=document.createElement('IFRAME');var doc=null;iframe.style.cssText='position:absolute;width:0px;height:0px;left:-500px;top:-500px;';document.body.appendChild(iframe);doc=iframe.contentWindow.document;dp.sh.Utils.CopyStyles(doc,window.document);doc.write('

'+highlighter.div.innerHTML+'

');doc.close();iframe.contentWindow.focus();iframe.contentWindow.print();alert('Printing...');document.body.removeChild(iframe);}},About:{label:'?',func:function(highlighter) {var wnd=window.open('','_blank','dialog,width=300,height=150,scrollbars=0');var doc=wnd.document;dp.sh.Utils.CopyStyles(doc,window.document);doc.write(dp.sh.Strings.AboutDialog.replace('{V}',dp.sh.Version));doc.close();wnd.focus();}}};dp.sh.Toolbar.Create=function(highlighter) {var div=document.createElement('DIV');div.className='tools';for(var name in dp.sh.Toolbar.Commands) {var cmd=dp.sh.Toolbar.Commands[name];if(cmd.check!=null&&!cmd.check(highlighter)) continue;div.innerHTML+=''+cmd.label+'';} return div;} dp.sh.Toolbar.Command=function(name,sender) {var n=sender;while(n!=null&&n.className.indexOf('dp-highlighter')==-1) n=n.parentNode;if(n!=null) dp.sh.Toolbar.Commands[name].func(sender,n.highlighter);} dp.sh.Utils.CopyStyles=function(destDoc,sourceDoc) {var links=sourceDoc.getElementsByTagName('link');for(var i=0;i');} dp.sh.Utils.FixForBlogger=function(str) {return(dp.sh.isBloggerMode==true)?str.replace(/
|<br\s*\/?>/gi,'\n'):str;} dp.sh.RegexLib={MultiLineCComments:new RegExp('/\\*[\\s\\S]*?\\*/','gm'),SingleLineCComments:new RegExp('//.*$','gm'),SingleLinePerlComments:new RegExp('#.*$','gm'),DoubleQuotedString:new RegExp('"(?:\\.|(\\\\\\")|[^\\""\\n])*"','g'),SingleQuotedString:new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'",'g')};dp.sh.Match=function(value,index,css) {this.value=value;this.index=index;this.length=value.length;this.css=css;} dp.sh.Highlighter=function() {this.noGutter=false;this.addControls=true;this.collapse=false;this.tabsToSpaces=true;this.wrapColumn=80;this.showColumns=true;} dp.sh.Highlighter.SortCallback=function(m1,m2) {if(m1.indexm2.index) return 1;else {if(m1.lengthm2.length) return 1;} return 0;} dp.sh.Highlighter.prototype.CreateElement=function(name) {var result=document.createElement(name);result.highlighter=this;return result;} dp.sh.Highlighter.prototype.GetMatches=function(regex,css) {var index=0;var match=null;while((match=regex.exec(this.code))!=null) this.matches[this.matches.length]=new dp.sh.Match(match[0],match.index,css);} dp.sh.Highlighter.prototype.AddBit=function(str,css) {if(str==null||str.length==0) return;var span=this.CreateElement('SPAN');str=str.replace(/ /g,' ');str=str.replace(/');if(css!=null) {if((/br/gi).test(str)) {var lines=str.split(' 
');for(var i=0;ic.index)&&(match.index/gi,'\n');var lines=html.split('\n');if(this.addControls==true) this.bar.appendChild(dp.sh.Toolbar.Create(this));if(this.showColumns) {var div=this.CreateElement('div');var columns=this.CreateElement('div');var showEvery=10;var i=1;while(i<=150) {if(i%showEvery==0) {div.innerHTML+=i;i+=(i+'').length;} else {div.innerHTML+='·';i++;}} columns.className='columns';columns.appendChild(div);this.bar.appendChild(columns);} for(var i=0,lineIndex=this.firstLine;i0;i++) {if(Trim(lines[i]).length==0) continue;var matches=regex.exec(lines[i]);if(matches!=null&&matches.length>0) min=Math.min(matches[0].length,min);} if(min>0) for(var i=0;i