【问题标题】:How to effectively utilize nltk in a voice assistant?如何在语音助手中有效利用 nltk?
【发布时间】:2020-09-12 01:25:04
【问题描述】:

这里的第一个问题,如果我的礼仪很差,请多多包涵。我目前正在做一个项目,目标是使用 python 实现语音助手。我们被推荐使用自然语言处理来帮助助手更有效地解析问题,我已经为此成功安装了 nltk。我对自然语言处理完全陌生,所以我遇到了一些困惑。

现在我的代码将对麦克风进行口头输入,例如:

"what is the weather in Chicago?"

并成功对其进行标记,删除停用词并将其标记如下:

    import nltk # importing the natural language toolkit
    from nltk import word_tokenize # this allows us to tokenize a sentence
    from nltk.corpus import stopwords # this allows us to filter out stopwords
    # Tokenizes the sentence
    tokens = word_tokenize(text)
    print(tokens)

    # Removes stopwords from the sentence
    sWords = set(stopwords.words('english'))
    cleanTokens = [w for w in tokens if not w in sWords]
    print(cleanTokens)

    # Tags the sentence
    tagged = nltk.pos_tag(cleanTokens)
    print(tagged)

    # Prints fully processed sentence with tags attatched
    print(nltk.ne_chunk(tagged))

输出:

['what', 'is', 'the', 'weather', 'in', 'Chicago']
['weather', 'Chicago']
[('weather', 'NN'), ('Chicago', 'NNP')]
(S weather/NN (GPE Chicago/NNP))

基本上我的问题是我不确定从这里去哪里。我还没有真正找到任何很好的例子来说明如何将这样的文本与 API 一起使用以实际返回芝加哥的天气。

在这个伪代码中简单地使用 if/else 语句是否正确?:

if tagged.contains("weather")
   city = searchForCities(tagged)
   return city.weatherReport
elif tagged.contains("time) ect...

总而言之,当您对 nltk 文本进行标记/标记时,您的代码确定下一步要做什么以便相关信息被正确的库使用的最佳方法是什么?

【问题讨论】:

  • 您是否考虑过其他选项,例如在 AI bot 工具之上构建以进行对话,例如 Google's DialogFlow(其他可从 Amazon、Microsoft 等获得)API 可以识别句子中的指定关键字,这些关键字允许在句子变体中识别这些单词::1)芝加哥的天气怎么样?,2)请告诉我芝加哥的天气吗? 3) 等。可以用 Python 和其他语言进行定制。 Home Depot 在他们的购物应用中使用它。
  • 您可能只想返回查询搜索引擎的结果,其中包含您认为重要的句子中的单词。如果您知道用户只会询问一部分问题,则可以执行您提到的 if -else 块。但是,如果他们可以就您想要量身定制的答案提出有关广泛主题的问题,那么您每次整理的场景数量将过于庞大且难以处理。

标签: python nlp nltk voice-recognition


【解决方案1】:

欢迎来到 Stackoverflow。对此没有简单的答案,随着您对聊天机器人和语音助手的了解越多,这可能会变得越清楚。这就是为什么这个问题实际上非常好。当您熟悉最突出的语音助手系统时,例如am***n al**a,您会注意到在内部,语音识别输出被映射到“意图”,例如“playMusicIntent”,使用例如参数化歌曲名称和翻译。将重要的词(具有语义,而不是功能词)映射到不同的意图是一个很好的起点,但也意味着 if/else 方案的“硬编码”规则。大多数聊天机器人都针对特定域进行了定制,例如产品目录。 一个好的开始是学习单词的搭配,例如“wheather”和“in”,您可以通过它们注册意图。这可以使用 NLTK 或 Spacy 来完成。必须使用依赖于语料库数据的分类器来实现很多,例如言语行为类型识别 (https://www.nltk.org/book/ch06.html)。 NLU(自然语言理解)在这里是最重要的,因为你有一个好的 SR 引擎。这可能会查询大量训练数据以进行意图识别。如果您提供有关您的域的信息,我们(SO 方面的人)可能会提供更多帮助。

【讨论】:

    【解决方案2】:

    我认为你几乎做了所有事情。您只需要一个 API 即可获取数据。 openweathermap 是一项向 Web 服务和移动应用程序的开发人员提供天气数据(包括当前天气数据、预报和历史数据)的服务。在那里创建一个帐户并获取您的 API 凭证。其余部分请按照 this 教程进行操作

    【讨论】:

      【解决方案3】:

      好的,所以您想在 STT (Speech-To-Text') 界面 中解析 intent,最好是开源的。 nltk 并没有真正做意图或语音转文本。 “当您对 nltk 文本进行标记/标记时,您的代码确定下一步要做什么以便正确的库使用相关信息的最佳方法是什么?” 称为确定 用户查询的意图

      1) 这是10+ Top Open source Voice Assistants Projects for developers (Linux, Raspberry Pi, Windows & Mac OS X) - 12/2018 使用的堆栈列表

      2) Mycroft AI 是我所知道的领先的开源语音助手,该项目落后多年,甚至他们抛弃了 Mozilla DeepSpeech,转而支持 Google 的 STT。 Mycroft AI lists the following STT options:

      • (默认引擎:)Google 的 STT 引擎(非开源)
      • Mozilla DeepSpeech
      • Kaldi(“用 C++ 编写的语音识别工具包”)

      【讨论】:

        猜你喜欢
        • 2020-10-21
        • 2021-05-30
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-06
        相关资源
        最近更新 更多