少年帮|利用深度学习生成医疗报告( 二 )

4.获取结构化数据从XML文件中提取所需的数据后 , 数据将转换为结构化格式 , 以便于理解和访问 。
如前所述 , 有多个图像与单个报表关联 。 因此 , 我们的模型在生成报告时也需要看到这些图像 。 但有些报告只有1张图片与之相关 , 而有些报告有2张 , 最多的只有4张 。
少年帮|利用深度学习生成医疗报告所以问题就出现了 , 我们一次应该向模型输入多少图像来生成报告?为了使模型输入一致 , 一次选择一对图像(即两个图像)作为输入 。 如果一个报表只有一个图像 , 那么同一个图像将被复制为第二个输入 。
少年帮|利用深度学习生成医疗报告现在我们有了一个合适且可理解的结构化数据 。 图像按其绝对地址的名称保存 。 这将有助于加载数据 。
5.准备文本数据从XML文件中获得结果后 , 在我们将其输入模型之前 , 应该对它们进行适当的清理和准备 。 下面的图片展示了几个例子 , 展示了清洗前的发现是什么样子 。
少年帮|利用深度学习生成医疗报告我们将按以下方式清理文本:

  1. 将所有字符转换为小写 。
  2. 执行基本的解压 , 即将won’t、can’t等词分别转换为will not、can not等 。
  3. 删除文本中的标点符号 。 注意 , 句号不会被删除 , 因为结果包含多个句子 , 所以我们需要模型通过识别句子以类似的方式生成报告 。
  4. 从文本中删除所有数字 。
  5. 删除长度小于或等于2的所有单词 。 例如 , “is”、“to”等被删除 。 这些词不能提供太多信息 。 但是“no”这个词不会被删除 , 因为它增加了语义信息 。 在句子中加上“no”会完全改变它的意思 。 所以我们在执行这些清理步骤时必须小心 。 你需要确定哪些词应该保留 , 哪些词应该避免 。
  6. 还发现一些文本包含多个句号或空格 , 或“X”重复多次 。 这样的字符也会被删除 。
我们将开发的模型将生成一个由两个图像组合而成的报告 , 该报告将一次生成一个单词 。 先前生成的单词序列将作为输入提供 。
因此 , 我们需要一个“第一个词”来启动生成过程 , 并用“最后一个词”来表示报告的结束 。 为此 , 我们将使用字符串“startseq”和“endseq” 。 这些字符串被添加到我们的数据中 。 现在这样做很重要 , 因为当我们对文本进行编码时 , 需要正确地对这些字符串进行编码 。
编码文本的主要步骤是创建从单词到唯一整数值的一致映射 , 称为标识化 。 为了让我们的计算机能够理解任何文本 , 我们需要以机器能够理解的方式将单词或句子分解 。 如果不执行标识化 , 就无法处理文本数据 。
标识化是将一段文本分割成更小的单元(称为标识)的一种方法 。 标识可以是单词或字符 , 但在我们的例子中 , 它将是单词 。 Keras为此提供了一个内置库 。
from tensorflow.keras.preprocessing.text import Tokenizertokenizer = Tokenizer(filters='!"#$%<=>?@[\\]^_`{|}~\t\n')tokenizer.fit_on_texts(reports)现在 , 我们已经对文本进行了适当的清理和标识 , 以备将来使用 。 所有这些的完整代码都可以在我的GitHub帐户中找到 , 这个帐户的链接在本文末尾提供 。
6.获取图像特征图像和部分报告是我们模型的输入 。 我们需要将每个图像转换成一个固定大小的向量 , 然后将其作为输入传递到模型中 。 为此 , 我们将使用迁移学习 。


推荐阅读