**Transcript of Cyberseminar**

**Consortium for Healthcare Informatics Research**

**V3NLP Computer Application**

**Presenters:  Qing Zeng, Guy Divita, Brian Ivie, Doug Redd, Jonathan Nebeker**

**November 19, 2012**

**V3NLP Computer Application**

**November 19, 2012**

Moderator:It is the top of the hour. At this time, I would like to introduce our presenters. We have Dr. Zeng is the principal investigator of the information extraction of CHIR, and natural language processing product owner VINCI. Joining her today are several of her software engineers and computer specialists including Doug Reed, Brian Ivy, and Guy Davita. At this time, I would like to turn it over to you. You will see a pop up on your screen that says “show my screen.” Go ahead and click that. Great and we are all set. Thank you. 

Dr. Zeng:Hi. I am Qing, today I will go through a few brief slides about V3NLP and then we will give you a demo of how this tool works. Many of you have heard of the terms text processing, natural language processing, information extraction, text mining. They actually mean slightly different things but for the purpose of most researchers and analysts, they actually serve the same type of function, which is to get coded information, coded data, that you can use to compute and calculate from free text. For example, you see here we have a couple of sentences. It says “The patient is a 67 year old white male with family history of congestive heart failure. He complained of lower back pain and SOB, which is shortness of breath”. When you have this piece of code and on CHIR and VINCI, especially VINCI’s database, you will find there are a lot of these notes. In fact, a couple of billion of these notes and it is extremely difficult to get the information you need to do research or analysis. The role of NLP here and the tool we present today along with other natural language processing or information extraction where some people talk about text mining too is to get from this tool to some tangible finding that you can use. The example we are showing the table on the right is a very simplified example of the information we extract. Usually you would want to get when this finding was made, who is this referring to, and particularly what problem this person has. Typically, here I use CHF, congestive heart failure, but usually we would assign it a particular code whether it is a Snomed code, ICD code, or unique concept ID. Our tool will try to tell you something about the context where this is found, such as family history or is it negated or current or patient history and so on. 

The general approach, how do we start when you have all this text going toward finally getting the coded data that most people desire. There are mainly three steps. First step is to analyze the task, what is your target? What exactly do you want to retrieve or extract? The second is to select the tools and methods that may involve to customize these tools or train tools or in some cases developing tools and finally evaluating the results. 

In terms of methods we go about in extracting information from a text really there are three main approaches. One is people use regular expression based approach and this is actually very effective and relatively simple. It can be quite powerful if we know exactly the text patterns to search for. I will show you some examples of this in our demo. The second type of approach is the use of ontology and dictionary to help extract information from text. This approach again is also very good if there is existing knowledge. Let us say what you want to find is the procedure, medications, diagnosis, or symptoms a patient has or from a population of patients we can use a dictionary. Instead of having a user specify regular expressions to represent all these existing knowledge but the records there has to be pre-existing knowledge on this. The third approach is machine learning. If we have sufficient annotated data, this data can be used to train very powerful models to extract information. In some cases this is very, very helpful but it does require human annotation in most cases. Having said that nowadays depending on the task sometimes we would mix and match these approaches. Sometimes we use regular expression to extract the patterns we need and then use machine learning to further classify machine-learned model to further classify the extracted patterns to arrive at our target. One example of that is in a prior study we have worked on determining a person’s smoking status by first using simple regular expression to extract smoking related sentences. Then in the next step we train the machine learning model that classifies these sentences into smoker, non-smoker and then further classify smoking into past and present smoker. 

On this chart you can see a more detailed view of the process of getting information I am talking about. The first step is to define extraction goals. For any given study or research goal there is always a need to first define what we are looking for. The second step is to translate this to an NLP task. Sometimes people come and say we want to extract old symptoms of asthma, which is a good goal. Then we need to define what do you mean, what specific symptoms do you want to extract? Or people talk about in some cases people want to know the treatment for PTSD. Then we need to sit down and talk about what is a definition of treatment and translate that into an NLP task for a program. After that, we need to select an NLP method. As I said there are three main branches of these methods. One is the concept based or dictionary based, sometimes we also call it ontology-based approach. Usually this involves a series of processing modules that we create, assemble into a pipeline. These pipelines often need to be modified for the specific NLP task. The second step in there would be testing the pipeline. That usually involves further revision such as changing configurations, add/delete modules, create new modules, and modify dictionary. Another approach is regular expression based. This one usually involves creating the expressions by looking at some posts and testing those and then revised expressions. The third branch I am not highlighting here is the machine learning approach. We also actually work a lot in this way, annotate training samples, training and testing the machine-learning model. Based on the testing results either annotate more sample changing features, select different learning methods or reconfigure existing methods. This actually is not currently available, these steps are not available through the V3NLP yet, it still has to be manually done. Some of those are facilitated by other tools such as annotation tools. The tool we are showing you today will mostly help you with dictionary based and regular expression based retrieval. 

