Как эффективно использовать nltk в голосовом помощнике? - PullRequest
1 голос
/ 25 мая 2020

первый вопрос здесь, так что несите меня, если мой этикет плохой. В настоящее время я работаю над проектом, цель которого - реализовать голосового помощника с использованием python. Нам рекомендовали использовать обработку естественного языка, чтобы помочь помощнику более эффективно анализировать проблемы, и я успешно установил для этого nltk. Я совершенно новичок в обработке естественного языка, поэтому у меня возникла некоторая путаница.

Прямо сейчас мой код будет принимать словесный ввод в mi c, например:

"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))

По сути, моя проблема в том, что я не уверен, куда go отсюда. На самом деле я не нашел хороших примеров того, как подобный текст можно использовать с API, чтобы фактически вернуть погоду в Chica go.

Был бы я прав, если бы просто использовал операторы if / else, как в этом псевдокоде?:

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

Подводя итог, когда вы разметили / пометили текст nltk, как лучше всего код, определяющий, что делать дальше, чтобы соответствующая информация использовалась правильной библиотекой?

Ответы [ 3 ]

0 голосов
/ 26 мая 2020

Думаю, ты почти все сделал. Вам просто нужен API для получения данных. openweathermap - это сервис, который предоставляет данные о погоде, включая текущие погодные данные, прогнозы и исторические данные, разработчикам веб-сервисов и мобильных приложений. Создайте там учетную запись и получите учетные данные API. Следуйте этому руководству, чтобы узнать остальное

0 голосов
/ 26 мая 2020

Хорошо, поэтому вы хотите проанализировать намерение в интерфейсе STT (Speech-To-Text ') , желательно с открытым исходным кодом. nltk на самом деле не выполняет намерение или преобразование речи в текст. «когда вы разметили / пометили текст nltk, как лучше всего для вашего кода определить, что делать дальше, чтобы соответствующая информация использовалась правильной библиотекой?» называется определением intent пользовательского запроса.

1) Вот список стеков, используемых 10 + Лучшие проекты голосовых помощников с открытым исходным кодом для разработчиков (Linux, Raspberry Pi , Windows & Ma c OS X) - 12/2018

2) Mycroft AI - это ведущий голосовой помощник с открытым исходным кодом, о котором я знаю, проект отстал на годы и даже они отказались от Mozilla DeepSpeech в пользу STT от Google. Mycroft AI перечисляет следующие параметры STT :

  • (Механизм по умолчанию :) Механизм STT Google (не с открытым исходным кодом)
  • Mozilla DeepSpeech
  • Kaldi («набор инструментов для распознавания речи, написанный на C ++»)
0 голосов
/ 25 мая 2020

Добро пожаловать в Stackoverflow. На этот вопрос нет однозначного ответа, который станет яснее, чем больше вы прочитаете о чат-ботах и ​​голосовых помощниках. Вот почему этот вопрос на самом деле так хорош. Когда вы прилично познакомитесь с наиболее известными системами поддержки речи, например am *** n al ** a, вы заметите, что внутренне выходные данные распознавания речи отображаются на «намерения», например «playMusicIntent», который параметризуется с помощью например, название песни и переводчик. Отображение важных слов (которые имеют семантику, а не функциональные слова) на разные намерения - хорошая отправная точка, но также означает «жесткое кодирование» правил схемы if / else. Большинство чат-ботов привязаны к определенным доменам c, например каталогу продуктов. Хорошее начало - выучить сочетания слов, например, «погода» и «в», с помощью которых вы можете зарегистрировать намерение. Это можно сделать с помощью NLTK или Spacy. Многое нужно реализовать с помощью классификаторов, которые полагаются на данные корпуса, например, распознавание типа речевого акта (https://www.nltk.org/book/ch06.html). NLU (понимание естественного языка) здесь наиболее важно, учитывая, что у вас есть хороший движок SR. Это может потребовать большого количества обучающих данных для распознавания намерений. Если вы предоставите информацию о своем домене, мы (ребята из SO) можем помочь больше.

...