Чат-бот на Python: ответы не соответствуют тегам правильноPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Чат-бот на Python: ответы не соответствуют тегам правильно

Сообщение Anonymous »

Я учусь в старшей школе и работаю над проектом чат-бота с использованием Python 3.10 в Visual Studio в своей собственной виртуальной среде, поддерживающей TensorFlow. Я создаю его без API. Бот успешно распознает теги из введенных пользователем данных, но часто не возвращает правильные ответы. Вместо этого он выбирает любой случайный ответ из скобок ответов.
Что я пытаюсь сделать:
  • Сохраняйте данные чат-бота (теги, шаблоны, ответы) в файле JSON.
  • Сопоставляйте введенные пользователем данные с тегом и возвращайте ответ из соответствующего списка.
  • Я использовал случайный порядок, чтобы перетасовать приветствия и прощай, позже удалил, чтобы посмотреть, будет ли код работать лучше без модуля случайных чисел.
Проблема, с которой я столкнулся:
  • Бот распознает теги правильно, но выбирает противоречивые ответы.
  • Я спросил "кто открыл гравитацию», и он ответил: «Да Винчи нарисовал Мону Лиза".
Соответствующий код:
Функция выбора ответов и интерлиньяжа функции:

Код: Выделить всё

def clean_up_sentence(sentence):
"""Tokenize and lemmatize the input sentence."""
sentence_words = nltk.word_tokenize(sentence)
sentence_words = [lemmatizer.lemmatize(word) for word in sentence_words]
return sentence_words

def bag_of_words(sentence):
"""Convert a sentence into a bag-of-words representation."""
sentence_words = clean_up_sentence(sentence)
bag = [0] * len(words)
for w in sentence_words:
for i, word in enumerate(words):
if word == w:
bag[i] = 1
return np.array(bag)

def predict_class(sentence):
"""Predict the intent class for a given sentence."""
bow = bag_of_words(sentence)
res = model.predict(np.array([bow]))[0]
ERROR_THRESHOLD = 0.8
results = [[i, r] for i, r in enumerate(res) if r > ERROR_THRESHOLD]
results.sort(key=lambda x: x[1], reverse=True)

if not results:
return []

return [{'intent': classes[r[0]], 'probability': str(r[1])} for r in results]

def get_response(intents_list):
"""Generate a response based on predicted intents."""
if not intents_list:
return "I'm sorry, I didn't understand that.  Could you rephrase?"

tag = intents_list[0]['intent']
list_of_intents = intents_json['intents']
for intent in list_of_intents:
if intent['tag'] == tag:
return intent['responses']

if __name__ == "__main__":
while True:
user_input = input("You: ")
intents = predict_class(user_input)
response = get_response(intents)
print(f"Bot: {response}")

Пример файла JSON:

Код: Выделить всё

{
"tag": "general_knowledge",
"patterns": [
"who invented the lightbulb",
"what is the capital of France",
"who painted the Mona Lisa",
"when was the Declaration of Independence signed",
"what is the square root of 144",
"who discovered gravity",
"what is the largest planet in our solar system"
],
"responses": [
"The lightbulb was invented by Thomas Edison.",
"The capital of France is Paris.",
"The Mona Lisa was painted by Leonardo da Vinci.",
"The Declaration of Independence was signed on July 4, 1776.",
"The square root of 144 is 12.",
"Gravity was discovered by Sir Isaac Newton.",
"The largest planet in our solar system is Jupiter."
]
}

Что я пробовал:
  • Проверил файл JSON.
  • Проверила логику сопоставления ответов.
  • Попыталась распечатать операторы отладки, чтобы убедиться, что передается правильный тег.
  • Попыталась удалить случайный модуль.
  • Попыталась удалить случайный модуль.
  • Попыталась удалить случайный модуль.
  • Попыталась распечатать операторы отладки, чтобы убедиться, что передается правильный тег.
    li>
Большой вопрос:
Как бот может отвечать на заданный вопрос, а не выбирать случайные ответы из списка тегов?
Я благодарен за любую информацию, которая может помочь мне решить эту проблему . Я потратил много времени на этот школьный проект; ваша помощь будет много значить!

Подробнее здесь: https://stackoverflow.com/questions/793 ... -correctly
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»