第5回入門自然言語処理読書会を開催しました

4月 19th, 2011 admin

2011年4月17日にCSNagoya勉強会の「第5回入門自然言語処理読書会」を開催しました。

やったこと

5.3のPythonのディクショナリの話からです。
5.3は本当にPythonのディクショナリの話で面白くもなかったのですが、5.4自動タグ付けからとても面白かった。
タグ付けというのはテキストに品詞を自動でつけるという事なのですが、結論から言うとかなりの精度でタグ付けというのは自動でできるらしい。
基本は
(1)人力でタグ付けされた文章をもとにタガーを学習させてタグ付け
(2)未知の語に対しては前後の文脈から推測する / もしくは一般的なルールベースでタグ付け
(3)それでもわからない場合は名詞にする
ということでできるそうだ。

次回

次回は5月15日

第2回入門自然言語処理読書会を開催しました

2月 24th, 2011 admin

入門自然言語処理読書会

2011年2月20日にCSNagoya勉強会の「第2回入門自然言語処理読書会」を開催しました。

 今回は第2章「テキストコーパスと語彙資源へのアクセス」というところでした。
 こういう学習にはいろいろなコーパス(テキスト群。普通はジャンルごとなどに整理されている)が用意されており、使えるようになっているんですよということでグーテンベルクのコーパスやウェブやチャットのテキスト、ブラウンコーパス、ロイターコーパス、就任演説コーパスなどを紹介すると共にNTLKをつかってそれらのコーパスを解析しました。
 例えば
・テキストの作成者によって単語の平均長・文の平均長・特定単語の出現回数などが違う
・テキストの内容によって法助動詞の出現回数に大きな差がある(ニュースはwillが多い、ロマンスはcouldが多いとか)
・就任演説にでてくるamerican,citizenという単語を数えて当時のアメリカの情勢との相関を考えると面白い(ピンチのときはamerican!と叫びたくなるらしい)
といった感じで、特定の単語を数えたりするだけでもテキストの特徴を捕らえることができ、なんだか自然言語処理の雰囲気が味わえて楽しかったです。

あとは主に方言に関する雑談などで何度も脱線しながら2章の途中まで読み進めました。

まとめ

・pythonのコードを初めて書いた
・インデントが適切ないというエラーをみてニヤリとした。
・インデントはいいと思うけど対話環境では面倒くさいとおもった
・方言話でいうと僕がすきな名古屋弁は「わや」って言葉で、これはなんでかっていうとどう考えても他の日本語に適切な言葉は思い当たらず、適切な言葉といえば「fxxk」しか思い当たらないからだ(わやに性的な意味はない)。名古屋に来てなんか嫌なこととかクソなことがあったら「わややが!」といっておけばだいたい皆察してくれる。
・あと「でーれえれーげー」も言葉が汚すぎて好きだ。(でら えらい げー=>すごくしんどいわー)

第1回入門自然言語処理読書会を開催しました

2月 9th, 2011 admin

入門 自然言語処理

2011年2月6日にCSNagoya勉強会の「第1回入門自然言語処理読書会」を開催しました。

最近やることが多いせいか勉強会のことを昼まで忘れており、パソコンは忘れるし財布も忘れるし、誰にも会わない前提で出かけたので髪もセットしていないし、もちろん参加者の人に答えてもらったアンケートも忘れるという自分でも驚くべき間抜けさでの参加となりました。

4周年

CSNagoyaが4周年を迎えました。第一回は2007年2月11日に開催だったようです。
目標とか理念とかがある勉強会ではないので達成感とかは特にないなー
ひとごとのようですが楽しい人たちのたくさんいる会なのでこれからも僕も楽しんでいきたいです。

第1回入門自然言語処理読書会

入門 自然言語処理

序章、1章、12章と音読しました。NLTKってヘンな機能がいっぱいあるなあとか、自然言語処理において日本語が不利すぎて驚いた。英語よりは面倒って言うのはもちろんわかってたけどほかのマルチバイト言語と比べても圧倒的に面倒ということを知って絶望的な気持ちになった。

まとめ

今回は20人近くの人があつまりにぎやかでした。特に関西、関東方面からも参加していただき、僕らもいい緊張感をもって進めれました。
あと、20人もいると文殊を超えた知恵が発揮され、文法に詳しい人はいるわフランス語やドイツ語がわかる人はいるわで議論が盛り上がりやすく、とてもいい雰囲気だったと思います。次回は2章から。後半からまったくわからなくなりそうなこの本ですがこの調子で楽しく読み進めればと思っています。

GC本読書会が終りました

1月 19th, 2011 admin

ガベージコレクションのアルゴリズムと実装読書会

2011/01/16の第11回GC本読書会で2010/04/18から全11回でやってきたGC本読書会(ガベージコレクションのアルゴリズムと実装読書会)が終了しました。
最後に自分の言葉でGCについて確認し、8ヶ月の読書会のまとめとしたいと思います。

