当前位置: 首页 > news >正文

实现自学习系统,输入excel文件,能学习后进行相应回答

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_vectorsif 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)# 可选:将新数据写入 Excelif 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("系统:再见!")breakanswer = qa_system.ask(user_input)print(f"系统:{answer}")
http://www.lryc.cn/news/624206.html

相关文章:

  • AI 对话高效输入指令攻略(五):AI+PicDoc文生图表工具:解锁高效图表创作新范式
  • 实战测试:多模态AI在文档解析、图表分析中的准确率对比
  • 2025年8月更新!Windows 7 旗舰版 (32位+64位 轻度优化+离线驱动)
  • 【温室气体数据集】全球总碳柱观测网络 TCCON
  • 基于NLP的文本生成系统设计与实现(LW+源码+讲解+部署)
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-59,(知识点:谐振电路,谐振频率,串联谐振,并联谐振)
  • 【WSL2笔记10】WSL-Ubuntu 环境下 ComfyUI 本地部署性能最大化指南
  • 【Mac】【Minecraft】关于如何在Mac上搭建基岩版MC服务器的方法
  • SIGKDD-2023《Complementary Classifier Induced Partial Label Learning》
  • 如何用github记录mit6s081-2020-labs学习过程
  • 【网络运维】Playbook项目实战:基于 Ansible Playbook 一键部署 LNMP 架构服务器
  • Tmux Xftp及Xshell的服务器使用方法
  • Tomcat Context的核心机制
  • 【GPT入门】第47课 LlamaFacotory 合并原模型与LoRA模型
  • Navicat 无法登录时找回 SQL 文件的方法
  • Zephyr 中的 bt_le_per_adv_set_data 函数的介绍和应用方法
  • RK3568 NPU RKNN(六):RKNPU2 SDK
  • c++之static和const
  • Zephyr 中 BT_GATT_SERVICE_DEFINE 使用详解
  • 面向R语言用户的Highcharts
  • 【1:1复刻R版】python版火山图函数一键出图
  • Zephyr下控制ESP32S3的GPIO口
  • 生信分析自学攻略 | R软件和Rstudio的安装
  • 抗辐照CANFD通信芯片在高安全领域国产化替代的研究
  • Android系统模块编译调试与Ninja使用指南
  • 网络通信的基本概念与设备
  • 网络常识-SSE对比Websocket
  • MYSQL-175. 组合两个表
  • STM32学习笔记13-通信协议I2CMPU6050
  • 半敏捷卫星观测调度系统的设计与实现