Formato de gramáticaGrammar Format

La gramática es un archivo XML que especifica el conjunto ponderado de consultas en lenguaje natural que puede interpretar el servicio, así como la manera en que estas consultas en lenguaje natural se convierten en expresiones de consulta semántica.The grammar is an XML file that specifies the weighted set of natural language queries that the service can interpret, as well as how these natural language queries are translated into semantic query expressions. La sintaxis de gramática se basa en SRGS, un estándar de W3C para las gramáticas de reconocimiento de voz, con extensiones para admitir la integración de índices de datos y funciones semánticas.The grammar syntax is based on SRGS, a W3C standard for speech recognition grammars, with extensions to support data index integration and semantic functions.

A continuación se describen los elementos sintácticos que pueden utilizarse en una gramática.The following describes each of the syntactic elements that can be used in a grammar. Consulte este ejemplo para obtener una gramática completa que muestra el uso de estos elementos en contexto.See this example for a complete grammar that demonstrates the use of these elements in context.

Elemento grammargrammar Element

El elemento grammar es el elemento de nivel superior en la especificación de gramática XML.The grammar element is the top-level element in the grammar specification XML. El atributo root obligatorio especifica el nombre de la regla raíz que define el punto de partida de la gramática.The required root attribute specifies the name of the root rule that defines the starting point of the grammar.

<grammar root="GetPapers">

Elemento importimport Element

El elemento import importa una definición de esquema desde un archivo externo para habilitar las referencias de atributo.The import element imports a schema definition from an external file to enable attribute references. El elemento debe ser un elemento secundario del elemento grammar de nivel superior y aparece antes que cualquier otro elemento attrref.The element must be a child of the top-level grammar element and appear before any attrref elements. El atributo schema obligatorio especifica el nombre de un archivo de esquema que se encuentra en el mismo directorio que el archivo XML de gramática.The required schema attribute specifies the name of a schema file located in the same directory as the grammar XML file. El elemento name obligatorio especifica el alias del esquema que los elementos attrref posteriores utilizan para hacer referencia a los atributos definidos en este esquema.The required name element specifies the schema alias that subsequent attrref elements use when referencing attributes defined within this schema.

  <import schema="academic.schema" name="academic"/>

Elemento rulerule Element

El elemento rule define una regla de gramática, una unidad estructural que especifica un conjunto de expresiones de consulta que el sistema puede interpretar.The rule element defines a grammar rule, a structural unit that specifies a set of query expressions that the system can interpret. El elemento debe ser un elemento secundario del elemento de nivel superior grammar.The element must be a child of the top-level grammar element. El atributo id obligatorio especifica el nombre de la regla, a la que se hace referencia desde los elementos grammar o ruleref.The required id attribute specifies the name of the rule, which is referenced from grammar or ruleref elements.

Un elemento rule define un conjunto de expansiones legales.A rule element defines a set of legal expansions. Los tokens de texto se corresponden directamente con la consulta de entrada.Text tokens match against the input query directly. Los elementos item especifican las repeticiones y modifican las probabilidades de interpretación.item elements specify repeats and alter interpretation probabilities. Los elementos one-of indican las opciones alternativas.one-of elements indicate alternative choices. Los elementos ruleref permiten la construcción de expansiones más complejas a partir otras más sencillas.ruleref elements enable construction of more complex expansions from simpler ones. Los elementos attrref permiten establecer coincidencias con los valores de atributo desde el índice.attrref elements allow matches against attribute values from the index. Los elementos tag especifican la semántica de la interpretación y pueden modificar la probabilidad de interpretación.tag elements specify the semantics of the interpretation and can alter the interpretation probability.

<rule id="GetPapers">...</rule>

Elemento exampleexample Element

El elemento example opcional especifica frases de ejemplo que pueden ser aceptadas por la definición rule contenedora.The optional example element specifies example phrases that may be accepted by the containing rule definition. Esto puede utilizarse para documentación y pruebas automatizadas.This may be used for documentation and/or automated testing.

<example>papers about machine learning by michael jordan</example>

Elemento itemitem Element

