An Introductory Look at Statistical Text Mining for Health Services Researchers 

Consortium for Healthcare Informatics Research

Luther, Stephen Luther, James McCart

text of captioning

1/12/2012

----------

>>Dr. James McCart, his research interests are in the youth of text mining, data mining and natural language processing techniques on Veterans medical records to predict the present of posttraumatic stress disorder and mild traumatic brain interest. The practical application of this research is to develop surveillance models that would identify Veterans that would benefit from additional PTSD and mTBI screening. Joining him is Dr. Stephen Luther. He is the associate director for measurement of the HSR&D RR&D Research Center of Excellence. He is a psychometrician and outcomes researcher within research interest in validation of risk assessment and patient safety measurement tools as well as medical informatics, particularly in the application of machine learning techniques to the extraction of information from the electronic medical record. 

>> We are very lucky to have these two gentlemen presenting for us today, and at this time, I would like to turn it over to Dr. McCart. Are you available? 

[MULTIPLE SPEAKERS ORGANIZING]

>> [Dr. Luther] What we are doing first is, we just have a couple of questions that we would like people to respond to to give us a little bit of an idea of the background of the people in the audience. Is there anything specific I need to do? Or, --? 

>> [OPERATOR] No, we are all set of open up the first question now. So, ladies and gentlemen you can see it on your screen, the question is what is your area of expertise. So, please go ahead and check the circle next to your response. [PAUSE] We have had about 80% of the people submit answers, we will give just a few more seconds. All right and answers have stopped coming in so I am going to go ahead and close it and share the results with everyone. As you can see, we have about 16% clinicians, 60% informatics researchers, 30% HSR&D researchers,  11% administrators, and 25% other. So thank you to those responding.

>> [DR. LUTHER] Why don't we go ahead and do the second question. 

>> [OPERATOR] All right. Here is the second poll question, which of the following methods have you used and you can select all that apply. [PAUSE] We will give it a few more seconds. I am going to go ahead and close the poll now and share the results. It looks like 11 percent have used a natural language processing, 34% have used data mining, 12% statistical mining and 57% none of the above. Thank you for those responses. 

>> Yes, thank you much. It gives us an idea. We really did want to make this one of the basic introduction to the topic of text mining and give a demonstration of a project that we -- product that we have used here and we have done some modification for, so we hope that we have identified the material at a level that makes sense to people across a range of experience levels with it. We have three goals for the presentation, first we will describe how studies of statistical text mining relate to traditional HSR&D  which I will sort of talk about them. Then we'll provide an overview of statistical text mining process and do a discussion briefly of some software that is available and a demo of the software with which we have been working for the last couple of years.

>> Before we get started, I would like to do an acknowledgment of funding from CHIR, the HSR&D studies we have had in our Center of Excellence here that have allowed us to do the work in this area and the development of the software. In addition, the presentation here is sort of an adaptation of a longer presentation that we did at an HSR&D  research program last year and we would like to thank our colleagues Jay Jarman and Dezon Finch who are not part of this presentation but were part of the development of the content. 

>>As a way of getting started, I would just like to describe a couple of terms. First of all natural language processing, which is the text method used primarily by the CHIR investigators. We will really not be talking about natural language processing here but I wanted to give just a little orientation to those of you may not be familiar with these terms. Natural language processing is really a product whereby we train the computer to analyze and really understand natural language and extract information about natural language and replicate it in a way that we can use in research. It really is,  sort of an example might be that creating methods that can do automated chart reviews whereby  there are certain variable, there are certain factors in the chart, the electronic medical record, we want to be able to reliably and validly extract, we would use natural language processing. Statistical text mining on the other hand, pays much less attention to sort of the language itself and to trying to make efforts to replicate the natural language. It is looking more for extracting patterns from documents primarily related to the number the counts of terms in documents to then allow to make a prediction about whether a document has a certain attribute or not.

>> Example we will use here for, say we want to identify people who are smokers versus people who are non-smokers, we would maybe developed a statistical text mining program that would go through and look for patterns of terms that would reliably predict that classification. Some of the other work we have done is whether people are followers or not followers or whether they have certain diseases, mild TBI or not, so you can use it for sort of prediction kinds of efforts. It is similar to the term data mining. We hear that a lot and really the techniques in statistical text mining and data mining are very similar. But, the first sections of statistical text mining are really taking the text and turning it into some very coded or structured data that can then be fed into data mining algorithms. So data mining typically relates to things that are already coded or structured, where as we put a lot of effort in statistical text mining  to first sort of extract information from the text that can be fed into a data mining model. 

>> If we think about text as part of a traditional HSR&D research, we think that traditional  HSR&D research's hypothesis driven an explanatory. And, it used structured dated, typically in some kind of statistical model. Chart review is often used to either identify all of that data or to supplement data that is available in structured, administrative data sources. That analysis then is planned based on the hypotheses which are generated and then result are exported. So, it is sort of the linear process and the chart review helps with the extraction of the data. In statistical text mining, it typically is applied to hypothesis generating or predicion models rather than explanatory models. And here, the statistical text mining is used to convert the text to structured type data that can oftentimes has chart reviews associated with it but, the chart review typically is to create a set of documents that is labeled as yes or no. So, smoking or non-smoking, fall or not fall, PTSB or not, and that information at a document level can be used by the statistical text mining procedures to try to develop models that will predict new documents that are shown.

