我们目前正在开发一种人工智能(用于 Alexa),它应该能够回答各种各样的问题。用户能够说出需要在后端分析的复杂问题是非常重要的。如果 Alexa 由于话语和插槽类型有限而提前放弃它们,我们将无法提供这样的服务。
目前我们正在尝试以下方法。(请记住,我们的实验是基于德语的。其他语言的行为可能会有所不同。)
1. 每个词类的自定义槽类型
我们为以下词类定义了自定义槽类型:
- 审讯(什么,谁,什么时候)
- 项目(网络安全、暗网、恶意软件)
- 动词(是、有、可以)
- 形容词(流行的、廉价的、不安全的)
- 代词 (the, he, she)
2. 句子结构的示例话语
然后我们为带有样本话语的句子定义了可能的结构:
QuestionIntent {Interrogation}
QuestionIntent {Item}
QuestionIntent {Verb}
QuestionIntent {Adjective}
QuestionIntent {Interrogation} {Verb} {Item}
QuestionIntent {Interrogation} {Verb} {Item} {Adjective}
QuestionIntent {Interrogation} {Verb} {Pronoun} {Item}
QuestionIntent {Interrogation} {Verb} {Pronoun} {Pronoun} {Item}
QuestionIntent {Interrogation} {Verb} {Pronoun} {Item} {Preposition} {Item}
QuestionIntent {Interrogation} {Verb} {Adjective} {Item}
QuestionIntent {Interrogation} {Verb} {Pronoun} {Adjective} {Item}
QuestionIntent {Interrogation} {Item} {Verb}
QuestionIntent {Interrogation} {Item} {Verb} {Adjective}
QuestionIntent {Interrogation} {Item} {Verb} {Pronoun} {Adjective}
QuestionIntent {Item} {Verb} {Interrogation}
QuestionIntent {Verb} {Item} {Verb}
QuestionIntent {Verb} {Adjective} {Item} {Verb}
3. 后端 NLP 分析
然后我们在后端对提交的单词进行 NLP 分析。接收到的数据如下所示:
"intent": {
"name": "QuestionIntent",
"slots": {
"Item": {
"name": "Item",
"value": "darknet"
},
"Preposition": {
"name": "Preposition"
},
"Adjective": {
"name": "Adjective"
},
"Verb": {
"name": "Verb",
"value": "is"
},
"Interrogation": {
"name": "Interrogation",
"value": "what"
},
"Pronoun": {
"name": "Pronoun",
"value": "the"
}
}
}
有些词可能会丢失,有些词可能会听错。在这种情况下,我们会记住早期交流的主题,并用这些“填充”缺失的单词。例如:What is {it}?
⇒What is {Darknet}?
我们正在试验一个广泛的插槽类型列表。但这增加了听错的风险(英语中一个很好的例子是write和right,幸运的是它们没有被分配到同一个词类)。所以我们转向了一种非常狭窄的方法。列表仅包含可由 AI 处理并存储在知识库中的单词。例如,项目列表不包含单词pony或unicorn。我们希望这会产生更好的结果(更少令人困惑的答案)。
没有用话语结构定义的复杂句子使用起来非常容易混淆。例如,如果一个句子包含超过 2 个动词(这可能是构建时态所必需的)。但是到目前为止,只要用户表现出一定程度的礼貌,我们的方法就会产生具有良好准确性的结果。
但最后:不幸的是,目前,不可能用无数不同的单词和句子结构来口述备忘录之类的东西。