Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Select a certain domain or a small amount of domains that your character should be able to talk about. For the Brad example character, this is the toolkit, the toolkit modules, ICT, USC and Brad himself.
  2. Within these domains, identify the topics that are of interest, or that you anticipate your users will want to discuss. For instance, Brad will explain what the toolkit is, how you can use it, which modules are part of it, and where you can find more information.
  3. For each topic, identify the statements you want your character to make. You can add these on the right hand side, in the Utterances tab. Try to create statements that are stand-alone, i.e. not referring to any words the user might have used in the question (also see guidelines below).
  4. For each statement, define various questions for which the statement can be an answer. These questions can be defined in the left hand side in the Utterances tab. Link all appropriate questions to the statement by selecting the statement and all associated questions, and press CTRL + 6. You should now have sets of questions that link to exactly one statement.
  5. For each statement, create a variation and link that to all existing questions for that statement. You now have a variety of topics that the user can discuss in several ways, and for which there are 2 variations for each answer. Be sure to save the plist (or turn on autosaving in Edit -> Properties).
  6. For each answer statement (right side), ensure you select the correct domain 'Brad Smith' and correct speaker 'Brad'. Also be sure to save the plist.
  7. Before interacting with the character, you should train the NPCEditor. You can do this in the Classifiers tab. Select the character from the Addressee column. If you have one character, there should be only one row. If there are more rows, you have defined multiple addressees. This is likely do the default Anybody addressee. In the Utterances tab, on the right hand, you should select all rows and make the addressee either your character name or Anybody (with only one character, the addressee does not matter that much). After you have made sure there is only one row in the Classifiers tab, select that row, check the 'Test on training data' box at the bottom and click Start Training. You don't have to train the NPCEditor any time you make a change, but if you make substantial changes, and the character is not reacting the way you expected it to, you should try retraining it.
  8. You are now ready to test out the character for yourself. Just run the entire scenario (including render and Text To Speech, etc.), and start interacting with the character. You will find that some questions are not answered correctly, that some answer might not sound as well as you anticipated, and that you are thinking of both more answers and questions. You can make all the changes you want on the fly in the NPCEditor, without the need to restart it.
  9. If you are happy with your interactions, you can start having others interacting with it. This will show you which areas need more work. It will also result in much data, especially in the form of questions, which you can use as new input for the NPCEditor. You could use the provided Logger to collect all messages (which include the messages from the speech client to the NPCEditor, and extract all questions asked into a separate text file (you would probably have to write a script for that). You can then import this text file into the NPCEditor, after which you can create new answers for these questions, or link questions to existing answers.
  10. With this iterative process, the quality of your character should improve over time. Let us know how you are doing!

Guidelines

Author generic, stand alone answers

The less specific you make your answers, the more appropriate they are in different situations. For example, if you ask Brad "Did you go to USC?", he can answers "Yes, I went to USC.". This is a perfectly fine and appropriate response for a yes-no question, but not for a related question, like "Where did you go to school?" As an author, you can either create an additional response, like "For college, I went to USC", or you can link both questions to a more generic answer like "I went to USC."

In general there is a balance you need to keep between making answers interesting and having them work in many different contexts. It can be very compelling when a virtual character responds exactly to what you say, especially by repeating part of the question (i.e. "Yes, I did go to USC! You too?"), but having an inappropriate response completely breaks the illusion. The best strategy seems to stick to generic and broad answers most of the time, while anticipating some very specific answers only once in a while. The generic answers should be stand alone statements that sound good in relative isolation and relate broadly to the topic inquired about.

Provide multiple answers for each question

The NPCEditor usually tries to not say the exact same line twice in a row, but it can only do that when an appropriate alternative is available. You should therefore make sure that you explicitly provide several paraphrases for a statement. Otherwise, the character can either repeat the exact same line (which is unrealistic), or it can select a different response which is statistically close to the answer your provided, but semantically very different.

Don't have your character ask questions, unless you know you will get a very specific answer back

The NPCEditor version provided with the toolkit treats any input (usually a question) without any context. That means a character is unaware of what has been said in the conversation thus far, nor does it know what it has just said (apart from a simple 'do not repeat yourself is possible' rule). As a result, a character cannot ask a yes / no question, because it has no way to relate the answer ("yes", "no" or "maybe") to the question just asked. To the character, the answer is just isolated input; it cannot discern to which of potentially many yes/no questions it is an answer to. Of course, if you have only one yes/no question in your domain, you are safe to assume any yes/no related input is an answer to that particular question. In addition, if you know you will get a very specific answer back, you can respond appropriately to that specific answer. For instance, apart from a couple of rhetorical questions, Brad only asks the user how he or she is doing. This works in most cases, because it can appropriately respond to answers like "I am fine" and "Not so well". However, when a user just says "OK", we need to make a choice to either treat that as a response to how that person is doing, or as an unrelated acknowledgement to any of Brad's statements.

There are ways around this particular problem that we are experimenting with within ICT. If you are interested, do not hesitate to contact us.

When using Text To Speech, check how your answers sound

You can do this by double clicking on the answer in the right hand panel of the NPCEditor, or by selecting the row and clicking Send, at bottom right. You might notice that a particular TTS engine does not pronounce a certain word you expected it. If that's the case, you can either use a different word, or be more phonetic in your spelling. For instance, the Brad character has "ICT" spelled as "I C T" in order to force the TTS engine to pronounce each individual letter, rather than trying to create a sound as if it was a word.

For each set of answers, gather around 30 questions

Initially you can just have a couple of questions for each set of answers, but user testing will result in many different paraphrases for these questions. Collecting all these paraphrases and linking them to the right set of answers ensures that your character will get more and more robust.

...