GrammatikformatGrammar Format

Bei der Grammatik handelt es sich um eine XML-Datei, die den gewichteten Satz von Abfragen in natürlicher Sprache angibt, die der Dienst interpretieren kann, und die angibt, wie diese Abfragen in natürlicher Sprache in Semantikabfrageausdrücke konvertiert werden.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. Die Grammatiksyntax basiert auf SRGS. Dabei handelt es sich um einen W3C-Standard für Spracherkennungsgrammatiken mit Erweiterungen zur Unterstützung von Datenindexintegration und Semantikfunktionen.The grammar syntax is based on SRGS, a W3C standard for speech recognition grammars, with extensions to support data index integration and semantic functions.

In diesem Artikel werden die einzelnen syntaktischen Elemente beschrieben, die in einer Grammatik verwendet werden können.The following describes each of the syntactic elements that can be used in a grammar. Eine vollständige Grammatik, die die Verwendung dieser Elemente im Kontext veranschaulicht, finden Sie in diesem Beispiel.See this example for a complete grammar that demonstrates the use of these elements in context.

grammar-Elementgrammar Element

Das grammar-Element ist das übergeordnete Element in der XML-Grammatikspezifikation.The grammar element is the top-level element in the grammar specification XML. Das erforderliche root-Attribut gibt den Namen der Stammregel an, die den Startpunkt der Grammatik definiert.The required root attribute specifies the name of the root rule that defines the starting point of the grammar.

<grammar root="GetPapers">

import-Elementimport Element

Das import-Element importiert eine Schemadefinition aus einer externen Datei, um Attributverweise zu ermöglichen.The import element imports a schema definition from an external file to enable attribute references. Das Element muss ein untergeordnetes Element des übergeordneten grammar-Elements sein und sich vor jeglichen attrref-Elementen befinden.The element must be a child of the top-level grammar element and appear before any attrref elements. Das erforderliche schema-Attribut gibt den Namen einer Schemadatei an, die sich im gleichen Verzeichnis befindet wie die XML-Grammatikdatei.The required schema attribute specifies the name of a schema file located in the same directory as the grammar XML file. Das erforderliche name-Element gibt das Schemaalias an, das nachfolgende attrref-Elemente verwenden, wenn sie auf in diesem Schema definierte Attribute verweisen.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"/>

rule-Elementrule Element

Das rule-Element definiert eine Grammatikregel. Dabei handelt es sich um eine strukturelle Einheit, die einen Satz von Abfrageausdrücken angibt, die das System interpretieren kann.The rule element defines a grammar rule, a structural unit that specifies a set of query expressions that the system can interpret. Das Element muss ein untergeordnetes Element des übergeordneten grammar-Elements sein.The element must be a child of the top-level grammar element. Das erforderliche id-Attribut gibt den Namen der Regel an, auf die in grammar- oder ruleref-Elementen verwiesen wird.The required id attribute specifies the name of the rule, which is referenced from grammar or ruleref elements.

Ein rule-Element definiert eine Gruppe zulässiger Erweiterungen.A rule element defines a set of legal expansions. Texttoken werden direkt mit der Eingabeabfrage abgeglichen.Text tokens match against the input query directly. item-Elemente geben Wiederholungen an und ändern Interpretationswahrscheinlichkeiten.item elements specify repeats and alter interpretation probabilities. one-of-Elemente geben alternative Optionen an.one-of elements indicate alternative choices. ruleref-Elemente ermöglichen die Erstellung komplexerer Erweiterungen auf der Grundlage einfacher Erweiterungen.ruleref elements enable construction of more complex expansions from simpler ones. attrref-Elemente ermöglichen Abgleiche mit Attributwerten aus dem Index.attrref elements allow matches against attribute values from the index. tag-Elemente geben die Semantik der Interpretation an und können die Interpretationswahrscheinlichkeit ändern.tag elements specify the semantics of the interpretation and can alter the interpretation probability.

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

example-Elementexample Element

Das optionale example-Element gibt Beispielausdrücke an, die von der enthaltenden rule-Definition akzeptiert werden können.The optional example element specifies example phrases that may be accepted by the containing rule definition. Dies kann zu Dokumentationszwecken und/oder für automatisierte Tests verwendet werden.This may be used for documentation and/or automated testing.

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

item-Elementitem Element

Das item-Element gruppiert eine Sequenz von Grammatikkonstrukten.The item element groups a sequence of grammar constructs. Damit können Wiederholungen der Erweiterungssequenz oder Alternativen in Verbindung mit dem one-of-Element angegeben werden.It can be used to indicate repetitions of the expansion sequence, or to specify alternatives in conjunction with the one-of element.

