Apache UIMA

0 views
6,318 views

Published on

あしたのオープンソース研究所
2011年10月25日開催 Apache UIMA 座談会
発表者 塩谷さん
提供 インフォサイエンス

Published in: Technology
0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
0
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
50
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide

Apache UIMA

  1. 1. Apache UIMA 2011/10/25 第 26 回 あしたの研 塩谷 沢生 ( インフォサイエンス株式会社 )
  2. 2. 今日のテーマ : UIMA <ul><li>UIMA : 非構造化データ管理アーキテクチャ </li></ul><ul><ul><li>Unstructured Information Management Architecture </li></ul></ul><ul><ul><li>You – eee – muh と読みます(公式ドキュメント FAQ より) </li></ul></ul><ul><li>構造化されていないデータを処理するフレームワーク </li></ul><ul><ul><li>⇔ 構造化されたデータ : RDB のデータ、 XML データなど </li></ul></ul><ul><ul><li>特に、元々の開発目的である自然言語処理がターゲット </li></ul></ul><ul><li>OASIS の標準仕様の一つ </li></ul><ul><ul><li>OASIS は電子ビジネスの基盤となるデータ仕様の標準化団体 </li></ul></ul><ul><ul><li>SGML 、 DocBook, ebXML などを策定 </li></ul></ul>
  3. 3. Apache UIMA <ul><li>Apache UIMA : UIMA 仕様のリファレンス実装 </li></ul><ul><ul><li>元々は IBM Research が自然言語処理用に開発 (2005 年 ) </li></ul></ul><ul><ul><li>2006 年、 SourceForge で公開開始 </li></ul></ul><ul><ul><li>同年 10 月、 Apache Incubator プロジェクトの一つに </li></ul></ul><ul><ul><li>2010 年 3 月、 Incubator から卒業 </li></ul></ul><ul><li>2011 年 2 月、 Apache UIMA で実装されたシステム Watson が米国クイズ番組 Jeopardy! で人間のチャンピオンを破って話題に </li></ul><ul><ul><li>今回のあしたの研のテーマにしてみました </li></ul></ul>
  4. 4. 人間 vs. Watson <ul><li>勝負の課題は、トリビアクイズ番組 </li></ul><ul><li>いわゆる早押しクイズ </li></ul><ul><ul><li>質問文を受け取り、回答する </li></ul></ul><ul><li>人間のチャンピオンの正答率は 90% 近く </li></ul><ul><ul><li>従来のキーワードベースの A.I. では、せいぜい 30% 程度 </li></ul></ul><ul><ul><li>回答率と正答率のバランスを取るのが困難だった </li></ul></ul><ul><li>IBM は DeepBlue に続くプロジェクトとしてこの課題に挑戦 </li></ul><ul><ul><li>UIMA 上に新しいシステムを構築し、人間を上回る性能を実現 </li></ul></ul>
  5. 5. Watson のアーキテクチャ <ul><li>Watson のコアエンジンは、 DeepQA と呼ばれている </li></ul><ul><ul><li>単に質問に対応する回答を探すのではなく、 回答 -> 根拠づけ -> 自己評価という多段階プロセスを踏むエンジン </li></ul></ul><ul><ul><li>これらの処理が全て、 Apache UIMA 上のプラグインとして 実装されている ! </li></ul></ul><ul><ul><li>ちなみに HW はラック 10 本分、総メモリー容量 15TB 、総コア数 2,880 個 </li></ul></ul>仮説作成 質問解析 仮説 DB 根拠付け 根拠 DB 確信度 判定 過去問での 学習データ 回答 質問 自然言語 処理データ
  6. 6. 今日の話 <ul><li>UIMA の基本的な考え方 </li></ul><ul><li>Apache UIMA を使ってみる </li></ul><ul><li>Apache UIMA での複雑な処理 </li></ul><ul><li>Apache UIMA で作成したエンジンを使う </li></ul><ul><li>まとめ </li></ul>
  7. 7. UIMA は何をしてくれるのか <ul><li>UIMA は、非構造化データと構造化データの橋渡し役 </li></ul><ul><ul><li>非構造化データ : テキスト、音声、画像など </li></ul></ul><ul><ul><li>構造化データ : データベース、インデックス、ナレッジベースなど </li></ul></ul>※ 図は公式ドキュメントより
  8. 8. UIMA がしてくれないこと <ul><li>UIMA 自体は、何も分析しない </li></ul><ul><ul><li>今日の話を聞いて Apache UIMA をインストールしても、それだけでは クイズ王になれません </li></ul></ul><ul><li>非構造化データを構造化データにするのは、開発者の役目 </li></ul><ul><ul><li>構造化されていないデータを扱う技術は様々ある </li></ul></ul><ul><ul><ul><li>自然言語処理 </li></ul></ul></ul><ul><ul><ul><li>機械学習 </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><li>UIMA に準拠したプラグインとして書くことで、これらのロジックを自由に組み合わせることが出来る </li></ul><ul><ul><li>データ構造が標準化されているので、再利用性が高い </li></ul></ul><ul><ul><li>第三者向けにプラグインを提供することも </li></ul></ul>
  9. 9. CAS : 構造化データを表現する仕組み <ul><li>CAS : Common Analysis Structure </li></ul><ul><li>UIMA の基本となるデータ形式 </li></ul><ul><ul><li>分析対象となるデータを保持している </li></ul></ul><ul><ul><li>Java のクラスと同様の、階層構造の型を持つ </li></ul></ul><ul><ul><ul><li>とりあえず Java Beans のイメージで OK </li></ul></ul></ul><ul><ul><ul><li>ただし、 CAS には独特の用語体系がある </li></ul></ul></ul><ul><ul><ul><ul><li>Ex. Field (属性値)でなく Feature (特性値) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>最も基本的な型( Java で言う Object )は TOP </li></ul></ul></ul></ul><ul><ul><ul><ul><li>たまに Feature Strucuture という言い方も:これはより一般的な用語 </li></ul></ul></ul></ul><ul><li>開発者は、この CAS を受け取り、分析結果を Annotation として追加していく処理をプラグインとして書く </li></ul><ul><ul><li>これを分析エンジン (Analysis Engine) と呼んでいます </li></ul></ul>
  10. 10. 分析エンジン : CAS を作成するコンポーネント <ul><ul><li>分析エンジンが生成した注釈は、 CAS に追加されていく </li></ul></ul><ul><ul><ul><li>この注釈の管理も CAS の重要な役割 </li></ul></ul></ul><ul><ul><ul><ul><li>(なので、 JavaBean のような単なるオブジェクトでもない) </li></ul></ul></ul></ul>今日のあしたの研のテーマは、 Apache UIMA です。 前回のテーマは、 Flume でした。 テキストを表す CAS 分析エンジン … Apache UIMA は OSS … Flume は OSS 今日のあしたの研のテーマは、 Apache UIMA です。 前回のテーマは、 Flume でした。 OSS を表す注釈が追加される OSS: Apache UIMA OSS: Flume OSS 名 DB
  11. 11. 分析エンジンを作る <ul><li>記述言語は Java / C++ が基本 </li></ul><ul><li>Eclipse プラグインや開発ツールも豊富 </li></ul><ul><li>手順としては、 </li></ul><ul><ul><li>分析で作成する CAS 型を定義する </li></ul></ul><ul><ul><ul><li>CAS データを表現するコードは自動生成されます </li></ul></ul></ul><ul><ul><li>分析処理を書く </li></ul></ul><ul><ul><ul><li>引数として文書を表す CAS が渡されます </li></ul></ul></ul><ul><ul><li>作成したコードの内容を記述する XML ファイルを用意する </li></ul></ul><ul><ul><li>ツールに導入して動かしてみる </li></ul></ul><ul><li>ということで実環境で </li></ul>
  12. 12. 複雑な分析: エンジン同士の連携 <ul><li>今書いたのは、与えられたデータを直接処理する分析エンジン </li></ul><ul><ul><li>これを Primitive な分析エンジンと呼びます </li></ul></ul><ul><li>Aggregate 分析エンジン </li></ul><ul><ul><li>分析エンジン同士の組み合わせ </li></ul></ul><ul><ul><li>XML でエンジン同士の関係を記述して作成する </li></ul></ul><ul><ul><li>エンジン同士で連携する場合もあるし、無関係なエンジン同士を同時実行しても良い </li></ul></ul>
  13. 13. データを様々な観点から捉える <ul><li>文書データの分析では、他の形式のデータを生成する場合がある </li></ul><ul><ul><li>例 :動画を処理しよう </li></ul></ul><ul><ul><ul><li>動画からテキストを抽出して、字幕を作る </li></ul></ul></ul><ul><ul><ul><li>字幕に検索インデックスを付ける </li></ul></ul></ul><ul><ul><ul><li>動画から音声部分だけ取りだす </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><ul><li>こういう場合は、単に対象データに注釈を付けるだけでは収まらない </li></ul></ul><ul><li>Sofa : </li></ul><ul><ul><li>1 つのデータに対し、複数の観点からのデータを追加する仕組み </li></ul></ul><ul><ul><li>Structure of Analysis </li></ul></ul>
  14. 14. アーティファクトと Sofa <ul><li>アーティファクト : 分析対象のデータそのもの </li></ul><ul><li>Sofa : CAS の中で、アーティファクトを表すデータ構造 </li></ul><ul><ul><li>テキスト・配列・ URI の三種類がある </li></ul></ul><ul><ul><ul><li>音声や動画などは配列データとして扱う </li></ul></ul></ul><ul><li>分析エンジンが作る注釈は、正確には Sofa に対して紐づけられている </li></ul>CAS テキストの Sofa 今日のあしたの研のテーマは、 Apache UIMA です。 CAS の中には ・対象データ (sofa) ・それに紐付いた注釈 がある OSS: Apache UIMA
  15. 15. CAS-View <ul><li>Sofa は分析に従ってどんどん追加出来る </li></ul><ul><ul><li>もちろん Sofa を生成するのは、開発者の仕事 </li></ul></ul><ul><li>追加した Sofa は、他のエンジンからも CAS に見える </li></ul><ul><ul><li>これを CAS-View と呼びます </li></ul></ul><ul><ul><li>下の例では、翻訳データを作成している </li></ul></ul>CAS 今日のあしたの研のテーマは、 Apache UIMA です。 OSS: Apache UIMA Today’s theme for Ashita no Ken is Apache UIMA 英訳データの Sofa 他の分析エンジンで、 この英文を CAS として処理できる
  16. 16. 分析エンジンを使う <ul><li>エンジンの使い方はいくつかある </li></ul><ul><ul><li>附属の開発ツールを使用する </li></ul></ul><ul><ul><li>アプリケーションからエンジンを直接初期化し、解析したいデータを渡す </li></ul></ul><ul><ul><ul><li>CAS オブジェクトが手に入るので、そこから注釈などを取得して利用する </li></ul></ul></ul><ul><li>CPM : Collection Processing Manager </li></ul><ul><ul><li>データ収集・出力をプラグインとして管理する仕組み </li></ul></ul><ul><ul><li>CPE : Collection Processing Engine を作って CPM に任せる </li></ul></ul><ul><ul><ul><li>Collection Reader : 外部から入力を受け取って CAS を作る </li></ul></ul></ul><ul><ul><ul><li>CAS Consumer : 生成された CAS を外部に出力する </li></ul></ul></ul><ul><ul><ul><li>分析エンジン </li></ul></ul></ul>
  17. 17. 分析エンジンを使う (2) <ul><li>処理の分散化のため、 CPM に代わる仕組みが登場 </li></ul><ul><ul><li>AS : (UIMA) Asynchronous Scaleout </li></ul></ul><ul><ul><li>メッセージキューを使用した、非同期分散処理システム </li></ul></ul><ul><ul><ul><ul><li>すみません、今日はそういうものがある、という話だけで… </li></ul></ul></ul></ul>※ 図は公式ドキュメントより
  18. 18. UIMA がしてくれないこと(再) <ul><li>UIMA はほんとうに分析しかやってくれない </li></ul><ul><ul><li>文書をエンジンに渡して、単語リストを作るところまでが UIMA の仕事 </li></ul></ul><ul><ul><li>例えば単語 X が含まれた文書はどれ?という処理は開発者の仕事 </li></ul></ul>This is a pen. Collection Reader My 単語抽出 エンジン CAS Consumer DB Application UIMA の仕事はここまで-> -> ここからは全て要開発
  19. 19. UIMA との連携 <ul><li>検索エンジン </li></ul><ul><ul><li>UIMA が分析した結果を、インデックスに活用する </li></ul></ul><ul><ul><ul><li>UIMA は複雑な意味内容を抽出できるので、単なるキーワードエンジン以上の処理が可能 </li></ul></ul></ul><ul><ul><li>Apache Solr </li></ul></ul><ul><ul><li>IBM OmniFinder </li></ul></ul><ul><li>UIMA を使用したシステム </li></ul><ul><ul><li>公式サイトでいくつか紹介されている </li></ul></ul><ul><ul><li>特に自然言語処理系のプロジェクトが多い </li></ul></ul><ul><ul><li>UIMA コンポーネントを分析エンジンとして提供する企業もちらほら </li></ul></ul>
  20. 20. まとめ <ul><li>非構造化テキストを処理するためのフレームワーク </li></ul><ul><ul><li>OASIS によって仕様が標準化されている </li></ul></ul><ul><li>開発者は、分析アルゴリズムをプラグインとして書く </li></ul><ul><ul><li>処理の基本は CAS というデータ形式 </li></ul></ul><ul><ul><li>Annotation をラベルのように貼りつけていくイメージ </li></ul></ul><ul><ul><li>コンポーネント同士は、 XML で記述して組み合わせが可能 </li></ul></ul><ul><li>UIMA がしてくれるのは、分析結果を作るところまで </li></ul><ul><ul><li>分析結果をどう活用するかは、別の話 </li></ul></ul><ul><ul><li>既存の検索エンジンなどと組み合わせる </li></ul></ul><ul><li>分散処理の話や他エンジンとの連携はまた改めて </li></ul><ul><ul><li>すみません </li></ul></ul>

×