---
# System prepended metadata

title: 'BEHRT: Transformer for Electronic Health Records'
tags: [paper]

---

###### tags: `paper`
# BEHRT: Transformer for Electronic Health Records
[TOC]

## Author
* ==Deep Medicine, Oxford Martin School, University of Oxford, Oxford, United Kingdom==
* Yikuan Li
* Shishir Rao
* José Roberto Ayala Solares
* Abdelaali Hassaine 
* Rema Ramakrishnan 
* Dexter Canoy 
* Yajie Zhu 
* Kazem Rahimi
* Gholamreza Salimi-Khorshidi 

## 不知道在幹嘛
* concepts
    * 診斷、干預、實驗室測試、臨床敘述

## Abstract
BEHRT: A deep neural sequence transduction model for electronic health records (EHR), capable of simultaneously predicting the likelihood of **301 conditions** in one’s future visits. When trained and evaluated on the data from nearly **1.6 million individuals**, BEHRT shows a striking improvement of **8.0–13.2%** (in terms of average precision scores for diferent tasks), over the existing state-of-the-art deep EHR models
* 

## Introduction
* Ardila 藉由斷層影像預測肺癌的風險，有 94.4% 的準確度
* Poplin 藉由視網膜眼底照片預測一系列的心血管風險因子
* 國家的 EHR 系統，可以連結到個人的診斷、干預、實驗室測試、臨床敘述，只要一個人住一次院，就可以產生大量的資料，以便於訓練模型
* 近期的DL，不需要特別經過處理的資料和專家的指導，經過一層一層的layer 就可以有答案ㄌ
* Tran 使用 RBM 學習 EHR，可以預測一個人的自殺風險
* Miotto 展示出 SDA ，從 EHR 預測一些疾病，他的 model 優於其他的 feature extraction 和 feature transformation 的方法
* 早期的研究沒有考慮到 EHR資料的小缺點
    * 可能有人很少生病，所以獲得的看診時間間隔不一
    * 時間順序和事件
* 利用 embedding 的技術， 將不是數字的資料轉換到代數空間
    * Nguyen 使用 CNN 預測再次入院的機率，把醫療歷史看成一系列的概念，並在每兩次看診的紀錄中間插入特殊的字來表示時間差
    * Choi 使用 RNN 來預測下一次看醫生的診斷結果與藥物
* DL 用在 EHR 上的進展，能夠捕捉這些事件的長期依賴關係 (如：糖尿病在第一次發生以後會對一個人以後的人生帶來影響)
* BERT 是在 NLP 裡有利的 Transformer 的結構

## Methods
### Data
* 資料使用 
    * Clinical Practice Research Datalink (CPRD)
        * longitudinal primary care data (縱向初級保健數據)
        * 英國 674 家 GP（全科醫生、家庭醫生）診所
        * 覆蓋了3500 萬患者，1000萬註冊
            * 最新的是覆蓋了 6000 萬患者，1600 萬註冊
        * 年齡 性別 種族
    * 二級保健（即住院事件統計數據或 HES ) 
        * 英格蘭國民健康服務 (NHS) 醫院所有入院的住院、門診、意外和急診
        * 占英格蘭大約 75% CPRD GP 診所(佔英國所有 CPRD GP 診所的 58%)
        * 只考慮了同意（並因此具有）與 HES 記錄關聯的 GP 診所數據
    * 其他健康和行政數據庫（例如，國家統計局死亡登記處）。
    
        
