抄録コーパスと同じく、学習に用いるデータを一様にするため、収集したネット記事からランダムに学習データを抽出した。その抽出した学習データプロフィールを下表に示す。
総語数の平均は3,438語(標準偏差2,721)、異なり語数の平均は503語(標準偏差77)であった。
# | 疾患 | 文書数 | 総語数 | 総異なり語数 | |
11 | Net:keigan | 50 | 0 | 1785 | 467 |
12 | Net:naimaku | 50 | 0 | 1793 | 496 |
13 | Net:kinsyu | 50 | 0 | 2806 | 647 |
14 | Net:ransou | 50 | 0 | 1917 | 487 |
15 | Net:taigan | 50 | 0 | 1645 | 418 |
- // ここで HL7 FHIR の RiskAssessment リソースで予測システム(api-predict)へリクエストを送る
- var riskAssessment = {
- "resourceType": "RiskAssessment",
- "status": "final",
- "basis": [
- {
- "reference": text
- }
- ],
- "comment": "Naive Bayes Classifier Ver.1.0"
- };
- $.ajax({
- url: 'http://192.168.11.251/~nlp_ai/api-predict.php',
- type: 'POST',
- headers: {
- 'Content-Type': 'application/json;charset=utf-8'
- },
- async: false,
- data: JSON.stringify(riskAssessment),
- processData: true,
- dataType: 'json'
- })
- .done(function(data, textStatus, jqXHR) {
- ・・・以下,疾患予測サーバからのレスポンスを処理する・・・
- {
- "resourceType":"RiskAssessment",
- "status":"final",
- "basis":[
- {
- "reference":"ここに疾患分類対象のテキストを設定する。・・・"
- }
- ],
- "comment":"Naive Bayes Classifier Ver.1.0"
- }
Bundle.entry配列に疾患ごとのRiskAssessmentリソースで分類結果が返ってくる。疾患名は,RiskAssessment.prediction[0].outcome.textに,スコアはRiskAssessment.prediction[0].probabilityに設定されている。
- {
- "status":"final",
- "resourceType":"RiskAssessment",
- "basis[0][reference]":"不妊症。",
- "comment":"Naive Bayes Classifier Ver.1.0",
- "bundle":{
- "resourceType":"Bundle",
- "type":"message",
- "entry":[
- {
- "resourceType":"RiskAssessment",
- "status":"final",
- "prediction":[
- {
- "outcome":{"text":"naimaku"},
- "probability":1.4142274696827
- }
- ]
- },{
- "resourceType":"RiskAssessment",
- "status":"final",
- "prediction":[
- {
- "outcome":{"text":"kinsyu"},
- "probability":1.398112511866
- }
- ]
- },{
- "resourceType":"RiskAssessment",
- "status":"final",
- "prediction":[
- {
- "outcome":{"text":"taigan"},
- "probability":0.48504086418881
- }
- ]
- },{
- "resourceType":"RiskAssessment",
- "status":"final",
- "prediction":[
- {
- "outcome":{"text":"ransou"},
- "probability":-0.20820912181313
- }
- ]
- },{
- "resourceType":"RiskAssessment",
- "status":"final",
- "prediction":[
- {
- "outcome":{"text":"keigan"},
- "probability":-0.21748840888999
- }
- ]
- }
- ]
- }
- }
- .done(function(data, textStatus, jqXHR) {
- var html = '<table class="table table-hover table-striped">';
- html += '<caption>予測結果(あくまでも予測です。気になる場合は病院に受診してください。)</caption>';
- html += '<tr>';
- html += '<th>#</th>';
- html += '<th>疾患</th>';
- html += '<th>判定スコア</th>';
- html += '</tr>';
- var i = 1;
- $.each(data.bundle.entry, function(index, riskAssessment){
- html += '<tr>';
- html += '<td>' + (i++) + '</td>';
- html += '<td>';
- html += DISEASE_NAME[riskAssessment.prediction[0].outcome.text];
- html += '</td>';
- html += '<td>';
- html += riskAssessment.prediction[0].probability;
- html += '</td>';
- html += '</tr>';
- });
- html += '</table>';
- $("#predict-result-list").html(html);
- })
疾患 | keigan | kinsyu | naimaku | ransou | taigan | 総計 | 再現率 |
keigan | 147 | 14 | 13 | 8 | 18 | 200 | 73.5% |
kinsyu | 3 | 151 | 26 | 7 | 13 | 200 | 75.5% |
naimaku | 1 | 7 | 183 | 2 | 7 | 200 | 91.5% |
ransou | 9 | 4 | 13 | 162 | 12 | 200 | 81.0% |
taigan | 20 | 12 | 11 | 14 | 143 | 200 | 71.5% |
総計 | 180 | 188 | 246 | 193 | 193 | 1000 | |
適合率 | 81.7% | 80.3% | 74.4% | 83.9% | 74.1% | 78.6% |
疾患 | keigan | kinsyu | naimaku | ransou | taigan | 総計 | 再現率 |
keigan | 133 | 16 | 16 | 9 | 26 | 200 | 66.5% |
kinsyu | 4 | 121 | 41 | 16 | 18 | 200 | 60.5% |
naimaku | 2 | 8 | 180 | 4 | 6 | 200 | 90.0% |
ransou | 9 | 5 | 17 | 155 | 14 | 200 | 77.5% |
taigan | 30 | 13 | 13 | 25 | 119 | 200 | 59.5% |
総計 | 178 | 163 | 267 | 209 | 183 | 1000 | |
適合率 | 74.7% | 74.2% | 67.4% | 74.2% | 65.0% | 70.8% |
疾患 | keigan | kinsyu | naimaku | ransou | taigan | 総計 | 再現率 |
keigan | 139 | 16 | 15 | 11 | 19 | 200 | 69.5% |
kinsyu | 3 | 148 | 27 | 9 | 13 | 200 | 74.0% |
naimaku | 2 | 9 | 182 | 1 | 6 | 200 | 91.0% |
ransou | 8 | 3 | 16 | 160 | 13 | 200 | 80.0% |
taigan | 23 | 13 | 11 | 14 | 139 | 200 | 69.5% |
総計 | 175 | 189 | 251 | 195 | 190 | 1000 | |
適合率 | 79.4% | 78.3% | 72.5% | 82.1% | 73.2% | 76.8% |
疾患 | keigan | kinsyu | naimaku | ransou | taigan | 総計 | 再現率 |
keigan | 126 | 19 | 17 | 11 | 27 | 200 | 63.0% |
kinsyu | 3 | 116 | 45 | 18 | 18 | 200 | 58.0% |
naimaku | 2 | 10 | 177 | 5 | 6 | 200 | 88.5% |
ransou | 9 | 2 | 20 | 156 | 13 | 200 | 78.0% |
taigan | 32 | 15 | 13 | 23 | 117 | 200 | 58.5% |
総計 | 172 | 162 | 272 | 213 | 181 | 1000 | |
適合率 | 73.3% | 71.6% | 65.1% | 73.2% | 64.6% | 69.2% |
# | 疾患 | 文書数 | 総語数 | 総異なり語数 | (A) log(総語数) | (B) log(総語数+総異なり語数) | (A) -(B) | |
3 | Shikkan:naimaku | 500 | 0 | 34291 | 7392 | 10.44263821 | 10.63784865 | -0.195210443 |
5 | Shikkan:taigan | 500 | 0 | 37736 | 8730 | 10.53836982 | 10.74647614 | -0.208106316 |
4 | Shikkan:ransou | 500 | 0 | 35970 | 8326 | 10.49044054 | 10.69864966 | -0.208209122 |
2 | Shikkan:kinsyu | 500 | 0 | 37964 | 8935 | 10.54439362 | 10.75575163 | -0.211358011 |
1 | Shikkan:keigan | 500 | 0 | 35608 | 8651 | 10.48032561 | 10.69781402 | -0.217488409 |
/usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic -u /usr/local/lib/mecab/dic/userdic/abstract.dic -f utf-8 -t utf-8 /home/nlp_ai/usr/dic/abstract_utf-8n.csv
userdic = /usr/local/lib/mecab/dic/userdic/abstract.dic
$types = array('名詞');に品詞リストを設定すればよい。この行をコメントアウトすれば全品詞が対象になる。
各疾患10件 |
各疾患20件 |
各疾患30件 |
各疾患40件 |
各疾患50件 |
各件数ごとの推移 |
[ 子宮頸がん cervical_cancer の場合] 出血 = 月経,性行為,期間,もの,性交,際,おり,異常,長い,卵巣 症状 = 初期,子宮,浸潤,婦人科,的,痛み,子宮頸がん,感染,浮腫,病気 特徴 = 子宮,ピンク,初期,症状,的,浸潤,病気,中,浮腫,ため
[ 子宮内膜症 endometriosis の場合] 出血 = 女性,ため,人,%,子宮,こと,生理,必要,場合,チョコレート 症状 = 多い,ため,症,強い,血,排便,人,膜,とき,ナプキン 特徴 = ひどい,たび,痛い,の,癒着,子宮内膜症,的,痛み,中,生理痛
[ 子宮筋腫 uterine_fibroid の場合] 出血 = こと,生理痛,ひどい,ため,血,大きい,一番,成長,流,異常 症状 = 膀胱,血液,腹痛,悪い,化,腎臓,自分,トラブル,異常,血管 特徴 = 場合,成長,やすい,様々,その他,方,子宮,筋腫,痛み,日常生活
[ 子宮体癌 endometrial_cancer の場合] 出血 = 不正出血,不正性器出血,閉経,多い,月経,水っぽい,検査,子宮頸がん,がん,必要 症状 = 子宮体がん,がん,進行,不正出血,子宮頸がん,初期,不正性器出血,少量,こと,検診 特徴 = 閉経,出血,不正出血,多い,不順,水っぽい,月経,不正性器出血,要注意,もの
[ 卵巣腫瘍 ovarian_tumor の場合] 出血 = こと,もの,状態,腫瘍,茎,卵巣腫瘍,ホルモン,場合,異常,痛み 症状 = おなか,痛,さ,腰痛,腫瘍,尿,きつい,偶然,どちら,もの 特徴 = 腫瘍,こぶし,の,片側,もの,さ,腰痛,大きい,卵巣腫瘍,おなか
![]() |
表1 ネット記事の分類実験の結果 |
![]() |
図1 ネット記事によるコーパスの学習曲線 |
![]() |
図2 子宮頸がんのモデル係数 |
![]() |
図3 子宮体癌のモデル係数 |
![]() |
図4 子宮内膜症のモデル係数 |
![]() |
図5 子宮筋腫のモデル係数 |
![]() |
図6 卵巣腫瘍のモデル係数 |
![]() |
表1 scikit-leanを使ったBayes分類の結果 |
![]() |
図1 学習曲線 |
表1 収集コーパスデータ詳細(全件数) |
表2 収集コーパスデータ詳細(ランダム抽出50件) |
表3 ベイズ学習の結果 |
- <ons-list>
- <ons-list-header>症状を選択してください</ons-list-header>
- <ons-list-item>
- <ons-row>
- <ons-col>
- <label>
- <ons-input style="width:35px;" type="checkbox" input-id="check-1"></ons-input>
- </label>
- <label for="check-1">
- 不妊症
- </label>
- </ons-col>
- <ons-col>
- <label>
- <ons-input style="width:35px;" type="checkbox" input-id="check-1"></ons-input>
- </label>
- <label for="check-2">
- 月経困難症
- </label>
- </ons-col>
- </ons-row>
- </ons-list-item>
保健医療データの収集に当たっては、AIの開発企業・研究者等だけでなく、AIの活用によって、保健医療の現場にもメリットが還元されるような環境を国が主導して整備することが望ましい。また、診療報酬等の枠組みも活用しつつ、保健医療の現場に過大な負担を負わせることなく、持続的に保健医療データが収集されるような仕組みを構築する必要がある。といった記述がみられ, 診療報酬によるAI加算も見据えているようです。
表1 |
表2 |