类似siri的应用程序:计算查询和预定义的控制短语之间的相似度



我正在尝试用python制作一个类似苹果siri的应用程序,在这个应用程序中,您通过麦克风给它语音命令或问题,它确定输入音频的文本版本,然后根据命令/问题的含义确定采取适当的行动。我将使用语音识别库来接受麦克风输入并将语音转换为文本(通过IBM Watson语音到文本API)。

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

假设我们有一个动作叫做hello。对另一个人(或者在本例中是我的应用程序)说"hello"有多种方式,例如:

  • "Hello"
  • "嗨"
  • "你好"
  • …等等…

当然,我希望所有这些说"hello"的方式都在hello的作用下分类。也就是说,当有人说"hello","hi"或"howdy"时,应该执行动作hello的响应(在这种情况下很可能只是应用程序说"hello")。

关于如何解决这个问题,我的第一个想法是为应用程序提供所有或最常用的方式来说出某个命令/问题。因此,如果我遵循前面的例子,我会告诉计算机"hello","hi"one_answers"howdy"都意味着相同的事情:hello动作。然而,这种方法有一些缺陷。首先,它根本无法理解没有硬编码的"hello"的表达方式,比如"hey"。其次,一旦对新命令/问题的回答开始被编码,输入所有说某个短语的方法就会变得非常繁琐。

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

我还发现了WordNet,以及如何使用自然语言工具包(NLTK)在python中使用它。看起来它可能有用,但我不确定它如何有用。

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

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

注:抱歉我的解释太啰嗦了;我想确保我讲清楚了:P

这是一个难题。它也是今年语义评估挑战(Semeval 2017)任务11的主题。所以看一下任务描述,它会给你一个如何解决这个问题的路线图。该任务还附带了一套训练数据,这对于解决此类问题至关重要。挑战仍在进行中,但最终您也将能够从解决方案中学习。

因此,"我如何确定某个命令/问题是否表示某个动作"的简短答案是:使用Semeval2017中的训练数据(当然也可以是你自己的),并编写一个分类器。nltk书可以帮助您快速编写分类器。

最新更新