2017年7月26日水曜日

診療支援システムについて

日経デジタルヘルスのページの検索エンジンにて「診療支援システム」と検索したページのURLを記す。
何か研究についてのヒントが得られるかも。

検索:日経デジタルヘルス
ホワイトジャック

2017年7月17日月曜日

Word2Vecを試してみた

Word2Vecは単語をベクトルとして表現する手法です。GensimのWord2Vecを使ってネットで集めた記事(各疾患50件)からモデルを作成して類似単語を検索してみた。抜き出した品詞は名詞と形容詞のみ。ベクトルの次元は100。Windowは3。学習にsoftmax関数を使用(hs=1), 最小出現回数は1(min_count=1), 学習アルゴリズムはskip-gram (sg=1)。

以下がその結果。

[ 子宮頸がん cervical_cancer の場合]
出血 = 月経,性行為,期間,もの,性交,際,おり,異常,長い,卵巣
症状 = 初期,子宮,浸潤,婦人科,的,痛み,子宮頸がん,感染,浮腫,病気
特徴 = 子宮,ピンク,初期,症状,的,浸潤,病気,中,浮腫,ため
 
[ 子宮内膜症 endometriosis の場合]
出血 = 女性,ため,人,%,子宮,こと,生理,必要,場合,チョコレート
症状 = 多い,ため,症,強い,血,排便,人,膜,とき,ナプキン
特徴 = ひどい,たび,痛い,の,癒着,子宮内膜症,的,痛み,中,生理痛 
 
[ 子宮筋腫 uterine_fibroid の場合]
出血 = こと,生理痛,ひどい,ため,血,大きい,一番,成長,流,異常
症状 = 膀胱,血液,腹痛,悪い,化,腎臓,自分,トラブル,異常,血管
特徴 = 場合,成長,やすい,様々,その他,方,子宮,筋腫,痛み,日常生活 
 
[ 子宮体癌 endometrial_cancer の場合]
出血 = 不正出血,不正性器出血,閉経,多い,月経,水っぽい,検査,子宮頸がん,がん,必要
症状 = 子宮体がん,がん,進行,不正出血,子宮頸がん,初期,不正性器出血,少量,こと,検診
特徴 = 閉経,出血,不正出血,多い,不順,水っぽい,月経,不正性器出血,要注意,もの 
 
[ 卵巣腫瘍 ovarian_tumor の場合]
出血 = こと,もの,状態,腫瘍,茎,卵巣腫瘍,ホルモン,場合,異常,痛み
症状 = おなか,痛,さ,腰痛,腫瘍,尿,きつい,偶然,どちら,もの
特徴 = 腫瘍,こぶし,の,片側,もの,さ,腰痛,大きい,卵巣腫瘍,おなか

ネット記事を集めたコーパスで学習曲線を作ってみた

Googleで疾患名を入力して検索した結果を集めて作ったコーパスを利用してベイズ学習をやった結果を下表に示す。分類はscikit-learnのMultipleNBを使って行い、性能は10-fold交差検証テストで評価した。

表1 ネット記事の分類実験の結果

これをグラフにして学習曲線を描いたのが下図である。


図1 ネット記事によるコーパスの学習曲線

1疾患当たりの学習データ件数が50のとき、Accuracyは最大の0.9を示した。このグラフから、データをさらに増やすと性能がさらに向上する可能性がみられる。

モデル係数の調査

ベイズモデルのモデル係数が最も大きい20の特徴量と最も小さい20の特徴量を 図2~6に示す。

図2 子宮頸がんのモデル係数
図3 子宮体癌のモデル係数
図4 子宮内膜症のモデル係数
図5 子宮筋腫のモデル係数
図6 卵巣腫瘍のモデル係数
いずれの疾患も最小の25の特徴量はおそらくアンダーフローしている。分類の貢献している特徴量を見ると「おり」「もの」があるが、これは「おりもの」が過分割されているものであろう。ユーザ辞書を作って過分割を抑える必要がある。

2017年7月13日木曜日

分類器の性能はどうやって測るの?

KH Coderのベイズ分類器は交差検証テストの結果として,性能を正確度(Accuracy)で出力している。機械学習の性能を評価する場合はほかにも様々な指標がある。これについては「モデルの精度評価」に詳しいので参照のこと。
さて,分類器というものは,正確度が高ければ高いほど良いというわけではない。正確度が高くても使いものにならない場合だってある。たとえば病気の有無をあてる分類問題で,有病率が低い場合は,いくら正確度が高くても再現率(Recall)が低い場合がある。一般に分類器は2つの指標(再現率と精度)で評価すべきである。
ただし,今回のように疾患ごとのデータ数を揃えている場合は正確度を使って性能を評価しても問題ない。