El elemento item agrupa una secuencia de construcciones gramaticales.The item element groups a sequence of grammar constructs. Se puede utilizar para indicar las repeticiones de la secuencia de expansión, o para especificar alternativas junto con el elemento one-of.It can be used to indicate repetitions of the expansion sequence, or to specify alternatives in conjunction with the one-of element.

Cuando un elemento item no es un elemento secundario de one-of, la repetición de la secuencia entre comillas se especifica asignando al atributo repeat un valor de recuento.When an item element is not a child of a one-of element, it can specify repetition of the enclosed sequence by assigning the repeat attribute to a count value. Un valor de recuento "n" (donde n es un entero) indica que la secuencia debe ocurrir exactamente n veces.A count value of "n" (where n is an integer) indicates that the sequence must occur exactly n times. Un valor de recuento "m-n" permite que la secuencia aparezca entre m y n veces, ambos valores incluidos.A count value of "m-n" allows the sequence to appear between m and n times, inclusively. Un valor de recuento "m-" especifica que la secuencia debe aparecer al menos m veces.A count value of "m-" specifies that the sequence must appear at least m times. El elemento repeat-logprob opcional se puede usar para modificar la probabilidad de interpretación de cada repetición adicional más allá del mínimo.The optional repeat-logprob attribute can be used to alter the interpretation probability for each additional repetition beyond the minimum.

<item repeat="1-" repeat-logprob="-10">...</item>

Cuando los elementos item aparecen como elementos secundarios de one-of, definen el conjunto de alternativas de expansión.When item elements appear as children of a one-of element, they define the set of expansion alternatives. En este uso, el atributo logprob opcional especifica la probabilidad logarítmica relativa entre las distintas opciones.In this usage, the optional logprob attribute specifies the relative log probability among the different choices. Dada una probabilidad p entre 0 y 1, la probabilidad logarítmica correspondiente se puede calcular como log(p), donde log() es la función logarítmica natural.Given a probability p between 0 and 1, the corresponding log probability can be computed as log(p), where log() is the natural log function. Si no se especifica, el valor predeterminado de logprob es 0, que no modifica la probabilidad de interpretación.If not specified, logprob defaults to 0, which does not alter the interpretation probability. Tenga en cuenta que la probabilidad logarítmica siempre es un valor negativo de punto flotante o 0.Note that log probability is always a negative floating-point value or 0.

<one-of>
  <item>by</item>
  <item logprob="-0.5">written by</item>
  <item logprob="-1">authored by</item>
</one-of>

Elemento one-ofone-of Element

El elemento one-of especifica expansiones alternativas entre uno de los elementos item secundarios.The one-of element specifies alternative expansions among one of the child item elements. Solo pueden aparecer elementos item dentro de un elemento one-of.Only item elements may appear inside a one-of element. Las probabilidades relativas entre las distintas opciones se pueden especificar mediante el atributo logprob en cada elemento secundario item.Relative probabilities among the different choices may be specified via the logprob attribute in each child item.

<one-of>
  <item>by</item>
  <item logprob="-0.5">written by</item>
  <item logprob="-1">authored by</item>
</one-of>

Elemento rulerefruleref Element

El elemento ruleref especifica expansiones válidas mediante referencias a otro elemento rule.The ruleref element specifies valid expansions via references to another rule element. El uso de elementos ruleref permite crear expresiones más complejas a partir de reglas más sencillas.Through the use of ruleref elements, more complex expressions can be built from simpler rules. El atributo uri obligatorio indica el nombre del rule al que se hacer referencia, utilizando la sintaxis "#rulename".The required uri attribute indicates the name of the referenced rule using the syntax "#rulename". Para capturar la salida semántica de la regla a la que se hace referencia, utilice el atributo name opcional para especificar el nombre de una variable a la que se asigna la salida semántica.To capture the semantic output of the referenced rule, use the optional name attribute to specify the name of a variable to which the semantic output is assigned.

<ruleref uri="#GetPaperYear" name="year"/>

Elemento attrrefattrref Element

