我们都看过《钢铁侠》,对吧?作为一个个人项目,我正在尝试创建一个类似Jarvis的人工智能。我并不需要像Jarvis那样复杂的东西;这只是我能想到的最好的描述方式。
我开始研究对话式人工智能——聊天机器人——但那不是我需要的。我觉得那种方法处理用户输入的方式与我所寻找的完全不同且更加复杂。我只需要给人工智能一个命令,然后人工智能匹配该命令并运行相应的代码。
然后我偶然发现了libdiff。但这并不能充分满足我的需求。据我所知,libdiff无法匹配词序不同的字符串。至少就我所知,两条字符串中的词序必须相同,libdiff才能进行匹配。
例如:
用户输入:“现在几点?”
不会与它应该匹配的命令“现在是什么时间?”匹配。
我不是在要求直接给出代码,但有人能指引我正确的方向吗?
回答:
很酷的项目,以下是我初步的想法。我猜你首先需要语音转文本,这样你才能有效地处理命令。然后你可以在其上应用更复杂的方法。有https://code.google.com/p/dragonfly/,但我发现它对于快速项目来说有点复杂,而且我认为它主要支持Windows。不过,可能有人提供这种服务的免费REST服务,谷歌在这方面做得很好http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API,但我认为没有Python绑定。
然后,下一个任务是尝试从文本中找出意义。所以你需要一个解析器(http://nltk.org/index.html)来查看像“什么”这样的疑问词和“时间”这样的主语,或者某种词性标注。当然,在一般情况下(任意输入)正确地做到这一点要困难得多。可能一开始有一些内置命令,然后再逐步提高通用性会更容易些。
如果你想实时做到这一点,挑战就更大了,因为你需要分割实时音频流来确定一个句子何时结束,另一个句子何时开始。
假设,你想先解决一个简单得多的问题。比如,只通过麦克风识别一个单一命令,比如“打开”,然后执行一个动作。如果你愿意训练你的声音,你可以很容易地做到这一点。受此启发http://xa.yimg.com/kq/groups/24321415/1523383180/name/Speech_Recognition_seminar.pdf。你需要pyaudio、numpy、scipy,如果你想看到一个在Python中实现这个的代码,请看https://gist.github.com/a-wild-tigger/5209781