Wenn ein item-Element kein untergeordnetes Element eines one-of-Elements ist, kann es die Wiederholung der eingeschlossenen Sequenz angeben, indem dem repeat-Attribut eine Anzahl zugewiesen wird.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. Die Anzahl „n“ (wobei n für eine ganze Zahl steht) gibt an, dass die Sequenz genau n-mal vorkommen muss.A count value of "n" (where n is an integer) indicates that the sequence must occur exactly n times. Bei Verwendung der Anzahl „m-n“ kann die Sequenz zwischen m- und n-mal vorkommen (jeweils einschließlich).A count value of "m-n" allows the sequence to appear between m and n times, inclusively. Die Anzahl „m-“ gibt an, dass die Sequenz mindestens m-mal vorkommen muss.A count value of "m-" specifies that the sequence must appear at least m times. Mit dem optionalen repeat-logprob-Attribut kann die Interpretationswahrscheinlichkeit für jede weitere Wiederholung geändert werden, die über den Mindestwert hinausgeht.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>

Wenn item-Elemente als untergeordnete Elemente eines one-of-Elements verwendet werden, definieren sie die Gruppe von Erweiterungsalternativen.When item elements appear as children of a one-of element, they define the set of expansion alternatives. Bei dieser Verwendung gibt das optionale logprob-Attribut die relative Logarithmus-Wahrscheinlichkeit für die verschiedenen Optionen an.In this usage, the optional logprob attribute specifies the relative log probability among the different choices. Bei einer Wahrscheinlichkeit p zwischen 0 und 1 kann die entsprechende Logarithmuswahrscheinlichkeit als log(p) berechnet werden, wobei „log()“ die natürliche Logarithmusfunktion ist.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. Ohne Angabe wird für logprob standardmäßig „0“ verwendet, und die Interpretationswahrscheinlichkeit wird nicht geändert.If not specified, logprob defaults to 0, which does not alter the interpretation probability. Beachten Sie, dass die Logarithmus-Wahrscheinlichkeit immer ein negativer Gleitkommawert oder Null ist.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>

one-of-Elementone-of Element

Das one-of-Element gibt alternative Erweiterungen für eines der untergeordneten item-Elemente an.The one-of element specifies alternative expansions among one of the child item elements. In einem one-of-Element dürfen sich nur item-Elemente befinden.Only item elements may appear inside a one-of element. Relative Wahrscheinlichkeiten für die verschiedenen Optionen können über das logprob-Attribut in jedem untergeordneten item-Element angegeben werden.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>

ruleref-Elementruleref Element

Das ruleref-Element gibt gültige Erweiterungen über Verweise auf ein anderes rule-Element an.The ruleref element specifies valid expansions via references to another rule element. Durch die Verwendung von ruleref-Elementen können komplexere Ausdrücke auf der Grundlage einfacherer Regeln erstellt werden.Through the use of ruleref elements, more complex expressions can be built from simpler rules. Das erforderliche uri-Attribut gibt den Namen des referenzierten rule-Elements unter Verwendung der Syntax „#Regelname“ an.The required uri attribute indicates the name of the referenced rule using the syntax "#rulename". Verwenden Sie zum Erfassen der Semantikausgabe der referenzierten Regel das optionale name-Attribut, um den Namen einer Variablen anzugeben, der die Semantikausgabe zugewiesen ist.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"/>

attrref-Elementattrref Element

Das attrref-Element verweist auf ein Indexattribut und ermöglicht Abgleiche mit Attributwerten aus dem Index.The attrref element references an index attribute, allowing matching against attribute values observed in the index. Das erforderliche uri-Attribut gibt den Indexschemanamen und den Attributnamen unter Verwendung der Syntax „Schemaname#Attributname“ an.The required uri attribute specifies the index schema name and attribute name using the syntax "schemaName#attrName". Dabei muss ein vorangestelltes import-Element vorhanden sein, das das Schema mit dem Namen Schemaname importiert.There must be a preceding import element that imports the schema named schemaName. Der Attributname ist der Name eines im entsprechenden Schema definierten Attributs.The attribute name is the name of an attribute defined in the corresponding schema.

