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