2016-03-29 33 views
1

我注意到,我们可以用沃森的EntityType提取time reference来自用户的输入,如:使用实体类型为沃森对话框形状可变

<folder label="Invite Time"> 
       <output id="output_invite_time"> 
        <prompt> 
         <item>What time is your meeting?</item> 
        </prompt> 
        <getUserInput> 
         <input> 
          <grammar> 
           <item>$ (DATE_TIME_RANGE)={var-invite_time}</item> 
          </grammar> 
          <action varName="var-invite_time" operator="SET_TO">{var-invite_time.value:FROM_TIME}</action> 
          <goto ref="output_invite_date"/> 
         </input> 
         <output> 
          <prompt> 
           <item>I'll need a valid time to continue.</item> 
          </prompt> 
          <goto ref="output_invite_time"/> 
         </output> 
        </getUserInput> 
       </output> 
      </folder> 

我试图找出如何使用其他(支持? )EntityTypes像通用,位置,金额等,但结果有时是意想不到的。例如,“位于美国科罗拉多州丹佛市的好房子”对于位置实体的结果“很好”;或者在日期不正确的日期中指定“昨天”。

我简化对话框的文件如下:

<?xml version="1.0" encoding="UTF-8"?> 
 
<dialog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="WatsonDialogDocument_1.0.xsd"> 
 
    <flow> 
 
     <folder label="Main" id="Main"> 
 
      <output id="start"> 
 
       <prompt selectionType="RANDOM"> 
 
        <item>DIALOG START - asking for user input</item> 
 
       </prompt> 
 
       <goto ref="processUserInput_start"/> 
 
      </output> 
 
      <getUserInput id="processUserInput_start"> 
 
       <search ref="library_supported-intents"/> 
 
       <default> 
 
        <output> 
 
         <prompt selectionType="RANDOM"> 
 
          <item>I am sorry, I did not understand your intents. Please choose intent1.</item> 
 
         </prompt> 
 
        </output> 
 
       </default> 
 
      </getUserInput> 
 
     </folder> 
 
     <folder label="Library" id="Library"> 
 
      <folder label="Main Input" id="library_supported-intents"> 
 
       <input> 
 
        <grammar> 
 
         <item>intent1</item> 
 
        </grammar> 
 
        <output> 
 
         <prompt selectionType="RANDOM"> 
 
          <item>OK. Executing intent 1</item> 
 
         </prompt> 
 
         <goto ref="intent1-detail-generic"/> 
 
        </output> 
 
       </input> 
 
      </folder> 
 
      <folder label="Intent 1 Input Generic" id="library_intent1-generic"> 
 
       <output id="intent1-detail-generic"> 
 
        <prompt> 
 
         <item>Please specify generic</item> 
 
        </prompt> 
 
        <getUserInput> 
 
         <search ref="library_supported-intents"/> 
 
         <input> 
 
          <grammar> 
 
           <item>$ (ZIPCODE)={var-param_generic}</item> 
 
          </grammar> 
 
          <action varName="var-param_generic" operator="SET_TO">{var-param_generic.value:main}</action> 
 
          <goto ref="intent1-detail-location"/> 
 
         </input> 
 
         <output> 
 
          <prompt> 
 
           <item>I'll need a valid generic to continue.</item> 
 
          </prompt> 
 
          <goto ref="intent1-detail-generic"/> 
 
         </output> 
 
        </getUserInput> 
 
       </output> 
 
      </folder> 
 
      <folder label="Intent 1 Input Location" id="library_intent1-location"> 
 
       <output id="intent1-detail-location"> 
 
        <prompt> 
 
         <item>Please specify Location</item> 
 
        </prompt> 
 
        <getUserInput> 
 
         <search ref="library_supported-intents"/> 
 
         <input> 
 
          <grammar> 
 
           <item>$ (LOCATION)={var-param_location}</item> 
 
          </grammar> 
 
          <action varName="var-param_location" operator="SET_TO">{var-param_location.source}</action> 
 
          <goto ref="intent1-detail-amount"/> 
 
         </input> 
 
         <output> 
 
          <prompt> 
 
           <item>I'll need a valid location to continue.</item> 
 
          </prompt> 
 
          <goto ref="intent1-detail-location"/> 
 
         </output> 
 
        </getUserInput> 
 
       </output> 
 
      </folder> 
 
      <folder label="Intent 1 Input Location" id="library_intent1-amount"> 
 
       <output id="intent1-detail-amount"> 
 
        <prompt> 
 
         <item>Please specify Amount</item> 
 
        </prompt> 
 
        <getUserInput> 
 
         <search ref="library_supported-intents"/> 
 
         <input> 
 
          <grammar> 
 
           <item>$ (AMOUNT)={var-param_amount}</item> 
 
          </grammar> 
 
          <action varName="var-param_amount" operator="SET_TO">{var-param_amount.value:main}</action> 
 
          <goto ref="intent1-detail-time"/> 
 
         </input> 
 
         <output> 
 
          <prompt> 
 
           <item>I'll need a valid amount to continue.</item> 
 
          </prompt> 
 
          <goto ref="intent1-detail-amount"/> 
 
         </output> 
 
        </getUserInput> 
 
       </output> 
 
      </folder> 
 
      <folder label="Intent 1 Input Time" id="library_intent1-time"> 
 
       <output id="intent1-detail-time"> 
 
        <prompt> 
 
         <item>Please specify time</item> 
 
        </prompt> 
 
        <getUserInput> 
 
         <search ref="library_supported-intents"/> 
 
         <input> 
 
          <grammar> 
 
           <item>$ (DATE_TIME_RANGE)={var-param_time}</item> 
 
          </grammar> 
 
          <action varName="var-param_time" operator="SET_TO">{var-param_time.value:FROM_TIME}</action> 
 
          <goto ref="intent1-detail-date"/> 
 
         </input> 
 
         <output> 
 
          <prompt> 
 
           <item>I'll need a valid time to continue.</item> 
 
          </prompt> 
 
          <goto ref="intent1-detail-time"/> 
 
         </output> 
 
        </getUserInput> 
 
       </output> 
 
      </folder> 
 
      <folder label="Intent 1 Input Date" id="library_intent1-date"> 
 
       <output id="intent1-detail-date"> 
 
        <prompt> 
 
         <item>Please specify date</item> 
 
        </prompt> 
 
        <getUserInput> 
 
         <search ref="library_supported-intents"/> 
 
         <input> 
 
          <grammar> 
 
           <item>$ (DATE_TIME_RANGE)={var-param_date}</item> 
 
          </grammar> 
 
          <action varName="var-param_date" operator="SET_TO">{var-param_date.value:FROM_DATE}</action> 
 
          <output> 
 
           <prompt> 
 
            <item>You've specified {var-param_time} on {var-param_date}.</item> 
 
           </prompt> 
 
          </output> 
 
          <goto ref="processUserInput_start"/> 
 
         </input> 
 
         <output> 
 
          <prompt> 
 
           <item>I'll need a valid date to continue.</item> 
 
          </prompt> 
 
          <goto ref="intent1-detail-date"/> 
 
         </output> 
 
        </getUserInput> 
 
       </output> 
 
      </folder> 
 
     </folder> 
 
     <folder label="Concepts" id="Concepts"></folder> 
 
    </flow> 
 
    <entities> 
 
     <entity name="ZIPCODE" entityType="GENERIC"> 
 
      <value name="10024" value="10024"/> 
 
      <value name="07928" value="07928"/> 
 
      <value name="95118" value="95118"/> 
 
      <value name="95120" value="95120"/> 
 
      <value name="uszipcode" value="!^[0-9]{5}$"/> 
 
      <entityRules></entityRules> 
 
     </entity> 
 
    </entities> 
 
    <variables> 
 
     <var_folder name="Home"> 
 
      <var name="IntentClass" type="TEXT"/> 
 
      <var name="Class1" type="TEXT"/> 
 
      <var name="Class1_Confidence" type="NUMBER" initValue="0" description="Confidence score for Class1 from NL classifier"/> 
 
      <var name="var-param_date" type="TEXT" description="Date object"/> 
 
      <var name="var-param_time" type="TEXT" description="Time object"/> 
 
      <var name="var-param_generic" type="TEXT" description="Generic Object"/> 
 
      <var name="var-param_location" type="TEXT" description="Location Object"/> 
 
      <var name="var-param_amount" type="TEXT" description="Amount Object"/> 
 
     </var_folder> 
 
    </variables> 
 
