• Thứ Sáu, 03/09/2004 16:18 (GMT+7)

    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 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ếng nó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ếng nó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ệ web trở nên chuẩn hóa và phổ biến, các nhà phát triển công nghệ tiếng nói bắt đầu tìm kiếm phương thức kết hợp tiếng nó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ôn ngữ chuẩn, chuyên biệt dựa trên XML. Ngôn ngữ 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ôn ngữ 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ếng nó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ế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 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).

    Nhờ 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ếng nói trê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ếng nói với PC. Hiện có nhiều lựa chọn để kết hợp công nghệ tiếng nó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ếng nói của NeuVoice.

    Với sự gia tăng năng lực và khả năng xử lý tiếng nói của PC, một khái niệm mới trong việc kết hợp tiếng nó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ếng nói với dữ liệu và mô hình thực thi trên web, như các ngôn ngữ 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ếng nó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ên tài liệu lệnh bao gồm các thành phần VoiceXML. Lệnh trong tài liệ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.

    Ngượ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ôn ngữ đá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ôn ngữ đá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ôn ngữ 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ếng nó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ếng nó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ếng nó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 src='TagGrammar.xml' />

    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ếng nó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ôn ngữ 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 web hỗ 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ếng nói và điện thoại theo cách thức tương tự mô hình VoiceXML truyền thống.

    Ngoà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ếng nói Festival và nhận dạng Sphinx.

    Thanh Phong
    DDJ 6/2004

    ID: A0408_104