YAPC::Asia 2014で自然言語処理について発表してきました。

YAPC::Asia 2014 で 自然言語処理を支える技術 〜要素技術とPerlの活用〜 というタイトルで発表してきました。発表はペース配分を間違えて、時間切れになってしまい、見に来て頂いた方々には申し訳ないです。

発表資料は以下です。
ビギナー向けという位置づけなので、確率の数式などは出さないようにしています。


感想

今年は前夜祭から参加しましたが、非常に楽しかったです。
今回はPerl以外のトークが多かったですが、それが結果的にこれまで YAPC に参加してこなかった人を呼ぶ結果になり、そういった方々に Perl の文化を伝えるきっかけになったのではないかと思います。

なにはともあれ、yusukebeさんを始めとするスタッフの皆様、参加者のみなさまお疲れ様でした!

Chiba.pm

後夜祭的な感じでHUBで飲んでいたのですが、Chiba.pmな方々がいたので主催者多忙のためしばらく開催できていなかったChiba.pmについて話し合ったりできてよかったです。

ちなみに、Chiba.pm #5 は 10/11(土) に市川市文化会館で開催です。
過去のATND を見ていただくとわかりますが、今回の YAPC のスピーカーもなにげに参加してたりするので、お近くの方は参加してみてはどうでしょうか?

YAPC::Asia 2014 に応募したトークが繰り上げで採択されました

Rejectされていた トークがキャンセルが発生したために繰り上げで採択されました。

自然言語処理を支える技術 〜要素技術とPerlの活用〜 - YAPC::Asia Tokyo 2014

ということで、8/29(金) 15:00から多目的教室2で発表しますので自然言語処理に興味のある方はよろしくお願いします。

LOUDS Trie ライブラリを書いた

C++ で LOUDS Trie を扱うライブラリhsds::Trieを書きました。

GitHub - hideo55/cpp-HSDS: Succinct Data Structure Library Collection.Includes bit-vector/wavelet-matrix/trie.

LOUDS Trieとは?

Level-Order Unary Degree Sequence という木構造を表現するデータ構造を利用したTrie木です。

Space-efficient Static Trees and Graphs

hsds::Trie の機能

現在は以下の機能をサポートしています。

  • 木のノードレベルでの探索(traverse)
  • 完全一致検索(exactMatchSearch)
  • 共通接頭辞検索(commonPrefixSearch)
  • クエリ文字列を接頭辞に含む全てのキーを列挙(predictiveSearch)
  • ノードIDからキー文字列の復元(decodeKey)
  • Trieのファイル書き出し、読み込み、mmap
  • TAIL配列の圧縮

特に、traverse は私のユースケースでは重要なのですが、tx-trie、ux-trie 等のLOUDS Trieの実装では提供されていませんでした。

なお、hsds::Trieでは内部で使用する簡潔ビットベクトルの実装として、以前作成した簡潔ビットベクトルライブラリを採用しています。

パフォーマンス

しっかりしたベンチマークはまだとっていませんが、ランダム文字列の共通接頭辞検索でux-trieの3倍以上の速さでした。
これは使用している簡潔ビットベクトルの速度の差によるものと考えています。

YAPC::Asia 2014 に応募したトークが reject されました。

YAPC::Asia Tokyo 2014 に応募していたトーク

自然言語処理を支える技術 〜要素技術とPerlの活用〜 - YAPC::Asia Tokyo 2014

が落選しました。

SNS等で応援して下さった皆様には申し訳ありませんが、YAPC::Asia 2014 ではこのトークはできません。

初めてYAPCトークする人を優先するようなことを書いておきながら中には有望だが採択されていないトークもある件。 自然言語処理とメールに関するトークを一切採択しなかったこと。

http://yapcasia.org/2014/07/talk-schedule-is-now-available.html

ということで、今年のYAPC::Asiaでの自然言語処理の話は求められていないようなので*1トークするはずだった内容については別の機会にでも発表しよう思います。

*1:テーマなどの兼ね合いもあるので仕方ない

Clib で cpp-HyperLogLog をインストールできるようにした

C/C++ ライブラリマネージャ Clib で、cpp-HyperLogLog をインストールできるようにしました。

作業としては以下の package.jsonリポジトリのトップディレクトリに追加するだけでした。簡単ですね。

{
  "name": "hyperloglog",
  "version": "1.0.0",
  "repo": "hideo55/cpp-HyperLogLog",
  "description": "C++ implementation of HyperLogLog ",
  "keywords": ["hyperloglog"], 
  "license": "MIT",
  "src": ["include/hyperloglog.hpp", "include/murmur3.h"]
}

これで以下のコマンドでcpp-HyperLogLogのソースを取得できるようになりました。

clib install hideo55/cpp-HyperLogLog

Hachioji.pm # 41 に行ってきた

6/21(Sat)に開催された Hachioji.pm #41 に行ってきました。
参加者は13人でした。今回は、八王子に出来たハッカソンでも使えそうなフリースペース ヘヤニワや、Yo、YAPC::Asia TOKYO 2014 などについて話していました。

自分のLT

C++でウェーブレット行列ライブラリを書いた話をしました。

資料

LT

以下、他のみなさんのLTの雑なメモです。

@hirobanexさん
  • CPANにあるセッションモジュール
  • HTTP::Session2など
@ytnobodyさん
  • OpenVZ で docker っぽいことやる
@hkobaさん
@ichigotakeさん
@mackee_w さん
@__papix__ さん
  • 邪悪なTeng Pluginの話
@xtetsuji さん
@tsucchi さん
@moznion さん
@uzulla さん
  • PHPのセッション
  • php.ini(闇)
@maka2_donzoko さん
  • いつものダジャレネタ

iglooのテスト結果をTAP形式で出力する

C++ のテストフレームワーク igloo を使ってみた
の続きです。

iglooのテスト結果を出力する際は以下の様になります*1

これはこれでシンプルでいいのですが、もう少し情報が欲しいです。

そこでiglooを使ったテストでTAP形式*2で出力するTestLIstenerを書きました。

https://github.com/hideo55/igloo-TapTestListener

以下のように使います*3

#include <igloo/igloo.h>
#include <igloo/TapTestListener.h>

using namespace igloo;

Context(context_foo){
    Spec(spec_1) {
        ....
    }

    Spec(spec_2) {
        ....
    }
};

Context(context_bar){
    Spec(spec_1) {
        ....
    }
};

int main()
{
  DefaultTestResultsOutput output;
  TestRunner runner(output);

  TapTestListener listener;
  runner.AddListener(&listener);

  runner.Run();
}

出力は以下のようになります。

TAP形式で出力することによって、proveコマンドなどTAP形式をサポートしたツールを活用することが可能になるので、かなり便利になりました。

*1:成功をドット、失敗をFで表示する形式。テストツールによって名称が異なる。dot matrixやprogesssなど

*2:Test Anything Protocol

*3:cpp-HyperLogLogのテストを実行時の出力