我的问题与我刚刚开始研究的项目有关,而且它是一个ChatBot。
我想要构建的机器人有一个非常简单的任务。它必须自动化购买电影票的过程。这是非常接近的域,并且机器人具有对影院数据库的所有必需访问权。当然,如果用户消息与订购电影票的过程无关,机器人可以像“我不知道”那样回答。
我已经创建了一个简单的演示,只是为了向少数人展示它,看看他们是否对这样的产品感兴趣。该演示使用简单的DFA方法和一些简单的文本匹配与词干。我在一天内入侵了它,结果发现用户对他们能够成功订购他们想要的门票感到印象深刻。 (该演示使用与影院数据库的连接,为用户提供所需的所有信息,以便订购他们想要的门票。)
我目前的目标是创建下一个版本,一个更高级的版本,特别是在自然语言理解方面。例如,演示版本要求用户在单个消息中仅提供一个信息,并且无法识别他们是否提供了更多相关信息(例如电影标题和时间)。我读到这里一个有用的技术被称为“帧和槽语义”,它看起来很有希望,但我还没有找到关于如何使用这种方法的任何细节。
此外,我不知道哪种方法最适合改善自然语言理解。在大多数情况下,我认为:
哪种方法最适合我的目标?
你知道在哪里可以找到更多有关“框架和插槽语义”如何工作的资源吗?在谈论框架和插槽方法时,我指的是这个PDF from Stanford
答案 0 :(得分:0)
问题非常广泛,但这里有一些想法和实用建议,基于在类似问题领域的NLP和基于文本的机器学习的经验。
我假设虽然这是聊天机器人的“更高级”版本,但可行的工作范围非常有限。在我看来,这是一个非常重要的因素,因为不同的方法在使它们工作所需的手工工作量和类型方面存在很大差异,而且最先进的技术可能在这里很难实现。
通常,要考虑的两种主要方法是基于规则和统计。第一个传统上更侧重于模式匹配,并且在您描述的设置中(可以投入有限的努力),将涉及手动处理规则和/或模式。这种方法的一个例子是使用一组封闭(但很大)的模板来匹配用户输入(例如使用正则表达式)。这种方法在性能方面通常具有“玻璃天花板”,但可以相对快速地产生相当好的结果。
统计方法更多的是为一些ML算法提供一堆数据并让它从中提取规律性,将手动工作集中在收集和标记好的训练集上。在我看来,为了获得“足够好”的结果,您需要的数据量可能非常大,除非您能够想出一种方法来轻松收集大量至少部分标记的数据。
实际我建议在这里考虑混合方法。使用一些基于ML的统计通用工具从用户输入中提取信息,然后应用手动构建的规则/模板。例如,您可以使用Google的Parsey McParseface进行语法分析,然后对结果应用一些规则引擎,例如将动词与“购买”等可能的动作列表相匹配,使用提取的语法关系来查找电影名称的候选者等。这应该可以快速获得相当好的结果,因为语法分析器的强度可以“理解”甚至精心设计和可能令人困惑的句子。
我还建议推迟你想做的一些元素,比如拼写纠正,甚至是词干和同义词DB--因为问题相对封闭,投资规则/模板可能会有更好的投资回报率 - 框架和手动规则创建。此建议也适用于对话流的显式建模。