This chapter presents a demonstration application that can be used to test the training and authentication steps. The application asks the user to enter and confirm a 4-digit number, which is then used as the key for storing the user's voice print.
Note: The BeVocal VoiceXML interpreter combines a Café account-specific value with any specified key and uses the combination to identify a voice print. As a consequence, VoiceXML applications running in under two different accounts can use the same key (for example, 1234) to identify different users.
If a voice print is already registered for the key, the user skips the training dialog and goes directly to authentication. To effect this flow of control, the first <bevocal:register> element has its mode attribute set to skip. If no voice print is registered for the user's key, this element registers a new voice print and sets the user_status variable to new. After that, the application is redirected to the authentication dialog if the user_status variable still has the initial value of old.
You can run this demo from a BeVocal Café account and experiment to test how Speaker Verification works. Try these tests with a number of different speakers:
As different speakers experiment with the demonstration application, try to get a sense of how frequently an imposter was accepted and how frequently a true speaker was rejected.
For some applications, false acceptance is a more serious concern. To maintain security, it is better to reject an authorized user occasionally than to allow an unauthorized user to access sensitive information. For other applications, security it not as crucial and the inconvenience of rejecting an authorized user outweighs any problems caused by accepting an unauthorized user.
The verification mechanism can be adjusted to reduce either false acceptance or false rejection. When the verifier attempts to minimize false acceptance, however, false rejection increases and vice-versa. The BeVocal interpreter uses settings that try to achieve a balance, favoring a lower incidence of false acceptance. We are interested in knowing whether these settings are appropriate for your application.
BeVocal encourages you to try this experimental VoiceXML extension for Speaker Verification, and is very interested in your feedback! Please post your thoughts, observations, and suggestions to the BeVocal Café news groups.
In this interaction with the demonstration, the user's registers a voice print and is verified to be the authentic user.
The same user calls back and goes through the authentication step only.
Next, an impostor calls and is rejected by the authentication step.
<?xml version="1.0" ?>
<!DOCTYPE vxml PUBLIC "-//BeVocal Inc//VoiceXML 2.0//EN"
"http://cafe.bevocal.com/libraries/dtd/vxml2-0-bevocal.dtd">
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
<!-- *********************************************************** -->
<!-- * Variables: * -->
<!-- * key will be set to the user's identifying key. * -->
<!-- * user-status will be set to 'old' if a voice print * -->
<!-- * already exists for this user and 'new' if a new * -->
<!-- * voice print is created for the user. * -->
<!-- *********************************************************** -->
<var name="key" />
<var name="user_status" expr="'old'" />
<!-- *********************************************************** -->
<!-- * Training Dialog * -->
<!-- *********************************************************** -->
<form id="training_form">
<block>
<prompt>
Welcome to the Speaker Verification demo
</prompt>
</block>
<!-- ******************************************************* -->
<!-- * Ask the user for a 4-digit number, which will be * -->
<!-- * used as a key for Speaker Verification. * -->
<!-- ******************************************************* -->
<field name="phone4" type="digits">
<prompt>
Please say or enter the last 4 digits of your telephone number.
This number will identify you for access to the
secure application
</prompt>
</field>
<field name="confirm_key" type="boolean">
<prompt> I heard <value expr="phone4"/> </prompt>
<prompt> Is that correct? Say Yes or No </prompt>
<filled>
<if cond="confirm_key">
<prompt> Okay, Let's continue </prompt>
<assign name="key" expr="phone4"/>
<else/>
<clear namelist="phone4 confirm_key"/>
</if>
</filled>
</field>
<!-- ******************************************************* -->
<!-- * Create a new voice print unless one is already * -->
<!-- * registered for this user's key. * -->
<!-- ******************************************************* -->
<bevocal:register name="register_step1" type="phone" keyExpr="key" mode="skip">
<prompt>
I need some samples of your speech to create an
identifying voice print. Please say your 10-digit telephone number
</prompt>
<filled>
<assign name="user_status" expr="'new'"/>
</filled>
</bevocal:register>
<!-- ******************************************************* -->
<!-- * Proceed to authentication if the user already had a * -->
<!-- * registered voice print. * -->
<!-- ******************************************************* -->
<block>
<if cond="user_status == 'old'">
<prompt>
A voice print has already been registered for
the identifying number <value expr="key"/>.
Let's see if your voice matches that voice print
</prompt>
<goto next="#authentication_form"/>
</if>
</block>
<!-- ******************************************************* -->
<!-- * Refine the voice print with another speech sample. * -->
<!-- ******************************************************* -->
<bevocal:register name="register_step2" type="digits" keyExpr="key">
<prompt>
Please say any 5 digit number and repeat it.
</prompt>
</bevocal:register>
<filled namelist="register_step1 register_step2">
<prompt>
Your voice print has been registered
</prompt>
</filled>
<field name="confirm_continue" type="boolean">
<prompt>
Do you wish to continue with authentication?
</prompt>
<filled>
<if cond="confirm_continue">
<goto next="#authentication_form"/>
<else/>
<prompt>
Thank you for registering to use this application.
</prompt>
<exit/>
</if>
</filled>
</field>
</form>
<!-- *********************************************************** -->
<!-- * Authenticaion Dialog * -->
<!-- *********************************************************** -->
<form id="authentication_form" >
<bevocal:verify name="compare1" type="phone" keyExpr="key">
<prompt>
Please say your 10-digit telephone number
</prompt>
<filled>
<if cond="compare1$.decision == 'accepted'">
<prompt>
Your identity has been verified
</prompt>
<goto next="#secure_form"/>
<elseif cond="compare1$.decision == 'rejected'" />
<prompt>
Sorry you are not authorized to access
the secure application. Goodbye
</prompt>
<exit/>
</if>
</filled>
</bevocal:verify>
<bevocal:verify name="compare2" type="digits" keyExpr="key">
<prompt>
Please say any five digit number
</prompt>
<filled>
<if cond="compare2$.decision == 'accepted'">
<prompt>
Your identity has been verified
</prompt>
<goto next="#secure_form"/>
<elseif cond="compare2$.decision == 'rejected'" />
<prompt>
Sorry. You are not authorized to access
the secure application. Goodbye
</prompt>
<exit/>
<elseif cond="compare2$.decision == 'unsure'" />
<prompt>
I'm still not sure of your identity. Lets try again
</prompt>
<clear namelist="compare1 compare2"/>
</if>
</filled>
</bevocal:verify>
</form>
<!-- *********************************************************** -->
<!-- * Simulated Secure Interaction * -->
<!-- *********************************************************** -->
<form id="secure_form" >
<block>
<prompt>
Thanks for using the secure application. Good bye.
</prompt>
</block>
</form>
</vxml>
| Café Home |
Developer Agreement |
Privacy Policy |
Site Map |
Terms & Conditions Part No. 520-0008-01R01 | © 1999-2007, BeVocal, Inc. All rights reserved | 1.877.33.VOCAL |