Natural Language Processing: Crash Course Computer Science #36

Google+ Pinterest LinkedIn Tumblr

Hi, I’m Carrie Anne, and welcome to Crash
Course Computer Science! Last episode we talked about computer vision
– giving computers the ability to see and understand visual information. Today we’re going to talk about how to give
computers the ability to understand language. You might argue they’ve always had this
capability. Back in Episodes 9 and 12, we talked about
machine language instructions, as well as higher-level programming languages. While these certainly meet the definition
of a language, they also tend to have small vocabularies and follow highly structured
conventions. Code will only compile and run if it’s 100
percent free of spelling and syntactic errors. Of course, this is quite different from human
languages – what are called natural languages – containing large, diverse vocabularies,
words with several different meanings, speakers with different accents, and all sorts of interesting
word play.

People also make linguistic faux pas when
writing and speaking, like slurring words together, leaving out key details so things
are ambiguous, and mispronouncing things. But, for the most part, humans can roll right
through these challenges. The skillful use of language is a major part
of what makes us human. And for this reason, the desire for computers
to understand and speak our language has been around since they were first conceived. This led to the creation of Natural Language
Processing, or NLP, an interdisciplinary field combining computer science and linguistics. INTRO There’s an essentially infinite number of
ways to arrange words in a sentence.

We can’t give computers a dictionary of
all possible sentences to help them understand what humans are blabbing on about. So an early and fundamental NLP problem was
deconstructing sentences into bite-sized pieces, which could be more easily processed. In school, you learned about nine fundamental
types of English words: nouns, pronouns, articles, verbs, adjectives, adverbs, prepositions,
conjunctions, and interjections. These are called parts of speech. There are all sorts of subcategories too,
like singular vs. plural nouns and superlative vs.

Comparative adverbs, but we’re not going
to get into that. Knowing a word’s type is definitely useful,
but unfortunately, there are a lot words that have multiple meanings – like “rose”
and “leaves”, which can be used as nouns or verbs. A digital dictionary alone isn’t enough
to resolve this ambiguity, so computers also need to know some grammar. For this, phrase structure rules were developed,
which encapsulate the grammar of a language. For example, in English there’s a rule that
says a sentence can be comprised of a noun phrase followed by a verb phrase. Noun phrases can be an article, like “the”,
followed by a noun or they can be an adjective followed by a noun. And you can make rules like this for an entire

Then, using these rules, it’s fairly easy
to construct what’s called a parse tree, which not only tags every word with a likely
part of speech, but also reveals how the sentence is constructed. We now know, for example, that the noun focus
of this sentence is “the mongols”, and we know it’s about them doing the action
of “rising” from something, in this case, “leaves”. These smaller chunks of data allow computers
to more easily access, process and respond to information. Equivalent processes are happening every time
you do a voice search, like: “where’s the nearest pizza”. The computer can recognize that this is a
“where” question, knows you want the noun “pizza”, and the dimension you care about
is “nearest”. The same process applies to “what is the
biggest giraffe?” or “who sang thriller?” By treating language almost like lego, computers
can be quite adept at natural language tasks.

They can answer questions and also process
commands, like “set an alarm for 2:20” or “play T-Swizzle on spotify”. But, as you’ve probably experienced, they
fail when you start getting too fancy, and they can no longer parse the sentence correctly,
or capture your intent. Hey Siri… methinks the mongols doth roam
too much, what think ye on this most gentle mid-summer’s day? Siri: I’m not sure I got that. I should also note that phrase structure rules,
and similar methods that codify language, can be used by computers to generate natural
language text. This works particularly well when data is
stored in a web of semantic information, where entities are linked to one another in meaningful
relationships, providing all the ingredients you need to craft informational sentences.

Siri: Thriller was released in 1983 and sung
by Michael Jackson Google’s version of this is called Knowledge
Graph. At the end of 2016, it contained roughly seventy
billion facts about, and relationships between, different entities. These two processes, parsing and generating
text, are fundamental components of natural language chatbots – computer programs that
chat with you. Early chatbots were primarily rule-based,
where experts would encode hundreds of rules mapping what a user might say, to how a program
should reply.

Obviously this was unwieldy to maintain and
limited the possible sophistication. A famous early example was ELIZA, created
in the mid-1960s at MIT. This was a chatbot that took on the role of
a therapist, and used basic syntactic rules to identify content in written exchanges,
which it would turn around and ask the user about. Sometimes, it felt very much like human-human
communication, but other times it would make simple and even comical mistakes. Chatbots, and more advanced dialog systems,
have come a long way in the last fifty years, and can be quite convincing today! Modern approaches are based on machine learning,
where gigabytes of real human-to-human chats are used to train chatbots.

Today, the technology is finding use in customer
service applications, where there’s already heaps of example conversations to learn from. People have also been getting chatbots to
talk with one another, and in a Facebook experiment, chatbots even started to evolve their own
language. This experiment got a bunch of scary-sounding
press, but it was just the computers crafting a simplified protocol to negotiate with one

