;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;; ;;; Centre for Speech Technology Research ;; ;;; University of Edinburgh, UK ;; ;;; Copyright (c) 1996,1997 ;; ;;; All Rights Reserved. ;; ;;; ;; ;;; Permission is hereby granted, free of charge, to use and distribute ;; ;;; this software and its documentation without restriction, including ;; ;;; without limitation the rights to use, copy, modify, merge, publish, ;; ;;; distribute, sublicense, and/or sell copies of this work, and to ;; ;;; permit persons to whom this work is furnished to do so, subject to ;; ;;; the following conditions: ;; ;;; 1. The code must retain the above copyright notice, this list of ;; ;;; conditions and the following disclaimer. ;; ;;; 2. Any modifications must be clearly marked as such. ;; ;;; 3. Original authors' names are not deleted. ;; ;;; 4. The authors' names are not used to endorse or promote products ;; ;;; derived from this software without specific prior written ;; ;;; permission. ;; ;;; ;; ;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; ;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; ;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; ;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; ;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; ;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; ;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; ;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; ;;; THIS SOFTWARE. ;; ;;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; Phrase boundary prediction. ;;; ;;; Two methods supported, if POS is enabled we use ngrams for that ;;; otherwise we use a CART tree ;;; ;;; Models trained from the IBM/Lancaster Spoken English Corpus and ;;; Boston University's FM Radio Corpus. ;;; ;;; Here's a very simple CART tree for predicting phrase breaks ;;; based on punctuation only ;;; (set! simple_phrase_cart_tree ' ((lisp_token_end_punc in ("?" "." ":")) ((BB)) ((lisp_token_end_punc in ("'" "\"" "," ";")) ((B)) ((n.name is 0) ;; end of utterance ((BB)) ((NB)))))) (define (token_end_punc word) "(token_end_punc UTT WORD) If punctuation at end of related Token and if WORD is last word in Token return punc, otherwise 0." (if (item.relation.next word "Token") "0" (item.feat word "R:Token.parent.punc"))) ;;; This is a simple CART tree used after boundaries are predicted ;;; by the probabilistic method to get two levels of break (set! english_phrase_type_tree '((pbreak is NB) ((num_break is 1) ((mB)) ((R:Token.parent.EMPH is 1) ((NB)) ((n.R:Token.parent.EMPH is 1) ((NB)) ((NB))))) ((pbreak is BB) ((BB)) ((pbreak is mB) ((mB)) ((name in ("." "!" "?"));; only (potentially) change Bs to BBs ((BB)) ((B))))))) (set! f2b_phrase_cart_tree ' ((gpos is punc) (((1 0.00238095) (3 0) (4 0.997619) B)) (((4 0.00238095) (3 0) (1 0.997619) NB)))) ;;; For more detailed prediction of phrase breaks we use POS and ;;; probability distribution of breaks ;;; These models were trained using data from the Lancaster/IBM ;;; Spoken English Corpus (require 'pos) ;; for part of speech map (defvar pbreak_ngram_dir libdir "pbreak_ngram_dir The directory containing the ngram models for predicting phrase breaks. By default this is the standard library directory.") (defvar english_phr_break_params (list ;; The name and filename off the ngram with the a priori ngram model ;; for predicting phrase breaks in the Phrasify module. This model should ;; predict probability distributions for B and NB given some context of ;; part of speech tags. (list 'pos_ngram_name 'english_break_pos_ngram) (list 'pos_ngram_filename (path-append pbreak_ngram_dir "sec.ts20.quad.ngrambin")) ;; The name and filename of the ngram containing the a posteriori ngram ;; for predicting phrase breaks in the Phrasify module. This module should ;; predict probability distributions for B and NB given previous B and ;; NBs. (list 'break_ngram_name 'english_break_ngram) (list 'break_ngram_filename (path-append pbreak_ngram_dir "sec.B.hept.ngrambin")) ;; A weighting factor for breaks in the break/non-break ngram. (list 'gram_scale_s 0.05) ;; When Phrase_Method is prob_models, this tree, if set is used to ;; potentially predict phrase type. At least some prob_models only ;; predict B or NB, this tree may be used to change some Bs into ;; BBs. If it is nil, the pbreak value predicted by prob_models ;; remains the same. (list 'phrase_type_tree english_phrase_type_tree) ;; A list of tags used in identifying breaks. Typically B and NB (and ;; BB). This should be the alphabet of the ngram identified in ;; break_ngram_name (list 'break_tags '(B NB)) (list 'pos_map english_pos_map_wp39_to_wp20) ) "english_phr_break_params Parameters for English phrase break statistical model.") (defvar phr_break_params nil "phr_break_params Parameters for phrase break statistical model. This is typcal set by a voice selection function to the parameters for a particular model.") ;;; ;;; Declaration of some features ;;; (def_feature_docstring 'Word.pbreak "Word.pbreak Result from statistical phrasing module, may be B or NB denoting phrase break or non-phrase break after the word.") (def_feature_docstring 'Word.pbreak_score "Word.pbreak_score Log likelihood score from statistical phrasing module, for pbreak value.") (def_feature_docstring 'Word.blevel "Word.blevel A crude translation of phrase break into ToBI like phrase level. Values may be 0,1,2,3,4.") (define (Phrasify utt) "(Phrasify utt) Construct phrasify over Words module." (let ((rval (apply_method 'Phrasify_Method utt))) (cond (rval rval) ;; new style (t (Classic_Phrasify utt))))) (provide 'phrase)