エムスリーインターン参加記

お久しぶりです、nosukeruです。

今回は、9月の上旬2週間でエムスリーさんのAIチームでインターンとして働かせて頂いたので、その参加記を書きます。

イントロ

自然言語処理の分野の一つに情報抽出(Information Extraction)というものがあります。これは非構造化されていない(普通の)文章から何らかの情報や構造を抽出したいというタスクです。今回取り組んだのははその中でも特に関係抽出(Relation Extraction)と呼ばれるタスクであり、文章中の特定の単語の組の間の関係性を抽出することを目指します。

モチベーションとしては、Web上に転がっている大量の文章から自動で有益な情報や構造を抜き出し、それをデータベース化して検索に有効利用したり、知識グラフに取り込んで質問応答に活用したりしたいというのがあります。

Steve Jobs co-founded Apple in 1982.

→ (person: Steve Jobs, is founder of, company: Apple)

Steve Jobs died in 2019 the day before Apple revealed iPhone 10.

→ (person: Steve Jobs, no relation, company: Apple)

リレンザという薬剤は主にインフルエンザを治療する目的で処方されます。

→ (medicine: リレンザ, treats, disease: インフルエンザ)

1つ目のように属性のついた単語のペアについてその文章中での関係性を分類することが目標になります。また2つ目の例のように他の文章では関係性を持ちうる単語のペアであっても、その文章中にはその関係性が現れていないという場合もあります。また今回対象にするのは3つ目のような日本語の、特に医療に関する文章であり、英語と異なる語順をどう扱うかが一つの課題となります。

関連研究

Distant Supervised Learning

関係抽出の分野では中心的に使われる手法の一つで、「特定の関係性をもつ単語の組が現れる文は何らかの形でその関係性を表現していることが多い」という仮説のもと、既存のデータベースに存在する関係ペア(entity1, relation, entity2)に対し(entity1, entity2)を含む文章を全てrelationでラベルづけしてしまうことで、通常の教師あり学習に落とし込みます。(entity1, entity2)を含む文章であってもrelationを表していないことも多々ありますが、他の大部分の正解ラベルによりこれらの影響は十分小さくなると考えます。*1

f:id:ey_nosukeru:20191005192306p:plain
データベース内のペアを含む文章を抜き出し、ラベルづけする

上の例では、既存データベースに存在する(Steve Jobs, founders, Apple)という関係ペアを用い、(Steve Jobs, Apple)という単語ペアを含む文章に全て"founders"というラベルをつけ、文章の特徴を元にラベルの分類を行うモデルを学習します。こうすることで"Bill gates was the co-founder of Microsoft."といったように学習データに似た文章が出てきた際に(Bill gates, founders, Microsoft)という関係性をうまく抽出できることが期待されます。

Bootstrapping

これもDistant Supervised Learningと同様半教師あり学習の主流な手法の一つです。まず最初少ないラベルつきデータでモデルを学習させ、このモデルで他のデータに対する識別を行います。その際に高い確信度で判定されたデータを正しいラベルづけとみなして教師データに追加します。そしてこの新しく追加された教師データを含めてモデルを再学習し、...というのを収束するまで繰り返してラベルつきデータを増やしていくものです。モデルの出力結果を教師データとして用いるので学習が暴発してしまう恐れもありますが、今回のように少数のラベルを用いて新しいサンプルを見つけてきたいという場合に適用しやすいのが強みです。

関係抽出においてはこれをDistant Supervised Learningと組み合わせて用いることで、少数の関係性データを用いて文章中から新しい関係性を抽出していくことができます。

やったこと

エムスリー社内の文章データを使い、そこから疾患や薬品等の間の何らかの関係を抽出することを目標として技術検証に取り組みました。

実用的には得られた関係性を知識としてデータベースに蓄積していき、そのデータ自体の活用・ユーザーに提供する他、そのデータを使って薬品同士・疾患同士の関連性を測ることで関連ページの推薦精度を改善することなどを目指しています。

実験内容

具体的な内容としては、まず社内の疾患・薬品間の投与関係(この疾患に対してはこの薬品を投与するのが有効、といった関係)のデータベースを用いてDistant Supervisionの枠組みでラベルづけを行い、手法の有効性を検証する実験を行いました。

