WEBVTT 00:00:05.734 --> 00:00:08.234 Whitelaw: Hi. My name is Casey Whitelaw. 00:00:08.234 --> 00:00:09.234 I'm the Tech Lead 00:00:09.234 --> 00:00:10.567 for the Natural Language Processing Group 00:00:10.567 --> 00:00:12.501 here in Sydney, and today I'm gonna talk to you 00:00:12.501 --> 00:00:13.901 a little bit about 00:00:13.901 --> 00:00:16.601 some of the cool things that we've added to Google Wave. 00:00:16.601 --> 00:00:18.834 So one of the main things 00:00:18.834 --> 00:00:21.834 that we want to stay focused on in Google Wave is productivity. 00:00:21.834 --> 00:00:23.634 We want users to be able to stay productive, 00:00:23.634 --> 00:00:25.734 whether they're reading or whether they're writing. 00:00:25.734 --> 00:00:27.601 One of the ways that we've done that 00:00:27.601 --> 00:00:29.267 is with our spell correction system. 00:00:29.267 --> 00:00:32.234 What we'd like is for users just to be able to 00:00:32.234 --> 00:00:34.534 focus on what they're typing and not worry about 00:00:34.534 --> 00:00:36.801 whether there's any mistakes they've made. 00:00:36.801 --> 00:00:39.000 We think that if people could just loosen up a little bit 00:00:39.000 --> 00:00:41.100 and, you know, or maybe type 5% faster, 00:00:41.100 --> 00:00:43.400 then that's 5% less time that they spend typing. 00:00:43.400 --> 00:00:45.734 So I'll start with an example. 00:00:45.734 --> 00:00:47.801 It's probably the easiest way to explain. 00:00:47.801 --> 00:00:51.133 Let's say you want to meet up with one of your friends. 00:00:51.133 --> 00:00:52.300 You're having a chat. 00:00:52.300 --> 00:00:54.534 So you write... 00:00:54.534 --> 00:00:56.467 Let's... 00:00:56.467 --> 00:00:58.434 met... 00:00:58.434 --> 00:01:00.067 whoops... 00:01:00.067 --> 00:01:03.767 tomorrow. 00:01:03.767 --> 00:01:05.567 So here you see I've made a mistake. 00:01:05.567 --> 00:01:07.400 I've written met instead of meet here. 00:01:07.400 --> 00:01:09.501 My finger slipped on the "e." 00:01:09.501 --> 00:01:13.534 So now, the way that we implemented spelling 00:01:13.534 --> 00:01:16.968 is we introduced an automatic participant called Spelly 00:01:16.968 --> 00:01:19.767 who works just like another user 00:01:19.767 --> 00:01:21.767 that's participating on the wave with you. 00:01:21.767 --> 00:01:24.334 So Spelly's on your wave with you, 00:01:24.334 --> 00:01:29.267 and it can see that you've typed "Let's met tomorrow," 00:01:29.267 --> 00:01:31.367 and it's now gonna try and spell-check it. 00:01:31.367 --> 00:01:32.901 For each word... 00:01:32.901 --> 00:01:35.534 it doesn't have any kind of dictionary, 00:01:35.534 --> 00:01:39.534 so it doesn't know whether met is a well-spelled word 00:01:39.534 --> 00:01:40.834 or a misspelling. 00:01:40.834 --> 00:01:43.100 So to start with, it comes up with a list 00:01:43.100 --> 00:01:46.634 of possible candidate corrections for this word. 00:01:46.634 --> 00:01:50.367 So some examples of that might be... 00:01:50.367 --> 00:01:53.400 meat, the food... 00:01:53.400 --> 00:01:56.868 or meet, the correctly spelled version of this. 00:01:56.868 --> 00:01:59.367 And you can imagine lots of others. 00:01:59.367 --> 00:02:02.200 So set or net or me-- 00:02:02.200 --> 00:02:05.367 all kinds of different words that we would evaluate 00:02:05.367 --> 00:02:09.199 to see whether they're what you actually meant to type. 00:02:09.199 --> 00:02:12.734 We've learned from the web 00:02:12.734 --> 00:02:14.934 the kind of misspellings that people make 00:02:14.934 --> 00:02:17.200 and which things are more and less likely. 00:02:17.200 --> 00:02:18.834 So we know that, for instance, 00:02:18.834 --> 00:02:20.634 maybe slipping and inserting an "A" 00:02:20.634 --> 00:02:22.300 is relatively likely, 00:02:22.300 --> 00:02:25.434 but misspelling the very first letter 00:02:25.434 --> 00:02:28.467 might be less likely in this case. 00:02:28.467 --> 00:02:32.667 So we've got some suggestions, and the next thing that we do 00:02:32.667 --> 00:02:34.667 is evaluate these suggestions in context. 00:02:34.667 --> 00:02:38.067 So there are other systems at Google that already use 00:02:38.067 --> 00:02:40.434 the same kind of statistical language models as this, 00:02:40.434 --> 00:02:42.467 such as the Google translation system, 00:02:42.467 --> 00:02:44.367 that essentially encode information 00:02:44.367 --> 00:02:46.133 about how language is used. 00:02:46.133 --> 00:02:47.968 These are learned from the web 00:02:47.968 --> 00:02:49.734 from looking at billions of web pages, 00:02:49.734 --> 00:02:51.167 so we get a really good idea 00:02:51.167 --> 00:02:53.734 about the way that people really use language in practice. 00:02:53.734 --> 00:02:55.434 So what we would do 00:02:55.434 --> 00:02:58.834 is look at the likelihood of "Let's met tomorrow" 00:02:58.834 --> 00:03:02.067 and "Let's meat tomorrow," less likely, 00:03:02.067 --> 00:03:03.767 and "Let's meet tomorrow," 00:03:03.767 --> 00:03:06.267 which is gonna be more likely than either of these. 00:03:06.267 --> 00:03:08.067 And we combine that with our error model 00:03:08.067 --> 00:03:10.200 which tells us how likely the misspellings are, 00:03:10.200 --> 00:03:13.834 you know, without any context, to get a final determination 00:03:13.834 --> 00:03:15.901 as to what are the most likely words-- 00:03:15.901 --> 00:03:19.200 most likely word that you meant right here. 00:03:19.200 --> 00:03:22.000 So in this case, we would suggest meet. 00:03:22.000 --> 00:03:25.467 Once we think that a word is misspelled, 00:03:25.467 --> 00:03:29.100 we need to get that back to the Google Wave client 00:03:29.100 --> 00:03:31.667 so that the user can actually see it 00:03:31.667 --> 00:03:34.701 and either correct it automatically or manually. 00:03:34.701 --> 00:03:36.067 Two kinds of ways 00:03:36.067 --> 00:03:38.834 that this differs from existing spelling systems. 00:03:38.834 --> 00:03:42.000 One of them is just that it's hosted. 00:03:42.000 --> 00:03:44.100 And this means that we can do 00:03:44.100 --> 00:03:46.033 this same kind of spelling for you, 00:03:46.033 --> 00:03:49.434 regardless of which device you're connecting from. 00:03:49.434 --> 00:03:52.767 So whether you're on your laptop or your mobile or your desktop, 00:03:52.767 --> 00:03:56.000 we can give the same quality spelling, regardless. 00:03:56.000 --> 00:03:57.901 And that applies across languages too, 00:03:57.901 --> 00:03:59.467 so, you know, we're doing this 00:03:59.467 --> 00:04:01.267 for other alphabetic languages also. 00:04:01.267 --> 00:04:06.667 So like I said, we use large statistical language models. 00:04:06.667 --> 00:04:07.801 When I said large, you know, 00:04:07.801 --> 00:04:09.801 we train them from billions of words. 00:04:09.801 --> 00:04:12.033 They end up being many, many gigabytes. 00:04:12.033 --> 00:04:15.501 It's pretty infeasible to run these on a single machine, 00:04:15.501 --> 00:04:17.601 which isn't such a problem in a data center 00:04:17.601 --> 00:04:19.233 where you can have a set of machines 00:04:19.233 --> 00:04:22.200 running a language model and a spelling model together. 00:04:22.200 --> 00:04:27.167 And then we can share that spelling model 00:04:27.167 --> 00:04:28.734 between many users 00:04:28.734 --> 00:04:30.667 so that the cost per user is very low. 00:04:30.667 --> 00:04:33.534 So it's very efficient for us to do this. 00:04:33.534 --> 00:04:35.667 Once you realize that you've got a system 00:04:35.667 --> 00:04:37.801 that supports collaborative editing, 00:04:37.801 --> 00:04:39.501 that has structured data, 00:04:39.501 --> 00:04:42.667 and that you can change the user interface 00:04:42.667 --> 00:04:45.167 by having remote participants, 00:04:45.167 --> 00:04:47.200 then, really, the sky's the limit. 00:04:47.200 --> 00:04:49.434 I mean, there's all kinds of existing 00:04:49.434 --> 00:04:51.400 natural language technologies like spell checking 00:04:51.400 --> 00:04:53.100 or translation that we can apply, 00:04:53.100 --> 00:04:55.667 and we're seeing a lot of new applications 00:04:55.667 --> 00:04:57.667 as the way that we communicate changes as well. 00:04:57.667 --> 00:05:00.868 So, you know, really, it's gonna be exciting times.