>> So, this information is fed, as you can see, to a model development process which iteratively goes there and tries to improve the statistical model. Now, any model that is built on one set of data always fits the data better than another. And so, another important step in statistical text mining is to have a hold out evaluation set that that you take the model, which is developed and then apply it to that evaluation set to sort of get an estimate or the overestimation. And then, results are fed out. Some ideas of applications of this technique in research or health services research is this technique is used widely in looking at genomic studies. And also, I think, has roles in disease surveillance,, risk assessment, or cohort identification. And actually can be used in knowledge discovery. When you don't necessarily know your classes that you are trying to predict, you can use statistical text mining for more cluster analysis kinds of studies to just really begin to get a sense for data in new, evolving research areas. 

>> So, that is just a little overview of the process and how it relates to HSR&D. I am now going to turn it over to James,  who is going to do the heavy lifting on the presentation.

>> Thank you, Steve. I am going to be talking to the rest of the presentation. First, I will spend the majority of my time talking about the statistical text mining process, how we go about it. And then, at the very end I will talk about some software that is available to us and also give a short demo of an application we have been using for a while here in Tampa. So the statistical text mining process really consists of 4 basic steps, done in sequence, first we gather some documents we'd like to analyze and then we have to structure the text into a form that we can derive patterns from where we train a model,  and finally we want to evaluate the performance of the model that we have come up with. Now, there is a number of different of ways to do this process and ways to refine it, but we will stick with the basic method throughout the presentation. First, gathering the documents, what you want to do is have a collection of documents that you would like to analyze. 

>> Since we are looking at classification tasks, we need to be able to train from this data and then evaluate to see how well our models do on the data. So, having the documents by themselves is not enough to we also need a label assigned to each of the documents, this is something that is known as the reference standard.

>> Typically, when you have your documents, the label is not available to you. So, what you have to do is you have to annotate using subject matter experts which are typically your clinicians and they go through it and they read every single document and may assign a label to each one of the documents. So, it could be smoking, non-smoking, fall not fall, PTSB or not. And this can be a fairly time-consuming and expensive process. When you are doing a statistical text mining project, generally the first step is the one that takes the most amount of time that you have. Once you're done with this stuff, then you can go on to structuring your text. 

>> So, what you have is your collections of documents with labels and you have the unstructured text in there and you need to transform it into a structured data set. So, this step of the process really has 4 substeps to it. The first one is creating that term by document matrix. So, this is really the structure your data will be in for the rest of the process. The second, you need to be able to split your data into two sets, one of which you do the training of your models on and the second set that you actually evaluate on, third, you need to weight the matrix which is a way of conveying importance to the matrix, and finally you need to perform dimension reduction. I will talk about why we have to do that once we get a little farther into the processor. 

>> So, let's assume this is our document collection. A document can be really anything. It can be a progress notes, a discharge summary, it can be an abstract from a journal article or even the article itself. It can even be sections within some type of document. Here, it is just four or five words that represent a document. So document one, smoking two packs per day, health persisted for two weeks, motivated to quit smoking. So this is our unstructured text. What we want to do is convert this into a term-by-document-matrix. That is what is shown on the screen right now. 

>> On the left-hand side of the matrix are all the unique terms that are found within that document collection and they are just alphabetized to make it easier to read. Across the top of the matrix are each one of the individual documents. They each receive a one column. Within the cells at the intersection of a row and column is how many times that particular term occurs within that document. For instance, cough, occurs one time in document 2 and zero time in documents one of three, whereas two, occurs one time in document one and one time in document two and zero times in document three. So all we did I go from the unstructured text to this is we split the words on the white spaces and listed the terms and counted them. 

>> What I am showing right now on the screen is an example of a more realistic term-by-document-matrix. I understand that is fairly hard to read, that is okay. It is just to get the general sense. What I have done is taken out all the zeros in this matrix, so that is all the blank space you see on the screen and all that is left are the numbers, the number of times this particular turn has been associated with the document. One thing that you may notice is that there is not a lot of numbers in it. So termed by document matrices are typically very sparse. They contain a lot of zero cells, and it's not uncommon to have you matrix be 90% to 95% of zeros. Another thing this is only a portion of the term by document matrix. It was created from 200 documents, 200 abstracts and from these 200 abstracts, there is actually 3500 terms that we have found. So there's 3500 rows in this matrix. 

>> When you have a larger document collection, it is not uncommon to have tens of thousands of terms within the term by document matrix it can be very very large. Later on we will talk about how we can make the matrix a little smaller. Some of the options you can use for creating the matrix besides listing the terms is you can remove those common terms using a stop list. Those are words such as and, that, a, that have little predictive power in your model. You can also remove terms of a certain length so getting rid of one and two character terms, will simply be ambiguous acronyms or abbreviations that are probably unlikely to help. You can also combine terms together into one form, or you can use stemming to reduce the words to their base form. For example, administer, administers, administered can all be reduced to administ, which isn't really a word but that is okay. 

24.50

You might also notice that in the term-by-document-matrix that I was showing before only single words were the terms. So if you like phrases, you can use *n*-grams, so if you have in your text Regional Medical Center you'd have regional, medical, and  center - as individual terms. If you have 2grams you’d have Regional Medical as one term and Medical Center as another term and if you had a 3gram, then all three of the words, Regional Medical Center would be one particular term in that matrix. So that is a way to try and gather phrases and put it into you matrix. 

>> There are many other options that you can do besides us but these are some of the most common ones you have. So at this point in the process, you have created your term by document matrix and you’ve done it on your entire document collection that you have. However, because we are going to be doing classification, we want to separate our data out into a training set that we will use to learn or train our model, and then a separate set that we are going to keep out to evaluate our model, to find out how well it actually performs and part of the reason we do this, that Steve already talked about, usually your model is over fit, so that data is seen, so you want to see how well it will performed on unseen data.