### Pre-processing of CPRD
![](https://i.imgur.com/ccgIxGy.jpg)

* 留下至少有5次看診紀錄的病人
* 使用 160萬 進行 training 和 evaluate
* 使用 Read code 和 ICD-10 分類 '疾病'
    * ICD-10 : https://dep.mohw.gov.tw/dos/lp-2490-113-xCat-02-1-20.html
    * 感覺應該是把疾病分成 G = 301 disease code
* 標示第 p 個病患的 EHR 為 $V_p = \{v^1_p，v^2_p，\dots，v^{n_p}_p\}$
    * $n_p$ 看了幾次病
    * $v^j_p$ 第 j 次看病
        * $v^j_p =\{d_1, \dots，d_{m^j_p}\}$ 第 j 次的診斷結果
        * $m^j_p$ 診斷出的數量
        * $d_i$ disease code
* $V_p = \{CLS，v^1_p，SEP，v^2_p，SEP，\dots，v^{n_p}_p,SEP\}$
    * CLS 表示一開始看病
    * SEP 表示看病的間隔
![](https://i.imgur.com/mbqZAcm.png)


### BEHRT: A Transformer-based Model for EHR
* 預測未來會診斷出啥疾病，這是一個 multi-label classification problem
* C.1 時間序列問題
* C.2 早期的疾病對於未來的影響
* C.3 看病的次數不同
* C.4 看病的區間不同
> ![](https://i.imgur.com/cHKq1XQ.png)
> ![](https://i.imgur.com/EQPiR93.png)
> * 沒有 visit 1 跟 visit 4 應該是因為在 figure 2 沒有診斷出東西
> * <div style='color:red'>不知道，position 是啥</div>
> * 對於大多的疾病而言 Age 是一個關鍵的風險因子，
> * segment 使用 A,B 做區分，用來作為 2 次 看病的區分點
* EHR 的時間序列 和 nlp 的概念相同，所以可以用 nlp 的方式
* 每個診斷是 words，每次看診是一個 sentence，病人的整個病歷是一個document
* BEHRT 是 multi-head self-attention, positional encoding, and masked language model (MLM), for EHR
* 使用 feed-forward neural (可以平行學習，而不是sequence)，而不是 RNN (可能會有梯度爆炸或是梯度消失的問題)、CNN(只能擷取有限大小的資訊)
* positional encoding 扮演了學習 sequence 的重要角色
* 每次看醫生的診斷結果沒有前後順序

### Pre-training BEHRT using masked language model(MLM)
* 目標是學習被遮起來的字 (binary class，threshold = 0.5)
* 隨機初始化 disease, age, segment
* 86.5% 的 words 不變，12% 使用 [mask] 取代，1.5%的字使用隨機選**疾病單字**處理
    * 12% + 1.5% 是為了使 model 可以克服　noise

### Disease Prediction
* 首先隨機將病患分成training 80%，testing 20%
* 預測接下來會得啥病
* 評估三個預測任務
    1. 下次看病會得哪些病(T1)
        * 隨機選 index j ($3 < j < n_p$)，表示成 $x_p = \{v^1_p，\dots，v^j_p\}$ 和 $y_p = W_{j+1}$ 
            * $W_{j+1}$  是 multi-hot vector，如果是 1 ，表示 $v^{j+1}_p$ 會得那個病
            * j 表示 第 j 次看病
            * $n_p$ 看了幾次病
        * 每個病患只會有一筆的 input-output pair
        * 最後有 69.9 萬個病人
    3. 接下來 6 個月會得啥病(T2) 
        * 如果資料不足 6 個月的資料，則被剃除
        * index j = ($3 < j < n*$)，這裡的 n* 是指之後還有大於 6 個月的看診時間
        * 最後有 39.1 萬個病人
    5. 接下來 12 個月會得啥病(T3)
        * 如果資料不足 12 個月的資料，則被剃除
        * index j = ($3 < j < n*$)，這裡的 n* 是指之後還有大於 12 個月的看診時間
        * 最後有 34.2 萬個病人
* 對於每個病人表示成 $y^*_p$ 預測結果，$y'_p$ 是正確答案


### Resources and Implementation
* GPU = Titan Xp
* 使用 BertAdam ，optimizer




## Results
### Disease Embedding
* 




### Attention and Interpretability
* 




### Disease Prediction
* 




## Discussion
* 






## Note
:::spoiler
{%pdf https://www.nature.com/articles/s41598-020-62922-y.pdf %}
{%pdf https://static-content.springer.com/esm/art%3A10.1038%2Fs41598-020-62922-y/MediaObjects/41598_2020_62922_MOESM1_ESM.pdf %}
:::
## Knowledge
* - [Transformer](https://hackmd.io/@abliu/BkXmzDBmr)