関口宏司のLuceneブログ

OSS検索ライブラリのLuceneおよびそのサブプロジェクト(Solr/Tika/Mahoutなど)について
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | - | | - | - |
テキストアノテーションツール brat がすごい件

brat は OSS のテキストアノテーションツールである。GUI(ビジュアルと操作性)とできあがりのアノテーション情報のわかりやすさ(シンプルなフォーマットが自作NLPプログラムから扱いやすい!)、導入の簡単さがすばらしいのでここで紹介しよう。

brat のインストール

Apache などの Web サーバ上で動かして本格的に使う方法と、個人的にさくっと立ち上げて使う方法があり、ここでは後者を紹介する。この場合インストールは簡単で、brat を適当なディレクトリにダウンロードして展開する。

$ mkdir work
$ cd work
$ wget http://weaver.nlplab.org/~brat/releases/brat-v1.3_Crunchy_Frog.tar.gz
$ tar xvzf brat-v1.3_Crunchy_Frog.tar.gz
そして、次のようにインストールのスクリプトを実行して質問に答えれば終わりである。
$ cd brat-v1.3_Crunchy_Frog
$ ./install.sh
# brat にログインするユーザ名を新規設定する。
Please the user name that you want to use when logging into brat
editor
# パスワードを入れる。
Please enter a brat password (this shows on screen)
annotate
# メールアドレスを入れる。
Please enter the administrator contact email
example@brat.org

コーパスの準備

次にアノテーションを入れる対象のコーパスを data ディレクトリの下に用意する。ここでは livedoorニュースコーパスを使った例を示す。

$ wget http://www.rondhuit.com/download/ldcc-20120915.tar.gz
$ tar xvzf ldcc-20120915.tar.gz
コーパスファイルは UTF-8 で保存され、.txt の拡張子でなければならない。さらに、次のようにアノテーションを実行する .txt ファイルひとつひとつに対応する空の .ann ファイルをあらかじめ用意しておく必要がある。
$ find text -name '*.txt' | sed -e 's|¥.txt|.ann|g' | xargs touch

固有表現タグ設定と brat の起動

brat は係り受けのような構造的アノテーションもつけることができるが、本記事では固有表現タグをつける例を示す。デフォルトの状態でもいくつかの固有表現タグが設定されているが、ここでは独自タグを設定してみる。livedoorニュースコーパスを tar で展開したときにできた text ディレクトリの直下に、次のように2つの設定ファイルを作成する。

$ cd text
$ cat > annotation.conf <<EOF
> [entities]
> ORGANIZATION
> FACILITY
> PERSON
> TITLE
> LOCATION
>
> [relations]
> [events]
> [attributes]
> EOF
$
$ cat > visual.conf <<EOF
> [labels]
>
> [drawing]
> ORGANIZATION bgColor:#8fb2ff                                                                                                                
> FACILITY bgColor:#aaaaee                                                                                                                    
> PERSON bgColor:#ffccaa                                                                                                                      
> TITLE bgColor:#7fe2ff                                                                                                                       
> LOCATION bgColor:#6fffdf                                                                                                                    
> EOF
最初の設定ファイルはタグの設定、2つめはタグの色の設定である。なおこれらは必要最低限の設定である。設定ファイルを完璧に設定したい方は、brat ディレクトリ内に設定ファイルがあるので、そちらを参照していただきたい。

以上の設定が終われば、brat をスタンドアロンモードで起動できる。なお、brat は Python で書かれているので、Python の環境が必要である。
$ cd ../..
$ python standalone.py

brat へのログイン

上の起動時に表示された URL http://127.0.0.1:8001 にブラウザからアクセスする。すると、次のような画面が表示される。

brat 起動後

まだログインしていないのでここは一旦 [Cancel] をクリックする。そして上のブルーの部分にマウスポインタを持って行くと、右上にログインボタンが現れるのでクリックする。すると、次のログイン画面が表示されるので、前のインストール時に指定したユーザ情報(editor / annotate)を使ってログインする。

