SALT:Ngônngữhỗtrợtiếngnóitrênweb
Việc sử dụng điện thoại để truy cập các dịch vụ tự động như kiểm tra tài khoản
ngân hàng hay lịch bay không phải là điều mới mẻ. Những hệ thống như vậy cho
phép người gọi trả lời các câu hỏi hay chọn các tùy chọn, và hệ thống sẽ đáp trả
bằng các câu nói thâu âm sẵn hay dùng kỹ thuật tổng hợp ti
ếng nói.
Các hệ thống nhận dạng tiếngnói tương tác (IVR - Interactive Voice Recognition) đã
xuất hiện nhiều năm nay và là trải nghiệm ban đầu về công nghệ tiếngnói đối với nhiều
người.
Sau khi World Wide Web phát triển vào những năm 1990 và các công nghệ webtrở nên
chuẩn hóa và phổ biến, các nhà phát triển công nghệ tiếngnói bắt đầu tìm kiếm phương
thức kết hợp tiếngnói với web. Tất nhiên, phương thức đầu tiên là phố
i hợp các công
nghệ điện thoại/IVR chuyên biệt trước đây với năng lực của cơ sở hạ tầng máy chủ web.
Và người ta nhanh chóng nhận ra nhu cầu về một ngônngữ chuẩn, chuyên biệt dựa trên
XML. Ngônngữ này cho phép định nghĩa ngữ cảnh và luận lý điều khiển ứng dụng IVR
trong môi trường web. Ngônngữ VoiceXML được VoiceXML Forum
(http://www.voicexml.org) phát triển nhằm đáp ứng nhu cầu này. VoiceXML Forum
được thành lập vào n
ăm 1999 bao gồm các công ty AT&T, IBM, Lucent và Motorola,
hiện nay số công ty thành viên đã lên đến hàng trăm. Việc đưa ra VoiceXML không chỉ
tạo nên các giải pháp IVR mở và linh hoạt hơn, nó còn cho phép truy cập đến ứng dụng
web bằng tiếng nói.
Song song với những phát triển trong việc tích hợp tiếngnói và web, máy tính cá nhân
(PC) ngày càng trở nên đủ mạnh để xử lý các tác vụ cơ bản của công nghệ tiếng nói: nhận
dạng tiếngnói (dữ liệu đầu vào) và thể hiện tiếngnói (d
ữ liệu đầu ra). Đây quả là kỳ công
nếu biết rằng vào những năm 1970 người ta phải cần đến 50 máy tính cho hệ thống
HAPPY của trường đại học Carnegie Mellon để thực hiện nhận dạng câu nói liên tục (với
tốc độ đàm thoại tự nhiên).
N
hờ sự phát triển của PC cũng như sự phát triển của chính các công nghệ tiếng nói,
người dùng máy tính bắt đầu có cơ hội trải nghiệm công nghệ tiếngnóitrên chính PC của
mình. Ngày nay, người dùng máy tính bình thường có cơ hội sử dụng các sản phẩm tiếng
nói từ nhiều nhà sản xuất, hỗtrợ nhiều công việc, từ điều khiển máy tính thông qua lệnh
nói đến đọc văn bản để nh
ập trực tiếp vào trình soạn thảo văn bản.
Các nhà phát triển phần mềm cũng được hưởng lợi việc kết hợp công nghệ tiếngnói với
PC. Hiện có nhiều lựa chọn để kết hợp công nghệ tiếngnói vào ứng dụng, từ các bộ công
cụ phát triển SDK của các hãng phần mềm hệ thống như Speech API (SAPI) của
Microsoft và PlainTalk của Apple, đến các công cụ của các hãng phần mềm độ
c lập như
SDK sinh trắc và tiếngnói của NeuVoice.
Với sự gia tăng năng lực và khả năng xử lý tiếngnói của PC, một khái niệm mới trong
việc kết hợp tiếngnói bắt đầu nổi lên - ứng dụng 'multimodal' (đa phương thức), có khả
năng hỗtrợ giao tiếp người dùng phía client bằng tiếng nói, ngoài các phương thức
nhập/xuất thông thường là bàn phím, chuột và màn hình. Vì trình duyệt web ngày càng
trở nên phổ biến và có khả năng thể hiện giao diện ng
ười dùng phong phú, rõ ràng việc
phát triển ứng dụng đa phương thức yêu cầu kết hợp chặt chẽ hơn công nghệ tiếngnói
với dữ liệu và mô hình thực thi trên web, như các ngônngữ kịch bản theo sự kiện, DOM
(Document Object Model) và HTML.
Mặc dù VoiceXML đã được mở rộng để cung cấp mức kết hợp này, nhưng một số người
trong ngành công nghiệp cho rằng cần có một mô hình khác biệt từ nền tả
ng. Và điều này
dẫn đến việc phát triển SALT (Speech Application Language Tags) của tổ chức SAL
Forum (www.saltforum.org), được thành lập vào năm 2002 với các công ty Microsoft,
Intel, Cisco và Philips, hiện nay số công ty thành viên đã tăng hơn 70. Mục tiêu của
SALT là kết hợp các công nghệ tiếngnói vào nhiều loại thiết bị điện toán, từ PC đến
PDA, thông qua việc hỗtrợ các ứng dụng đa phương thức. Để đạt được mục tiêu này,
SALT sử dụng ph
ương thức khác với VoiceXML.
Khác biệt giữa VoiceXML và SALT
VoiceXML ban đầu được thiết kế nhằm cung cấp môi trường bao quát cho việc xây dựng
ứng dụng tiếng nói. Nó đưa ra các thành phần định nghĩa dữ liệu (form và các vùng trong
form), lộ trình thực thi và cung cấp môi trường thực thi để dịch lệnh VoiceXML lúc thực
thi. Nói chung, việc kết hợp web/tiếng nói được thực hiện thông qua việc tương tác giữa
máy chủ web và máy chủ VoiceXML.
Ví dụ, trong một ứng dụng VoiceXML tiêu biểu, đ
iện thoại thực hiện chức năng như
công cụ duyệt web, dữ liệu vào là lời nói của người dùng được gửi đến máy chủ
VoiceXML để dịch lời nói dựa trêntàiliệu lệnh bao gồm các thành phần VoiceXML.
Lệnh trong tàiliệu có thể chỉ thị cho máy chủ VoiceXML kết nối tới một địa chỉ URL
trên máy chủ web, ở đó kịch bản web (ví dụ, JavaScript) tương tác với ứng dụng/website
và đáp trả lệnh VoiceXML tương ứng. Máy chủ VoiceXML nhận thông tin lệnh từ máy
chủ web, dịch nghĩa nó, và gửi thông tin lời nói đầu ra thích hợp đến người dùng thông
qua điện thoại.
N
gược lại, SALT cung cấp môi trường tối thiểu cho việc xây dựng ứng dụng tiếng nói.
N
ó giới hạn ở việc định nghĩa dữ liệu và hành vi chuyên biệt theo giao tiếp tiếng nói, như
là lắng nghe đầu vào và xác định văn phạm dùng để dịch nghĩa thông tin đầu vào. Tất cả
dữ liệu khác, như định nghĩa form và thành phần của form, giao cho ngônngữ đánh dấu
mà SALT nhúng trong đó, như HTML.
Ví dụ 1
<salt:prompt id='promptWelcome' oncomplete='listenTag.Start()'>
Welcome to a SALT multi-modal sample application.
</salt:prompt>
Để cung cấp mức kết hợp này, các thẻ lệnh SALT được xây dựng theo dạng các thành
phần XML có chức năng giống như phần mở rộng của các ngônngữ đánh dấu hiện nay
như HTML, XHTML và WML. Hơn nữa, các thành phần SALT còn dùng giao tiếp
DOM để làm việc như là thành viên có toàn quyền trong mô hình dữ liệu của trang chủ.
Điều này có nghĩa là chúng sở hữu các phương thức, thuộc tính và sự kiện có thể được
truy xuất trực tiếp từ các ngônngữ kịch bản tương thích ECMA như JavaScript theo cùng
cách thức như những thành phần khác trong trang web tương thích DOM.
N
ói tóm lại, SALT được thiết kế đặc biệt để thích hợp với mô hình dữ liệu và môi trường
thực thi được các nhà phát triển web sử dụng hiện nay. Toàn bộ đặc tả kỹ thuật của SALT
có ở địa chỉ http://saltforum.org/devforum/default.asp
.
Ứng dung SALT
Chúng ta hãy xem xét ứng dụng đa phương thức cơ bản dùng 4 thành phần thẻ lệnh quan
trọng nhất của SALT.
Trước hết, bạn cần có một phương thức nhắc người dùng đưa thông tin vào. Thẻ lệnh
SALT <prompt> được dùng để xác định nội dung phát âm như lời chào, hướng dẫn hay
xác nhận. Nguồn nội dung có thể là văn bản được phát âm hay tập tin âm thanh. Với tập
tin âm thanh thì công việc chỉ đơ
n giản là phát lại tập tin này, nhưng với văn bản thì phải
cần đến công cụ TTS (text-to-speech) để chuyển thành tiếng nói.
Ví dụ 1 minh họa việc sử dụng thành phần <prompt> để phát âm văn bản 'Welcome to a
SALT multimodal application'. Sự kiện oncomplete kích hoạt thành phần <listen> khi
việc phát thông báo hoàn tất.
Ví dụ 2
<salt:listen id='listenTag'>
<salt:grammar src='TagGrammar.xml' />
<salt:bind value='//Tag' targetElement='selectTag' />
</salt:listen>
Thành phần <listen> cung cấp điều khiển nhận dạng tiếng nói, chuyển tiếngnói thành
văn bản và xử lý kết quả nhận dạng. Ví dụ 2 minh hoạ việc sử dụng thành phần <listen>.
Trong ví dụ này, có 2 thành phần con: Thành phần <grammar> xác định từ khóa nhận
dạng, thành phần <bind> chỉ đến thành phần khác của trang web, ví dụ như một thẻ lệnh
HTML.
Thành phần <grammar> xác định chính xác cái mà chương trình có thể nhận dạng và có
thể xem như là danh sách từ điển. Trình nhận dạng tiếngnói dịch tín hiệu số thể hiện câu
nói thành các âm và so khớp với thể hiện âm của các từ trong danh sách được phân định
theo văn phạm. Nếu tìm th
ấy từ trùng khớp thì kết quả được trả về. Văn phạm có thể
được xác định ngay trong dòng lệnh hoặc có thể nằm ở một tập tin riêng và được chỉ đến
bởi thuộc tính src của thành phần <grammar>. Trong ví dụ 2, văn phạm chứa trong tập tin
ngoài 'TagGrammar.xml'; mã nguồn của tập tin này được trình bày trong ví dụ 3 định
nghĩa nhận dạng 3 từ 'prompt', 'listen', 'grammar'.
Với 4 thành phần SALT cơ bản trên, chúng ta có thể ráp thành ứng dụ
ng mẫu như ở ví dụ
4. Điều lưu ý đầu tiên là trang web này phải tham chiếu đến định nghĩa SALT ở dòng
đầu.
<HTML xmlns:salt= 'http://www.saltforum.org/2002/SALT'>
Khi trang nạp vào trình duyệt, dòng:
<body onload='promptWelcome.Start()'>
bắt đầu phát thông báo được chỉ định là promptWelcome, công cụ TTS sẽ phát âm câu
'Welcome to a SALT multimodal sample. You may select '. Sau khi thông báo kết thúc,
sự kiện oncomplete của thành phần promptWelcome kích hoạt thành phần <listen> được
chỉ định là listenTag. Việc này sẽ kích hoạt trình nhận dạng lắng nghe tiếngnói đầu vào.
Khi phát hiện tín hiệu
đầu vào, trình nhận dạng sẽ cố gắng nhận dạng dựa trên văn phạm
đã được nạp bởi thành phần con <grammar>.
<salt:grammar N
ếu nhận dạng thành công, thành phần con <bind> sẽ được thực thi.
<salt:bind value='//Tag' targetElement='selectTag' />
Lệnh này gán giá trị của nút <tag> ở dữ liệu XML đầu ra của trình nhận dạng cho thành
phần selectTag, được định nghĩa ở dạng HTML trong ví dụ này là danh sách xổ xuống.
Việc này dẫn đến tùy chọn tương ứng trong điều khiển HTML SELECT được chọn. Sau
khi bind được thực thi, sự kiện nhận dạng thành công được kích hoạt với onreco, nó gọi
hàm JavaScript ProcessInput(). L
ệnh trong ProcessInput() khi đó sẽ hiển thị khai báo văn
bản đang được hiển thị trong điều khiển HTML SELECT. Lưu ý là ProcessInput() cũng
được gọi bởi sự kiện onchange của điều khiển SELECT được kích hoạt khi người dùng
chọn một tùy chọn bằng chuột hay bàn phím.
Ứng dụng đa phương thức đơn giản này minh hoạ cách thức SALT hỗtrợtiếngnói điều
khiển các thành phần trang web trong khi vẫn cho phép người dùng tương tác với các
thành phần đó bằng chuột và bàn phím theo cách truyền thống. Ở khía cạnh lập trình, ứng
dụng này cũng minh họa việc tương tác thông suốt giữa các thành phần SALT với mô
hình dữ liệu và môi trường thực thi c
ủa trang web thông thường.
Ví dụ 3
<grammar root='root' xml:lang='en-US' version='1.0'
xmlns='http://www.w3.org/2001/06/grammar'>
<rule id='root' scope='public'>
<ruleref uri='#Tag'/>
<tag> $.Tag = $$ </tag>
</rule>
<rule id='Tag' scope='public'>
<one-of>
<item>prompt<tag> $._value =
'prompt'</tag></item>
<item>listen<tag> $._value =
'listen'</tag></item>
<item>grammar<tag> $._value =
'grammar'</tag></item>
<item>bind<tag> $._value = 'bind'</tag></item>
</one-of>
</rule>
</grammar>
SALT với công nghệ WEB của Microsoft
Việc kết hợp chặt chẽ SALT với mô hình dữ liệu và môi trường thực thi phổ biến của
web (HTML, DOM, XML và ngônngữ kịch bản) đồng thời cũng hỗtrợ việc kết hợp
SALT vào các môi trường phát triển thông dụng. Chúng ta hãy xem xét cách thức
Microsoft hỗtrợ SALT trong môi trường IIS (Internet Information Server) và IE (Internet
Explorer).
Trước hết, trên máy tính client bạn phải cài đặt Microsoft Speech Add-in cho IE. Add-in
này cung cấp các thư viện DLL bổ sung cho IE 6.0 và thực hiện vi
ệc dịch lệnh SALT
trong trình duyệt. Lưu ý là nếu bạn đã có cài Speech Application SDK (SASDK) thì
không cần thực hiện bước này.
Bước kế tiếp, tạo một thư mục trên máy chủ IIS và thiết lập làm thư mục gốc của ứng
dụng. Trong thư mục mới này, tạo một tập tin chứa mã lệnh ứng dụng SALT (dùng mã
lệnh trong phần 'Ứng dụng SALT') và đặt tên với đuôi thích hợp, ví dụ SimpleSALT.slt.
Tiếp theo, tạo một tập tin khác chứa văn phạm và đặt tên cho nó, ví dụ TagGrammar.xml.
Cuối cùng, thiết lập kiểu MIME trên máy chủ IIS cho trang chứa lệnh SALT. Ví dụ, nếu
tập tin được đặt tên là SimpleSALT.slt thì bạn cần liên kết các tập tin *.slt với loại SALT
MIME. Một cách để làm việc này là dùng công cụ Internet Services Manager, chọn thư
mục gốc của ứng dụng hay website, mở
trang thuộc tính của nó, chọn mục HTTP
Headers, nhấn nút File Type trong phần MIME Map, và tạo một loại mới với phần mở
rộng '.slt' và dạng nội dung 'text/salt+html'. Thao tác này sẽ làm cho Microsoft Speech
Add-in tự động kích hoạt các đối tượng SALT và thực hiện chức năng SALT cho IE.
Giờ bạn có thể dùng trình duyệt để mở trang webhỗtrợ SALT trong thư mục đã tạo và
chạy ứng dụng. Nếu bạn 'view source' trong trình duyệt, bạn sẽ chú ý thấy do vi
ệc ánh xạ
MIME, đoạn mã tương tự như dưới đây đã được IIS thêm vào trang web của bạn trước
khi chuyển nó đến trình duyệt:
<object id='saltobject26239220' CLASSID='clsid:DCF68E5B-84A1-4047-98A4-
0A72276D19CC' VIEWASTEXT WIDTH=0 HEIGHT=0></object>
<?import namespace='salt' implementation='#salobject26239220' />
<?import namespace='mm' implementation='#salobject26239220' />
IIS đã chèn các dòng này trực tiếp vào trình IE để báo cho Speech Add-in biết xử lý các
thành phần SALT.
Ví dụ 4
<HTML xmlns:salt='http://www.saltforum.org/2002/SALT'>
<HEAD>
<TITLE>A SALT Multi-modal Example</TITLE>
<SCRIPT language='JavaScript'>
function ProcessInput(){
promptWelcome.Stop();
listenTag.Stop();
switch(selectTag.value) {
case 'prompt':divDefinition.innerText =
'The prompt element ' +
'is used to specify the content of audio ' +
'output, either as inline or referenced text, ' +
'variable values, or links to audio files.';
break;
case 'listen': divDefinition.innerText =
'The listen element ' +
'is used for recognition and/or recording, ' +
'and contains one or more grammars and ' +
'optionally a set of bind elements to inspect ' +
'and copy input.';
break;
case 'grammar': divDefinition.innerText =
'The grammar element ' +
'is used to specify possible user inputs ' +
'with rules identified either inline or ' +
'by reference.';
break;
case 'bind': divDefinition.innerText =
'The bind element ' +
'is used to bind values from spoken input ' +
'into the page, or to call methods on ' +
'page elements.';
break;
default: divDefinition.innerText = '';
}
}
</SCRIPT>
</HEAD>
<body onload='promptWelcome.Start()'>
Select a SALT tag to view its definition:<P>
<SELECT id='selectTag' onchange='ProcessInput()'>
<OPTION value='prompt'>prompt</OPTION>
<OPTION value='listen'>listen</OPTION>
<OPTION value='grammar'>grammar</OPTION>
<OPTION value='bind'>bind</OPTION>
<OPTION SELECTED value=''> Select a Tag </OPTION>
</SELECT>
<P>Definition:<P>
<DIV id='divDefinition'> </DIV>
<salt:prompt id='promptWelcome' oncomplete='listenTag.Start()'>
Welcome to a SALT multi-modal sample. You may select a SALT tag
from the dropdown list either by speaking or by using a mouse.
</salt:prompt>
<salt:listen id='listenTag' onreco='ProcessInput()'>
<salt:grammar src='TagGrammar.xml' />
<salt:bind value='//Tag' targetElement='selectTag' />
</salt:listen>
</body>
</HTML>
Lời kết
Tuy bài viết này chú trọng đến phía client của ứng dụng đa phương thức, lưu ý rằng
SALT cũng hỗtrợ ứng dụng thoại thuần túy, không có giao diện đồ hoạ. Trong trường
hợp này, điện thoại thực hiện chức năng thiết bị đầu cuối, bộ thông dịch SALT chỉ hỗtrợ
tiếng nói kết hợp với máy chủ tiếngnói và đ
iện thoại theo cách thức tương tự mô hình
VoiceXML truyền thống.
N
goài công nghệ Microsoft được dùng để triển khai ứng dụng mẫu trong bài viết này,
còn có một số sản phẩm của các hãng khác hỗtrợ SALT (xem trên website của SALT
Forum), và có cả giải pháp nguồn mở OpenSALT (http://hap.speech.cs.cmu.edu/salt/) của
trường đại học Carnegie Mellon, thành viên của SALT Forum. OpenSALT đã đưa ra
trình duyệt nguồn mở tương thích SALT 1.0 dựa trên trình duyệt nguồn mở Mozilla và sử
dụng phần mềm nguồn mở tổng hợp tiếngnói Festival và nhận dạng Sphinx
. SALT: Ngôn ngữ hỗ trợ tiếng nói trên web
Việc sử dụng điện thoại để truy cập các dịch vụ tự động như kiểm tra tài khoản
ngân hàng. xử lý các tác vụ cơ bản của công nghệ tiếng nói: nhận
dạng tiếng nói (dữ liệu đầu vào) và thể hiện tiếng nói (d
ữ liệu đầu ra). Đây quả là kỳ công
nếu