>> There are two, common techniques to use in these are not specific to statistical text mining if you're familiar with data mining it’s the same thing in those. One is doing a training test split and the other is doing X-fold cross validation. So in the training and testing split you do is you have all of your data, you select a percentage, usually two thirds or 70%, and use that for training. You do any type of weighting at the matrix and any type of model building on the training set and once you’re done you then apply that to your testing set. There are some potential limitations of using this type of split. Number one again depend on how you split the data, so what documents are actually in your training versus your test. And also, if you don't have a very large dataset, you've got 30% of the data that you will only be using for testing. So, that could be a large portion when you don't have to much. So, what is commonly used to something called X-fold cross validation.  This is usually tenfold. So what you do is you have your entire data set, and you split it into -- if we are doing tenfold, 10 different partitions. Each one being a fold. So we see at the bottom left hand corner of this diagram, we can see the data has been split into 10 approximately equal partitions, and the way this works is that we take nine of those partitions as a training data set, we train on that and then we test on one of them. Which is the blue arrow. 

>> We then repeat this process, we train again on nine, but we test on a different one of those folds. We repeat again, test nine different folds and we ended doing this 10 times, until each one of those folds has been used one time as the test that. So, we can make use of all of our data, which is especially nice we have a smaller sample size and also, we are not... the split of the data does not make as much of a difference although you want to repeat this multiple times if you want to get a true error estimate. So, this is something that is done quite often. However, regardless if you are doing the training or test split or doing cross fold validation, for the rest of the steps, I'm going to be talking about what we are in doing to the training part of the data until we get to step 4. 

>> So for now, just assume that the test set is somewhere, we are not doing anything with it we are only working with that training part of the data. So the next substep of the process is we need to weight the matrix to try and convey a sense of importance within the matrix. How you weight it is based on the product of three components. Local weighting, global weighting and the normalization factor. Local weighting is how informative a term is in that particular document, global is how informative a term is across all documents within the training set and normalization can help if you have documents of varying length. If you have some very short documents and very long documents, the long documents are going to have more terms and more occurrences of terms just because they are longer. So, to help reduce the impact of document like, you can do a normalization factor. 

>> So, to help illustrate, in the upper left-hand corner, this is an illustration of the local weighting. So in the upper left hand corner of your screen is a term by document matric with three terms and three documents. We can see Term 1 occurs three times in document 1, two times in document 2, and zero times in document 3 This is simply the count of how many times a term occurs So it’s exactly the same as what I showed you before with the term-by-document-matrix example. This is known as the term frequency weighting.  Sometimes, though it may be the simple presence or absence of a term is highly predictive in itself.  Or it may be the documents are so short that it is unlikely a term will occur more than once. In that case, in the upper right-hand corner you can use a binary weighting and which simply puts the one, if the term occurs at all or zero if it does not occur in the document at all.  A third common option is to take the log of the term frequency. So, in this situation, if you have a term that occurs two times in a document, is this twice as important as a term that occurs one-time? Or if you have a term that occurs 10 times is it 10 times as important as a term that only occurs once? 

>> Usually the answer is no. It is more important but not that much more important. What we do is take the log of the term frequency to kind of dampen the weight and we can see that in the bottom matrix by looking at term one again, in document 1 its still 1. But in document 2, even though the term occur twice it a has a  weight of 1.3 so it helps to reduce that a little bit. It is still more than one so more important, but not twice as important. And there is a number of options for local weighting options that you can choose but these are some of the  most common ones you can use.  For globall weighting, this is trying to determine how informative a term is across the entire training set  that we have.. Near I have a simplified version of the term by document matrix, we've got five terms down the side, 4 documents across the top and the filled in square, the blue square mean that term occurs within that document. The white squares mean the term did not occur. So, we're just looking at simple presence or absence. Down the center is the dashed line and this is just to help visualize that documents D1 and D2 belong to the smoking class, whereas documents D3 and D4 belong to the not smoking class. So a common global weighting that is used is X squared. So in this case the weight using X squared is to the right after the arrows and what we can see is that for term 1 it has a weight of zero. The reason is that, first of all the term is in all four documents and equally distributed amongst the classes so it has no predictive power for whatever we are trying to classify. 

>> Same thing for term 2. Even though it is only in two documents, it’s in one smoking document and one not smoking document, so knowing that a document has term 2 does not help you at all in terms of predicting what class it belongs to. Terms 3 and terms 4, are really just opposite one another. It’s in three in term 3 and its not in 3 in term 4 so it does help somewhat in prediction so it has a weight of 1.33 in this case. Finally, term 5 has the highest weight out of all of them and that is because it is in two documents and it is only in those smoking documents so if we know that if a document has term 5 at least within the training set, we can know that it is a smoking documents So it received the highest weight. So how we’d actually weight the matrix is we’d take the value from the local weighting within the cell, multiply by whatever the term weight is and if we are doing normalization we also multiply it by that and that's how we end up with a weighted term by document matrix. Again, there is a number of different options is how you do that locally, globally and everything else. We just mentioned a couple options here. 

33.20

>> So now you have the weighted term by document matrix and now we are to the fourth subset here which is performing a dimension reduction. As I mentioned before, term by document matrix typically is very sparse having a lot of zero cells in it and also highly dimensional. They have a lot of terms in there. So tens of thousands of terms is fairly common. This can lead to something called the curse of dimensionality. This can have issues computationally, in that you have such a large matrix it can take a while to train a model just for the programs to run and also for memory, just to keep it all in memory to train your model. And the other issue is that, because you have so many terms, it is also possible to overfit your model to the data. Patterns can be picked up which really aren’t generalizable to unseen data.  So we want to deal with both of those issues by reducing the number of dimensions or making that matrix smaller. 