GCとは

GC(Garbage Collection)とは、プログラム中で使わなくなったメモリ領域を見つけ、開放するプログラムである。

GCが組み込まれている言語

Java,Python,Ruby,Perlなど
逆にない言語はC、C++など

メリット、デメリット

メリットはGCがあることでプログラマがメモリの確保、開放に気を使わなくてよいことである
(メモリの確保、開放が適切に行なえないとメモリリーク、オブジェクトの二重開放、無効なポインタという問題が発生する可能性がある。)
デメリットは、ガベージコレクションの処理によって処理が遅くなることである。

主なGCの種類

GCはマークスイープGC、参照カウント、コピーGCの3つのアルゴリズムが基本である。

マークスイープGC

GCをマークフェーズとスイープフェーズという2段階で行なうGC.マークフェーズででは生きているオブジェクトにマークをつけ、スイープフェーズでオブジェクトを回収するというアルゴリズム。
実装が単純で保守的GCとの相性がよい、ただしフラグメンテーションが起こりやすかったりする。

参照カウント

あるオブジェクトが何個のほかのオブジェクトから参照されるかということをカウントしておき、カウントが0のオブジェクトを開放するというアルゴリズム。
マークフェーズが不要なのでゴミの回収時間が早いが、カウンタを増減処理が必要になる。

コピーGC

使えるメモリ領域を2つのFrom空間とTo空間にわけ、最初はFrom空間をつかい、From空間がいっぱいになったら生きているオブジェクトだけをTo空間に移動しFrom空間を削除。From空間とTo空間を入れかれるというアルゴリズム。
死んでいるオブジェクトの探索がない分高速でオブジェクトの移動の際にメモリ領域が整理(コンパクション)されるのでフラグメンテーションが生じないが、ヒープ領域を分割しなければならなかったり、保守的GCとの相性が悪かったりする

そのほかの代表的な手法

上記の3つの組み合わせになります

マークコンパクトGC

マークスイープGCにコンパクションを加えたもの

保守的GC

ポインタと非ポインタとを識別できないGCのこと。
GCはポインタなのか非ポインタ(数値等)なのかわからない場合にはポインタとみなし安全に処理する。その反対にすべてのポインタを把握しているのが正確なGCである。

世代別GC

「多くのオブジェクトは若くして死ぬ」し「長生きしているオブジェクトはこれからも長生きする」という経験を元に効率UPを図ったGC

インクリメンタルGC

GCを徐々に行なうことでGCによる1回の停止時間を短くしたGC

まとめ

・GCについて学んでも(残念なことに)僕はnariさんほどは目が輝かない
・GCは基本のアルゴリズムは3つだが、結局環境や言語に応じて最適化する必要がある
・しったかしてたGCについて少し自信がもてるようになった
・実装編は著者はどんだけソースコードを読んだんだよと感心した
・第4回のときは著者のnariさんをお呼びできて感激だった(有難う御座いました)
・参加者でmallocとかをしたことがない高レベルな人間が僕だけで大変だった
・PythonやAndroidなどプログラムしたこともない言語のGCについて詳しくなった

宣伝

CSNagoyaでは新しいテーマ「入門自然言語処理読書会 」と「組込みOS自作本読書会 」もやっていますので是非どうぞ。
くわしくはこちらをクリック

第10回 GC本読書会を開催しました(RubiniusのGC)

12月 20th, 2010 admin

ガベージコレクションのアルゴリズムと実装

2010年12月19日にCSNagoya勉強会の「第10回 GC本読書会」を開催しました。
ガベージコレクションのアルゴリズムと実装という本を読む会です。

第11章 RubiniusのGC

・CRubyのGCの解説はRHGにあるので、RubiniusのGCを解説
・世代別GCを採用
・正確なGC
・オブジェクトのサイズによって3つのメモリ空間にアロケーションを行う
・それはマークスイープGCアロケータ、コピーGCアロケータ、ImmixGCアロケータ
・GCの取替えが簡単にできるようになっている
・RubiniusはC++でできているため、CRubyの拡張ライブラリを使うためにC-APIやFFI(Foreign Function Interface)という仕組みを使っている
・拡張ライブラリに渡すすべてのオブジェクトへのポインタを管理することで正確なGCを管理
・埋め込みオブジェクトとポインタの区別は埋め込みオブジェクトの下位2ビットに印をつけることで行う

まとめ

・今回も著者の人は対象言語をよく調べてあるなあと思いました
・ビット演算は1命令でできるから高速だとか、コンパイラに最適化のヒントをあたえる命令があるだとかLL脳の僕には面白かった
・残りあと1章(V8のGC)
・懇親会のサイゼリアでミラノ風ドリアを食い逃げする人を見た