问题描述
在Dialogflow(ES版)中,我们打算检测产品名称和可选数量。例如。 Do you have Pepsi
或I need 4 apples
。我们还有一些培训示例,其中包含多个产品。例如:I need 2 brush and 3 chocolates
。
总体思路是使实体提取具有通用性,以便我们可以查询n
个产品。例如,1 Pepsi,2 eggs,5 ice cream,and 4 tomatoes
将正确提取4种不同的产品。
但是我们进行了一些手动测试,发现实体提取通常不会扩展到任意数量的实体。这是Dialogflow的限制吗?还是我们需要调整训练数据以包含4/5 +产品的更多示例?
对话框流设置:
ML Threshold: 0.3
实体:
Product: Some product names as training data. **Automated expansion** and **Fuzzy matching** enabled.
Product-count: @sys.number. All options disabled
Product_Query意向参数:
+----------------+----------------+------+
| Parameter Name | Entity | Type |
+----------------+----------------+------+
| products | @Products | List |
| product-count | @Product-count | List |
+----------------+----------------+------+
解决方法
我创建了两个实体:@products和@count:
@products @count *it sounds dumb to use this @count but is useful for
banana 1 this example
apple 2
pepsi 3
cocacola 4
pear 5
orange 6
juice 7
book 8
然后,我创建了一个名为products_detection的意图,并添加了训练短语:
I want 1 banana,2 apples,3 juices,4 pear,5 orange,6 book,7 cocacola,8 pepsi
单击后,Dialogflow将句子单词与实体匹配,并为每个实体分配不同的值。他还从apples
和juices
中抽取了实体,尽管它们在训练短语中是复数。
我只是想尝试一下它是否可以用一个训练语句就能工作,并且效果出奇的好。首先,我尝试使用相同的训练句子,结果是:
"parameters": {
"count2": "3","count14": "7",<-------------
"count": "1",| You can see that the product and count
"products14": "cocacola",<---- matches for all products
"products13": "book","products12": "orange","count12": "5","count21": "8","count11": "4","count1": "2","products21": "pepsi","count13": "6","products2": "juice","products": "banana","products1": "apple","products11": "pear"
},
然后我将数字和乘积混合在一起并尝试使用以下短语:
I want 5 banana,8 apples,7 juices,3 pepsi,1 cocacola,2 orange,4 book,6 pear
我得到:
"parameters": {
"count1": "8","count12": "1","count14": "4","count21": "6","products13": "orange","count11": "3","products14": "book","count": "5","products21": "pear","products12": "cocacola","count2": "7","products11": "pepsi","count13": "2"
},
您可以看到产品仍与计数匹配,这里有5种以上产品。