>> The one thing that we almost always do is first removed the terms that are very infrequent. So those only occur in one document or maybe two documents, is almost always done, and this, in our work, we usually see about a 30% to 40% reduction in terms, which is pretty good. However, if you are working with ten thousand terms you still have about 6000 terms left over so it's still quite a bit to put into any model that you have. So what you would do is either retain the top N term,  that is you weight the terms based on the global weight so based on chi  squared and pick the top 25, 50, 100 terms and those are the ones you are going to model or you can do that or in addition to or in place a you can do something called latent semantic analysis. Now, I have to warn you that the next few slides will get a little bit geeky with some statistical information, hopefully not too bad then after the next few slides we will get back to the normal level. So, please bear with me as we go through these. 

>> So latent semantic analysis uses something called singular value decomposition or SVD and if you're familiar with principal component analysis or factor analysis, it works on a similar concept or basis. What we do with singular value decomposition is we create dimensions or vectors that help to summarize our term document information that we have within the matrix. Then, we select a reduced subset or K dimensions that we actually used for analysis, so let's say 50 dimensions or 100 dimensions are used, instead of all the various terms that we have in the matrix. So to help illustrate that, I'm going to go through an example. And this example is from a paper “Taming Text with the SVD” by Russ Albright.  And so what this scatter plot is showing is each of these dots is the document and these documents contain only two words. Word A and word B with varying frequency so the scatter plot is simply how many times this document contains word A and how many time it contains word B. Really what we have here are two dimensions, one representing word A, one representing word B. We wanted to reduce this to one dimension one thing we can to simply get rid of one of the words. So we get rid of word B, so we are left with information on word A, that is like selecting the top 10 terms. 

>> That works and can work very well. However, another thing we can do is say we don't really want to throw out all that information, instead, let's actually create a line or a new axis and we project or move these documents onto this axis, so this line is trying to minimize the sum of distances these documents have to the line and then we move all the documents onto the line s in so the large circles are the documents that had been projected on this line so at this point this SVD dimension is what we would use in our model. 

>>So that was the end of the statistical information and also the end of the second step so we now have a structured data set that we can use to derive patterns. So, the terms that we have and or the SVD dimensions depending on what we are doing are going to be used as the input in any type of classification algorithm that we choose. There are a number of options available in these are the same things that are available in data mining as they are in statistical text mining. Some common ones that are used, Naïve Bayes is used quite often, support vector machines is used very often and tends to perform fairly well in most situations. There is also decision trees and this can be important if you need to be able to interpret the models. So if you really want to understand why this document was classified the way it was, decision trees is the way that you can easily follow to figure that out and I will give you an example of that in just one second.

>> You can also use something like statistical progression, which I'm sure you're all familiar. Which algorithm you actually select is dependent on first, if you need to be able to interpret it or want to be able to or not. But then the second one is really empirically-based. So you want to pick the algorithm that does the best so it performs the best on whatever you are trying to do. So, that means that you will probably try a number of algorithms with a number of different options and a number of different weighting schemes to figure out what works best. Now, what is on the screen right now is an example of the decision tree. So the regular boxes represent decision points. So starting at the top, what this means that if a document has a term smoke, more than one time in the document, then we are going to go ahead and follow the Y line to the left that means we will classified this document as smoking. If it doesn't, we will continue on the next decision point which says, if the document contains the word pack at least once, then that will be a smoking document otherwise we will continue on and go with the rest of the decision tree. This decision tree is no different from other decision trees using that people have built by hand the only difference is it is automatically created based on the training data we have access to. 

>> This again is good to be able to interpret and understand why a document is classified why was. 

>> Another option is logistic regression and here the terms you have in your dataset or the SVD dimensions that you have are the variables in your regression model. If your regression model is β0 + β1X1, your X1 is the value of a particular term for that document. So the example at the bottom we have 1.54 times smoke, so what we would take is the value in the matrix of smoke or this document would go in place of where smoke is right now. We do that the same for pack  and tobacco, and that is how we determine whether it is smoking yes or smoking no. 

>> At this point of the process, we are at the final stages so, we've got our documents, we’ve structured the document, we trained the model on our training set and now it is time to actually use that testing set that we set aside until now. So, we want to see how well the model does on unseen data. So, what we do is everything that we did to the training, we will do to the test set. So, however we weighted the matrix and when we determined the term weighting and those on the global we apply that to the test set. If we did a singular value decomposition we apply that to the test set and also the model that we built, we then run our documents through  the model and get a prediction from that model. Once we do that, we can build a 2 x 2 contingency tables to figure out our performance. Along the top of the table is our reference standard or our real correct answer and we have true or false, that could be the smoking, not-smoking. Along the left-hand side is how our model is actually classified in the document. True or false. Or smoking, not-smoking. Within each of the cells we have a count of how many true positive documents, false positive, false negative and true negative documents there are in the test set. Once we have this table populated, we can calculate any of the statistics along the outside of the table so we can calculate things such as positive predictive value, precision, negative predictive value, you can look at accuracy or the error rate. We can also look at specificity and sensitivity. There is also things like F measure which isn't listed here. 

>> Now of course what we would really like is for all of these values to be once we have a perfect model of a test that but it is unlikely to happen so, typically want to maximize a particular statistic. So, if we are really interested in having a sensitive model, we would make sure to maximize sensitivity, and specificity may go down because of that. Likewise, we will want to maximize specificity and we will be okay with that as long as sensitivity has an adequate value. Something that is good enough for us. But now, at this point, we have our performance values and there is only one more part that we have to do to finish up this process. So besides knowing how well the model did, we also want to do an error analysis. We want to look at those documents that we have in incorrect classification for, so we are looking up a false positives and false negatives. The reason we want to go through and look at these as we want to see if we can find any type of patterns or categories of errors that seem to occur, that the model got wrong.

