Chat / app.py
ThanhHoang's picture
Update app.py
24030c8 verified
import numpy as np
import pandas as pd
#!pip install neattext # Installing the neattext library
import neattext.functions as ntf
from sklearn.feature_extraction.text import TfidfVectorizer,CountVectorizer,TfidfTransformer
from sklearn.pipeline import Pipeline
import os
import pandas as pd
# Đường dẫn tới file Excel
#excel_file_path = '/content/Data_LHU_2cot .xlsx'
# Đọc file Excel
#df = pd.read_excel(excel_file_path)
# Lấy tên file Excel và thay đổi đuôi sang CSV
#csv_file_name = os.path.splitext(os.path.basename(excel_file_path))[0] + '.csv'
#csv_file_path = os.path.join(os.path.dirname(excel_file_path), csv_file_name)
# lấy file csv
csv_file_path="Data_LHU_2cot .csv"
sn=pd.read_csv(csv_file_path)
#csv_file_path="Data_LHU_2cot.csv"
# Ghi dữ liệu ra file CSV
#df.to_csv(csv_file_path, index=False, encoding='utf-8-sig') # utf-8-sig để giữ nguyên dấu
#print(f'Chuyển đổi thành công! File CSV được lưu tại: {csv_file_path}')
#sn=pd.read_csv(csv_file_path)
# Kiểm tra và loại bỏ NaN từ cột 'Câu hỏi' và 'Câu trả lời'
sn['Câu hỏi'].fillna('', inplace=True)
sn['Câu trả lời'].fillna('', inplace=True)
# Làm sạch dữ liệu
sn['Câu hỏi_Làm sạch'] = sn['Câu hỏi'].apply(lambda x: ntf.remove_userhandles(x) if isinstance(x, str) else x)
sn['Câu hỏi_Làm sạch'] = sn['Câu hỏi_Làm sạch'].apply(lambda x: ntf.remove_punctuations(x) if isinstance(x, str) else x)
sn['Câu trả lời_Làm sạch'] = sn['Câu trả lời'].apply(lambda x: ntf.remove_userhandles(x) if isinstance(x, str) else x)
sn['Câu trả lời_Làm sạch'] = sn['Câu trả lời_Làm sạch'].apply(lambda x: ntf.remove_punctuations(x) if isinstance(x, str) else x)
from sklearn.neural_network import MLPClassifier
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
# Khởi tạo mô hình Neural Network
nn_pipe = Pipeline([
('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('nn', MLPClassifier(hidden_layer_sizes=(100,), max_iter=300, activation='relu', solver='adam'))
])
# Huấn luyện mô hình Neural Network
nn_pipe.fit(sn['Câu hỏi'], sn['Câu trả lời'])
import openai
openai.api_key = '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'
# Danh sách tin nhắn cho OpenAI
messages = [
{"role": "system", "content": "You are a kind helpful assistant."},
]
confidence_threshold = 0.5
import gradio as gr
def chatbot(question):
# Làm sạch câu hỏi từ người dùng
clean_question = ntf.remove_userhandles(question)
clean_question = ntf.remove_punctuations(clean_question)
# Sử dụng mô hình Neural Network để dự đoán câu trả lời
predicted_answer_prob_nn = nn_pipe.predict_proba([clean_question])[0]
predicted_answer_nn = nn_pipe.predict([clean_question])[0]
# Check the confidence level for Neural Network
if max(predicted_answer_prob_nn) >= confidence_threshold:
return predicted_answer_nn
else:
# Sử dụng OpenAI GPT-3.5-turbo nếu Neural Network không tự tin
messages.append({"role": "user", "content": question + "trường Đại học Lạc Hồng ở phường Bửu Long, thành phố Biên Hòa, tỉnh Đồng Nai"})
chat = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=messages)
reply = chat.choices[0].message.content
messages.append({"role": "assistant", "content": reply})
return reply
iface = gr.Interface(
fn=chatbot,
inputs="text",
outputs="text",
title="ChatBot_LHU",
description="Nhập câu hỏi của bạn ở đây"
)
iface.launch()
# Lưu trữ mô hình
import pickle
# Lưu trữ mô hình
with open("model.pkl", "wb") as f:
pickle.dump(chatbot, f)