Linguist API 语言专家

来源:互联网 发布:网络联盟 编辑:程序博客网 时间:2024/05/13 05:34
<span style="font-size:24px;">public interface Linguist extends Configurable语言专家是为解码器(decoder)创建和管理搜索空间的。此类为是一个提供了语言模型服务的一般接口。任何语言专家的主要作用是为解码器呈现搜索空间(构建搜索空间)。通过调用getSearchGraph方法,搜索管理类对象能够获得搜索空间。此方法返回的是一个搜索图类对象。在搜索图中的初始状态能够通过调用getInitialState方法获得,后续状态能够通过调用SearchState.getSuccessors()方法获得。这里有许多搜索状态的子接口被用于表示在搜索空间中的不同状态类型:WordSearchState 表示在搜索空间中的一个字。UnitSearchState 表示在搜索空间中的一个单元(一般为音素)。HMMSearchState 表示在搜索空间中的一个HMM状态。一个语言专家有大量关于它在哪返回搜索状态的顺序的维度?。例如在一个’flat’语言专家也许会在一个字的开始处返回一个字状态,然而‘tree’语言专家也许会在一个字的结尾处返回一个字的状态。同样的一个语言专家也许会在彻底的省略掉一些状态类型(如一个单元状态)。一些搜索管理器也许会想知道由语言专家产生的不同状态类型的先验顺序。SearchGraph.getNumStateOrder()方法用来获得状态类型的数量,此状态类型将会被语言专家返回即由其创造。SearchState.getOrder方法返回的是一个特定状态的排名(等级)。被语言专家所表示的搜索空间依赖于词汇的长度(尺寸)和其拓扑,搜索空间也有会包含大量的状态。一些语言专家会动态的产生搜索状态,也就是说,在搜索空间中代表一个搜索状态的对象直到搜索管理器需要的时候才被创建。搜索管理器在比较状态之前需要决定一个特定的状态是否被加入。因为搜索状态有可能被动态的产生,SearchState.equals()方法(与引用“==”是截然相反)应该用来决定状态是否相等。被语言专家返回的状态通常能够提供equals 和hashCode方法的非常有效率的实现。这将允许搜索管理器高效的维护在HashMaps中的状态。一个语言专家的生命周期如下:语言专家被创建通过配置管理(器)。语言专家通过调用register方法来注册它的属性。语言专家通过调用newProperties方法来设置一系列的新的属性。一个好的重写的语言专家类应该能够对任何时的newProperties方法的调用做出反应。 Allocate方法被调用,在语言专家调用此方法的过程中将会分配资源如声学模型和语言模型有关的。此通常会发费大量的时间。一个好的重写的语言专家能够对Allocate方法进行多次的调用。如果一个语言专家被多个搜索管理器对象共享时,此情况会发生即对Allocate方法进行多次调用。搜索管理器调用getSearchGraph方法会得到用来指导解码和搜索的搜索图。此方法一般在每一次识别开始前调用。语言专家应该尽快的返回搜索图以便减少识别所需的时间。一些语言专家会事先在Allocate方法中产生搜索图,并仅仅返回一个对搜索图的引用,然而有些语言专家也许会再每一次调用时动态的产生搜索图。注意:一些语言专家也许会改变搜索图以便一个搜索管理器能够得到一个新的搜索图在开始识别之前。startRecognition方法仅在开始识别之前被调用。这给于了语言专家准备识别任务的机会。一些语言专家也许会对搜索状态进行缓存。注意不管怎样如果一个语言专家依赖于startRecognition和stopRecognition,则它有可能不能够再此进入此语言专家,在多线程环境中这会限制它的使用。stopRecognition方法仅在识别完成后调用,这将会给以语言专家来清楚识别任务的机会。一些语言专家会缓存搜索状态。不管怎样如果一个语言专家依赖于startRecognition和stopRecognition,则它有可能不能够再此进入此语言专家,在多线程环境中这会限制它的使用。本接口的属性:@S4Double(defaultValue = 1.0)public final static String PROP_WORD_INSERTION_PROBABILITY = "wordInsertionProbability";字插入概率属性。@S4Double(defaultValue = 1.0)public final static String PROP_UNIT_INSERTION_PROBABILITY = "unitInsertionProbability";单元的插入概率属性。    @S4Double(defaultValue = 1.0)    public final static String PROP_SILENCE_INSERTION_PROBABILITY = "silenceInsertionProbability";静音的插入概率属性。    @S4Double(defaultValue = 1.0)    public final static String PROP_FILLER_INSERTION_PROBABILITY =  "fillerInsertionProbability";填充插入的概率属性。    @S4Double(defaultValue = 1.0)public final static String PROP_LANGUAGE_WEIGHT = "languageWeight";此属性为搜索定义了语言的权重。以上的在注释中的默认都1.0本接口的方法:public SearchGraph getSearchGraph();获得搜索图。搜索图代表了用于指导搜索的搜索空间。在实现此方法需注意:此方法一般在每次识别开始时调用。public void startRecognition();在识别之前调用,此方法给予了语言专家来准备的相关工作在一识别开始前。注意:一些语言专家(或者在语言或声学模型下)也许会保留在一次识别开始前需被初始化的缓存或池。一个语言专家也许会在此方法中实现诸如上述的初始化。不管怎样,一个理想的语言专家an ideal linguist will, once allocated, be state-less。这将允许语言专家被多个搜索管理器共享。依赖于“startRecognition”将会阻止语言专家在多线程搜索中使用。public void stopRecognition();在一次识别后被调用,来进行相关的清楚工作。此方法的注意与startRecognition方法的注意事项一样。public void allocate();为语言专家分配资源,此方法可能需要数秒来完成这取决于语言专家。注意一个好的重写的语言专家允许多次调用此方法并不会产生任何坏的影响。这将会允许语言专家被多个搜索管理器共享。public void deallocate();为语言专家释放资源。即资源的释放。注意:如果语言专家被多个搜索所共享,则deallocate应该仅有一次实际的deallocate,此在最后一次调用deallocate方法来实现。有两种方法用来处理它:1,保持一个allocate的计数,此计数在allocate方法中被增加,在deallocate方法中被减少。。仅当此计数为0时,实际的deallocate才会被执行。2,在deallocate中不要做什么事情,仅进行just the the GC take care of things,垃圾回收。</span>

0 0
原创粉丝点击