如何使用未标记的数据集进行序列标记

时间:2017-05-30 05:23:12

标签: python machine-learning nlp nltk

我有1000个文本文件,其中包含患者的出院摘要

SAMPLE_1

  

患者于1999年2月21日入院。他当时似乎患有肺炎   因为我们凭经验证实了他患有社区获得性肺炎   头孢曲松和阿奇霉素直到第2天血液培养物生长   鉴于泛敏感的链球菌肺炎,所以我们停止了   头孢曲松和完成5天的阿奇霉素疗程。但是在第4天   他发生了腹泻,所以我们添加了flagyl来覆盖c.diff,其中   确实在第6天回来了,所以他还需要3天......“这个   可以简明扼要地总结如下:“完成5天课程   阿奇霉素治疗泛敏感性链球菌肺炎   并发c.diff结肠炎。目前在7月10日的flagyl和   c.diff于9月21日否定。

SAMPLE_2

  

患者是一名56岁的女性,有中风病史;高血压;   COPD,稳定;肾癌;提出后   跌倒和可能的晕厥。走路时,她不小心摔倒了   她的膝盖在左眼附近撞到了她的头。她的   没有观察到摔倒,但患者并未表示有任何损失   意识,回忆整个事件。病人确实有   先前跌倒的病史,其中一例导致髋部骨折。   她已接受过物理治疗并完全康复。   初步检查显示左眼周围有瘀伤,肺部正常   检查,正常心脏检查,正常神经功能   基线降低了左臂的活动能力。病人是   承认评估她的跌倒并排除晕厥和   她的积极历史可能会中风。

我还有一个csv文件,它是1000rows X 5columns。每行都有为每个文本文件手动输入的信息。 因此,例如对于上述两个文件,有人在csv文件中手动输入了这些记录:

Sex, Primary Disease,Age, Date of admission,Other complications
M,Pneumonia, NA, 21/02/99, Diarhhea
F,(Hypertension,stroke), 56, NA, NA

我的问题是:

  1. 我如何表示使用文本信息:机器学习算法的标签

  2. 我是否需要围绕所有1000个文本文件中感兴趣的区域进行一些手动标记?

  3. 如果是,那么如何以及使用哪种方法。 (比如<ADMISSION> was admitted on 21/02/99</ADMISSION>,     <AGE>56-year-old</AGE>

    所以基本上我如何使用这个文本:标记数据以自动填充标签。

2 个答案:

答案 0 :(得分:2)

据我所知,不是标记文本,而是提取注释所代表的信息。这是一个信息提取问题,您应该阅读相关技术。 CSV文件包含您要提取的信息(您的&#34;黄金标准&#34;,因此您应该首先将其分为培训(90%)和测试(10%)子集。

在那里有一个命名的实体识别任务:识别疾病,数字,日期和性别。您可以使用现成的chunker,或找到带注释的医疗语料库并使用它来训练一个。您也可以使用各种方法;例如,发现揭示性别的词是你可以很容易地手工编码的东西。一旦掌握了所有这些词,就需要做更多的工作,例如,将原发疾病与症状区分开来;其他数字的年龄,以及任何其他日期的入学日期。这可能最好作为单独的分类任务完成。

我建议您现在逐章阅读nltk book,以便了解可用的技术和工具。重要的是这种方法,所以不要在特定机器学习引擎的比较中陷入困境。

答案 1 :(得分:1)

我担心填补空白的算法尚未发明。如果差距强烈相关或存在某种因果关系,您可以使用某种贝叶斯模型对其进行建模。仍然有你拥有的数据量,这几乎是不可能的。

现在处于更实际的一面。您可以采取两种方法:

  1. 将问题视为文档级任务,在这种情况下,您可以使用标签对所有行进行训练并对其进行训练并推断其余部分的标签/值。您应该查看NaïveBayes,Multi-class SVM,MaxEnt等分类列和线性回归来预测数值。
  2. 将问题视为信息提取任务,在这种情况下,您必须添加文本中提到的注释并训练序列模型。您应该查看CRF,结构化SVM,HMM等。实际上,您可以查看一些使多类分类器适应序列标记任务的系统,例如:用于POS标记的SVMTool(可适用于大多数序列标记任务)。
  3. 现在关于这些问题,你将面对。在1.中,您不太可能使用任何算法预测记录的日期。有可能大致预测患者年龄,因为这通常与疾病等有关。而且你甚至不可能将疾病专栏设置为实体提取任务。

    如果我必须解决你的问题,我可能会选择方法2.,这是正确的方法,但也可能是相当多的工作。在这种情况下,您需要自己创建标记注释。一个很好的起点是一个名为brat的注释工具。获得注释后,您可以开发CoNLL-2003样式的分类器。

    你想要达到的目标看起来相当多,尤其是1000条记录。我认为(取决于您的数据)您可能最好使用现成的产品而不是自己构建它们。有一些开源和商业产品可以使用 - lexigram.io有一个API,MetaMapApache cTAKES是用于临床实体提取的最先进的开源工具