« 2006年05月 | メイン | 2006年08月 »

2006年07月31日

ajax IME パワーアップ

Sumibiwikipedia を使ってモデル/辞書を更新してるようなので、負けじと Ajax IME でも Wikipedia から自動単語抽出し、辞書にドカッっと単語登録してみました。

まず、CRF ベースの分かち書きツール(BIOモデル)を使い、周辺確率の高い単語候補を全日本語 wikipedia から収集。期待頻度が 0.9以下のものは無視し、あと雑多なフィルタリングの後、約 28万の単語候補を抽出。周辺確率から HMM のユニグラム確率を計算して (単純に negative log * 400) 辞書に登録。品詞の推定は現状では難しいので、すべての単語は「名詞、サ変」だと仮定しています。

単語(未知語)抽出は、それなりにうまくいっているようです。カタカナ語はほぼ網羅的に収集できました。「電車男」のような漢字だけの語もそれなりに取れています。

現在の Ajax IME は、語彙が大幅にパワーアップしています。どうぞお試しください。

投稿者 taku : 03:12 | コメント (44) | トラックバック

2006年07月15日

やっぱり SWIG が好き

http://d.hatena.ne.jp/lestrrat/20060713#1152777605

なぜ私がSWIGを勧めるのかというと, エンジニアが身につける道具としてSWIGの投資効果が 高いからです. SWIGは, バインディングを「キッチリ」作る道具というよりはむしろ今ある問題を「サクっと」片づけるのに向いています. In-house の仕事や personal use もいいでしょう. C/C++ とスクリプト言語, 両方使っている方組織は, この機会にSWIGを導入してみるのはいかがでしょうか.

私だけかもしれませんが, スクリプト言語とC/C++ にはもやもやとした誤解を感じます

- バインディングの作成は, 言語依存で複雑なフレームワークの修得が不可避
- C/C++ はある程度触れるけど, バインディングって敷居高そう
- とりあえず誰かがバインディングを作っていないか期待しみる
- 自分で作れそうにないな
- 誰も作っていないからプロセス間通信 (fork & exec や open2 open3) でごまかしてみる


XS や JNI といったインタフェースフレームワークは, バインディング作成の敷居を不当に高くしているように見えます. 限られたエキスパートがバインディングを作るというのではなく, バインディングという中間層を完全に隠蔽して,ヘッダファイルができたら即どの言語からも使えるというのが理想的な姿だと思います. むしろそこに人手の介在が入ること自体エンジリアング的な視点としてしっくりきません. SWIGは, 多少強引なアプローチにしろ透過的なアクセスが可能であるということを証明してくれました.

逆にきっちりと時間をかけていいものを作る目的には SWIG は向いていませんし, XSをゴリゴリ書いたほうが良いことは全く否定の余地はありません. ただし, 全てのエンジニアがこの方法論で動く必要はありません. 敷居が高い, めんどうだ, 私には無理だと思って, CPUを無駄に使うチョイスをとるぐらいなら, SWIGでサクッと仕事を終らせたほうがよさげです.

もうひとつ, スクリプト言語間の繋がりについてですが, 「各言語間で全く同じAPIを使えたほうがいい」とやっぱり思います. 加糖構文や各言語のコードコンベンションに従うのは賛成ですが, そのレベルを越えた独自拡張が入ってくると, 他の言語でもサポートして欲しい... という欲望にかられます. XSのレイヤーで独自の C/C++コードを入れるのではなく,  大元のライブラリの中にコミットするほうが合理的で言語にニュートラルな気がします.

投稿者 taku : 01:09 | コメント (151) | トラックバック

2006年07月11日

mecab-0.92 ライセンスのロールバック

ちょっと問題がありまして、GPL/LGPL/BSD のトリプルライセンスへの変更は 次のバージョンに持ち越されることになりました。

ご迷惑おかけして申し訳ありません。

ライセンスの部分だけロールバックしました。よろしくお願いします。

投稿者 taku : 00:17 | コメント (20) | トラックバック

2006年07月10日

mecab 0.92 公開しました

mecab 0.92 を公開しました。http://mecab.sourceforge.jp

新しい辞書, mecab-ipadic-2.7.0-20060707 も同時公開しています。

大きな変更点は Perl との決別です。0.91 までは辞書のコンパイルなど一部のコードが Perl で実装されていましたが、今回すべて C++ で再実装してだいぶすっきりしました。 辞書のコンパイルなんかは数秒で終わります。 十分テストしていませんが、windows の素の環境でも CRF を使った学習ができます。

さらに、ライセンスがGPL/LGPL/BSDのトリプルライセンスに変更になりました。

    *  ライセンスを LGPL から GPL, LGPL, BSDスタイルライセンスの トリプルライセンスに変更
    * 辞書コンパイラ等, 一部Perlで実装されていたコードをC++で再実装. Perlへの依存性の排除
    * 辞書コンパイラ (mecab-dict-index) の高速化
    * rewrite.def のシンタックスの変更
    * -x "未知語品詞" オプションの追加: 未知語推定を行わず, ユーザが指定した "未知語品詞" を出力
    * 品詞 id のサポート
    * 文字種情報が一部学習できていなかったバグの修正
    * 学習の際, 頻度による足切りができていなかったバグの修正
    * その他細いバグの修正 


mecab 0.93 では HMM を使った未知データからの学習を実装したいと思います。これができれば、wikipedia から自動辞書作成ができるかもしれません。

投稿者 taku : 00:21 | コメント (20) | トラックバック

2006年07月06日

Ajax IME のキーバインディング

ctrl-9 や ctrl-q などのふつうの人が滅多に押さないキーストロークはありえませんし


というご指摘をいただきましたので、Alt-O に変更しました。 実際のところ何がしっくりくるのでしょうか?

投稿者 taku : 00:37 | コメント (39) | トラックバック