最近准备使用Med-BERT对结构化EHR数据做Embedding。
在论文《Med-BERT》中的引用为pytorch_ehr

Med-BERT主要还是修改了BERT。包含两个文件夹Fine-Tunning TutorialsPretraining Code

  • Pretraining Code:
    • preprocess_pretrain_data.py: 处理.csv中的患者数据。主要是提取了患者就诊的时间及间隔,疾病代码,并编码。
      • input: data_file, vocab, output_file,data_size
      • output:
        • .types : vocab
        • .ptencs: (pts_ls) patients encounter # [住院时间,下一次住院间隔时间,ICD代码,编码后的ICD代码]
        • .encs: tokenized encounter data and labels # 代码中没有看到
        • .bencs: (pts_sls)tokeninzed encounter data and labels, with other segments # [患者ID,住院时间,下一次住院时间,编码后的ICD代码,就医次数]
    • create_BERTpretrain_EHRfeatures.py:对应于BERT中的create_pretraining_data.py,主要是将.bencs中的代码序列写为TF格式,并构建MASK。
      • input: .bencs.train, output_file, .types
      • function:
        • write_EHRinstance_to_example_file:
          • input: train_data(.bencs), max_seq_length, max_predictions_per_seq, masked_lm_prob, vocab, output_files, rng
          • output:features(input_ids, input_mask, segment_ids, masked_lm_positions, masked_lm_ids, maked_lm_weights, next_sentence_labels)
        • create_masked_EHR_predictions
          • input: input_seq(diag_lm), masked_lm_prob, max_predictions_pre_seq, vocab, rng
          • output: input_ids(masked_token), masked_lm_positions, masked_lm_ids
    • run_EHRpretraining.py: 对应于run_pretraining.py,采用BERT预训练。
      • input: bert_config_file, input_file, output_dir, etc.
      • functions:
        • model_fn_builder:
          • input: bert_config, init_checkpoint, learning_rate, num_train_steps, etc)
          • model_fn:
            • model = modeling.BertModel()
            • get_masked_lm_output
            • get_next_sentence_output
            • optimization.create_optimizer
            • metric_fn
        • input_fn_builder:
          • do_train: is_training=True
          • do_eval: is_training=False
  • Fine-Tunning Tutorials: 主要由pytorch实现。
    • Predicting_DHF_MED_BERT_LR.ipynb
    • Predicting_PC_RNN_BERT_pytorch_using_FT_Med-BERT.ipynb
    • Create_pretrainingEHR_dataFTv1.py

但是,pretrain的代码会报错,fine-tunning的没有给预训练模型。

所以还是尝试一下自己用bert模型做embedding。
参考资料:

  1. 在自己的数据集上重新训练BERT
  2. 在BERT模型中添加自己的词汇
  3. 在自己的数据集上重新训练BERT
  4. Huggingface

详细内容记录在下一篇BERT中。