Level 3: Advanced Prompts and Responses¶
As Level 1 or 2 courses get larger, the designer usually notices after a while that they are typing a great many lines that look more or less the same. A Prompt unit may contain many similar Response lines; the problem is that different variants multiply out, for example different ways of asking for something (“I would like”/”Could I have”/”Do you have”) and politeness (“please”/nothing). It is also normal to find that there are many similar Prompt units; a Prompt which tells the student to ask for a coffee is probably going to be very similar to one which tells them to ask for a tea.
Level 3 introduces three methods for addressing these issues: a simple version of regular expressions, templates, and phrases. We’ll look at these in order. We’ll also show how to add audio help files and lesson help files, and how to adjust the system feedback
Regular expressions allow the course designer to reduce the number of Response lines. For example, the designer can simplify the two lines
Response i would like a coffee Response i would like a coffee please
to the single line
Response i would like a coffee ?please
where the optional part, please, is tagged with a question-mark. Any phrase can be marked as optional by enclosing it in parentheses; so for example
Response i would like a ?(cup of) coffee ?please
is a short way to write the four responses
Response i would like a coffee Response i would like a coffee please Response i would like a cup of coffee Response i would like a cup of coffee please
Similarly, the three lines
Response could i have a single room Response do you have a single room Response i need a single room
can be written as the single line
Response ( could i have | do you have | i need ) a single room
where the alternatives are enclosed inside parentheses and separated by vertical bars.
If the course contains several similar Prompt units, e.g.
Prompt Lesson restaurant Group drink Text/french Dis : tu voudrais un café Response ( i would like | could i have ) a coffee EndPrompt Prompt Lesson restaurant Group drink Text/french Dis : tu voudrais un thé Response ( i would like | could i have ) a tea EndPrompt Prompt Lesson restaurant Group drink Text/french Dis : tu voudrais un coca Response ( i would like | could i have ) a coke EndPrompt
PromptTemplate allows the desiger to write the part they share once and then reuse it:
PromptTemplate ask_for_drink FRENCH ENGLISH Lesson restaurant Group drink Text/french Dis : tu voudrais FRENCH Response ( i would like | could i have ) ENGLISH EndPromptTemplate ApplyTemplate ask_for_drink "un café" "a coffee" ApplyTemplate ask_for_drink "un thé" "a tea" ApplyTemplate ask_for_drink "un coca" "a coke"
Here, the name of the template is
ask_for_drink; the name can be any word which does not include spaces.
The two arguments are
ENGLISH. A template can have any number of arguments. It is
usually advisable (though not required) for the arguments to be written in capital letters. The important
thing is that there should be no possibility of confusing an argument with a normal piece of text in the
body of the template.
Each of the
ApplyTemplate lines consists of the word
ApplyTemplate, followed by
ask_for_drink (the name of the template), followed by two pieces of text enclosed
in quotation marks. There has to be one piece of text in quotes for each argument. The meaning of the
ApplyTemplate line is “Take the named template, and substitute each of the following pieces of
text for the arguments”. So:
ApplyTemplate ask_for_drink "un café" "a coffee"
means “Take the template
ask_for_drink, and substitute
un café for
ENGLISH. This gives the result:
Prompt Lesson restaurant Group drink Text/french Dis : tu voudrais un café Response ( i would like | could i have ) a coffee EndPrompt
It is often convenient to put the
ApplyTemplate lines immediately after the definition of
the template, but there is no requirement to do so.
Systematic use of regular expressions and templates can reduce the size of the course description file a great deal, typically shortening it by a factor of ten or even more for large courses.
Sometimes, you don’t want the pattern described by the template to cover a whole
or you want to define a pattern which you can use in several
In cases like these, you can write a plain
Template, which just specifies a number of
lines. These lines can be used inside a
PromptTemplate or even another
Here is an example. In a substantial English course, there may be a number of
ìn which the student is told to ask for something. The allowed response syntax will overlap
heavily: usually, you will want to allow “I would like X”, “I want X”, “Could I have X”,
and so on. For some kinds of request, there may also be other ways of asking that
are specific to that request. A nested
Template declaration lets us do this
in a compact way:
Template i_want FRENCH GERMAN ENGLISH Text/french Demande FRENCH Text/german Frag : GERMAN Response ENGLISH please Response ( can | could ) i have ENGLISH ?please Response could you ?please give me ENGLISH Response do you have ENGLISH ?please Response give me ENGLISH ?please Response have you got ENGLISH Response i am looking for ENGLISH Response i ( need | would like | want | will have | will take ) ENGLISH EndTemplate PromptTemplate i_want_a_room_for_period FRENCH GERMAN ENGLISH Lesson hotel Group room_for_number_of_nights ApplyTemplate i_want "une chambre pour FRENCH" "Zimmer für GERMAN" "a room for ENGLISH" Response i would like to stay for ENGLISH EndPromptTemplate ApplyTemplate i_want_a_room_for_period "1 semaine" "1 Woche" "one week" ApplyTemplate i_want_a_room_for_period "2 nuits" "2 Nächte" "two nights" ApplyTemplate i_want_a_room_for_period "3 nuits" "3 Nächte" "three nights" ...
In the above rules, the
Template i_want defines a set of generally applicable ways to ask
for something, along with generic French and German text prompts.
PromptTemplate i_want_a_room_for_period defines a pattern specifically for
prompts where the student is told to ask for a room for a given number of nights.
It uses the lines from
i_want, and adds the line:
Response i would like to stay for ENGLISH
which is specific to the case of asking for a hotel room.
ApplyTemplate lines define the actual
Introduction of nested
Template units is a powerful technique that can make your course much more compact. Overuse can however also make it hard to read and maintain, since it may not be straightforward to see how the templates expand out.
Using templates with multiple L1s¶
A problem that can easily arise in a course with more than one L1 is that certain prompts will not be available for all languages. For example, if Arabic is one of the L1s then the course designer may decide not to include prompts which refer to alcohol.
In order to handle this type of situation in a simple way, the compiler is set to ignore
any prompt which contains the special phrase
*NULL*. This means that you can write the
template so that it by default will produce prompts for all the L1s, and then supply
as the value for the L1s which are to be omitted. For example, if we extended the
example above to support prompts in both French and German but wished to omit the prompt
for “coke” in French, we could do it as follows:
PromptTemplate ask_for_drink FRENCH GERMAN ENGLISH Lesson restaurant Group drink Text/french Dis : tu voudrais FRENCH Text/german Sag : Sie wollen GERMAN Response ( i would like | could i have ) ENGLISH EndPromptTemplate ApplyTemplate ask_for_drink "un café" "Kaffee" "a coffee" ApplyTemplate ask_for_drink "un thé" "Tee" "a tea" ApplyTemplate ask_for_drink "*NULL*" "eine Cola" "a coke"
“Phrases” (technically, context-free grammar rules) make it possible to write large sets of alternatives in a compact way. For example, prompts in conversational lessons, like the ones immediately above, often involve using request phrases. Rather than constantly repeating a regular expression like
( could i have | could you give me | i would like | do you have )
it is possible to define a “phrase”, as follows:
Phrase PhraseId $ask-for Response could i have Response could you give me Response i would like Response do you have EndPhrase
After this, the expression
$ask-for can be used to mean “any of the alternatives defined in the Phrase
$ask-for”. Phrase names have to start with a dollar sign
Phrases are particularly useful for defining incorrect responses; as we saw in the pronunciation course from Level 1, it can often be a good idea to let the system recognise incorrect replies and alert the student to the fact that they are doing something wrong. Since there are, in general, many more ways to answer incorrectly than correctly, it can be necessary to define quite large sets of possible responses.
Coverage unit allows the course designer to specify a set of phrases which the system will be able to recognise; the convention is that all of them will be treated as incorrect responses to every prompt, unless they happen to duplicate responses explicitly marked as correct. So, for example in a lesson about dates, we might have the following Phrase and Coverage units:
Phrase PhraseId $month Response january Response february ... Response december EndPhrase Phrase PhraseId $day-number Response first Response second ... Response thirty-first EndPhrase Coverage Response $month $day-number Response the $day-number of $month EndCoverage
Here, the Coverage unit defines all phrases like “March fifteenth” or “the twenty-second of April”.
Coverage units define the set of phrases which the speech recogniser
is aware of, but it is also necessary to specify just when a given phrase will be available.
By default, the rule is that a phrase defined for a given lesson is available for the whole
of the course that the lesson belongs to. Sometimes, however, the grammar writer may want to make
the vocabulary more restrictive and only have phrases be available for the lesson in which
they are defined. This can be done by adding a
GrammarLevel line to the relevant
For consistency, if the course designer wishes to make the grammar-level explicit, they can also write:
This is equivalent to having no
Audio help files¶
In most courses, it’s a good idea to include examples of correct pronunciation which the student can imitate. There’s an easy way to do this using audio help files. For each prompt where you want to provide a spoken example, you record one or more audio files, for example using the Windows SoundRecorder tool. You then add a line in the
Prompt unit which links to the file in question and gives a transcription (text saying what words you have in the file). The recorded audio help files are put in the course’s
multimedia directory along with the other multimedia files. It’s generally a good idea to create a subdirectory under
multimedia to hold the audio help files, but this is not obligatory.
For example, if we take a
Prompt unit from the level 2 multimedia course, we could add an audio help line like this:
Prompt Lesson animals Group 1 Multimedia cat.png Text/english What is it? Response a cat Response it's a cat AudioHelp help/cat.wma It's a cat EndPrompt
This says that there is a recorded help file
help/cat.wma in the
multimedia directory. When the help file is displayed on the screen, it will be shown with the text
It's a cat.
The course at the end of this section shows a more elaborate example of adding audio help files.
Specifying the number of audio help examples shown¶
By default, the system shows one audio help example in response to a Help request.
You are able to change this by adding a
ShowHelp line to the
So for example if you add the line
then the student will be shown two audio help examples, if at least two are defined.
If you add the line
then the student will be shown no audio help examples.
If you wish to have different behavior in different lessons, it is possible to
ShowHelp line in the
Lesson unit. The system will take the value from
the current lesson if it’s specified there, otherwise from the course.
Systematic recording of audio help files using LiteDevTools¶
The practical problem with recorded audio help is that keeping track of all the files involved is messy and error-prone, particularly if someone else is recording them for you. There is a way to do this efficiently using resources on the LiteDevTools page. The basic idea is that you don’t specify the names of the audio help files yourself: you just write the text, and then let the system assign the file names for you.
In more detail, here’s an example showing how it works. Let’s say I have a toy course called
visual/visual1b with a couple of multimedia prompts which respectively show a picture of a cat and a picture of a dog, and you want to provide audio help. The prompt declarations look like this:
Prompt Lesson animals Group 1 Multimedia cat.jpg Text/english What is it? Response ?( it's ) a cat AudioHelp It's a cat EndPrompt Prompt Lesson animals Group 1 Multimedia dog.jpg Text/english What is it? Response ?( it's ) a dog AudioHelp It's a dog EndPrompt
Note that the
AudioHelp lines only have text in them - there is no file specified. Now when I upload the course to the server and run the Compile step, at the end of the trace output I see this notification:
--- Written blank audio output file (2 examples, 2 new) to z:/timissco/devel/litecontentcompilation/visual/visual1b/grammars/blank_audio.txt COPYING BLANK AUDIO FILE TO z:/manny/GeneratedFiles/visual/visual1b/blank
If I look in my FTP directory, using FileZilla or some other FTP client, I can see the file
blank_audio.txt sitting in the directory
GeneratedFiles/visual/visual1b. I drag and drop it to a directory on my local machine. There isn’t actually any need to look at it, since I’m just going to pass it to LiteDevTools, but out of curiosity let’s see what’s there. As we expect, the contents list the audio files that need to be recorded:
AudioOutput help any_speaker any_file.wav It's a cat MISSING_FILE AudioOutput help any_speaker any_file.wav It's a dog MISSING_FILE
Now I go to the LiteDevTools page and log in. (If you don’t already have a LiteDevTools account, you’ll need to create one for yourself). I click on
Manage tasks under
Recording and on the next screen click on
Create new recording task. I get a dialogue that looks like this:
I browse to the place where I saved the blank audio file and select it, after which the dialogue is:
I fill in a name and check
Create anonymous task:
When I click
Save task and get link, the new task appears in the list:
I can now pass the link to someone and ask them to connect directly to LiteDevTools and record the audio files. (Because I chose “Create anonymous task”, they won’t need an account to be able to get in). When I visit my dashboard again, I see that the files have appeared:
I click on
Results, which gives me the following menu:
The first option lets me review the audio files to see if I like them. If I do, I choose the second option. This copies the audio file to the place where they are needed and lets me download a text file of metadata. (If I also wanted to download the actual audio files, so that I had them available on my own machine, I could have chosen the third option). The metadata file has two lines, which say what the contents of the new audio files are:
AudioOutput help any_speaker help/773_160603124916.wav It's a cat AudioOutput help any_speaker help/774_160603124920.wav It's a dog
I copy this material to the end of the
visual1b grammar file. Finally, I can upload the course again, and now I do indeed have audio help for the two prompts in question.
It is perhaps unnecessary to go through this process in order to record two files for a toy course. In a real course, which may require dozens or even hundreds of audio help files, it is a very efficient way to organize the recording work. The cycle can be repeated at any point, and the recording task will only include the new files that have appeared in the course since the last iteration.
Text help files¶
Sometimes, you may just want to include text help for a prompt. You do this by adding a
TextHelp line. This shows the text in the help window, but does not have any associated audio file. If we wished to rewrite the example immediately above using text help instead of audio help, the result might be as follows:
Prompt Lesson animals Group 1 Multimedia cat.png Text/english What is it? Response a cat Response it's a cat TextHelp Say: It's a cat EndPrompt
At the moment, the system shows audio help if it is available, and if it is not available shows text help. This behavior may be changed in the future so as to allow the course designer to control the way help is shown to the student.
Lesson help files¶
Sometimes you may want also to include written content with your lesson, perhaps to explain some grammar or just to clarify how the student is meant to respond to the prompts. You can do this by declaring a help file with the lesson. Help files are HTML files which need to be put in the
doc subdirectory for the course. A typical help file declaration looks like this:
Lesson Name present_tense PrintName Learn the present tense HelpFile present.html EndLesson
Lesson unit defines a lesson called
present_tense and associates it with the help file
present.html might have the following content:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs"> <head> <link rel="stylesheet" type="text/css" href="style.css" /> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>The present tense</title> </head> <body> <table width="330" border="0"> <tr> <td> </td> <td><h1>The present tense in English</h1> <hr/> <p>For almost all verbs, the present tense in English has two forms</p> <ul> <li>The base form</li> <li>The third person singular</li> </ul> <hr/> <h2>The base form</h2> <p align="justify">The base form is the form used for the first person, the second person and the third person plural, for example <i>run</i>.</p> <hr/> <h2>The third person singular</h2> <p align="justify">The third person singular is different, and adds an <i>s</i> to the base form, for example <i>runs</i>.</p> </table> </body> </html>
Sometimes, you may want to have different versions of the help file for different student languages. You can do it as follows:
Lesson Name present_tense PrintName Learn the present tense HelpFile/english present_english.html HelpFile/chinese present_chinese.html HelpFile/arabic present_chinese.html EndLesson
Punctuation in Responses¶
It’s sometimes convenient to be include punctuation when writing Response lines, in particular if you are copying them from normal text. In these circumstances, you may find the restriction that Responses must be lower-case with no punctuation annoying and time-consuming.
You can include normal text in Responses if you include the line:
somewhere in your course. (You’ll most likely want to put it near the beginning). You can then write Prompts like the following, where the student is asked simply to repeat the prompt text:
Prompt Lesson dickens Group 1 Text/english It was the best of times, it was the worst of times. Response It was the best of times, it was the worst of times. AudioHelp It was the best of times, it was the worst of times. EndPrompt
Since the prompt, response and audio help are all the same in a course of this kind, it is natural to use a Template:
PromptTemplate line LESSON NUMBER LINE Lesson LESSON Group NUMBER Text/english LINE Response LINE AudioHelp LINE EndPromptTemplate ApplyTemplate line "dickens" "1" \ "It was the best of times, it was the worst of times."
The downside of including this declaration is that all punctuation marks are stripped out of the Response by the compiler. This means that you will not for example be able to use the character
? to indicate an optional element.
Adjusting system behaviour¶
This section describes a few tricks you can use to change the way the system responds.
Changing the type of recognition feedback¶
You can customize recognition feedback using a
This can be put either in the
Course unit, a
Lesson unit, or both,
Lesson unit taking precedence over the
Course unit. A typical line
RecMessage I think I heard "RECRESULT"
This means that the system will for example display the text
I think I heard "A cat"
where normally it would have displayed
If you have an empty
RecMessage line, i.e. just
then the system displays no recognition result.
It’s possible to have different messages for accepted and rejected
responses. To do this, replace the single
RecMessage line with two
repectively, for example
RecMessageAccept I think I heard "RECRESULT"... correct RecMessageReject I think I heard "RECRESULT"... WRONG!!
If the system would normally have displayed
it will now display the text
I think I heard "A cat"... correct
for an accepted response, and
I think I heard "A cat"... WRONG!!
for a rejected response.
You may also want to change the casing of the recognition result. By default, the first letter
of the result is uppercase and the rest lowercase, but this may not look right if you are
RecMessage. You can change the casing by adding a
RecCase line in the
unit, as follows:
puts the recognition result all in lowercase.
puts the recognition result all in uppercase.
capitalises the first letter of the recognition result and leaves the rest in lowercase.
By adding a
Feedback line in the
Course unit, you can change the type of recognition feedback
the system produces. If you use the value
the system will try to show words it thinks have been incorrectly recognized in red. The downside is that
sometimes it guesses wrong, which can confuse the student, but if it’s accurate enough on your course
then it may be very useful. In the opposite direction, if you think that recognition is not very accurate, you may find the empty
RecMessage line handy.
If you use the value
then the system will produce no written recognition feedback, just a blue border. This is useful if you only want to record what the student is saying, perhaps as an introductory evaluation module.
Specifying the number of attempts the student can make¶
By default, the student can attempt each example twice before the system forces them
to move to the next one. You are able to change this by adding a
MaxTries line to the
So for example if you add the line
then the student can try each example up to five times. If you add
then they can only try an example once.
If you wish to have different behavior in different lessons, it is also possible to
MaxTries line in the
Lesson unit. The system will take the value from
the current lesson if it’s specified there, otherwise from the course.
Controlling what happens at the end of a lesson¶
When the student reaches the end of a lesson, the default behavior is to show a popup saying
End of lesson and then offer to go to the lesson menu. You can customise this in two ways:
- You can specify the message in the popup by adding an
EndMessage Congratulations, you have finished the third lesson!
EndMessage line can be placed either in the
Course unit or in the
As usual, the
Lesson unit takes precedence.
- You can add a
NextLessonline in the
This makes the system immediately jump to the designated lesson after showing the popup.
If you want to specify that the system should not jump to any lesson or offer to go to the lesson menu, you can write
If you want to specify explicitly that the system should offer to go to the lesson menu, you can write
though this is not necessary.
You can force the system to discard recognition results which it thinks are unlikely to be correct by adding a confidence threshold in the
Course unit. For example, the declaration:
means that any recognition result with a confidence score of less than 30 will be discarded and treated as though nothing had been recognised. If you want all the courses in a namespace to have the same confidence threshold, you can save time by writing:
Threshold 30 all_domains
Course unit of one course.
Good values for confidence thresholds depend on the grammar. In general, larger grammars will need lower confidence thresholds, and smaller grammars will need higher ones.
A better multimedia course¶
The following improved version of the simple multimedia course from Level 2 gives a concrete example of how to use the tools introduced at Level 3. We enhance the course in several ways:
- We use regular expressions to allow a larger range of possible responses.
- We use templates to avoid unnecessary repetition. This makes it much easier to add new animals and stars if we later want to expand the course.
- We include Coverage units to tell the recognizer about some other animals and stars that aren’t in the Prompts. This means that it will be able to recognize these phrases too.
- The fact that the recognizer now knows about many possible incorrect answers let it give more informative feedback than simple rejection.
- We include audio help files.
The improved course,
visual2, looks like this. First, we have as usual a
# --------------------------------------------------- # Course # One course, 'visual2_course' Course Name visual2_course Client multimedia_client L2 english Languages english Feedback colour_highlighting_on_response EndCourse
The difference compared to the Level 2 course is the line
which tells the server to show incorrect words it has recognized in red.
Next, we have the two
Lesson units, which are just the same as in the previous version:
# --------------------------------------------------- # Lessons # Two lessons Lesson Name animals PrintName Animals Description Identify animals EndLesson Lesson Name stars PrintName Stars Description Identify movie stars EndLesson
The largest changes are in the prompts, which we have rewritten
ApplyTemplate units. We have also
added audio help file lines. The prompts
animals lesson now look like this:
# --------------------------------------------------- # Prompts # Identify animals PromptTemplate what_animal PHRASE PICTURE AUDIOHELP TRANSCRIPTION Lesson animals Group 1 Multimedia PICTURE Text/english What is it? Response ?( it's | that's | it is | that is ) PHRASE AudioHelp help/AUDIOHELP TRANSCRIPTION EndPromptTemplate ApplyTemplate what_animal "a cat" "cat.png" "cat.wma" "It's a cat" ApplyTemplate what_animal "a dog" "dog.png" "dog.wma" "It's a dog"
The idea is to put all the common structure for an “animal” prompt into the template definition; then each new prompt only requires one line.
Coverage unit, which specifies possible incorrect responses
animals lesson, is shown below. It uses the two Phrases
$he_or_she_or_it_is; the first is an phrase
like “a cat” or “a dog”, and the second a phrase like “it’s” or “he is”.
Coverage unit adds responses to the recognizer which are
either plain animal phrases, or animal phrases preceded by a phrase like
Coverage Lesson animals Response $animal Response $he_or_she_or_it_is $animal EndCoverage
Phrase units themselves are specified as follows:
evidently, it is again easy to add more animals if desired.
# --------------------------------------------------- # Phrases Phrase PhraseId $he_or_she_or_it_is Response it's Response it is Response that's Response that is Response he's Response he is Response she's Response she is EndPhrase Phrase PhraseId $animal Response a dog Response a cat Response a horse Response a sheep Response an aardvark Response a dinosaur EndPhrase
The prompts and coverage units for the
stars lesson are just the same,
with names of stars replacing names of animals:
# Identify stars PromptTemplate what_star NAME PRONOUN PICTURE AUDIOHELP TRANSCRIPTION Lesson stars Group 1 Multimedia PICTURE Text/english Who is PRONOUN? Response ?( it's | PRONOUN's | that's | it is | PRONOUN is | that is ) NAME AudioHelp help/AUDIOHELP TRANSCRIPTION EndPromptTemplate ApplyTemplate what_star "brad ?pitt" "he" "brad_pitt.jpg" "brad_pitt.wma" "That's Brad Pitt" ApplyTemplate what_star "angelina ?jolie" "she" "angelina_jolie.jpg" "angelina_jolie.wma" "That's Angelina Jolie" Coverage Lesson stars Response $star Response $he_or_she_or_it_is $star EndCoverage Phrase PhraseId $star Response brad ?pitt Response angelina ?jolie Response george ?clooney Response reese ?witherspoon Response beyoncé Response madonna EndPhrase
The full course file¶
# --------------------------------------------------- # Course # One course, 'visual2_course' Course Name visual2_course Client multimedia_client L2 english Languages english Feedback colour_highlighting_on_response EndCourse # --------------------------------------------------- # Lessons # Two lessons Lesson Name animals PrintName Animals Description Identify animals EndLesson Lesson Name stars PrintName Stars Description Identify movie stars EndLesson # --------------------------------------------------- # Prompts # Identify animals PromptTemplate what_animal PHRASE PICTURE AUDIOHELP TRANSCRIPTION Lesson animals Group 1 Multimedia PICTURE Text/english What is it? Response ?( it's | that's | it is | that is ) PHRASE AudioHelp help/AUDIOHELP TRANSCRIPTION EndPromptTemplate ApplyTemplate what_animal "a cat" "cat.png" "cat.wma" "It's a cat" ApplyTemplate what_animal "a dog" "dog.png" "dog.wma" "It's a dog" Coverage Lesson animals Response $animal Response $he_or_she_or_it_is $animal EndCoverage # Identify stars PromptTemplate what_star NAME PRONOUN PICTURE AUDIOHELP TRANSCRIPTION Lesson stars Group 1 Multimedia PICTURE Text/english Who is PRONOUN? Response ?( it's | PRONOUN's | that's | it is | PRONOUN is | that is ) NAME AudioHelp help/AUDIOHELP TRANSCRIPTION EndPromptTemplate ApplyTemplate what_star "brad ?pitt" "he" "brad_pitt.jpg" "brad_pitt.wma" "That's Brad Pitt" ApplyTemplate what_star "angelina ?jolie" "she" "angelina_jolie.jpg" "angelina_jolie.wma" "That's Angelina Jolie" Coverage Lesson stars Response $star Response $he_or_she_or_it_is $star EndCoverage # --------------------------------------------------- # Phrases Phrase PhraseId $he_or_she_or_it_is Response it's Response it is Response that's Response that is Response he's Response he is Response she's Response she is EndPhrase Phrase PhraseId $animal Response a dog Response a cat Response a horse Response a sheep Response an aardvark Response a dinosaur EndPhrase Phrase PhraseId $star Response brad ?pitt Response angelina ?jolie Response george ?clooney Response reese ?witherspoon Response brittney ?spears Response madonna EndPhrase