The final step is to create external reference standards and evaluate the performance of your pipeline or regular expressions. This also provides some support although a lot of the final evaluation is often done after you are satisfied with the tool’s performance. 

The V3NLP tool has several main components. One is the interface you will see. Another is the library of NLP modules. The third is the back end framework, which is hidden from the end user. The fourth would be common data model and shared annotation labels. These are like glues that are used to tie in the different modules. The first tool, the interface NLP modules are mostly intended for the end-users and our design, back end framework with scalability and interoperability features and data model and annotation labels are really intended to facilitate developers in their revision in adding modules. That is more of a debounced user of the tool will be interested in these components. 

We are planning to push out a new release in the next couple of months. In the new release there will be new annotation modules and database saving options and the fast indexing modules that have not been contained in the previous V3NLP release. We do want to stress that the demo we are showing you is actually showing you the tool that has already been released on the VINCI platform and is available to any VINCI users. You can actually use what we demo to you today. 

Some of the next steps for our project are we are going to update the V3NLP on VINCI with the new version. We also are planning to release the V3NLP as open source software. We are also incorporating a lot of new modules and features. For example the new negation module we are talking about came from our collaborator in the miter group and there are other features and modules incorporated from other open source software. What we are showing you today actually V3NLP is a system, a platform but not all the modules on there are created by us. We try to make it a platform where we can provide the best of the breed modules or software NLP processing capabilities from the broad NLP, clinical NLP community, bring that to the VINCI user for the VA notes. 

With that we are going to switch to our demo. First we are going to show you where we have the library which would be a good place to start if you are unfamiliar with how to get a project going, how to do a first NLP task. The first scenario we are showing you is finding ejection fraction in medical documents. This is actually quite simple, you can do a fetch. Here we are showing you, you can start from directory and select subdirectory of documents. That will become your document set you work with. You could also create a document by doing cut and paste, select specific file or query the database. Those are the other options you have. 

Now with the regular expression here, we have just a simple first regular expression assuming you are looking for regular ejection fraction. Type in the exact expression and we will search it and add this module for review results. Now we will run the pipeline and see what we get. These are all the documents in this directory and if you click on that you will see some documents contain ejection fraction and most of these documents do have ejection fraction in there. This one has three and if we click on it we see the ejection fraction is highlighted. 

We could also take a look at the corpus view, we find there are 19 ejection fraction incidences were found. Assuming all of these are correct, we say ejection fraction is not always written as ejection fraction. People may represent it in different ways as the word EF. We could look for more variants. The second one is ejection fraction. Here you can see we included a few variants and there could be many such variants. These are the same as JAVA regular expressions. You could add to it, and we are adding a simple directory of documents where you could conduct a search and run by ejection fraction. 

Here I am sure we found a few more. Let us show ejection fraction, now we found EF and also found ejection fraction. I think the variants went from 19 to 25 so more incidences of ejection fraction are found. 

What if you wanted ejection fraction value? We can construct more sophisticated ejection fraction regular expressions to accomplish that. In this we just give a few examples where we are looking for ejection fraction that are in the 70% range. It is telling us we need to select the examples. Now only two documents contain ejection fraction in the 70% range. You can see ejection fraction of 70% to 75%, that is correct. We can also capture the value here, which is 70%. In fact we can change this regular expression just a little bit and allow you to capture any ejection fraction that is above 50%. That is equal to and above the 50% range. 

Moderator:Do we still have you on the call?

Dr. Zeng:Yes, we do. We are just showing you, we are changing the regular expression, we can revise it and make it a different value. You can actually change this [background speaking]. It is fairly flexible with what you can do. Of course some of you may be thinking this looks very complicated. I am not an expert on regular expression. How do I do this? We actually have a regular expression library as part of this tool. That has a few thousand regular expressions here. As you can see there are many, many regular expressions to choose from that has already been constructed by others. You could choose to use, select existing regular expressions from the library instead of creating your own new library and new expressions. Let us dry run our regular expression. Now more of the files have these, the 70% is still captured because it belongs to the above 50% and some of the files that were previously not part of it, like here, the 60%, you can see here is captured too. It is actually a quite powerful tool. You can look at ejection fraction where other types of values and findings and so on for example lung functions and such using these regular expressions. 