brat ログイン画面

brat を使ってテキストアノテーション

ログインしたらコーパスコレクションを選択する。それにはタブキーを押下するか、上のメニューから [Collection] を選んでクリックする。すると、次のコーパスコレクション選択画面になる。

brat コレクション選択画面

ここでは text ディレクトリの下の movie-enter ディレクトリの下から適当なファイルを選択する。すると、そのテキストファイルが表示されるので、その中の「宮崎あおい」に PERSON タグをつけるためマウスドラッグする。すると、次のようにタグ一覧がポップアップ表示される。

brat タグ一覧表示

ここでは当然 PERSON を選択して [OK] をクリックする。これを繰り返していくと、次のようにテキストがアノテーションされる。

brat によるアノテーション済みテキスト

シンプルなテキストアノテーション情報

このときすでに、サーバサイドの対応する .ann ファイルには次のようにアノテーション情報がシンプルなフォーマットで記録されている。

$ cat movie-enter-5840081.ann
T1	PERSON 81 86	宮崎あおい
T2	PERSON 87 90	堺雅人
T3	TITLE 1046 1048	さん
T4	PERSON 447 450	堺雅人
T5	PERSON 975 977	宮崎
T6	TITLE 977 979	さん
T7	PERSON 980 981	堺
T8	TITLE 981 983	さん
T9	PERSON 1021 1023	宮崎
T10	PERSON 1196 1197	堺
T11	PERSON 1245 1247	宮崎
T12	PERSON 1254 1255	堺
T13	PERSON 947 949	宮崎
タグをつけた順番で記録されているので、プログラムで読み込むときは、3〜4列でソートする必要があるだろう。

SolrMahoutのトレーニングコース、ただいま2月の受講者を募集中です!

Mahout トレーニングコース受講者のインタビュー記事はこちら

| 関口宏司 | NLP | 08:37 | comments(0) | trackbacks(0) |
Heliosearch/Solrオフヒープフィルタ

筆者のYonikの許可を得て翻訳した。原文はこちら

Solrのパフォーマンスを一段高めるHeliosearchという新しいオープンソースプロジェクトに真っ先に追加された機能がオフヒープNativeフィルタだ。

大容量JVMヒープの潜在的問題

JVMは大きいヒープの処理が決してうまくなかった。ヒープが大きいとガーベッジコレクション作業が難しくなり、GCポーズによって長時間システムが停止し、ほかの処理が一切できなくなる場合も多い。そのためクエリ/リクエストタイムアウトが発生したり、SolrCloudモードでzookeeperセッションのタイムアウトまでも発生する可能性がある。

オフヒープフィルタ

非常に高度なフィルタキャッシング機能を用意しているHeliosearch/Solrだが、アプリケーションによっては膨大なメモリを使用する可能性がある。大きく存続期間の長いオブジェクトの方が、JVMヒープから取り出して明示的に管理するメリットを得られる。オフヒープメモリはガーベッジコレクタから見えないのだ。

Heliosearchフィルタ(Solr DocSetオブジェクト)はオフヒープでアロケートされるようになっており、不要になればすぐに解放できるよう参照がカウントされるようになった。また、JVM GCはこのようなメモリブロックのコピー処理で時間を無駄にする必要がなくなった。このことはGCの長時間ポーズを排除し、リクエストスループットを改善するのに役立っている。

テスト設定

各方面から報告のあった長時間のGCポーズを再現するにはかなりいろいろなことを試す必要があると考えていたが、何と1回目でいきなりこれが再現されてしまった。ヒープサイズは報告のように大きなものではなく現状は小さく収まっている。ヒープが大きいとGCポーズも延びるようだ。

テストの詳細

  • Ubuntu Linuxサーバ(RAM 8Gバイト、CPU 4コア、Java 1.7 64ビット)
  • クライアント:8スレッドそれぞれが1つのIDのクエリを任意のフィルタ(500種類)で処理
  • filterCache:size=1000(すべてのフィルタをエビクションせず保持するのに十分な大きさ)
  • インデックス:3.8Gバイト、5000万件