Zusätzlich zum Abgleich mit der Benutzereingabe gibt das attrref-Element auch ein strukturiertes Abfrageobjekt als Ausgabe zurück, das die Teilmenge der Objekte im Index auswählt, die dem Eingabewert entsprechen.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. Verwenden Sie das optionale name-Attribut, um den Namen der Variablen anzugeben, in der die Ausgabe des Abfrageobjekts gespeichert werden soll.Use the optional name attribute to specify the name of the variable where the query object output should be stored. Das Abfrageobjekt kann mit anderen Abfrageobjekten kombiniert werden, um komplexere Ausdrücke zu erstellen.The query object can be composed with other query objects to form more complex expressions. Ausführliche Informationen finden Sie unter Semantic Interpretation (Semantikinterpretation).See Semantic Interpretation for details.

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

AbfragevervollständigungQuery Completion

Zur Unterstützung von Abfragevervollständigungen beim Interpretieren partieller Benutzerabfragen muss jedes Attribut „starts_with“ als Vorgang in der Schemadefinition enthalten.To support query completions when interpreting partial user queries, each referenced attribute must include "starts_with" as an operation in the schema definition. Wenn ein Benutzerabfragepräfix vorhanden ist, gleicht attrref alle Werte im Index ab, die das Präfix vervollständigen, und gibt jeden vollständigen Wert als separate Interpretation der Grammatik zurück.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.

Beispiele:Examples:

  • Der Abgleich von <attrref uri="academic#Keyword" name="keyword"/> mit dem Abfragepräfix „Dat“ generiert eine Interpretation für Dokumente zu „Datenbank“, eine Interpretation für Dokumente zu „Data Mining“ usw.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.
  • Der Abgleich von <attrref uri="academic#Year" name="year"/> mit dem Abfragepräfix „200“ generiert eine Interpretation für Dokumente des Jahres „2000“, eine Interpretation für Dokumente des Jahres „2001“ usw.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.

AbgleichvorgängeMatching Operations

Neben exakten Übereinstimmungen unterstützen bestimmte Attributtypen über das optionale op-Attribut auch Präfix- und Ungleichheitsübereinstimmungen.In addition to exact match, select attribute types also support prefix and inequality matches via the optional op attribute. Ist im Index kein Objekt mit passendem Wert vorhanden, wird der Grammatikpfad blockiert, und der Dienst generiert keine Interpretationen, wenn er diesen Grammatikpfad durchläuft.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. Das op-Attribut wird standardmäßig auf „eq“ festgelegt.The op attribute defaults to "eq".

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

Die folgende Tabelle enthält die unterstützten op-Werte für die jeweiligen Attributtypen.The following table lists the supported op values for each attribute type. Für die Verwendung muss der entsprechende Indexvorgang in die Schemaattributdefinition eingeschlossen werden.Their use requires the corresponding index operation to be included in the schema attribute definition.

AttributtypAttribute Type op-WertOp Value BESCHREIBUNGDescription IndexoperationIndex Operation
stringString eqeq Zeichenfolge – exakte ÜbereinstimmungString exact match equalsequals
stringString starts_withstarts_with Zeichenfolge – PräfixübereinstimmungString prefix match starts_withstarts_with
Int32, Int64, DoubleInt32, Int64, Double eqeq Numerischer Wert – GleichheitsübereinstimmungNumeric equality match equalsequals
Int32, Int64, DoubleInt32, Int64, Double lt, le, gt, gelt, le, gt, ge Numerischer Wert – Ungleichheitsübereinstimmung (<, <=, >, >=)Numeric inequality match (<, <=, >, >=) is_betweenis_between
Int32, Int64, DoubleInt32, Int64, Double starts_withstarts_with Präfixübereinstimmung des Werts in DezimalschreibweisePrefix match of value in decimal notation starts_withstarts_with

Beispiele:Examples:

  • <attrref uri="academic#Year" op="lt" name="year"/> führt einen Abgleich mit der Eingabezeichenfolge „2000“ durch und gibt alle Dokumente zurück, die vor dem Jahr 2000 veröffentlicht wurden.<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"/> führt keinen Abgleich mit der Eingabezeichenfolge „20“ durch, da der Index keine Dokumente vor dem Jahr 20 enthält.<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"/> führt einen Abgleich mit der Eingabezeichenfolge „dat“ durch und gibt in einer einzelnen Interpretation Dokumente zu „Datenbank“, „Data Mining“ usw. zurück. Hierbei handelt es sich um einen seltenen Anwendungsfall.<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"/> führt einen Abgleich mit der Eingabezeichenfolge „20“ durch und gibt in einer einzelnen Interpretation Dokumente zurück, die zwischen 200 und 299, zwischen 2000 und 2999 usw. veröffentlicht wurden. Hierbei handelt es sich um einen seltenen Anwendungsfall.<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.