ストップワード

ストップワードに疾患名を設定していなかったため,ベイズ分類の成績が本来よりも良くなっていたようで,ストップワードを加えると正確度(Accuracy)が下がってしまった。まあ,これは当然の結果。さて,気を取り直してストップワードを設定して疾患ごとのデータサイズを100~500に変えながら分類を行ったところ,データサイズが500件のとき0.62になったということ。ストップワードを入れなかったときに比べ約0.8の減少。なお,この分類テストでは品詞を絞らず,すべての形態素を素性に使っている。また,KH Coderが自動的に作成する複合語を設定して過分割を抑制している。だが,しかし,この効果がプラスに出ているかどうかはためしてみないとわからない。そう,何事もやってみないとわからない。多分こうだろうと安易に考えて安心してはいけない。
さて,同じ実験をKH Coderではなくscikit-learnというライブラリのBayes分類器を用いてやってみた。1疾患当たりのデータサイズを100~600に増やしながら,交差検証テストだけでなく,訓練データ並びに別途作った検証用データについても分類性能(正確度)を測定してみた。なお,検証用データの件数は,訓練用が300件までは訓練用データ件数と同じで,400件の時は300件,500件の時は200件,そして600件の時は100件とした。これは,利用できるデータサイズが700件以下だったためである(子宮体癌)。結果を下表に示す。

表1 scikit-leanを使ったBayes分類の結果

なお,表中のalphaは分類器のパラメタ(Laplace smoothing)で,ゼロ頻度を避けるためのものである(θ=(x + alpha)/(N + alpha*d) for more detail see Wikipedia "Additive smoothing")。下図はこの結果をグラフにしたものである。

図1 学習曲線

この結果から,1疾患当たりのデータサイズが500件および600件のとき,正確度は0.72となり,今回調べた範囲ではもっとも高くなった。また,表1から,データサイズが増加するにつれて,訓練スコアは徐々に減少し,それとは反対に検証データによる分類正確度は増加している。これは,過学習が抑制されていることを表しているのだろう。

今回の結果はKH Coderの結果と異なっている。 考えられる原因は
  1. 分類の特徴量(素性)として名詞しか使っていない
  2. 複合語を使った過分割抑制を行っていない
の2点である。この他にも形態素解析器が使っている辞書やアルゴリズムも影響しているかもしれない(KH CoderはChasen,scikit-learnはMeCab)。


2017年7月12日水曜日

ストップワードと複合語リスト

KH Coderでベイズ学習を行うとき、ストップワードと複合語リストを指定できる。
複合語リストとは、形態素解析の過分割を抑制するために指定する単語リストで、ここに指定した単語は、それ以上形態素解析処理によって分割されることなく、そのままの単語として抽出される。
ストップワードは、抽出された語をベイズ学習の特徴量(素性)から除外したい場合に指定する語リストである。
今回の中間発表では以下のように設定した。

ストップワード

子宮筋腫
子宮頸がん
子宮頸癌
子宮体癌
子宮体がん
卵巣腫瘍
子宮



卵巣
腫瘍
筋腫

がん

複合語リスト

子宮筋腫
子宮内膜症
腫瘤
子宮頸部
子宮体癌
子宮頸癌
子宮内膜
卵巣癌
卵巣腫瘍
腫瘍細胞
組織学
腺癌
摘術
摘出術
子宮内膜癌
子宮体部
単純子宮
化学療法
子宮腺筋症
類内膜腺癌
子宮内膜組織
以下省略(全部で17455語)

いよいよ来週は中間発表です

作成したスライドについてまとめてみました。

スライドの修正

  1. 代表的なものだけでも別掲で拡大表示するなどして,P9をもっと見やすいように工夫してください。
  2. P15では,抄録の場合は50件ではなく200件の場合の結果を示してください。
  3. また,表(混同行列(Confusion Matrix))が薄くて見えにくいので,パワーポイントの表を使って書いてください。
  4. P12:異なる疾患名の検索で同じ抄録がヒットした場合,医学中央雑誌の「文献番号」で重複している抄録を除去したことを口頭でいいので言及してください。
  5. P20:現在,特徴量として使用している形態素の品詞を記入してください(「現在は,名詞,・・・・を使用」の・・・のところ)。
  6. なぜネット記事のほうが抄録を学習するよりも正確度が高くなったのか,原因を調査してください(コピ&ペで同じ文書が学習データになっちないか?)
  7. それを受けて,スマホアプリから入力する症状の候補を検討してください。

Q&A対策資料の作成