El elemento attrref hace referencia a un atributo de índice, lo que permite establecer coincidencias con los valores de atributo observados en el índice.The attrref element references an index attribute, allowing matching against attribute values observed in the index. El atributo uri obligatorio especifica el nombre del esquema de índice y el nombre de atributo, utilizando la sintaxis "schemaName#attrName".The required uri attribute specifies the index schema name and attribute name using the syntax "schemaName#attrName". Debe haber un elemento import anterior que importa el esquema llamado schemaName.There must be a preceding import element that imports the schema named schemaName. El nombre del atributo es el nombre de un atributo definido en el esquema correspondiente.The attribute name is the name of an attribute defined in the corresponding schema.

Además de coincidir con los datos de entrada del usuario, el elemento attrref también devuelve un objeto de consulta estructurada como resultado, que selecciona el subconjunto de objetos del índice que coinciden con el valor de entrada.In addition to matching user input, the attrref element also returns a structured query object as output that selects the subset of objects in the index matching the input value. Use el atributo name opcional para especificar el nombre de la variable donde se debe almacenar la salida del objeto de consulta.Use the optional name attribute to specify the name of the variable where the query object output should be stored. El objeto de consulta puede estar compuesto por otros objetos de consulta para formar expresiones más complejas.The query object can be composed with other query objects to form more complex expressions. Consulte Interpretación semántica para obtener más información.See Semantic Interpretation for details.

<attrref uri="academic#Keyword" name="keyword"/>

Finalización de consultasQuery Completion

Para admitir la finalización de consultas al interpretar consultas de usuario parciales, cada atributo al que se hace referencia debe incluir "starts_with" como operación en la definición del esquema.To support query completions when interpreting partial user queries, each referenced attribute must include "starts_with" as an operation in the schema definition. Dado un prefijo de consulta de usuario, attrref establecerá coincidencias con todos los valores del índice que se completen el prefijo y producirá cada valor completo como una interpretación distinta de la gramática.Given a user query prefix, attrref will match all values in the index that complete the prefix, and yield each complete value as a separate interpretation of the grammar.

Ejemplos:Examples:

  • El establecimiento de coincidencias de <attrref uri="academic#Keyword" name="keyword"/> con el prefijo de consulta "dat" genera una interpretación para artículos acerca de "base de datos", una interpretación para artículos sobre "minería de datos", etc.Matching <attrref uri="academic#Keyword" name="keyword"/> against the query prefix "dat" generates one interpretation for papers about "database", one interpretation for papers about "data mining", etc.
  • El establecimiento de coincidencias de <attrref uri="academic#Year" name="year"/> con el prefijo de consulta "200" genera una interpretación para artículos acerca de "2000", una interpretación para artículos sobre "2001", etc.Matching <attrref uri="academic#Year" name="year"/> against the query prefix "200" generates one interpretation for papers in "2000", one interpretation for papers in "2001", etc.

Operaciones de establecimiento de coincidenciasMatching Operations

Además de las coincidencias exactas, algunos tipos de atributo también permiten establecer coincidencias de prefijo y desigualdad con el atributo op opcional.In addition to exact match, select attribute types also support prefix and inequality matches via the optional op attribute. Si ningún objeto del índice tiene un valor que coincida, se bloquea la ruta de acceso de la gramática y el servicio no generará ninguna interpretación en la ruta de acceso de esta gramática.If no object in the index has a value that matches, the grammar path is blocked and the service will not generate any interpretations traversing over this grammar path. El valor predeterminado del atributo op es "eq".The op attribute defaults to "eq".

in <attrref uri="academic#Year" name="year"/>
before <attrref uri="academic#Year" op="lt" name="year"/

En la tabla siguiente se enumeran los valores op admitidos para cada tipo de atributo.The following table lists the supported op values for each attribute type. Su uso requiere que se incluya operación index correspondiente en la definición de atributo del esquema.Their use requires the corresponding index operation to be included in the schema attribute definition.

Tipo de atributoAttribute Type Valor de operaciónOp Value DESCRIPCIÓNDescription Operación indexIndex Operation
CadenaString eqeq Coincidencia exacta de cadenaString exact match equalsequals
CadenaString starts_withstarts_with Coincidencia de prefijo de cadenaString prefix match starts_withstarts_with
Int32, Int64, dobleInt32, Int64, Double eqeq Coincidencia de igualdad numéricaNumeric equality match equalsequals
Int32, Int64, dobleInt32, Int64, Double lt, le, gt, gelt, le, gt, ge Coincidencia de desigualdad numérica (<, <=, >, >=)Numeric inequality match (<, <=, >, >=) is_betweenis_between
Int32, Int64, dobleInt32, Int64, Double starts_withstarts_with Coincidencia de prefijo del valor en notación decimalPrefix match of value in decimal notation starts_withstarts_with