tag-Elementtag Element

Das tag-Element gibt an, wie ein Pfad durch die Grammatik interpretiert werden soll.The tag element specifies how a path through the grammar is to be interpreted. Es enthält eine Reihe von Anweisungen, die jeweils mit einem Semikolon enden.It contains a sequence of semicolon-terminated statements. Bei einer Anweisung kann es sich um eine Zuweisung eines Literals oder einer Variable zu einer anderen Variable handeln.A statement may be an assignment of a literal or a variable to another variable. Sie kann aber auch die Ausgabe einer Funktion mit null oder mehr Parametern einer Variablen zuweisen.It may also assign the output of a function with 0 or more parameters to a variable. Jeder Funktionsparameter kann mit einem Literal oder einer Variablen angegeben werden.Each function parameter may be specified using a literal or a variable. Wenn die Funktion keine Ausgabe zurückgibt, erfolgt keine Zuweisung.If the function does not return any output, the assignment is omitted. Der Variablenbereich ist für die enthaltende Regel lokal.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>

Jedes rule-Element in der Grammatik verfügt über eine vordefinierte Variable namens „out“, die die Semantikausgabe der Regel darstellt.Each rule in the grammar has a predefined variable named "out", representing the semantic output of the rule. Zur Berechnung des Werts werden die einzelnen Semantikanweisungen ausgewertet, die vom Pfad durch das rule-Element durchlaufen werden, das der Eingabe der Benutzerabfrage entspricht.Its value is computed by evaluating each of the semantic statements traversed by the path through the rule matching the user query input. Der Wert, der der Variablen „out“ am Ende der Auswertung zugewiesen wird, ist die Semantikausgabe der Regel.The value assigned to the "out" variable at the end of the evaluation is the semantic output of the rule. Die Semantikausgabe der grammatikbasierten Interpretation einer Benutzerabfrage ist die Semantikausgabe der Stammregel.The semantic output of interpreting a user query against the grammar is the semantic output of the root rule.

Einige Anweisungen ändern möglicherweise die Wahrscheinlichkeit eines Interpretationspfads, indem sie ein zusätzliches Offset für die Logarithmus-Wahrscheinlichkeit einführen.Some statements may alter the probability of an interpretation path by introducing an additive log probability offset. Einige Anweisungen lehnen die Interpretation möglicherweise vollständig ab, wenn die angegebenen Bedingungen nicht erfüllt sind.Some statements may reject the interpretation altogether if specified conditions are not satisfied.

Eine Liste mit unterstützten Semantikfunktionen finden Sie unter Semantic Functions (Semantikfunktionen).For a list of supported semantic functions, see Semantic Functions.

InterpretationswahrscheinlichkeitInterpretation Probability

Die Wahrscheinlichkeit eines Interpretationspfads durch die Grammatik ist die kumulative Logarithmus-Wahrscheinlichkeit aller <item>-Elemente und Semantikfunktionen des Pfads.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. Sie beschreibt die relative Wahrscheinlichkeit für die Übereinstimmung einer bestimmten Eingabesequenz.It describes the relative likelihood of matching a particular input sequence.

Bei einer Wahrscheinlichkeit p zwischen 0 und 1 kann die entsprechende Logarithmus-Wahrscheinlichkeit als log(p) berechnet werden, wobei „log()“ die natürliche Logarithmus-Funktion ist.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. Mithilfe von Logarithmus-Wahrscheinlichkeiten kann das System durch einfache Addition die gemeinsame Wahrscheinlichkeit eines Interpretationspfads ermitteln.Using log probabilities allows the system to accumulate the joint probability of an interpretation path through simple addition. Darüber hinaus wird dadurch ein Gleitkommaunterlauf vermieden, wie er bei solchen Berechnungen der gemeinsamen Wahrscheinlichkeit häufig zu beobachten ist.It also avoids floating-point underflow common to such joint probability calculations. Beachten Sie, dass die Logarithmus-Wahrscheinlichkeit immer ein negativer Gleitkommawert oder Null ist und höhere Werte eine höhere Wahrscheinlichkeit angeben.Note that by design, the log probability is always a negative floating-point value or 0, where larger values indicate higher likelihood.

BeispielExample

Im Anschluss finden Sie ein XML-Beispiel aus dem Bereich wissenschaftlicher Veröffentlichungen, das die verschiedenen Grammatikelemente veranschaulicht: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>