That is just the regular expression part. We also talked about how to extract concepts. From the concept extraction we could do simple and more complicated tasks. If all you want to get is the most simple concept you could use a tool called MetaMAP. MetaMAP module is not created by us, it is created by the National Library of Medicine. It is a fairly robust tool and is generally pretty good at finding concepts although it does not provide other functions such as tutoring by sections and more sophisticated negation processing and so on. We will just show you right now how to run a simple concept extraction. 

You may think this is pretty slow and part of this has to do is we are running it from the interface. We will show you later once you test a processing pipeline and review the results and you are happy with the results, you can go to batch processing and run larger sets of files. Here you can see just using the simple MetaMAP module you can get quite a few concepts. There is a lot of information about this concept. For example here we know it is not negated because it is affirmed. It says where did we get this concept and the concept ID and what type of semantic group it is in so what type of concept it is. We are not recognizing the section so the section pattern is also treated as a concept. 

We will show you a little bit more sophisticated version of a pipeline. This is a Yuyama pipeline. Yuyama  and gate are all very popular NLP platforms. One thing these NLP offers you is a seamless integration on the front end. Just by looking at the front end you would not be able to tell, this is a Yuyama pipeline. This is a different tool, a set of Yuyama modules with some modules coming from the CTEX, some are locally developed. This also includes a MetaMAP module to perform the same task that we just showed you using MetaMAP out of the box. The processing results will be slightly different. This is taking a minute and as I mentioned earlier if you run this on the batch mode it will be a lot faster. When we run it on the interface mode it is a little slower. You will see we are providing you with a lot of the different information here and lots of detail. For most users probably the information of most interest is what we call coded data entry. You can see here we are extracting a lot of the concepts. Interestingly we are no longer, in the pipeline we actually recognize what is a sloth value, we actually are treating summary as a section header not as a concept of its own, which is correct. 

Another feature we want to show you is we can see this is not perfect. The hyper-dynamic, let us say we want to say this should be a concept, this should be a coded entry. We also see that EF is missing which is ejection fraction. Unfortunately in UMS EF is not a concept. We will add that. Actually ejection fraction is a concept but EF is not a synonym so we will add that. We will say this is also coded entry. Here you see we can do the review. Let us say we think the study shouldn’t be a coded entry, we should say delete. We do not really care about that. We will delete that as coded entry. Now, we said we can look at a summary report, we just showed you after we review this we show there is one false positive and two false-negatives. There are a total of over a thousand different annotations here. This allows some quick review and annotation of the data and just give you a sense of how well the annotation is doing. Also, there is an option of deleting some of the annotations from the results. We could click on these and so we do not keep all the annotations and make the annotation a little simpler. 

As we told you, we have a library of NLP modules and here we are going to show you this is a Gate pipeline. It looks just like the Yuyama pipeline, but has somewhat different modules. You can see here the fact module is exactly the same, the tokenizer module looks exactly the same, but actually one goes to Yuyama and one goes to Gate. It is a little bit different. In this pipeline we inserted a little bit different feature. We have the sectionizer here, which allows you to include and exclude different sections. It also allows you to select different semantic groups that you may or may not want. Then we follow by a negation module.

Now, here let us first run this pipeline and let us see, did we exclude any sections? We said we excluded the emissions section, run the pipeline, got back the results and let us see [inaudible], still similar. Here we still mapped the UMS concept to this. I believe we recognize that as the section hider because here we did not keep the section information in the results. If we had clicked here you would see those would be highlighted as sections. Similar concepts being extracted here. This is negated and it is correctly noted as negated, the pericardial effusion and the intercardiac mass also treated as negated. 

Now we are going to show you a couple of things. One is we can keep the annotation in the results so we know even though we can map the section headers into concepts, we will show you if we want we can annotate those section headers as section headers because we clearly recognize them. Another thing we can show you is you may notice there are a few sections that were actually not processed. Just to be clear, we will close some of these. We will first show you if we run this pipeline, if we keep the section header. Now you can see we have section headers in here now. There are two sections we recognized. One is miscellaneous, one is summary. What happened to the other sections? Well there are some unusual names, chambers, comments and exam description we did not really include. We will show how we can include those section headers. Let us say you have a new section and you want to include that. Even though we have over a thousand section headers already in our configuration files, there are still many section headers we have not recognized. 

We will show you how to add those section headers into the section header file, configuration file. Now we are adding the valves. Here we do require exact spelling of the notes. Those of you who work with VA files will probably know that VA files have quite a diverse formatting because any provider can add anything as their section header. If you want to pick out a particular header now we actually added a valves in here as you can see this section is now included. 