>> This is helpful for two reasons. The first reason is that we want to understand the limitations of our model. Especially if we put this into a production system, we want to know where it works well and where it doesn't work well. So, especially in areas where it doesn't work well maybe we can do something else or maybe we can somehow tweak the model doing something else to make it better. The other thing is just a learning experience. As you continue to do statistical text mining, you will see what the various choices you make in the process, how those carry out in terms of performance. You can get an idea of what tends to work well, what tends to not work well, especially given the type of documents you have. In future processes -- future projects, you might not have to try everything, you'll have some best rules to go by. So, it is helpful for those situations. 

>>So, that is a summary of the statistical text mining process. Kind of an overview of the process. With the remaining time I have I would like to talk about some software you can use to do statistical text mining and give a short demo of the software we have been using here in Tampa to do some of our projects. 

>> So, as part of our HSR&D funded research, one of the tasks we had was to find an open source product that you can do statistical text mining on. In addition to finding the product, to also developed some modules that will help HSR&D investigators use this product. So if they want to do statistical text mining, then they can. or at least they have a starting point to learn from. So, we ended up selecting a product called RapidMiner and this is a tool where you can do data mining, statistical text mining, and time series analysis and many other data analytic techniques. Some of the reasons that this was selected was, first of all, it is open source. It is being actively developed and has been developed for number of years. It has a company behind it offers support and they are the ones that drive the development. They also have a very active user community so if you have questions about it they are simply very fast on answering on the forums. It also has a nice graphical user interface to lay out the process. Finally, it has an extendable architecture that uses plug-ins. So, if it doesn't get -- if it does not have functionality that you want, you can fairly easily write some code to actually integrate that functionality into the product. Besides RapidMiner there are  a number of other software options you can use one of those is SAS Text Miner which is an add-on to SAS’s Enterprise Miner which I believe is available on VINCI although I'm not 100% sure of that. Its proprietary software but I believe it is available to VA researchers and SAS is very good especially if you're working with large amounts of data. Another option is IBM's SPSS Modeler and, in the open-source world, there are Knime, WEKA and many other options you can use if you don't want to use a RapidMiner or if you are familiar with other products. 

>> But, as part of our funded research, we identified RapidMiner as a good product. However, it had somewhat basic statistical text mining functionally. As part of that, I created a plug-in, that helps enhances the capabilities of RapidMiner and some of the things I implemented were to do term by document  matrix weighting for a number of options there, for term selection and also being able to perform latent semantic analysis fairly quickly. Now, what I want to do is actually show you Rapid Miner and give you a little bit of a demo on it. First, what I'm going to do is to show you the GUI and describe the interface of RapidMiner and show you a process where we are going to classify Medline abstracts. The reason we are doing abstracts is because there is no patient information that we have to worry about, so it is 200 Medline abstract, 100 of these have a mesh matrix subheading of smoking, so they are related to smoking, and the other 100 did not have a mesh major subject heading of smoking, so they are not relating to smoking in any way. Let's go ahead and switch to RapidMiner. 

>> So, this is the design perspective of RapidMiner. Up here on the toolbar are some of the basic functionality so you can create a new process, open an existing process that you have saved, of course save them and then you can also run a process once you have actually set it up. In the upper left-hand corner, in this overview area, this shows a zoomed out view of your process. Especially once you get into more complicated processes, it is nice to see kind of a bird’s eye-view like you of that set up. And along the rest of the left-hand side, is a list of the operators that RapidMiner has. Now, an operator if you are familiar with SAS is just like a node. It is the basic building block in RapidMiner. So they have operators that can import data, so for example if you have a comma separated value file, if you want to get data from a database or an Excel file, they’ve got an operator that will read the data into RapidMiner and you can also export data out of Rapid Miner. They have operators for doing your modeling, so if you're doing classification, and you want to do Naïve Bayes, they’ve got an operator that does that. They have things for neural networks, logistic regression, many of the algorithms that you are familiar with or may have never heard of are available in here. 

>> They also have operators for splitting the data for evaluation, so if you want to do a simple training and testing split you can do that. If you want to do cross pole validation you can also do that. And they have an operator that calculates those performance measures that we talked about earlier, the sensitivity, specificity, accuracy, those types of things. In addition, I mentioned that Rapid Miner has a plug-in architecture available and so some of the operators I have created are available in here through a plug-in and those are the weighting of the term documentaries, selecting a particular term and a few other things. There is also one that the company that creates RapidMiner provides, which is for text processing. This is the one that does the basic read in documents from your hard drive, creates that basic term by document matrix so it handles the stemming, the ngrams, the Doppler lists, some of the things we saw in step 2A of the process. The way Rapid Miner works is you drag and drop an operator into the main process area here in the center. Then what you do is you can chain operators together by simply connecting them via these lines that are available. So you build your process in the central area. On the right-hand side of the screen, are all the various options that you can set for an operator. For example, if you are doing singular value decomposition, you want to set how many dimensions you want to be created. 

>> So, you said 15, 20, something like that. Let’s go ahead and show you a process that I’ve already created before. So, this process reads in those 200 abstracts, creates the term by document matrix from those  and that’s what this process document operator does, and what we are doing for each one of the operators, this is a sub process, is that we are transforming it to lowercase, all the text we’re tokenizing or splitting into the individual turns. We then get rid of those terms that have fewer than three characters, and then we’re stemming all the turns. From this point, we now have our term by document matrix. This next operator then creates an ID that is unique to each document. Then we have across validation operator. So this puts the data into those 10 equal parts and goes through and rips through 10 times. This box in the lower right-hand corner says there's a sub process. If I doubleclick this I see that on the left-hand side is what you will do to your training data. On the right-hand side, what you do to your testing data. On your training data, we are weighting the matrix,  we’re doing singular value decomposition and then using a supported vector machine to build a model. For the testing data, we apply everything we just did. We apply the weightings that we learned. We then apply the SVD dimension, we then apply the model we created and then we calculate the performance. 