次にBootstrappingの枠組みで、少量の関係性データのみから文章中に存在する新しい関係性をどれだけ発見できるかを調べる実験を行いました。関係性としては投与関係に加え、既存データベースのない新しい関係性として疾患と薬品の副作用関係(この薬品を投与するとこの疾患が副作用として生じる可能性がある)を対象としました。初期データとしては投与関係についてはデータベースのうち文章中に出現するもの100件を、副作用関係については「副作用」というワードを含む文から手動で100件を抽出したものを用いました。

文章の特徴量については、関連研究など英語の文章に対しては語順の影響で単語の関係性を表す単語がそれらの単語の間の位置に出現することが多く、この単語の間の単語列を特徴量として用いることが多いのですが、日本語では語順が異なるためこれをそのまま適用することは難しいです。そこで関連研究でも言及されている構文木を活用した特徴量を用いました。具体的には、構文木上で2つの単語の間を結ぶパスの単語列がその関係性に影響している可能性が高いと考えられるらしく、このパス上に出現する単語列を特徴量として用いました。パス上の単語列だけでは不十分なケースが見られたため、このパスの周りに出現する単語も含めて単語列としました。

f:id:ey_nosukeru:20191005195922p:plain
リレンザという薬剤は主にインフルエンザを治療する目的で処方されます。」という文章に対する構文木の例

上の例ではパス上の単語列は「薬剤、処方、目的、治療する」、周りの単語も含めると「いう、薬剤、処方、され、主に、目的、治療する」(助詞等除く)となります。今回の文章が短いためほぼ全ての単語を拾ってしまっていますが、前後に別の文脈がくっついている場合などにはその部分を除去して2つの単語に関係する単語のみを引っ張ってくることができそうです。

また、実験の事前調査として文章全体の単語の出現頻度や、Distant Supervisionでラベルづけした時の正例・負例ごとの単語の出現頻度を調べたところ、関係ペアに共起しやすい特定の単語が存在することがわかりました。そこでこの単語の出現頻度のみを用いるナイーブベイズモデルをシンプルなベースラインとして扱うことにしました。

実験結果

実験の結果、Distant Supervised Learningの実験では既存のデータベースに存在する投与関係の多くを正しく抽出できていたほか、既存データのない新しい投与関係(最近の実験によりその有効性が確認されたもの)についても一部を抽出できていました。またBootstrappingの実験でも初期データ100件に対して60〜80件程度と少量ではあるもののある程度の精度で新しい関係性を抽出することができました。

また事前調査や実験全体を通して、以下のような知見や考察を得ることができました。

Distant Supervised Learning

  • 単純に構文木上のパスに出現する単語だけを用いるよりもその周囲の単語も特徴量として使った方が精度が上がる(パス上の単語だけでは特徴を表しきれていない場合があるため)
  • 出現した単語全ての頻度を使うより重要そうな一部の単語に絞った方が精度が上がる(訓練データの分布に過適合してしまうため)
  • 今回用いたデータではテンプレ的な文章が多く含まれており(〇〇患者を対象に〇〇薬の有効性を確認する実験を行ったところ…・〇〇薬の副作用としては〇〇が確認された…等)、シンプルな手法でもある程度の予測が可能
  • 投与関係として誤って抽出してしまっているケース
    • 「<疾患A>患者を対象に<薬剤B>の薬剤の〇〇効果を検証したところ…」「<疾患A>の既往歴のない患者に<薬剤B>を…」といったように患者についての条件が疾患になっているが、その疾患は薬剤の治療対象ではない場合
    • 副作用を誤って抽出してしまっている場合
    • 薬剤を2つ以上併用して治療に用いる場合などは判断が難しい
  • 副作用関係として誤って抽出してしまっているケース
    • 「<薬剤A>群では<疾患B>が、<薬剤C>群では<疾患D>が…」といった並列関係を誤って(<薬剤A>, <疾患D>)として抽出してしまう場合
    • 「<疾患A>等の副作用は見られなかった」などの否定を捉えられていない場合
  • 語彙レベル・文法レベルで改善の余地あり
  • 訓練済みのモデルで訓練データに対して推論を行なっても精度が低い・確信度が低い
→ 特徴量が十分でない・モデルの表現力が低い可能性

Bootstrapping

  • 文章データの量に対してあまり多くの関係性を抽出できていない