Apache Solrコマンドライン:

$ java -jar -Xmx4G start.jar
Heliosearch/Solrコマンドライン:
$ java -jar start.jar

Apache Solr実行時はOOM例外を回避するためにヒープサイズを4Gバイトに設定する必要があった。搭載可能なRAMは最大8Gだったため、残りのメモリはインデックスファイルのキャッシング用としてOSに残しておきたかった(そうしないと速度が大幅に落ちてしまう)。

GCの結果

2万クエリリクエストを行ったGCの実行結果を以下のグラフに示す。 グレーの棒はGCに要した時間、赤線はヒープの実サイズ、そして青線はヒープの実使用量を示している。

Solr

Solrでの長時間ポーズをテスト中に外から見るのはさらに容易だった。ログが有効になっていたためリクエストがすべてログメッセージを残し、ターミナルでは高速スクロールが発生した。そして、GCの大規模なコンパクションが発生するとターミナルのスクロールは突然停止した。 hs_140120-solr_gc.png

Heliosearch

ガーベッジコレクションの処理が短時間ですむためにHeliosearch GCグラフの方が完了は早い。長時間の完全なGCポーズがほとんど発生しておらず、ほかのGCポーズも大幅に減少していることに注目したい。 hs_140120-heliosearch_gc.png

クエリの待ち時間

このグラフは、2万クエリを実行したときの後半の1万クエリ(ホットスポットとキャッシュが落ち着いたタイミングを見計らうため)の待ち時間をパーセントで示している。
hs_140120-query_latency.png

Query Throughput

hs_140120-query_throughput.png
Query Throughputグラフはオフヒープデータ構造によって解放できるガーベッジコレクションに必要なCPU処理時間を示している。もちろん、これは極端な結果だ。大量のガーベッジコレクションが頻繁に発生している場合はデータ構造をオフヒープにすることで実現するスループット向上の方が適当だろう。

メモリ使用量

プロセス(トップ経由で外部から監視)の常駐メモリ最大使用量は5回にわたって計測した。

Apache SolrHeliosearch
最小3.8GB3.6GB
最大4.3GB3.7GB
オフヒープフィルタを用意するHeliosearchの方がメモリプロファイルが安定し、メモリ使用量も平均的に少なかった。そのため、OSがインデックスファイルをキャッシュするための空きメモリも増えるが、これは高いパフォーマンスを実現するためにきわめて重要なことだ。

結論

今回の簡単なテストにより、オフヒープフィルタが大きな異常値を減らして全体のクエリスループットを高め、長時間のGCポーズを排除してリクエストの予測を容易にすることが判明した。

ご自身でお試しいただきHeliosearchForumで感想をお聞かせいただきたい。



SolrMahoutのトレーニングコース、ただいま2月の受講者を募集中です!

| 関口宏司 | Solr | 12:42 | comments(0) | trackbacks(0) |
+ Solrによるブログ内検索
+ PROFILE
   1234
567891011
12131415161718
19202122232425
262728293031 
<< January 2014 >>
+ LINKS
検索エンジン製品 - 比較のポイント
商用検索エンジンを購入した企業担当者は読まないでください。ショックを受けますから・・・
>>製品比較 10のポイント
+ Lucene&Solrデモ
+ ThinkIT記事
+ RECOMMEND
Apache Solr入門 ―オープンソース全文検索エンジン
Apache Solr入門 ―オープンソース全文検索エンジン (JUGEMレビュー »)
関口 宏司,三部 靖夫,武田 光平,中野 猛,大谷 純
+ RECOMMEND
Lucene in Action
Lucene in Action (JUGEMレビュー »)
Erik Hatcher,Otis Gospodnetic,Mike McCandless
FastVectorHighlighterについて解説記事を寄稿しました。
+ RECOMMEND
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ MOBILE
qrcode
+ SPONSORED LINKS