Я учусь в старшей школе и работаю над проектом чат-бота с использованием 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}")
{
"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>
Большой вопрос:
Как бот может отвечать на заданный вопрос, а не выбирать случайные ответы из списка тегов?
Я благодарен за любую информацию, которая может помочь мне решить эту проблему . Я потратил много времени на этот школьный проект; ваша помощь будет много значить!
Я учусь в старшей школе и работаю над проектом чат-бота с использованием [b]Python 3.10[/b] в Visual Studio в своей собственной [b]виртуальной среде, поддерживающей TensorFlow[/b]. Я создаю его [b]без API[/b]. Бот [b]успешно распознает теги[/b] из введенных пользователем данных, но часто не возвращает правильные ответы. Вместо этого он выбирает любой [b]случайный ответ из скобок ответов.[/b] Что я пытаюсь сделать: [list] [*]Сохраняйте данные чат-бота (теги, шаблоны, ответы) в файле JSON. [*]Сопоставляйте введенные пользователем данные с тегом и возвращайте ответ из соответствующего списка. [*]Я использовал случайный порядок, чтобы перетасовать приветствия и прощай, позже удалил, чтобы посмотреть, будет ли код работать лучше без модуля случайных чисел. [/list] Проблема, с которой я столкнулся: [list] [*]Бот распознает теги правильно, но выбирает противоречивые ответы.
[*]Я спросил "кто открыл гравитацию», и он ответил: «Да Винчи нарисовал Мону Лиза".
[/list] Соответствующий код: Функция выбора ответов и интерлиньяжа функции: [code]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}")
[/code] Пример файла JSON: [code]{ "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." ] }
[/code] Что я пробовал: [list] [*]Проверил файл JSON. [*]Проверила логику сопоставления ответов. [*]Попыталась распечатать операторы отладки, чтобы убедиться, что передается правильный тег. [*]Попыталась удалить случайный модуль. [*]Попыталась удалить случайный модуль. [*]Попыталась удалить случайный модуль. [*]Попыталась распечатать операторы отладки, чтобы убедиться, что передается правильный тег. li> [/list] Большой вопрос: Как бот может отвечать на заданный вопрос, а не выбирать случайные ответы из списка тегов? Я благодарен за любую информацию, которая может помочь мне решить эту проблему . Я потратил много времени на этот школьный проект; ваша помощь будет много значить!
Я учусь в старшей школе и работаю над проектом чат-бота с использованием Python 3.10 в Visual Studio в своей собственной виртуальной среде, поддерживающей TensorFlow . Я создаю его без API . Бот успешно распознает теги из введенных пользователем...
Я создаю чат-бота на Django, который получает ответы из PDF-документов на основе вопросов пользователей. У меня есть функция get_response, которая использует хранилище векторов для поиска соответствующих ответов, но кажется, что предыдущие ответы не...
Я создаю веб-приложение для прогнозного обслуживания, которое имеет панель управления с двумя разделами и чат-бота, созданного с помощью Streamlit, который интегрируется с API чат-бота Google Gemini. У меня также есть датчик реального времени,...
Описание проблемы:
У нас есть система управления контактами, где контакты могут быть помечены хэштегами (например, #work , #personal ). Система должна отфильтровать контакты на основе хэштегов, где контакт должен быть возвращен только в том случае,...
Я пытаюсь написать код для чат-бота (LSAR), в который вручную ввожу команды и ответы. У меня установлено несколько команд, и я пытаюсь понять, как установить сообщение об ошибке.
В последней строке я поместил все команды в фигурные скобки,...