Also you can see the different types of semantic groups like this semantic type is biological process and this semantic group is anatomy. For any given project you may not be interested in every semantic group, which is a lot and maybe only interested in a few things. Let’s assume we want to get device and anatomy. We run the pipeline again. This time we will see different concepts. As you can see we get far less concepts, only the highlighted yellow concepts are in the sections we want and the types of concepts we want. The summary section did not contain any concepts that we want which is in the group anatomy or in the group of devices. As you can see here, we narrowed it down to the concepts that you want. We also can mix and match the different modules. For example you can use regular expression to extract certain types of concepts and then map it to UMS so follow regular expression with MetaMAP module for example is a possibility. Other things may include if you just want MetaMAP with section header, section filtering without doing the part of speech, tokenizing, and all that is possible too. Those may be a little bit more advanced features that is of interest. 

Let me show you now batch processing assuming that we created a pipeline that is to our satisfaction. Here we finished with tweaking the different modules, you can go through the batch processing by selecting a set of documents and you can go back up, select a larger sample of documents or use one of these methods, for example database devices by pointing to a particular table that you have access to. You can then save this pipeline here to a particular name and then in the batch processing retrieve this pipeline, the particular saved pipeline. In this case we can use this pipeline and give it a particular name for the job because you can use the same pipeline for different jobs and provide a description so we can recognize what it is; hit submit which I am not going to do now. Then have it run on the background and once the results are available you can do the same thing, review the results or go to where the files are and analyze the results. 

One of the new modules we are adding will actually allow you to save it to a database so you can correlate that with a particular structure dataset and outcomes that are of interest to you. With that, I am going to open up for questions. 

Moderator:Thank you very much for that demonstration. We do have just a couple of questions that have come in. For any of our attendees that joined us after the top of the hour you can submit a question by going to the Go To Webinar dashboard on the right hand side of your screen. Just submit your question under the question section and press Send. 

The first question we have - are V3NLP services like tokenization, splitting POF pattern, etcetera, available through freestanding API’s or only through this interface? We would like to be able to call the services through external applications/web services. 

Dr. Zeng:They are actually, no they are available in two ways. One is it can be used through this application and also we will be happy to provide the source codes. We do not run them individually as web services. Guy, do you want to comment on that?

Guy Divita:Sure. Underlying in the framework the part of speech and the phraser, the phrase chunker are coming directly from the open NLP tools that are freestanding APIs that are already freely available. Much of the functionality is available as freestanding APIs but it depends on what functionality you want. You can get that functionality either through where we are picking it up like in the case of the open NLP, we are picking it up from Stanford distribution. When we open source in a couple of weeks you can get it from our code. 

Moderator:Great, thank you for that reply. The next question we have – can we use this to process note with identifiable data, for example as part of a clinical tool used in operations.

Dr. Zeng:Yes. Right now we have this working in VINCI so if you want to use it in the operational environment it has to be installed in that environment. VINCI data does not leave VINCI. As far as the note goes I think any note will be, identifying notes or de-identified notes will function the same way. Right now it is actually on VINCI old notes are considered identifiable.

Moderator:Thank you for that reply. The next question we have – can the “batch processing option” pull and process individual records from an Access database?

Dr. Zeng:Batch processing cannot pull notes from the Access database, not by the fetch function. If we add another option to the factor it is feasible but right now it cannot automatically connect to the database. 

Moderator:Thank you for that reply. The next question I have – is there any way to share the concept libraries?

Dr. Zeng:Concept library, I would imagine the person is referring to the regular expression library. We will be happy to share those. As far as the concept if it is referring to the dictionary that is the back end is the UMRS, which contains Snomed  and many other vocabularies though we do not own those things. It is owned by the National Library of Medicine. 

Moderator:Thank you for that reply. The next question we have – can you provide the V3NLP open source link to attendees by email once it is posted?

Dr. Zeng:We will. We have not had it up yet but our plan is to first release through Get Hub and then we want to go through both externally and internally through several means. We will be happy to, assuming we can get the attendee list.

Moderator:Absolutely I would be happy to provide that. Next question – can V3NLP be used on a SAS dataset?

Dr. Zeng:Interesting, we do not treat any text data any differently. Again we do not have a particular function view for SAS dataset per se because we are really working with text. Assuming I am pretty sure SAS can export whatever text is in the data set into as files or database tables, then we can easily access those and process them. 

Unidentified Male:That is how we have done it. We have had the database administrators export the SAS text notes into files and then pick them up via files from the interface. 