>> If I go ahead and run that, I just click the plus up above, down the bottom we can see that it is starting to work. Right now, it is on the fourth iteration, on the fifth iteration, so it is going to and selecting a different one of those 10 folds each time as the test set. Now, it is onto -- it's switched to results view. After doing the entire process we have come up with this 2 x 2 contingency table in the center and we can see that we got a 91% accuracy from these 200 abstracts. On the left-hand side we can see some of the other statistics so if we want to see sensitivity, we have a 93%, specificity 89%, and so on. This is just a short introduction into RapidMiner. It has many other options available to it.  For example you can do a lot of looping, so the one to try a lot of different options for those parameters you can do that. But, I believe that is all the time that we really have to discuss RapidMiner. So, I would like to open the floor any questions that you may have.. If you do not get your question answered now you can always e-mail Steve or myself later and we try to answer them as best we can. 

>> Great, thank you to you both. Or for anybody who joined us after the top of the hour, if you would like to ask a question but that the panel on the right-hand side of your screen. Click the plus sign next to Questions and that will open a Q&A. We have quite a few that have come in. The first one, do you use a specific computer program to do text mining? This came in at the beginning of the session. Seems we have covered this already. 

>> Yes. We use the RapidMiner for almost all of the statistical text mining that we do. We also do have access to SAS's test miner and we do use that for some data sets as well. 

>> I think that most of the products have a lot of the same techniques. I think would be like some statisticians like to use one product or the if I get one or either of the proprietary or the rapid minor can do most of the things that you will need to get done. 

>> Great, thank you both of those answers. The next question, what are real-world applications other than abstract analysis?

>> This is really if you have classification issues where you want to identify a cohort or identify maybe -- one of the things we have applied it to in our research is undercoding, looking for -- g looking for fall related injuries where the ICD-9 coding is not always ideal but we are able to use the statistical text mining to find people who fall. When you are doing things that are exploratory or you have classification cohorts that you want is when text mining is probably most useful. 

>> Great, thank you for the answer. The next question, it is unclear how the global weights were  computed from the chi2 but the operationalization to get the weight wasn’t. 

>> One of the things we were not sure how far along the statistical continuum our audience would be. So, we did emphasize the concepts. But we would be willing to talk to people who want  more detail on the or refer them to documentation where they can do that. That was a conscious decision we made to emphasize concepts and deemphasize sort of the underpinnings of the statistics but we’d be more than willing to talk with anybody off-line about that. 

>> Excellent I encourage that person to go ahead to e-mail you after the session. The next question when evaluating the performance of a predictive model, developed from text mining, where do you find the true classification or comparison with the model's prediction

>> That is based on the reference standard. The -- the very first step of the process is when you are collecting your documents, you have to have a label for each document.  It is generally a situation we need to annotate so you have your clinicians or subject matter experts go through, read the document and say this document is this is a smoking or non-smoking document an that’s where you get the correct answers from. 

>> So, if you use the human chart review data to prove the model but once the model is established it can be applied to very large data sets with pretty high confidence depending on your target. 

>> Thank you. The next question is RapidMiner approved by OIT ISO for installation in VAcomputers?

>> James and I are pointing to one another Rapid Miner is an open source software on a Java powered platform. W have installed on their machines here without any problems and we also have it on the VINCI  machines so you know I don't think there is any problem with that. 

>> I guess we will find out. 

>> Yes. [Laughter] 

>> You're going to get a phone call from IOT in any minute. 

>> One thing I do know it does not need MySQL to run. So that is a good thing. 

>> Great, thank you. Next question what kind of input can RapidMiner take? 

>> There are a number of different formats. So, a CSV file, comma separated, tab separated or for documents it could be a particular... one file per document to be read. It can also read from different databases. So, if you are familiar with Java, anything that has a JDBC connector to it you can read the database from there. I believe it also has the ability to read Excel files, let me actually bring this up real quick. So, its got XML files, Access databases, FBSS files, data and a few others you can see on your screen there. Has a pretty wide range of input that you can bring into it. 

>> Great. How do you handle negations, i.e. I don't smoke? 

>>In this case, by itself, statistical text mining works on a value of words approach so negation is not being handled in the aspect. You can either try to create N grams and hope that non-smoking is right next to one another or you could use natural language processing before you do the statistical text mining process. You can in some way tag words as being negated or not negated and then put that through the rest of the process. But by itself that is a limitation of statistical text mining. 

>>Things like negation can be false positives in this method. But the key is.... the thing that statistical mining has the annotation process because you do need an annotated data set but you need to classify it as yes or no for your target. Where in an NLP solution the annotation process would typically be a much more top down, much more complex and then you have to build rules from it, so there are trade-offs. There are certainly advantages to NLP, but we think they're also advantage to statistical text mining when the target is chosen properly. 

>>Excellent, thank you. The next question, which I believe you have covered in a variety of ways is RapidMiner available for  us? 

>> Yes. In the slides, I have the website.  I believe it is rapid-i.com. And then you can go ahead and download it. The actual application is posted on SourceForce. If you are familiar with open source, that's a common source for open source applications. 

>> Are the modules developed in there --? 

>> Go ahead, I'm sorry. 

>> No. The text processing, which the plug-in that rapid miner provides is available for download, when you install it, it asks if you want to download any of the  plug-ins, and it will automatically install it. The plug-in I have created is not yet available. We still have to do a code review to make it available. So just contact James and we will let you know as soon as that is available. 

>> The next question, can you keep structured variables in the matrix? Like demographics? 