Ejemplos:Examples:

  • <attrref uri="academic#Year" op="lt" name="year"/> establece coincidencias con la cadena de entrada "2000" y devuelve todos los artículos publicados antes del año 2000, sin incluir este.<attrref uri="academic#Year" op="lt" name="year"/> matches the input string "2000" and returns all papers published before the year 2000, exclusively.
  • <attrref uri="academic#Year" op="lt" name="year"/> no establece coincidencias con la cadena de entrada "20" porque no hay ningún artículo en el índice publicado antes del año 20.<attrref uri="academic#Year" op="lt" name="year"/> does not match the input string "20" because there are no papers in the index published before the year 20.
  • <attrref uri="academic#Keyword" op="starts_with" name="keyword"/> establece coincidencias con la cadena de entrada "dat" y devuelve artículos con una única interpretación sobre "base de datos", "minería de datos", etc. Se trata de un caso de uso poco frecuente.<attrref uri="academic#Keyword" op="starts_with" name="keyword"/> matches the input string "dat" and returns in a single interpretation papers about "database", "data mining", etc. This is a rare use case.
  • <attrref uri="academic#Year" op="starts_with" name="year"/> establece coincidencias con la cadena de entrada "20" y devuelve artículos con una única interpretación publicados en 200-299, 2000 a 2999, etc. Se trata de un caso de uso poco frecuente.<attrref uri="academic#Year" op="starts_with" name="year"/> matches the input string "20" and returns in a single interpretation papers published in 200-299, 2000-2999, etc. This is a rare use case.

Elemento tagtag Element

El elemento tag especifica cómo se interpretará una ruta de acceso en la gramática.The tag element specifies how a path through the grammar is to be interpreted. Contiene una secuencia de instrucciones que terminan con punto y coma.It contains a sequence of semicolon-terminated statements. Una instrucción puede ser una asignación de un literal o una variable a otra variable.A statement may be an assignment of a literal or a variable to another variable. También puede asignar la salida de una función con 0 o más parámetros a una variable.It may also assign the output of a function with 0 or more parameters to a variable. Se puede especificar cada parámetro de la función mediante un literal o una variable.Each function parameter may be specified using a literal or a variable. Si la función no devuelve ninguna salida, se omite la asignación.If the function does not return any output, the assignment is omitted. El ámbito de la variable es local para la regla contenedora.Variable scope is local to the containing rule.

<tag>x = 1; y = x;</tag>
<tag>q = All(); q = And(q, q2);</tag>
<tag>AssertEquals(x, 1);</tag>

Cada rule en la gramática tiene una variable predefinida llamada "out", que representa la salida semántica de la regla.Each rule in the grammar has a predefined variable named "out", representing the semantic output of the rule. Para calcular su valor, se evalúa cada una de las instrucciones semánticas atravesadas por la ruta mediante los elementos rule que coincidan con la entrada de la consulta del usuario.Its value is computed by evaluating each of the semantic statements traversed by the path through the rule matching the user query input. El valor asignado a la variable "out" al final de la evaluación es la salida semántica de la regla.The value assigned to the "out" variable at the end of the evaluation is the semantic output of the rule. La salida semántica de la interpretación de una consulta de usuario con relación a la gramática es la salida semántica de la regla raíz.The semantic output of interpreting a user query against the grammar is the semantic output of the root rule.

Algunas instrucciones pueden modificar la probabilidad de una ruta de interpretación porque agregan una compensación de la probabilidad logarítmica.Some statements may alter the probability of an interpretation path by introducing an additive log probability offset. Algunas instrucciones pueden rechazar la interpretación por completo si no se cumplen las condiciones especificadas.Some statements may reject the interpretation altogether if specified conditions are not satisfied.

Para obtener una lista de las funciones semánticas admitidas, consulte Funciones semántica.For a list of supported semantic functions, see Semantic Functions.