発表用のスライドとは別に,Q&A対策のスライドを作っておくと便利です。口頭ではなかなか伝わらないこともスライドを示しながら説明するとやりやすいです。
  1. 無作為に選んだ10病院の問診票をパワーポイントに貼り付ける
  2. 既存の女性健康アプリの一覧を作成する
  3. 収集した学習データのプロフィール(各疾患ごとの文書数,文字数)をまとめる
  4. KH Coderのベイズ学習の手順をまとめる
  5. ベイズ学習で選んだ品詞、除去した語(ストップワード)を一覧にする
  6. 交差検証テスト結果の混同行列にPrecisionとRecallを加える
  7. Kappa統計量についてまとめる

2017年7月5日水曜日

研究の目的について考えてみる

今回の研究の目的について整理する。
子宮内膜症に関する現状については日本子宮内膜症啓発会議の現況に詳しく書かれている(エンドメトリオーシス学会)。それによれば、有経女性の約9%(約230万人)が子宮内膜症にかかっている(2011年度)。ところが実際に受療しているのは63万人と全患者数の27%に過ぎない。その背景には「月経痛は我慢するのが当たり前」「痛いときは市販の鎮痛剤を使えばよい」「婦人科に行きたくない」といった子宮内膜症の重大性に対する無知がある。しかし、放置しておくと、QOLの低下だけでなく不妊の原因や卵巣がんへの進展も明らかになってきている。
このような背景から、少しでも通院を促進するためにスマホアプリを開発した。

開発するスマホアプリにおいて通院を促進する機能

  • 症状を入力して疾患を予測する機能
  • 最寄りの医療機関を案内する機能(地図・評判)
  • 問診票の内容(飲んでいる薬、予防接種の記録、既往歴など)をスマホに登録して医療機関への受診を促進する機能
  • もっと自分の身体について関心を持ち,自分の身体に気を配るために,月経の周期や体調の異変など,自分の情報を管理する機能






2017年7月3日月曜日

インターネットから集めた疾患情報による学習結果

方法:インターネットの検索エンジンを用い、子宮筋腫、卵巣腫瘍、子宮内膜症、子宮体がん、子宮頸がんの計5疾患の検索を行い、得られた結果から症状の記述のみ抽出してコーパスを作成した。
その際、例えば「子宮筋腫の症状は?」といった見出しを見つけ、手作業で該当箇所をコピー&ペーストした。明確な見出しがない場合は、「~~~といった症状がみられる」といった箇所を目視で確認して該当箇所をコピー&ペーストした。
記述の信頼性を確保するため、出典が医療機関かそうでないかで区分した。
なおこの作業は3名で基準を統一して行った(うち2名は医療情報技師または診療情報管理取得者)。
収集したコーパスから各疾患50件ずつ抽出して、KHcoderを用いてベイズ学習をした。その際、出典が医療機関とその他のいずれかに偏らないようにランダムに抽出した。なお,ベイズ学習では使用する特徴量(素性:feature)を名詞,・・・に絞ってある。また,形態素解析によって得られた疾患名そのものは除外してある。


結果:収集したデータの詳細を表1に示す。また,収集したデータから各疾患ごとにランダムに抽出したデータのプロフィールを表2に示す。

表1 収集コーパスデータ詳細(全件数)
表2 収集コーパスデータ詳細(ランダム抽出50件)
表3にベイズ学習の結果を下記に記す。なお,検証は10-分割交差検証法(10-fold Cross Validation)によって行った。

表3 ベイズ学習の結果



考察:ベイズ学習の結果、90%という高い正解率(accuracy)を得た。また,一致度の指標であるKappa統計量も0.875と極めて高い値を示した。一般に、Kappa統計量が0.8を超えた場合は完全に一致しているとみてよいので,今回収集したデータによるベイズ分類はほぼ完ぺきに疾患を判定しているように思われる。しかしながら,以前,抄録をコーパスにしてベイズ分類した際は高々0.7の正解率しか得られなかったことを考えると,データの質としては劣ると考えられるインターネットのデータで何故ここまで高い正解率が得られるのか詳細に検討する必要がある。
考えられる理由としては,コーパス中に疾患名そのものが含まれており,それが高い分類精度をもたらしている可能性である。しかし,これに関してはストップワードに疾患名を加えているのでその可能性を除外できる。しかしながら,何らかの原因で過学習されている可能性が考えられるので,疾患分類にどの語が大きな影響を与えているのかを詳細に調べる必要がある。
また,今回は収集したコーパスから各疾患ごとにランダムに50件ずつデータを抽出してベイズ学習を行ったが,今後は使用するコーパスの件数によって正解率がどのような影響を受けるかについて,学習曲線を描いて検討を行う。また,学習データの質による影響を見るために,分類精度の出典区分依存性を調べる必要もある。さらに,語の出現数や予測に使われないであろう語句のフィルタを行うことによってどの程度分類精度が改善するか見ていきたい。