临床病历文本挖掘中的否定
你好,
我正在处理大量的临床记录,似乎临床医生接受的训练是花一半的时间记录病人身上没有发生的事情。所以,为了应用许多文本挖掘技术,我必须学习如何在上下文中处理否定。
我看过一个关于这个话题的简短对话@mschmitz和@SvenVanPoucke讨论问题https://community.www.turtlecreekpls.com/t5/RapidMiner-Studio-Forum/Include-Negations-in-Dictionary-based-Sentiment-Approach/m-p/44266/highlight/true#M29247
而且,我看到马丁在操作符工具包基于字典的情绪中添加了一个单词窗口的否定。我认为它的实施方式非常灵活,我期待在我关注情绪时使用它。
现在,我正试着给我的关于"提及自杀"和"。"否认提及自杀"来让我们的文件搜索更好一点。很难编写正则表达式或Lucene查询来可靠地找到与自杀相关的笔记,所以我想用Python或RapidMiner更复杂的工具集为临床医生预处理和标记笔记。
语料库中有2M个文档,每个文档短到1-2句话,长到几页纸。他们是典型的非结构化文本笔记,尽管在不同的临床医生如何讨论自杀有模式(否认或支持)。
我的第一个任务是在SQL Server中使用正则表达式,并运行了三天来完成2M文档。质量正在审查中,但我认为临床主任不会接受。对于这种方法的现场使用,召回率可能不够高。
有一些医疗记录否定工具可用Negex和PyContext,还有几篇论文解决了这个问题。我是RapidMiner的新手,想把RM应用到这个问题上,并想征求一下人们如何解决这样的问题的建议。
提前感谢你的帮助/建议……史蒂夫
标记:
0
答案
的确,“很可能不是肿瘤”是在现实世界中出现的句子。我对你的项目很感兴趣。你能给我发几个例子吗?不管怎样,我很乐意帮你。
干杯
斯文
你好斯文,
我手头上的另一个重要项目是去除我们的医疗记录的身份,使其更容易共享,而不需要商业伙伴协议(BAA)。我将检查我们是否可以创建一个自杀相关句子(去识别)的样本数据集作为社区数据集。你认为在社区数据集中进行一些有意义的分析所需的每种类型的示例句的最少数量是多少?
从regex SQL工作项目:
['自杀-否认-提及']=> 195449文件标记
['自杀-提及']=> 28395个文件被标记
['自杀-不明确-提及']=> 4231文件标记
我附加的SQL,我用来做模式匹配在SQL服务器。在这里你可以看到我使用的否定模式的类型:
这里的值是" never "或" %n " t "或" no "或" not "或" den[yi]% "
源数据中的关键术语:
where (AssessmentRaw like '% suicide %'或AssessmentRaw like '%[/:-,;]si[/:-,;]%'或AssessmentRaw like '%kill myself%'或AssessmentRaw like '%kill myself%'或AssessmentRaw like '%kill myself%')
…史蒂夫
De-identification。
干杯
斯文
你好,
我绝对不是像你或斯文那样的医学专家,但这是我对它的DS观点。
我认为你可以用三种不同的方式来对待它:
1.手动“基于关键字的过滤”。这本质上运行到Lucene查询或类似Dict基于情感的东西。它需要一个关键字的列表。在此基础上,你计算这些的总和作为一个分数。这可以用作“预过滤器”。之后,专家们可以通读这份清单,并标记出假阳性。然后,这可以用作机器学习算法的输入。
2.可以尝试无监督的方法。例如LDA主题识别。我们的想法是寻找“自杀话题”。
3.我有个客户把外部数据用在医学术语上。这个想法将不仅仅是使用文本,而且还使用例如维基百科的疾病结果。这可以“增强”文本本身。你可以这样做。如果(维基百科查询包括“自杀”),则得分+0.5。但我认为这是三种方法中最难的。
最好的
马丁
德国多特蒙德
嗨史蒂夫,
你最终可以检索文件或数据库转储到您的计算机吗?我认为,当从数据库中检索记录并使用RapidMiner进行动态处理时,您将遇到性能问题。最好的情况是您可以将所有数据加载到内存中。
这是一个重要的问题,因为如果不能移动数据,就必须对数据进行分析(就像DB上的过程一样)。
最好的
塞巴斯蒂安。
你好斯文,
我看到了,这个周末在图书馆玩了一会儿。把它转换成英语需要一些工作,但非常可行。文献中还提到了其他一些方法(MIST和其他方法)——每种方法的优缺点。我还没有确定一个方法,但是演绎方法看起来是可行的。
无论我使用什么技术,都将包括校对作为最后一遍,因此数据集将很小,可能有600个注释。即便如此,风险/回报比可能会阻止我们发布。
…史蒂夫
嗨,马丁,
谢谢你的建议,发人深省。
1)基于关键字的过滤-所以,你认为我应该尝试您在工具包上提供的情感操作符来评分赞成还是拒绝?我觉得我们可以用正则表达式过滤器来收集那些提到自杀倾向的文件。你认为这是一个比使用正则表达式来决定赞成还是拒绝更好的技术吗?
我计划雇佣一个临时工/实习生来遵循协议并标记几千个笔记,这样我们就可以在语料库的其余部分应用各种监督学习技术。我只是希望给人类一套像样的预先标记的笔记。
2)在过去的一个月里,我一直在断断续续地使用LDA,以确定我们笔记中的关键主题。我所追求的想法是收集每个记录中的关键术语,然后使用D3为客户显示一个网络图,允许她的临床医生在她的医疗记录中可视化关键主题如何相互关联(或不关联)。文字云看起来简单有趣,但并不能传达太多有用的数据——即使我们玩了一段时间的文字云,它也没有带来足够的临床价值。我的假设是,图形(节点/边)可能是一个更丰富的可视化工具。我还没有解决的挑战是如何发现节点(关键字)之间的边缘,这可能对临床医生有实际价值/意义。我对边缘有一些想法(word2vec相似度分数之一),但还没有决定如何进行。
我还不相信我的LDA技巧能可靠地找到“自杀话题”。你认为这是可行的方法吗?
3)嗯,听起来很有趣,我从来没有考虑过这样的方法。听起来好像超出了我目前的技能范围;
谢谢你的建议,马丁……史蒂夫
嗨,塞巴斯蒂安,
说得好,我不确定。
2M的医疗记录中,11gb作为Azure搜索索引,24Gb作为SQL表。我可以创建一个有192GB内存的虚拟机,所以我猜这在很大程度上取决于我们使用的算法。
我正在考虑基于诊断或护理水平分割数据的方法,使我们的模型基于更小的数据,但仍然足够大,可以有> 10万记录进行训练。当然,自杀贯穿于所有的诊断和护理水平。我们面临的一个数据问题是数据相对稀少,我们的笔记中只有不到2%提到了支持自杀意念的人。在一个典型的年份里,在我们服务的1万名员工中,我们可能会流失35人(我们专注于将这个数字降至0)。
…史蒂夫
你好,
老实说,如果你有一个实习生在做贴标签——这是最简单的方法
BR,
马丁
德国多特蒙德
你好,
我猜假阳性在这里不是什么大问题。如果你可以生成一组有代表性的特征,你可以用一个相当保守的模型(密度< 5%为异常)把它变成一个异常检测问题。
看到你的SQL文件,我可以理解为什么你想移动到RapidMiner!
如果没有公开问题(或者数据可以匿名),我认为这是Kaggle数据集的一个很好的候选(如果你有一些资金的话,也可以竞争)。
最好的问候,
塞巴斯蒂安。
嗨,塞巴斯蒂安,
我同意关于竞争,我认为适当规模的心理健康临床数据集将使许多机构受益,这些机构负担不起雇用竞争人员的水平,但对竞争对手来说将是有趣/具有挑战性的。我想我们也能找到足够的奖金。
帮助致力于帮助他人的机构是我五年前选择加入这个组织的原因(对我来说是一个伟大的决定)。
我的猜测是,在明年年初之前,我不会有一个经过批准的匿名集,即使到那时,我可能也只能在保密协议下与选定的人分享它——我们将会看到,这不是我们以前做过的事情。有进一步消息我一定会告诉你的。
我认为我可以使用这个论坛的帮助是“设计”一个数据集,使文本挖掘项目的机会最大化。你有兴趣在这个舞台上合作吗?我可以在不公开PHI数据的情况下公开很多数据,以优化我们匿名化的内容。例如,我刚刚开始起草一份协议,让临时工/实习生开始审查并手动标记我们的数据子集。我可以把它贴在论坛上寻求反馈。
想法吗?
…史蒂夫
你好,
看起来是个有趣的项目。
斯文
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2991497/