代码改变世界

intelligent diagnosis的难点

2013-05-18 14:24  Loull  阅读(283)  评论(0编辑  收藏  举报

需求:

一个人描述自己的症状,根据这段话给出他可能得的的疾病。

 

思路:

把语音转化为文字,分词提取出关于症状的描述。

1、字符匹配:

找一个疾病数据库(有症状的描述),用lucene建立索引,把描述的症状和疾病库的症状字段匹配。

2、关联匹配:

找一个药物表,如果药物表的描述中既出现了某个疾病,也出现了某个症状,则把这个疾病和症状关联上。

3、结果排序:

要根据关联度排序,lucene内部使用tf*idf的变形进行排序。

光这样是不够的。疾病的发病率是不同的,所以要根据先验知识来排序。

posterior = prior * likelihood

这儿likelihood用lucene的匹配来模拟,而prior没法获得。

 

难点:

1、结果排序:

prior现在知识没法获取,即得不到发病率。光想从文本中直接得到靠谱的排序是不现实的。

解决方案:

用其他数据去模拟prior,比如有些网站上提供病的关注度、收藏数、是否常见等信息。

2、同义词描述问题

疾病数据库的描述是很正式的,而人的描述是很口语化的,这需要一个关联过程。

解决方案:

建立一个同义词库

1)可以找到一些疾病相关的同义词库

2)统计疾病库中的词频,找出频率高的疾病相关的词,人工添加同义词

3、身体部位问题

比如“手疼”,“眼睛痒”,结果应该是跟“手”、“眼睛”部位十分相关的,而lucene搜索的结果不能保证。

另一个问题,比如“头痛”,疾病不一定是在头部的,可能是身体上的。

解决方案:

构建一个人体的本体库,比如一个(人--头--脸--眼睛)的继承关系,部位越近的疾病越有可能。

细节:

浏览数据库,看看每个部位大概与哪些东西关联,比如

胸部:肺、(气管)、心、(胰腺)、乳

还要添加上语义上相关的,比如

头:脑、中风,精神、失眠

注意:

个人觉得,也不需要太精细,因为如果描述症状的时候已经很具体到某个部位,搜索出来的时候已经比较准确。

4、流行病问题

整个系统主要呈现为静态,很难根据疾病的发生情况而改变。流行病在一段时间内可能发病率很高,之后可能几乎没了。

应用本身难以感知到最近的流行病,特别是用的人少的时候。

解决方案:

很难解决,不予实现,采用另外的方式实现,比如采用推送技术,把盛行的流行病放到应用的首页。

5、季节病,家族病等个体特征疾病,病史,患一次的疾病,并发症疾病,病与病之间的关联

季节病,在排序的时候可以根据季节赋予不同权重,很难获取这些先验信息。

家族病,有很强的相关性,用户很少会在已知家族病的情况下去搜索这个病。

病史,得过的病很可能会再得,很难获取信息,也不容易标识用户。

患一次的病,有些病一生只会犯一次,非常少会再患,这个信息很难提取。

病与病之间的关联,如果有了这些信息,可以用贝叶斯网

6、先验信息提取

很多信息要提取,比如模拟先验发病率的信息,同义词库,本体库,流行病信息,病之间的关联,这些信息很多要从文本中提取或人工做。

解决方案:

NLP,表示很难

 

=================================

ER7