ありがとうございます、辻井JST研究室の鶴岡と申します。「医学・生物学文献からのテキストマイニング」というタイトルで、我々のグループで最近開発ました情報抽出システムとその背景にある技術について、簡単にお話しさせていただきます。対象をその医学・生物分野というふうにしていますが、我々コンピューター科学の人からその医学・生物分野を見てみると、非常にものすごくリッチな知識体系を持った分野であるということは言えます。
まず登場人物を考えるだけでも、遺伝子の数だけで人間だけでも3万弱あって、それがタンパク質、あるいはタンパク質がまたそれ以上の数があるわけです。それがいろいろな体の部位で発現したり養成されたりということで、しかもある遺伝子に関して何か調べようと思うと、別の生物種に関しても似たような遺伝子に関する情報を引っ張ってこなければいけないということになってくると、まず登場人物の数だけでもものすごく多くて、しかもその登場人物同士の関係というのは、非常に重要な役割を果たしております。個の遺伝子が別の遺伝子が遺伝子にどういうコンテクストでそれは発現するのか、養成するのかとか、そういう情報を持っていないと、例えば薬の開発もできないし、ある種の病気のメカニズムを明らかにすることもできないわけです。
少なくとも数万×数万の可能な可能性だけでもまずあるわけです。それが困ったことに、きちんと整理されて、こういう簡単なネットワークの形になっているわけではなくて、それが論文中にしか書かれていない情報が本当にいっぱいあるわけです。もちろん何で整理をしないのかと言いたくなるわけですが、新しく出てくる知識というのは、やはりどういうフォーマットでそもそも整理すればいいのかというのが明らかではないので、言語の形でしかさかのぼれないということが一番大きな原因だと思います。
そのテキストの数というのが、論文だけで月に5万件も出てきているわけです。そうすると、たとえ専門家であっても、本当に自分のよく知っている遺伝子の周り以外に関しては、もういくら何でもフォローできないという状態になってしまっているわけです。でも実際に今、薬を開発する上では、やはり自分のよく知らない遺伝子に関する情報も、ちゃんと分かっていないといけないわけです。なのでまさに文字通り情報の洪水の中に、生物学者やバイオを研究する人たちがおぼれてしまっているという状況にあるわけです。
そこで僕ら自然言語処理研究者の立場で見ますと、ではいかにここで整理されているような、ある遺伝子が例えば別の遺伝子を単発化するとかそうでないとかいう、そういう情報をテキストから正確に、しかもきれいに要約された形で抜き出すかということが、僕らの大きな役割になるわけです。
そのためにいろいろその基盤の技術はあるわけですけれども、最初にデモシステムというか実際の情報抽出システムの方をご覧いただきたいと思います。まず、例えば一番よくある出発点というのは、自分の知りたい遺伝子が何かあるわけです。何かあって、その遺伝子に関する情報、その遺伝子と相互作用をする情報を知りたいという欲求があるとします。
人間のRAF-1という遺伝子に関して、まずはこの遺伝子がそもそもどんな情報を持っているかということがまずあるわけです。バイオの分野のやっかいなのは、ここにずらずら出ていますけれども、そのシノニウムと言って、その同義語がものすごくいっぱいあるとか、あとは同義語といってもスペリングのバリエーションがいっぱいあって、あるものは多義語もある、そういうまず混乱があって、さらにそれらの相互作用となると今度はその群をある意味で理解して抜き出す必要があるんです。
実際にこれがこのシステムで抜き出したある遺伝子、RAF-1という人間の遺伝子と、それと相互作用される遺伝子のリストということになります。例えばこのRAF-1というのは、この◇K-1◇という遺伝子と、38回その相互作用が文献の中で報告されていますというような情報が出てくるわけです。
重要なのは、こういうのを我々言語処理技術者が入る前によくやっていたのは、本当にただ文の中で文字列をマッチさせて、文の中で表記しているから、表記しているからにはどうも関係があるだろうという形で、表記だけで見るというような方法が取られていたりしたんですが、その表記の情報はこちら、その右側にありますけれども、341回表記しているけれども、でもちゃんと文を解析してみると、実は38回しか相互作用は報告されていないというような違いが出てくるわけです。
実際のテキストを見てみますと、例えばPKCという遺伝子がRAF-1と相互作用していると言っていますが、文章の表現としては、これは関係代名詞ですね「RAF-1 which is talked to meaning of」という複雑な言語表現になっていたり、これもそうですね、RAF-1というものがあって、ここにthat節が入って、飛んでここでblockというふうにして、RAF-1がPKCをブロックしますよという言語表現になっています。こういう言語表現というのはもちろん単純な文字列マッチでは取れないわけでして、やはり正しく言語的に文を正確に解析する必要があると思います。
これらを、実際にこういうものを使うときは、例えばこのインタラクションは重要であるとかいうことがあればここにためておいて、それぞれ自分が重要だとメモを付けたり、もとほかの遺伝子とのインタラクションもまとめてストックして、自分なりの相互作用の、自分の研究にとって必要な相互作用のネットワークをつくっていくということを手助けするシステムという形になっております。
これはバイオの本当に研究者の人向けシステムになっていまして、もう少し言語寄りの情報抽出システムをちょっとご覧いただきますと、もう少し言語的に直接に指定して抜き出したものがあります。例えば意味上の主語にP53という、P53が意味上の主語で、動詞としてはactivateという、そういうセンテンスは何ですかということを、実際に抜き出すこともできます。ここら辺もだいたいそうですが、単純にAがBをどうすると書かれている文だけではなくて、受け身だったり、関係節だったりとか、実際には非常に複雑な言語表現になっていることがお分かりいただけるかと思います。
もちろんこういう形で解析がなされていると、例えばがんを起こす遺伝子は何ですかというような定義を入れたりすることもできるわけです。
実際にこういうシステムを実現するためには、もちろんただではできないわけでして、どういうバックグラウンドの技術があるかということをお話しさせていただきます。言語処理に必要なものものすごく大ざっぱに言ってしまいますと、1つは、特に最近の自然言語処理に必要なものを申し上げますと、1つは言語資源ということになります。
我々はよくコーパスと言うんですけれども、テキストがあったときに、ただ生テキストというだけではあまり役には立たないです。そのテキストに何らかの言語情報が付いている必要があります。この単語は動詞であるとか名詞であるとか形容詞である、そういう一番ベーシックな品詞情報から、あるフレーズがこのフレーズとどういうふうに組み上がっている、そういう言語情報が付与されたコーパスというものが、まず必要になります。
なぜこれが必要かといいますと、今の言語処理技術というのは基本的に機械学習という枠組みを取っておりまして、機械はそういう言語情報が付与されたコーパスから、言語情報を付与するための規則性を学習しまして、それを新たな生テキストに付与するという形を取っているからです。それに必要なのはもちろん各種、いろいろな活動に応じてアルゴリズムが必要になりまして、もちろん言語処理研究者はこのアルゴリズムの方が、例えばこちらよりいいですよということで、一生懸命アルゴリズムの研究も行っているわけです。簡単に申し上げますと、そのアルゴリズムとそのコーパスが両方あって初めてロバストな言語処理というものができるということになります。
まずはそのコーパス、バイオのテキストマイニングを進めていくに当たって、当時、7〜8年前だと思いますが、まずはバイオのテキストに対して言語処理をアプライしようということははっきり言ってほとんどなかったので、その言語資源そのものがなかったんですね。それでまずやはりアルゴリズムもさることながら、言語資源を整備しないことにはやはりちゃんとリアルなマイニングができないということで、まずは我々のグループではその言語資源を作るということから始めました。
GENIAコーパスという名前で長いことこれの開発に力を注いできたわけです。いろいろなアノテーションがある中で、まず一番ベーシックなもの、品詞のアノテーションというので、これは一番規模を大きく設けまして、2,000アブストラクトぐらいのサイズになっております。2,000アブストラクトと申しますと、だいたいキーアブストラクトで20センテンスぐらいあるので、4万文ぐらいの規模になります。アノテーションというものは、もちろん一見簡単そうに、一個一個の単語にここは名詞とか、形容詞とか動詞を振っていけばいいので、そんなに大変ではないだろうという気もしますが、ものすごく大変でして、単に素人が何となく付ければいいわけではなくて、やはり品質がどの程度であるかを、まずは形容的に明らかにしなくてはいけないということもあります。
あとはどういうポリシーでアノテートしたか、あるいはちゃんとコンシステントにコーパス全体の中で保たれているかというものを、全部守った上で作っていかなければいけないので、非常に実は大変な作業になっております。
品詞のアノテーションだけではなくて、専門用語のアノテーションと申しまして、そのテキスト中のどの部分がタンパク質であるのかとか、遺伝子であるかとか、あるいはその細胞の場所であるのかといった、そういう情報も付与しております。さらにもう少し複雑なアノテーションとしまして、実際に文中のフレーズがどういう形で組み上がっているか、文として構造が組み上がっているかというアノテーションもされております。
ご覧いただければ分かるかと思いますが、やはりこういうアノテーションになると、先ほどの品詞ですとか固有名詞とかと違って、非常に複雑な形になっていくので、アノテーションに掛かるコストも高くなっています。現在では1,500アブストラクト、ちょっとまだ少なくなってしまっているのはそういう理由があります。
さらにここまではいかにも言語構造という感じですが、最近はもうちょっと踏み込んでその意味のところまでアノテーションを始めてみてはいます。特に生物や医学分野で重要な情報というのは、細胞の中で実際にどういう生物学的なイベントが起きているということが、取りたい意味としては非常に重要になってくるので、そういう生の中で起きている生物学的なイベントに関する意味的な情報です。例えばこの場合、MAD3というものがリン酸化するというイベントが、あそこに記述されていますよと、それでかつそのリン酸化というのがこれによって、このプロテインによってインデュースされますよ、そういった情報が記録されているわけです。
もちろん何でこういうことをしたいのかといいますと、最終的には自動化してこういうイベント情報をテキストから抜き出したいということが背景にあるからです。ただ難しいのは、意味に踏み込んでいきますと、言語だけでもなかなかポリシーをコンシステントに保ってアノテートしていくのは難しいですが、意味になってきますと、アノテーターはたいがい複数でパラレルにやっていくわけです。そうすると生物学者個人個人によって、生物学のイベントの意味の受け取り方が変わってきて、この人はこう言っているけど、この人はこうアノテートしたいというふうになってきて、非常に難しくなってきます。こういうアノテーションになってくると、またさらにコストは高くなってきて難しくなってくるということが言えます。
こういうアノテーションを言語資源として、まず定義いたしました。整理するとどういうことかができるかといいますと、それらから機械学習、ある種のアルゴリズムによって規則を学習して、それを新たなテキストに介してアプライできるようになると、つまり自動的に言語処理ができるようになるということになります。ものすごく簡単に言語処理の幾つかのステップを申し上げますと、文を区切ってそれを単語に区切りまして、それに品詞を付けていって、フレーズを認定して、そのフレーズ同士がどう組み上がっているかを解析する、簡単に言うとそういうステップに分けることができます。
ちょっと全部お話ししている時間はないので、アルゴリズムの例として品詞タグ付けと構文解析について少し簡単にご紹介します。品詞タグ付けは、これも申し上げましたけれども、個々の単語に品詞を付与することになります。先ほどと同じ図ですが、今回はこれを自動的に放っておいて、コンピューターが、こういうコンテクストでこういう単語だから、ここは名詞に違いない、ここは形容詞に違いないということを自動的に判定していかなければいけないわけです。
どうやるかと申しますと、もちろんいろいろな流儀はあるわけですけれども、一番多いのは確率法で考えるということです。ある単語列を与えられて、タグ列としてもっともらしいものはどれですかという形に定数化して、それを例えばこの部分を例えば◇……◇だったり、あるいは確率的にモデル化しないで、ただ判別するだけの評価を見つけるという問題にしたり、あとはちょっとここだと、このままだと難しいので、マルコフモデルのような形にして一つ一つを単純な分類法なりの形に変形して、そこでよくある機械学習のアルゴリズム、例えばSupport Vector Machines、Maximal Margineとか、実処理でよく使われるそういう汎用のアルゴリズムを使ったり、いろいろなやり方がある得るわけです。
僕らが最近開発した手法の1つは、普通は分解するときに左から右ですとか、右から左というふうに1方向にマルコフモデルで展開するんですけれども、それをそうしないで全部の組み合わせを考えけれども、しかも多項式が出てきますよと。ちょっと工夫するとダイナミックプログラミングで多項式が出てきますというアルゴリズムにすると、学習コストも小さくて結構、精度が出ますと。これはアルゴリズムの一例ですが、こういうことで個々のそのタスクに応じてこういうアルゴリズムがいいとか悪いだとか、トレーニングコストは大きいだとか小さいとか、そういうことを一生懸命ある種、競っているわけです。
ここで、世界のトップが97.2%で、例えば今のアルゴリズムが97.1%で、ある別のアルゴリズムが97.1%で、0.1%の差で本当に意味があるのかという、ちょっと変な感じもしますが、実はこれは結構重要な大きな差でして、エラーの差で考えてみると、トップは2.8%です。こっちは2.9%でここら辺に来ると、例えば3.3%ぐらいエラーがあると。しかもエラーのうち1/3くらいは、これは間違ってもしょうがないような、人間でも間違うよなというそういうエラーもいっぱいありますので、ここら辺の0.1%か0.2%で結構、後のステップの精度に響いてくるということもあります。皆さんは0.1%を競ってアルゴリズムの開発に励んでいるという面もあります。
もちろんそのアルゴリズム自身は重要だということもありますが、最初に申し上げました通り、やはりその言語資源がないと自然言語アルゴリズムというものはうまく働きません。その一例を申し上げますと、この品詞タグ付けをする品詞タガーと言いますけれども、それで自動的に品詞を付与したときに、その品詞タガーが新聞記事のコーパスで訓練されているものを、じゃあ、そのままそのバイオのテキストに使ってみたらどうなるだろうということがあるわけです。やってみると、つまり言語資源の構築をサボるとどうなるかということですけれども、本当にぼろぼろになってしまいます。
例えばbindingというのは、そのバイオの世界では形容詞ではありません。bindingというそういう名詞です。ここはbind、これは動詞になりますし、Ag、これは銀、名詞になりますし、そのT-sellというその固有名詞の部分を間違ってしまうとか、やはりドメイン独特の言い回しや固有名詞がいっぱい出てくるので、そのまま新聞記事で学習したタガーを生物学に適用しても全然うまくいかないということです。その精度を測ってみますと、完全一致にするともう84%ぐらいにしかなりません。
この品詞タグ付けのレベルで84%しかいかないと、もう後の処理でぼろぼろになってしまうので、まったくこのままでは使えません。そこで言語資源をちゃんと作って、それを使うとどうなるかと申しますと、先ほど申し上げましたGENIAコーパスです。バイオ分野のコーパスを使ってトレーニングにそれも混ぜてやると、95%ぐらいまでは上がって一応使い物になるということが分かります。
この処理に関してもう少し簡単に申し上げますと、チャンキングと言ってフレーズを認定する処理です。ここは文の中で名詞句ですよ、あるいは動詞句ですよ、ここは名詞句とその動詞句を見つける処理があったり、あとはそのコーパスのところでも申し上げましたが、ここがタンパ質ですよ、ここが遺伝子ですよ、そういう専門用語、あるいはこういう表現を文の中で認識するということが次のステップとして、品詞タグの情報が乗ってこういったことが出てきます。
最後に、必ずしも最後というわけではないですが、わりと大きな処理として構文解析というものを行います。構文解析を行いますと、最初に我々の使っている文法に関して簡単に申し上げますと、ただ句構造を解析するだけではなくて、一つ一つの単語がどういうふうに文の中で組み上がるか、そういう情報をリッチに持っている文法を使いまして、ただ句構造だけではなくて、意味的な主語と述語の関係とかそういうことも分かるような文法を使っております。HPSGと呼ばれる文法で、言語学の分野でわりと最近、わりと最近と言っても10年とか20年ぐらいになりますけれども、そういう文法を使っております。
そういう文法を使ったときに、やはりアルゴリズムの方で重要なアルゴリズムが使われたかというとそうではないので、そのための機械学習のアルゴリズムがまた必要ということになります。ちょっとその確率モデルに関しては申し上げませんけれども、こういう文法を使うと、いわゆるCFGで得られるその句構造だけではなくて、文の中でこの場合は受け身で文が書かれていますが、そのactivateというのも意味上の主語がIL2というタンパク質ですよ、意味上の目的語がこちらのThe Proteinですよということが、構文解析をすると分かります。
こういう構文解析をして意味上の主語、述語が分かりますと、一番初めにデモでご覧いただいたような表現を正規化した形での表現というものが得られてくることになります。例えばこれ、一番上は一番ストレートな文ですね。何とかのそのP53のoverexpressionが何とかをinduceしますということがストレートに書かれているのが、そのまま分かりますし、ここに◇項AtoBtoto◇と書いてありますが、項の意味上の主語が項のところに来ていて、目的語がこっちに来るというような形も解析できますし、これはby inducing、by doingという形で主語がこちらで、目的語がその先に並んでいるというものも書かれています。
これはcan be considered toですね。ここは挿入されている、離れていても主語の部分が分かるという。これは受け身になっていても、ちゃんと主語と述語が引っくり返って、それが認識できることになります。問題は、こういう構文解析が文法の確率モデルがあるとすぐできるかというと、なかなかそうではなくて、やはり計算コストがものすごく掛かります。いかにその計算コストを少なくするのかというので、いろいろなテクニックの研究をする必要があります。
精度に影響を与えないでいかに探索空間を減らすかをいろいろ試してみて、調べてそういうことを繰り返して、そのパーザの法則化を図るということを積み重ねていくと、何とか精度を落とさずに1文、例えば数百ミリ秒ぐらいで構文解析ができるという形になってはおります。現在だいたいそういう約100ミリ秒めどぐらいの文章で、1文を解析ができるというところまで来ています。
|