>> You know, currently typically you just use the text separate from or the structured data, but one of the things that we are interested in looking at is how to combine the information from the text with the structured data. If you use it in the matrix of -- we have not done that but that’s something in the CHIR work that I think a group is interested in doing.  I think it is theoretically possible. Traditionally people have either used the text separately from the structured data that -- we would have to think about that. 

>> Technically there is no reason you cannot do that you would combine those. Because with the RapidMiner or any other product it is just another variable that you could then put in your model. You have to make some sense. If you’re talking about patient level values and there’s multiple documents per patient you have to think about how that is represented in the data. 

>> Typically this is done at the document level. So you have to think about how this goes up to a patient or a clinical event level. There is some thinking and some data rearrangement associated with that. 

>> Thank you both. The next question, can RapidMiner read from Word or PDF? 

>> I do not believe it can read it from Word. And, I do not know if it can read from PDF or not. It may be that you would have to do a conversion beforehand to text, but I am not 100% sure on that one. 

>> It will read though from sort of a flat text files so it you have it in word, you can export it as a .txt file and then read it in. That would be pretty straightforward. The PDF, I don't know. 

>> The next question, what is the best way to get text data into a format that can be used for STM. For example what is your process to get text data, i.e., medical notes in CPRS, into Rapid Miner 

>>I think the best way currently for research purposes in -- it is to probably -- one is accessing there’s sort of two issues. One is accessing the text data and then physically getting into it. I think the Vinci environment with an approved IRB will you to request the text documents and then those documents will be provided -- I think they provide them as text files. Or, do they provide them as really what you ask for? 

>> So, maybe in a database, you could convert to a text file. So, one issue is getting text documents. We have worked primarily with progress notes or other types of patient notes. And, so getting access to them through the Vinci makes the most sense and then after that converting them into a format that can be read in RapidMiner sort of leads into the question that James just answered. 

>> Yes.  In terms of what is the best format. Having each document as a separate text file is fine as long as you don't have too many documents but if we are talking about 15,000, or 20,000 or more documents, that’s 15 or 20,000 documents on your hard drive. In that case it is better to keep everything in a database and read straight from the database.

>> I think the one place that we have used both SAS, we are talking about RapidMiner here because it is open-source but the SAS would probably handle big data sets. If you want to do 20 or 30,000 records or 50,000 records, I would think that just some of the data handling components of SAS will allow you to get at that a little better. 

>> The next question, how far latent semantics analysis is working with RapidMiner? Do we have to pay for the special plug-in? 

>> No. There is not a cost associated with it. Within the default installation of RapidMiner they have the ability to do latent semantic analysis. However, the implementation that they have included is one that takes a very long time. So, for example I did some tests on some matrices I created, it took 20 minutes on average to do a matrix of 1000 documents and 10,000 terms. Whereas, the one in the plug-in that I created, I wrapped an existing library that Doug Rosen? from MIT wrote and it is much quicker, so, I think it is around a quarter of a minute or so, so if you are doing cross fold validation and have to do something 10 times, that can make a difference because you also have to times it by 10.  And if you are doing many options on top of that and looping through, the time it will take to go through the process can be quite a bit. So, using the quicker one is obviously a nice choice. But either one of those, they are freely available. The one is already in RapidMiner, then once we do the code review and then have the plug-in I created and available, that is also freely available. 

>> Excellent, thank you. I just want to stop for a second and ask. We have reached the top of the hour. And, we do have several remaining questions. If you two are available, we can continue on otherwise we can send them off-line and I can get rid responses to the attendees. 

>> We do have another meeting, but we could probably -- how many more questions are there? 

>> At least 10. 

>> Well, that is good. I'm glad to know we generated some ideas. Why don't we do a few and maybe if you want to go to the other meeting, and say we will be there shortly. So, we will stay for another 10 minutes and then whatever we cannot get done we will go from there. 

>> Great. Just let me know when you need to cut out. The next question, can any of these programs be used directly on searching and analyzing VA CPRS clinical chart notes or would it have to be reformatted? 

>> Currently, the way we use it is to extract the data from the CPRS and actually from a VINCI and how you decide it. We can’t run it right on the CPRS screen if that is what they mean. If that is what that question means. 

>> If they want to write and clarify, I invite them to do so. 

>> Yes, they can contact us, and we can talk to them about that. 

>>  Great. Next, how it does RapidMiner compared to Atlas TI? 

>> I am not that familiar with Atlas TI. 

>> I am a tiny bit more familiar, so the difference is that the patterns -- the one thing I would say, the patterns that we identified using RapidMiner are done through the machine learning. So, the computer iterates through the data and looks for patterns it can fine. Atlas TI typically relies on a human reviewer to go through and identify the patterns. So, there are some -- it is interesting that we have our anthropologist here and there are some similarities in what you are trying to get at. But, but the text mining ones really are machine driven versus more human review driven from Atlas TI. 

>> Thank you. The next question. How many documents do you need to do a practical analysis? 

>> Ha ha. That’s the question we struggle with. [Laughter] -- that is a question we struggle with. Realistically, it is a little bit like any statistical model. It depends on some things like the prevalence of your yes's and no's in the data and how complex it is. I think realistically, you are going to want between 600 and 1000 documents probably. Because, if you use 10 fold cross validation, you can get -- you can actually do it with smaller data sets, but I think particularly if you're using something like logistic progression and it is a relatively rare event, when you get around 600 or 700 records, it gives you a stability of that statistic. But, that is an area which there is a not a lot published and I think that many of us are sort of looking at what the real answer on that is. 

>> Thank you. The next question. Do you have any way of weighting terms for proximity to other terms ? A no and a smoking in a document may not mean much unless they are adjacent to one another. 