It wasn’t evil, it’s was efficient. But what about if something is spoken – how
does a computer get words from the sound? That’s the domain of speech recognition,
which has been the focus of research for many decades. Bell Labs debuted the first speech recognition
system in 1952, nicknamed Audrey – the automatic digit recognizer. It could recognize all ten numerical digits,
if you said them slowly enough. 5… 9… 7? The project didn’t go anywhere because it
was much faster to enter telephone numbers with a finger. Ten years later, at the 1962 World's Fair,
IBM demonstrated a shoebox-sized machine capable of recognizing sixteen words. To boost research in the area, DARPA kicked
off an ambitious five-year funding initiative in 1971, which led to the development of Harpy
at Carnegie Mellon University. Harpy was the first system to recognize over
a thousand words. But, on computers of the era, transcription
was often ten or more times slower than the rate of natural speech.

Fortunately, thanks to huge advances in computing
performance in the 1980s and 90s, continuous, real-time speech recognition became practical. There was simultaneous innovation in the algorithms
for processing natural language, moving from hand-crafted rules, to machine learning techniques
that could learn automatically from existing datasets of human language. Today, the speech recognition systems with
the best accuracy are using deep neural networks, which we touched on in Episode 34. To get a sense of how these techniques work,
let’s look at some speech, specifically, the acoustic signal. Let’s start by looking at vowel sounds,
like aaaaa…and Eeeeeee. These are the waveforms of those two sounds,
as captured by a computer’s microphone. As we discussed in Episode 21 – on Files
and File Formats – this signal is the magnitude of displacement, of a diaphragm inside of
a microphone, as sound waves cause it to oscillate. In this view of sound data, the horizontal
axis is time, and the vertical axis is the magnitude of displacement, or amplitude. Although we can see there are differences
between the waveforms, it’s not super obvious what you would point at to say, “ah ha!
this is definitely an eeee sound”.

To really make this pop out, we need to view
the data in a totally different way: a spectrogram. In this view of the data, we still have time
along the horizontal axis, but now instead of amplitude on the vertical axis, we plot
the magnitude of the different frequencies that make up each sound. The brighter the color, the louder that frequency
component. This conversion from waveform to frequencies
is done with a very cool algorithm called a Fast Fourier Transform. If you’ve ever stared at a stereo system’s
EQ visualizer, it’s pretty much the same thing.

A spectrogram is plotting that information
over time. You might have noticed that the signals have
a sort of ribbed pattern to them – that’s all the resonances of my vocal tract. To make different sounds, I squeeze my vocal
chords, mouth and tongue into different shapes, which amplifies or dampens different resonances. We can see this in the signal, with areas
that are brighter, and areas that are darker. If we work our way up from the bottom, labeling
where we see peaks in the spectrum – what are called formants – we can see the two
sounds have quite different arrangements. And this is true for all vowel sounds.

It’s exactly this type of information that
lets computers recognize spoken vowels, and indeed, whole words. Let’s see a more complicated example, like
when I say: “she.. was.. happy” We can see our “eee” sound here, and “aaa”
sound here. We can also see a bunch of other distinctive
sounds, like the “shh” sound in “she”, the “wah” and “sss” in “was”,
and so on. These sound pieces, that make up words, are
called phonemes. Speech recognition software knows what all
these phonemes look like. In English, there are roughly forty-four,
so it mostly boils down to fancy pattern matching. Then you have to separate words from one another,
figure out when sentences begin and end… and ultimately, you end up with speech converted
into text, allowing for techniques like we discussed at the beginning of the episode. Because people say words in slightly different
ways, due to things like accents and mispronunciations, transcription accuracy is greatly improved
when combined with a language model, which contains statistics about sequences of words.

For example “she was” is most likely to
be followed by an adjective, like “happy”. It’s uncommon for “she was” to be followed
immediately by a noun. So if the speech recognizer was unsure between,
“happy” and “harpy”, it’d pick “happy”, since the language model would report that
as a more likely choice. Finally, we need to talk about Speech Synthesis,
that is, giving computers the ability to output speech. This is very much like speech recognition,
but in reverse. We can take a sentence of text, and break
it down into its phonetic components, and then play those sounds back to back, out of
a computer speaker. You can hear this chaining of phonemes very
clearly with older speech synthesis technologies, like this 1937, hand-operated machine from
Bell Labs. Say, "she saw me" with no expression. She saw me. Now say it in answer to these questions. Who saw you? She saw me. Who did she see? She saw me. Did she see you or hear you? She saw me. By the 1980s, this had improved a lot, but
that discontinuous and awkward blending of phonemes still created that signature, robotic

Thriller was released in 1983 and sung by Michael Jackson. Today, synthesized computer voices, like Siri,
Cortana and Alexa, have gotten much better, but they’re still not quite human. But we’re soo soo close, and it’s likely
to be a solved problem pretty soon. Especially because we’re now seeing an explosion
of voice user interfaces on our phones, in our cars and homes, and maybe soon, plugged
right into our ears.

This ubiquity is creating a positive feedback
loop, where people are using voice interaction more often, which in turn, is giving companies
like Google, Amazon and Microsoft more data to train their systems on… Which is enabling better accuracy, which is
leading to people using voice more, which is enabling even better accuracy… and the
loop continues! Many predict that speech technologies will
become as common a form of interaction as screens, keyboards, trackpads and other physical
input-output devices that we use today.

That’s particularly good news for robots,
who don’t want to have to walk around with keyboards in order to communicate with humans. But, we’ll talk more about them next week. See you then..

As found on YouTube