A text-mining system must go way beyond indexing and search to appear truly intelligent. First, it should understand language beyond keyword matching. (For example, distinguishing between “Jane has the flu,” “Jane may have the flu,” “Jane is concerned about the flu,” “Jane’s sister has the flu, but she doesn’t,” or “Jane had the flu when she was 9” is of critical importance.) This is a natural language processing problem.
Second, it should “read between the lines” and make likely inferences even if they’re not explicitly written. (For example, if Jane has had a fever, a headache, fatigue, and a runny nose for three days, not as part of an ongoing condition, then she likely has the flu.) This is a semi-supervised machine learning problem.
Third, it should automatically learn the right contextual inferences to make. (For example, learning on its own that fatigue is sometimes a flu symptom—only because it appears in many diagnosed patients—without a human ever explicitly stating that rule.) This is an association-mining problem, which can be tackled via deep learning or via more guided machine learning techniques.
This is a demo of an end-to-end system that makes nontrivial clinical inferences from free-text patient records and provides real-time inferencing at scale. The architecture is built on Kafka and Spark Streaming for real-time data ingestion and processing, Spark & MLLib for modeling, and Elasticsearch for enabling low-latency access to results. The data science components include a natural language processing pipeline with custom annotators, machine learning models for implicit inferences, and dynamic ontologies built using Word2Vec for representing and learning new relationships between concepts. Source code will be made available after the talk to enable you to hack away on your own.