>> Could you repeat the question please? 

>> Yes. You have any way of weighting terms for proximity to other terms? It gives you an example of in quotes, a No and a smoking in a document may not mean much unless they are adjacent to one another. 

>> You can determine the similarity of two documents one of the based on the terms that they had using cosine similarity but that would not be a weighting for the term itself. I'm not sure I can really understand --. 

>> I think I understand it is sort of like negation. I think the traditional statistical text mining probably would not be able to handle that. But, I think that if you wanted to do -- one of the things we have done is to take natural language processing, which as I mentioned, is interested in describing the issues about the actual language itself, and you preprocess the data using naturally language processing, so that you use that to do perhaps the negation or assign weights to words that would be closer to one another and have that information be exported and put in a statistical text mining matrix, I think it's that is what you have to do for that. Out-of-the-box it is not going to be something that RapidMiner would do. 

>> Thank you. The next question, how do you build a structured file from a AVA electronic progress note. 

>> In this case, the progress note is something you would enter into RapidMiner, and then it would go ahead and built that term by document matrix, the structured data set from the note itself by splitting the words into individual terms or phrases. Then, going through the second part of the process that we talked about earlier.

>> So, that would be sort of the  automated -- or part of the automated steps of the text mining process. 

>> Okay. The next question. Do you have any thoughts as to where this has the most utility? You may have answered this already. 

>> Yes. To me, I think it has the most utility probably in cohort identification perhaps. Looking for under coded cohorts perhaps or in disease surveillance where we might be looking for things that are not well coded but there are evidence in the text that would find them. Also, we did not talk about it but knowledge discovery, if you have sort of new and emerging disease processes, you may be able to find some exploratory associations between -- that you would not have known otherwise. It wouldn’t be confirmatory. You have to follow it up with other studies. But, I think that it would fit in that kind of -- with those kinds of targets. 

>> Right. Thank you. The next question, this seems as though it could benefit from being very collaborative. How would you recommend that those of us who are primary clinicians reach out to potential collaborators? 

>> So, it is absolutely necessary to be collaborative because we have it on the other side. We don't understand the clinical problem and the more we have a strong relationship with a clinician with a problem that needs to be answered, the better. I would just say that if there are people that have attended that have an interest in doing some of this, they could contact us and we will chat with them and through the Consortium for Health Informatics Research, either we or there might be other investigators who would be interested in working with clinicians, to the extent that we are able to do that. 

>> Great. Next question. Is this program ready now to be used in a quality improvement project? How do I get it and learn how to use it? 

>> So, RapidMiner itself is ready now along with the text processing plug-in that RapidMiner has created so you can do basic statistical text mining with that and I would say  that can be used. In addition to actually downloading the software, they also have tutorials -- video tutorials --  they are not related to healthcare. A lot for example are financial analysis of news, but people have created video tutorials that show how to do those processes and as part of the funded research we have, I have also been working on a document that kind of goes over with the presentation was about in a little bit more detail and I will provide some sample processes for people that are interested in using it. 

>> So, we are going to try to be a resource to people that want to use it also. I think realistically though, if you are a clinician doing quality assurance, you probably need to have access to somebody that is pretty familiar with statistical analysis and accessing data. Through the VINCI and then I think you can be in a position do that. But, it probably isn't in a situation where a clinician on their own could sit down and work their way through this. You probably need an analytic type who could then learn this technique as they would in other statistical techniques that was new to them. 

>> Thank you. Are you ready for another one? 

>> Yes. 

>> Is in misspelling in text files a big problem? 

>> It can be a problem. For example, in a project that we were working on, looking at the fall related injuries, when we were doing error analysis, we noticed a number of false positives or a number of errors occurred because of the misspelling. So the word fall or fell is a fairly predictive term as you might imagine, and people were misspelling it is fael, fele and also using feel, it is a correct word, but they were also they were using as well. It causes some errors to occur but overall, the models did very well. So, these are just a small portion of errors that did occur. 

>> In some ways, statistical text mining is more robust than some of the NLP techniques might be. If it goes on the pattern of larger patterns of words in the document, not just the individual word. In some ways, -- we have found in the work we have done it is pretty robust. There are -- it is not perfect, but neither is a human reviewing records. So, it can be very, very positive though. 

>> Thank you. Okay. I heard the new version of CPRS in parentheses Aviva is using an open-source text miner but not RapidMiner. Are you aware of that one? 

>> I don't know that it is being implemented in Aviva, but we are more familiar with the NLP system that the CHIR is developing and that would probably be available. I have not heard that text miner would be available but we would be very interested if they could share that with us. 

>> Yes. 

>> Thank you. 

>> Part of the reason we were asked to look at an open-source solution was we were using SAS and the SAS Enterprise text Miner is a fairly expensive tool. The HSR&D community just thought it would be good to have an open-source alternative, particularly for researchers who may not have a lot of resources. But, if there is something in Aviva using text mining, that sounds great. 

>> Thank you. I will give you another opportunity to leave this session if you need to at this time? 

>> I am probably going to have to go to this other meaning. Do you want to stay on?

>> If you could just send us the rest of the questions, we could try to answer them the best we can over e-mail. We would appreciate that. 

>> I am happy to. So, for our attendees still listening, they will all receive written responses and I will post some of them with the archive files. So thank you very much, gentlemen for presenting for us today, and thank you to all of our attendees who were able to make it. This does conclude today's HSR&D  Cyberseminar. Do either of you gentlemen have concluding comments you want to make? 

>> No, we appreciate very much the people that listen that listened and hope our presentation hit the mark of their expectations. 

>> Thank you. 

>> Excellent. Thank you, both. Have a nice day. 

>> Take care, goodbye. 

>> [Event concluded]