Probabilidad de interpretaciónInterpretation Probability

La probabilidad de una ruta de interpretación a través de la gramática es la probabilidad logarítmica acumulada de todos los elementos <item> y las funciones semánticas encontradas en el camino.The probability of an interpretation path through the grammar is the cumulative log probability of all the <item> elements and semantic functions encountered along the way. Describe la probabilidad relativa de que una secuencia de entrada determinada coincida.It describes the relative likelihood of matching a particular input sequence.

Dada una probabilidad p entre 0 y 1, la probabilidad logarítmica correspondiente se puede calcular como log(p), donde log() es la función logarítmica natural.Given a probability p between 0 and 1, the corresponding log probability can be computed as log(p), where log() is the natural log function. El uso de probabilidades logarítmicas permite al sistema acumular la probabilidad conjunta de una ruta de interpretación mediante una sencilla suma.Using log probabilities allows the system to accumulate the joint probability of an interpretation path through simple addition. También evita el subdesbordamiento de punto flotante común a estos cálculos de probabilidad conjunta.It also avoids floating-point underflow common to such joint probability calculations. Tenga en cuenta que, por su naturaleza, la probabilidad logarítmica es siempre un valor de punto flotante negativo o 0, donde los valores mayores indican mayor probabilidad.Note that by design, the log probability is always a negative floating-point value or 0, where larger values indicate higher likelihood.

EjemploExample

El siguiente es un ejemplo XML del dominio de publicaciones académicas que muestra los distintos elementos de una gramática:The following is an example XML from the academic publications domain that demonstrates the various elements of a grammar:

<grammar root="GetPapers">

  <!-- Import academic data schema-->
  <import schema="academic.schema" name="academic"/>
  
  <!-- Define root rule-->
  <rule id="GetPapers">
    <example>papers about machine learning by michael jordan</example>
    
    papers
    <tag>
      yearOnce = false;
      isBeyondEndOfQuery = false;
      query = All();
    </tag>
  
    <item repeat="1-" repeat-logprob="-10">
      <!-- Do not complete additional attributes beyond end of query -->
      <tag>AssertEquals(isBeyondEndOfQuery, false);</tag>
        
      <one-of>
        <!-- about <keyword> -->
        <item logprob="-0.5">
          about <attrref uri="academic#Keyword" name="keyword"/>
          <tag>query = And(query, keyword);</tag>
        </item>
        
        <!-- by <authorName> [while at <authorAffiliation>] -->
        <item logprob="-1">
          by <attrref uri="academic#Author.Name" name="authorName"/>
          <tag>authorQuery = authorName;</tag>
          <item repeat="0-1" repeat-logprob="-1.5">
            while at <attrref uri="academic#Author.Affiliation" name="authorAffiliation"/>
            <tag>authorQuery = And(authorQuery, authorAffiliation);</tag>
          </item>
          <tag>
            authorQuery = Composite(authorQuery);
            query = And(query, authorQuery);
          </tag>
        </item>
        
        <!-- written (in|before|after) <year> -->
        <item logprob="-1.5">
          <!-- Allow this grammar path to be traversed only once -->
          <tag>
            AssertEquals(yearOnce, false);
            yearOnce = true;
          </tag>
          <ruleref uri="#GetPaperYear" name="year"/>
          <tag>query = And(query, year);</tag>
        </item>
      </one-of>

      <!-- Determine if current parse position is beyond end of query -->
      <tag>isBeyondEndOfQuery = GetVariable("IsBeyondEndOfQuery", "system");</tag>
    </item>
    <tag>out = query;</tag>
  </rule>
  
  <rule id="GetPaperYear">
    <tag>year = All();</tag>
    written
    <one-of>
      <item>
        in <attrref uri="academic#Year" name="year"/>
      </item>
      <item>
        before
        <one-of>
          <item>[year]</item>
          <item><attrref uri="academic#Year" op="lt" name="year"/></item>
        </one-of>
      </item>
      <item>
        after
        <one-of>
          <item>[year]</item>
          <item><attrref uri="academic#Year" op="gt" name="year"/></item>
        </one-of>
      </item>
    </one-of>
    <tag>out = year;</tag>
  </rule>
</grammar>