类似Siri的app:计算查询与预定义的一组控制短语之间的相似性

时间:2016-09-28 04:54:25

标签: python nlp nltk wordnet gensim

我正在尝试在python中创建类似Apple Siri的应用程序,通过麦克风为其提供声音命令或问题,它确定输入音频的文本版本,然后根据命令/问题的含义。我将使用语音识别库接受麦克风输入并从语音转换为文本(通过IBM Watson Speech to Text API)。

我现在遇到的主要问题是,当我在给出适当的命令/问题时定义应用程序执行的操作时,我不知道如何确定是否所述命令/问题是表示该行动。让我用一个例子澄清我的意思:

假设我们有一个名为hello的动作。有人可以通过多种方式说出#34;你好"给另一个人(或者在这种情况下,我的申请),例如:

  • "你好"
  • "您好"
  • "你好"
  • ...诸如此类...

当然,我想要所有这些方式来说"你好"在hello的行动下进行分类。也就是说,当有人说"你好"," hi"或"你好"时,应该执行动作hello的响应(最有可能)只是应用程序说"你好"在这种情况下回来。)

我对如何解决这个问题的第一个想法是为应用程序提供所有或最常见的方式来表达某个命令/问题。所以,如果我按照前面的例子,我会告诉计算机"你好"," hi","你好"所有意味着同样的事情:hello行动。但是,这种方法有一些缺陷。首先,它根本不会理解说"你好"那些没有硬编码的,例如"嘿"。第二,一旦对新命令/问题的回答开始编码,进入所有说出某个短语的方式就变得非常繁琐。

那么,由于上述问题,我开始研究计算一组句子和单个查询之间相似性的方法。我最终遇到了用于python的Gensim库。我调查了一下,发现了一些关于复杂过程的非常有前途的信息,例如潜在语义索引/分析(LSI / LSA)和Tf-idf。然而,在我看来,这些东西主要用于比较具有大字数的文档,因为它们依赖于某些术语的频率。假设这是真的,这些过程并不能真正为我提供准确的结果,因为给我的应用程序的命令/问题平均可能大约是8个单词。我可能完全错了,毕竟我对这些过程知之甚少。

我还发现了WordNet,以及如何使用Natural Language Toolkit(NLTK)在python中使用它。看起来它可能有用,但我不确定如何。

所以,最后,我想我真正的问题是什么是我提到的问题的最佳解决方案?我应该使用我提到的其中一种方法吗?或者有更好的方法来做我想做的事情,我不知道吗?

任何帮助都将非常感谢。提前谢谢。

P.S。对于罗嗦的解释感到抱歉;我想确定我很清楚:P

1 个答案:

答案 0 :(得分:3)

这是一个难题。它也是今年语义评估挑战Task 11的主题(Semeval 2017)。因此,请查看task description,它将为您提供解决此问题的路线图。该任务还附带一套培训数据,这对于解决此类问题至关重要。挑战仍在继续,但最终您也可以从解决方案中学习。

所以简短回答"我如何确定某些命令/问题是否表示某项行动"是:使用Semeval2017(或您自己的)训练数据,并编写分类器。 nltk book可以帮助您快速编写分类器。