Moderator:Great, thank you both for those replies. The next question we have – the MetaMAP library seems very useful for medical conditions that involve specialized vocabulary. Does MetaMAP also have content that helps analyze documents about mental health conditions?

Dr. Zeng:I would say yes. In fact Guy who is on the call I will let him answer this question. He is involved with the project called Prowatch analyzing a lot of mental health related concepts. Also for us on the CHIR project there is a PTSD project, which is as you can imagine, focused on mental health. 

Guy Divita:The MetaMAP uses as its dictionaries one of them being the DSM, which includes many mental disorders. We have found that in certain areas it will not cover everything. For instance on one of the Prowatch homelessness tasks, homelessness risk factors were not particularly covered in the UMLS so we had to extend that, we had some local vocabulary. In general because of the DSM embedded within UMLS, MetaMAP is pretty good. 

Moderator:Thank you for that reply. Next question – how is V3NLP different than C-TEX, Medley or HITEX?

Dr. Zeng:It is slightly apples and oranges. We built V3NLP so that you can actually run C-TEX on this. The Gate modules actually from HITEX, some of the Yuyama modules actually came from CTEX. Theoretically any kind of CTEX and HITEX modules or any Yuyama Gate modules can run on this platform. V3NLP is more a platform you can use to run the software. Medley is a little bit different. Medley for example for us to run Medley through V3NLP you would have to wrap of Medley which does have a license and needs to be purchased so it is not open source so we cannot just download Medley and put it on here. The general idea of V3NLP is though we are developing some modules ourselves the goal is not to create yet another system. We have been involved in creating quite a few systems. For example Guy Divita did an MMTX system, I developed a HITEX system is to actually allow people to access, use, and eventually mix and match the best of the breed modules. Guy you want to comment?

Guy Divita:In addition, MetaMAP out of the box was really developed to parse through Medline abstracts. It does not have a very good idea what clinical records are so what it does best is at the freight level do the mapping. Inversely, CTEX does a really good job at breaking down medical text into its components down to the fray section. We are using the best of those two pieces. We are using CTEX modules to understand the structure of the text and using MetaMAP as the mechanism for doing the mapping. Again we are using the best of breed for the problems at hand. 

Moderator:Thank you both for that reply. The final question we have – can this be used against email?

Guy Divita:Possibly. Sections will not look the same but if the email has medical terminology in it, the same phrasal and sentence mapping techniques should work. 

Moderator:Thank you. We do have another question that has come in: what is the relationship between V3NLP and Arc 2.0?

Guy Divita:Arc 2.0 is essentially CTEX plus mallet. We use CTEX components and in this version do not have mallet included. There are underlying mallet pieces in the framework but I do not think we have an intention of hooking mallet like they have done in Arc. No sense of duplicating that. 

Dr. Zeng:If I may refer back to the slides and we were talking about three different approaches. Arc really focuses on the third approach, which is machine learning. Assuming features have been extracted by the NLP processors and the Arc facilitates the creation and the testing of the model using annotated data and generates the classifiers. 

Moderator:Great, thank you very much for that response. That is the remaining question, would either of you like to give any concluding comments?

Dr. Zeng:I would like to say we are continuing this development so this has been funded by CHIR and VINCI and this work will continue. Also in the next step as part of a CREATE project and the goal of that project is to view the NLP eco-system to serve NLP developers, researchers and so on. As part of that work we will be planning to conduct workshops. We would welcome people to email us if you are interested as our stakeholder we are starting to organize a stakeholder group for the continuing NLP effort in CHIR and VINCI in this new CREATE project. We would like to hear about your NLP needs and if you are willing to participate as a stakeholder feel free to email me. 

Moderator:Excellent, thank you very much. I would like to thank you and your co-presenters for the presentation and the demonstration and I would like to let our attendees know that they can also join us next week. You will be presenting again on I am sorry is it Voogle?

Dr. Zeng:Yes.

Moderator:Would you like to say a few words about that?

Dr. Zeng:Voogle is a gateway between text data and the heavy duty NLP. Voogle sounds like Google and we intend it to be, hopefully like Google like a search tool to help you search your text data long with your structure data. Only experience searches is essential before you do in depth NLP processing but also in the future for reviewing your NLP processing results. 

Moderator:Great, thank you. Our attendees can feel free to join us for that session which will take place on next Tuesday the twenty-seventh at the same time, 3:00 PM eastern. I would like to thank all of our presenters and our attendees for joining us today. As you exit the session a feedback survey will populate on your screen. Please take just a moment to fill that out, it provides us valuable feedback and lets us know what topics are of interest to you. Thank you once again to everyone and have a wonderful day. 

Page 9 of 9