import pandas as pd from sklearn.metrics.pairwise import cosine_similarity from sentence_transformers import SentenceTransformer ''' 效果理想 ''' class SelfLearningQASystem: def __init__(self, excel_path): # 读取Excel文件 self.df = pd.read_excel(excel_path) # 假定有 'question' 和 'answer' 两列 self.questions = self.df['question'].astype(str).tolist() self.answers = self.df['answer'].astype(str).tolist() # 使用预训练的多语言句子嵌入模型 self.model = SentenceTransformer(r'D:\modelproject\paraphrase-multilingual-MiniLM-L12-v2') # 将所有问题向量化 self.question_vectors = self.model.encode(self.questions) def ask(self, user_question): # 将用户问题向量化 user_vector = self.model.encode(user_question) # 确保向量是二维的 if len(user_vector.shape) == 1: user_vector = user_vector.reshape(1, -1) # 如果question_vectors是一维的,转换为二维 question_vectors = self.question_vectors if len(question_vectors.shape) == 1: question_vectors = question_vectors.reshape(1, -1) # 计算用户问题与所有已有问题的相似度 similarities = cosine_similarity(user_vector, question_vectors) # print(similarities) # 找出最相似的问题的索引 most_similar_idx = similarities.argmax() # print(most_similar_idx) max_similarity = similarities[0, most_similar_idx] print("问题相似度",max_similarity) # 可选择设置一个阈值,低于则认为没有匹配到 threshold = 0.5 # 可调,根据实际情况调整 if max_similarity < threshold: return "抱歉,我暂时无法回答这个问题。您可以更新我的知识库。" # 返回最相似问题对应的答案 return self.answers[most_similar_idx] def add_qa_pair(self, new_question, new_answer, excel_path=None): # 自学习追加 # 追加到内存 self.questions.append(new_question) self.answers.append(new_answer) # 重新训练向量化 self.question_vectors = self.model.encode(self.questions) # 可选:将新数据写入 Excel if excel_path: new_data = pd.DataFrame({ 'question': [new_question], 'answer': [new_answer] }) try: existing = pd.read_excel(excel_path) updated = pd.concat([existing, new_data], ignore_index=True) updated.to_excel(excel_path, index=False) except FileNotFoundError: new_data.to_excel(excel_path, index=False) if __name__ == "__main__": # 初始化问答系统,传入你的Excel路径 inputfile = "input.xlsx" qa_system = SelfLearningQASystem(inputfile) qa_system.add_qa_pair("今天周几","星期三",inputfile) print("=== 欢迎使用自学习问答系统,输入 '退出' 结束对话 ===") while True: user_input = input("\n你:") if user_input.strip() in ['退出', 'exit', 'quit']: print("系统:再见!") break answer = qa_system.ask(user_input) print(f"系统:{answer}")
实现自学习系统,输入excel文件,能学习后进行相应回答
大霞上仙2025-08-20 21:41
相关推荐
李妍.2 小时前
02Numpy基础(上)TheBestRucy2 小时前
Python 九阳神功之贰:面向对象(下)2601_965958463 小时前
口腔黏膜脱皮超2周未愈建议及时就医吃着火锅x唱着歌3 小时前
Effective C++ 学习笔记 条款43 学习处理模板化基类内的名称微小冷4 小时前
在不同空间中展示数据(欧式、球面、庞加莱圆盘)weixin_431600444 小时前
Agent Workflow 学习向:Code 节点,比模板更强的变量加工讲温控就好了4 小时前
从医疗影像到能源存储——芯片冷却温控技术的跨行业赋能DeepVisionary5 小时前
从 Qwen3.8-27B 把原生多模态、原生 FP8、桌面级 Agent 三件事一次集齐,看开源大模型的“工业化拐点“Xuanzang Road5 小时前
第 40 届学习强企玄奘路戈壁挑战赛:在绝境中重塑自我固定资产管理系统软件6 小时前
商务局RFID固定资产管理系统的应用价值与落地要点解析