Python Siri-like应用程序:计算查询和预定义控制短语集之间的相似性

Python Siri-like应用程序:计算查询和预定义控制短语集之间的相似性,python,nlp,nltk,wordnet,gensim,Python,Nlp,Nltk,Wordnet,Gensim,我正在尝试用python制作一个类似Apple Siri的应用程序,通过麦克风向它发出声音命令或问题,它确定输入音频的文本版本,然后根据命令/问题的含义确定要采取的适当行动。我将使用语音识别库接受麦克风输入,并将语音转换为文本(通过IBMWatson语音转换为文本API) 我现在面临的主要问题是,当我为应用程序定义一个操作,以便在发出相应命令/询问相应问题时执行时,我不知道如何确定所述命令/问题是否表示该操作。让我用一个例子来阐明我的意思: 假设我们有一个名为“你好”的动作。有多种方式可以让某人

我正在尝试用python制作一个类似Apple Siri的应用程序,通过麦克风向它发出声音命令或问题,它确定输入音频的文本版本,然后根据命令/问题的含义确定要采取的适当行动。我将使用语音识别库接受麦克风输入,并将语音转换为文本(通过IBMWatson语音转换为文本API)

我现在面临的主要问题是,当我为应用程序定义一个操作,以便在发出相应命令/询问相应问题时执行时,我不知道如何确定所述命令/问题是否表示该操作。让我用一个例子来阐明我的意思:

假设我们有一个名为“你好”的动作。有多种方式可以让某人向另一个人(或者在本例中是我的应用程序)说“你好”,例如:

  • “你好”
  • “嗨”
  • “你好”
  • …等等
当然,我希望所有这些说“你好”的方式都在
hello
的作用下进行分类。也就是说,当有人说“你好”、“你好”或“你好”时,应该执行动作
hello
的响应(在这种情况下,很可能只是应用程序说“你好”)

我对如何解决这个问题的第一个想法是向应用程序提供所有或最常用的方式来表达某个命令/问题。因此,如果我遵循前面的例子,我会告诉计算机,“你好”、“你好”和“你好”都是同一个意思:
hello
动作。然而,这种方法有两个缺陷。首先,它根本不理解没有硬编码的“你好”的表达方式,比如“嘿”。其次,一旦新命令/问题的回答开始被编码,输入说某个短语的所有方式将变得非常乏味

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

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

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

任何帮助都将不胜感激。提前谢谢


顺便说一句,很抱歉解释得太冗长;我想确定我是清楚的:这是一个难题。它也是今年语义评估挑战集()的主题。因此,请看一下,它将为您提供如何解决此问题的路线图。该任务还附带了一套培训数据,这对于解决类似问题至关重要。挑战仍在继续,但最终你也将能够从解决方案中学习


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

感谢您的回复。我一定会仔细阅读任务11和分类器。