→ Distant Supervised Learningの仕組み上、単語のペアが他の文章中に出現しないとラベルづけが変化しない。特定の疾患と薬品ペアの出現頻度が低いのが原因?
→ テンプレ的な文章が多い(文章のバラエティが低い)ため、新規の文章特徴量が学習されにくい?
  • Bootstrappingの実験で、副作用関係よりも投与関係の方が多い
→ 「副作用」というキーワードで最初のデータを作っているため、文章のパターンに偏りが生じてしまっている? 
→ 学習を収束させずに多くの関係性を抽出するには文章のバラエティが重要
  • 閾値を上げると学習が収束しやすくなり、下げるとノイズが混ざりやすくなり抽出された文章の質が下がってしまう。閾値の適切な決定が課題

実際の運用に向けて

今回のモデルでは精度・抽出数ともに十分とは言えず、実用化に向けては

  • 単語の出現頻度以外の特徴量として品詞・依存関係など構文解析の情報、単語の順番、単語の意味情報(Word2Vecなどの埋め込み)を用いる
  • それに伴いNNなど表現力の高いモデルを用いる

といった改善が必要だと考えられます。しかしそれでも誤抽出は避けられない課題として存在し、サービスとしての実用を考える上ではそれを補うための人手によるラベリングとモデルの推論をどう組み合わせていくかを考えるのが重要であり、単純な精度・抽出数に加え推論の解釈可能性や、文章に対するラベルづけの影響度などを計算することが必要になってきそうです。

得られた学び

地道なデータ分析の大切さ

普段は新しめの強化学習などの論文などをメインで読んでいるため発想が「とりあえず脳死ニューラルネットベースに突っ込んでみる」みたいな安直な思考になってしまっており、今回もサーベイで読んだCNNベースな手法をいきなり実装してみようなどとしていたのですが、メンターさんのアドバイスでとりあえず各単語のエンティティとの共起確率から調べることになりました。その結果各関係性に共起しやすい単語や副作用関係・薬の併用関係・合併症の関係を表しそうな単語の候補、またベースラインとしてのナイーブベイズモデルの有効性など、いきなりニューラルネットを用いた場合では得られなかった基本的な知見を多く得ることができました。この経験を通して基本的なデータ分析や基本的なモデルから徐々にステップアップして実験を進めていくプロセスの重要性を学ぶことができました。

知見の共有

今回の基礎研究のインターンに取り組むにあたって、アウトプットとしてはモデルのプログラムや実験の結果よりも、それらの分析から得られる知見をチームに共有することを心がけるように指導してもらいました。そのため単にモデルを実装して実験の結果を報告するだけではなく、単語の頻度を分析してその傾向を調べる、単純な精度で結果を報告するのではなくうまくいったケース・いかなかったケースそれぞれについてその文の傾向を観察することなどを心がけて行いました。この考え方は期間の短いインターンだけでなく普段の業務、特に新規サービスや機能の開発において短いスパンで試行錯誤を繰り返す必要のある場合に大切な考え方だと思いました。

ビジネスの部分まで踏み込んで考える

今回のインターンの反省の一つとして、与えられたタスク(関係抽出に関する基礎調査)をこなすことに精一杯で、何のためにその調査をしているのか、将来的にどのようなサービスに用いることを想定しているのか、実用に当たってどういう要素が重要になるのか、といったことを自分で考えたりチームの人に聞いたりしないまま作業を進めてしまった部分がありました。エムスリーのAIチームではML専門、インフラ専門といったように業務の切り分けをせず、またビジネス面まで踏み込んでエンジニアがサービスの品質・価値に関わる全ての業務に責任を持つという風土があり、エンジニアとしての働き方を考える上で非常に勉強になりました。

最後に

ビジネス面を含め、実際の業務におけるデータ分析・MLのプロセスを身を以て学ぶことができ、とても有意義な経験になりました。また業務の一部として社内の定期ミーティングに参加させて頂けたのも、開発スケジュールや検証の進め方などの雰囲気を感じる上で貴重な経験でした。今回のインターンで学んだことをしっかり消化し今後の研究生活やエンジニアリングに生かしていきたいと思います。ありがとうございました。

参考文献

Distant supervision for relation extraction without labeled data

Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks

A Survey on Open Information Extraction

*1:Multi-Instance Learningという考え方を用いてこの部分をより正確に扱った研究もあります。