</dialog>

我不知道如果我用它给the sample tutorial以正确的方式只提到{ProfVar.value:main} or {ProfVar.value:name}。我在官方文档中找不到FROM_TIMEFROM_DATEDATE_TIME_RANGE

支持哪些实体类型以及如何正确提取Watson Dialog中的实体特定信息?

+0

我不知道支持哪些类型。但这里有一些提示。对于AMOUNT,创建变量类型的var-param_amount INTEGER。另请注意,您的规则是$(AMOUNT)尝试添加$(AMOUNT),它应该可以工作。空间可能会被考虑。 对于这个位置,如果你的句子是“在科罗拉多州丹佛市的好房子”,你的规则应该是$ *(LOCATION)= {var-param_location} – Dudi

+0

For Amount,它可以将“five”解释为“5” - 但是“$ *(LOCATION)= {var-param_location}'带有 {var-param_location.value:main}'为空。 – totoro

回答

0

我想弄清楚如何使用其他(支持?)EntityTypes像通用,位置,金额等,但结果有时是意想不到的。例如,“位于美国科罗拉多州丹佛市的好房子”对于位置实体的结果“很好”;或者在日期不正确的日期中指定“昨天”。

“Nice”是法国的城市。所以它给出了正确的回应。

问题是Dialogs实体提取是非常基本的。从你的样本:

$ (LOCATION)={var-param_location} 

这将找到第一个实体,并停止寻找。为了演示这个限制,可以说你想在用户响应中获得三个可能的位置。

$ (LOCATION)={var-param_location} 
$ (LOCATION)={var-param_location} (LOCATION)={var-param_location2} 
$ (LOCATION)={var-param_location} * (LOCATION)={var-param_location2} 
$ (LOCATION)={var-param_location} (LOCATION)={var-param_location2} (LOCATION)={var-param_location3} 
$ (LOCATION)={var-param_location} * (LOCATION)={var-param_location2} (LOCATION)={var-param_location3} 
$ (LOCATION)={var-param_location} * (LOCATION)={var-param_location2 * (LOCATION)={var-param_location3} 
$ (LOCATION)={var-param_location} (LOCATION)={var-param_location2 * (LOCATION)={var-param_location3} 

正如你所看到的,它会开始越来越混乱。这实际上只适用于你期望一个实体或显式数量的实体被返回的地方。

如果您想获得更准确的实体/关键字提取,请先将它发送到AlchemyAPI之类的东西。让API返回关键字/实体,然后使用它们。