 So, Stefan and Cole have been talking about some really cool stuff to do with voice, but what do you do when you get given a text, a piece of text, and you need to work out what it does. So, I'm going to talk about a project that we have been working on. So the scenario is that we're trying to build a business intelligence system that would allow the user to just type in free text and then interpret this free text and then query for the right data and present it back to the user. Some of the challenges we have to, well, some of the constraints that we actually have to adhere to in this project was that we needed to understand business language domain. There was a lot of business language specific and we, and most of the NLP tools out there did not cater for that, so we had to write our own. Another thing is that we could not store or send user questions off-site because all of these are very sensitive data, so what did we do? So we looked at a bunch of tools out there, we knew that we would have to do some natural language processing, so we looked at all the natural language, well, some of the main natural language processing tools out there, so NLTK is a Python library, we looked at SPACY, another Python library for natural language processing and Stanford core NLP, which is a Java one. All three are very good, they all offer the very similar set of features, but we ended up picking SPACY because SPACY, well, it's also mentioned as one of the clip as well, so SPACY offers most of the NLP features out there and it's designed for development teams. It's very important for us because we needed to be up and running very quickly and other libraries such as NLTK are very much geared towards academic, so it's like a framework where we can switch in and switch out algorithms or resources and, you know, being a development team you do not have time to start searching for the best algorithms to use, so what SPACY gives you is the, well, the creative SPACY has actually baked in their opinion of what's the best lemmatizer out there, what's the best stemming engine out there and they should break it into SPACY for you. So that then saves us from having to do all the headache of picking which one. And SPACY actually has really good performance and accuracy. I think it was dubbed as the fastest NLP tool out there in the world. I think back in 2015, I'm not sure about it now. It also offers a really good set of APIs, so as a developer the first thing you would go to in a new tool, this API, it's got really good documentations and it's very actively supported and it's evolving quite quickly as well. The other key thing for us was that we wanted to eventually integrate with deep learning, so we would start with rule-based NLP, but then eventually we might want to integrate with deep learning and SPACY actually makes that very easy for you. I'll talk more about that in the second slide. So as I mentioned, what is SPACY? So most of the NLP features that it actually gives you are very common and very useful. Most of the ones that you would need. The key thing integration with deep learning is that you can actually plug in multiple deep learning libraries depending on your choice. SPACY gives you that flexibility and to use SPACY all you have to do is create a pipeline and you say for this text I want it to go through tokenizer, sentence segmentation and name entity recognizer and so for example a sentiment analysis engine as well. So you just define the pipeline and whatever text that comes in will go through this pipeline and with your deep learning you can write your own and plug it in. It's got a callback for you to integrate it. Okay, so after using SPACY for a while, this is our experience in using it. So first of all, we had to use a lot of, as I mentioned before, business domain language. So that means we had to write our own custom entity matcher and we had thousands and thousands and SPACY performed really well. We had no performance issue at all. It's great at processing well structured language. So a document would pass through really quickly and it gets passed and taught really well. But if you have free text that's not grammatically correct, SPACY will fail. So in this case you are better off using like a string matching library. I'll talk about it in more detail in a minute. So the other things that SPACY doesn't do that you may want to watch out for before you pick SPACY is that it only supports English, German and French right now. It's got some other languages in the pipeline, but it's still in beta. It doesn't do stemming. This is because the SPACY creator has a very strong opinion around stemming and that he prefers lemmatization instead. It doesn't do co-reference resolution. I don't know why, I don't know if there's a reason why, but we didn't need to use it, so we didn't miss it. Okay, so talking about string and matching. So this is the end of SPACY, any questions? Okay, so the other thing that we needed to use for our search engine was that when user type in something that's ambiguous, that matches multiple words or that all they misspell something, then we need to correct it and we need to do approximate matching. And this is why we use fuzzy-wuzzy. Although the name is a bit funny, but it's actually a really good library. And it uses Levenstein distance. Does anyone know what Levenstein distance is? No. Okay, so basically it's just the number of changes you would need to make to one string to make it match the other string. So say, for example, if I have the string cake and take, then the Levenstein distance between cake and take is one, because I need to change the T for the C. Okay, so basically that's the basis of it. And it's useful approximate matching of short string, spell check, and typo correction. It's so, when you call the API, it gives you a score. So you give it a text, and you pre-define the list of text that you need to match to, and then it will say to you, this text is matching these other lists of text at 90%, 80%. And then you can use that to rank your clarification. Okay, so that's all I have so far. Any questions? I'll hand it over to Kevin.