【MindSpore易点通机器人-06】基于相似度模型实现问答匹配及推荐功能

这篇具有很好参考价值的文章主要介绍了【MindSpore易点通机器人-06】基于相似度模型实现问答匹配及推荐功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

all-minilm-l6-v2,MindSpore易点通,机器人,深度学习

作者:王磊
更多精彩分享,欢迎访问和关注:https://www.zhihu.com/people/wldandan

在上一篇【MindSpore易点通机器人-05】问答数据预处理及编码,我们为大家讲述了机器人问答数据预处理及编码,本篇为大家介绍机器人基于什么模型实现问答匹配及推荐功能

答案搜索的核心逻辑是使用用户的输入去匹配知识库中的问题,然后返回匹配度最高的问题的答案。在第一个迭代开发中,我们的数据集规模比较局限,因此,不需要使用复杂的模型来实现QA和推荐功能。这里我们使用了一个基于相似度的简单模型all-MiniLM-L6-v2,通过对相似度的判断来实现问答以及推荐功能

  1. 问题和知识库中的问题相似度超过70%返回最匹配的答案
  2. 问题和知识库中的问题相似度低于70%返回相似度最高的两个问题,作为推荐提问

关于模型

all-MiniLM-L6-v2sentence-transformers库(将文本,图片等向量化并进行文本相似性、语义搜索、同义词挖掘等任务的库)的一个SOTA模型,它可以将句子或者段落映射到384维的向量空间中,常用于聚类和语义搜索任务。

MiniLM-V2论文本身介绍了面向Transformer-based预训练语言模型的深度自注意力知识蒸馏(Deep Self-Attention Distillation)MiniLM的通用压缩方法,MiniLM的蒸馏方法简单有效,由不同预训练大模型压缩得到的单语和多语MiniLM预训练模型不仅更小更快,而且在多语言理解和生成任务上效果显著。

all-minilm-l6-v2,MindSpore易点通,机器人,深度学习

MiniLM-V2结构,引入了多头注意力机制的蒸馏策略

具体实现

为了快速实现构建原型能力,我们在实现时使用MindSpore的Bert模型直接加载了预训练好的sentence-transformers/all-MiniLM-L6-v2模型权重,并对输入的句子进行编码。然后将完成编码的句子和数据处理中编码好的语料(FAQ中的QA数据集)进行相似度对比,根据对比的结果来判断返回最佳的匹配答案或者推荐其它相关的问题。

如下是代码的具体实现,首先调用encode_sentence对用户的输入进行向量化编码。

def encode_sentence(input_sentence):
    tokenizer = BertTokenizer.load('sentence-transformers/all-MiniLM-L6-v2')
    model = BertModel.load('sentence-transformers/all-MiniLM-L6-v2')
    model.set_train(False)
    input_token = mindspore.Tensor([tokenizer.encode(input_sentence, add_special_tokens=True)], mindspore.int32)
    return model(input_token)

其次使用该向量去知识库中进行匹配并获取对应的问题,在这里,我们通过cosine_simalarity(余弦相似度方法)计算两个向量的相似度,相似度最高,且超过0.7的,就是我们需要返回的最佳答案。

def compute_similarity(input_encode):
    with open("../data/resource_sentence_encode.json") as f:
        resource_sentences_encode = json.load(f)
        question_similarity = {}
        for k, v in resource_sentences_encode.items():
            similarity = cosine_similarity(
                [input_encode[1][0].asnumpy()], [np.asarray(v)])
            question_similarity[k] = similarity
        sorted_similarity = sorted(question_similarity.items(), key=lambda x: x[1], reverse=True)
        if not sorted_similarity or len(sorted_similarity) == 0:
            return None
        elif sorted_similarity[0][1] >= 0.7:
            return [sorted_similarity[0][0]]
        elif len(sorted_similarity) > 1 and sorted_similarity[0][1] < 0.7:
            return [sorted_similarity[0][0], sorted_similarity[1][0]]

如果用户输入的问题在知识库中所匹配到的问题相似度都小于0.7,则会返回相似度最高的前两个问题,作为推荐的提问问题,供用户参考。

功能验证

将上述步骤进行组合后,我们就能在本地通过命令行来验证问答机器人,完整步骤如下:

  1. 获取用户输入。
  2. 对用户输入进行编码得到对应向量。
  3. 从知识库中使用输入向量进行匹配,获取匹配到的问题。
  4. 从知识库中获取匹配到的问题的答案,输出给用户。

对应的代码实现如下:

if __name__ == '__main__':
    input_sentence = sys.argv[1]
    input_encode = encode_sentence(input_sentence)
    match_keys = compute_similarity(input_encode)
    q_a_data = load_q_a_data("../data/q_a.json")
    if match_keys:
        for k in match_keys:
            if k in q_a_data.keys():
                print(q_a_data[k])

在本地,通过命令行执行脚本,我们就可以测试模型的效果了,如我们提问是否可以转AIR模型,则会返回一个最接近的答案,这个答案会和FAQ中的问题/答案进行匹配:

python robot/src/model/q_a.py 是否可以转AIR模型
Ascend 310不能导出AIR,需要在Ascend 910加载训练好的checkpoint后,导出AIR,然后在Ascend 310转成OM模型进行推理。Ascend 910的安装方法可以参考官网MindSpore安装指南(https://www.mindspore.cn/install)。

总结

至此,我们基于sentence-transformers/all-MiniLM-L6-v2预训练模型,通过相似度对比,快速实现了对于易点通机器人QA以及简单推荐功能的支持。那么下一步就要把这个功能封装成一个REST API,在云上部署起来,提供给IDE或者其它客户端使用。

参考资料

  1. 5分钟 NLP系列 — SentenceTransformers 库介绍
  2. NeurIPS 2020 | MiniLM:预训练语言模型通用压缩方法

说明:严禁转载本文内容,否则视为侵权。文章来源地址https://www.toymoban.com/news/detail-564377.html

到了这里,关于【MindSpore易点通机器人-06】基于相似度模型实现问答匹配及推荐功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器人动力学与控制学习笔记(十七)——基于名义模型的机器人滑模控制

            滑模运动包括趋近运动和滑模运动两个过程。系统从任意初始状态趋向切换面,直到到达切换面的运动称为趋近运动,即趋近运动为的过程。根据滑模变结构原理,滑模可达性条件仅保证由状态空间任意位置运动点在有限时间内到达切换面的要求,而对于趋近运动的

    2024年02月12日
    浏览(48)
  • 基于计算机视觉的机器人视觉:实现对机器人视觉的理解和应用

    作者:禅与计算机程序设计艺术 目前,人类在收集和处理图像数据方面已经取得了非常大的进步。随着技术的不断迭代升级,机器视觉系统也在迅速发展。人工智能领域的研究者们正在将这些技术应用到工业领域,其中就包括机器人的视觉处理方面。由于机器人本身是个动态

    2024年02月08日
    浏览(60)
  • ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目

    💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 ROS 2是机器人开发领域中广泛使用的一个框架,ROS 2提供了很多功能强大的工具和

    2024年02月02日
    浏览(59)
  • 基于机器视觉的智能防疫巡检机器人结构设计

    目录 摘要 1 1 绪论 3 1.1 课题研究意义 3 1.2 智能防疫机器人的现状及发展 3 1.3 移动机器人技术的研究现状 5 1.4 智能防疫巡检机器人软件研究现状 6 1.5 多传感器融合研究现状 6 1.6 论文主要内容及结构安排 7 2 智能防疫巡检机器人系统需求分析与整体方案设计 8 2.1 系统设计的需

    2024年02月20日
    浏览(44)
  • 北航基于openEuler构建工业机器人操作系统,打造“开箱即用”的机器人基础软件平台

    北京航空航天大学是国家“双一流”建设高校,以建设扎根中国大地的世界一流大学为发展目标。北京航空航天大学在机器人领域一直处于行业前沿,以其亮眼的成果和优秀的师资力量,成为国内机器人领域的重要参与者和建设者。机器人操作系统是机器人的核心基础软件,

    2024年02月12日
    浏览(50)
  • 【多机器人】基于A_Star算法实现多机器人路径规划附Matlab代码

     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进, 代码获取、论文复现及科研仿真合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab完整代码及仿真定制内容点击👇 智能优化算法       神经网络预测       雷达通信    

    2024年02月04日
    浏览(54)
  • 基于星火和Gradio的聊天机器人

    星火大模型官网:https://xinghuo.xfyun.cn/ conda create -n Gradio python=3.8 pip install gradio 中间遇到os报错,解决方案: pip install aiofiles==23.2.1 SparkDesk.py: 下面代码是一个用于与基于WebSocket的聊天机器人API进行交互的Python实现。下面逐个解释代码的每个部分: 代码导入了几个模块,用于

    2024年02月13日
    浏览(43)
  • 基于机器人自主移动实现SLAM建图

    博客地址:https://www.cnblogs.com/zylyehuo/ 基于[移动机器人运动规划及运动仿真],详见之前的博客 移动机器人运动规划及运动仿真 - zylyehuo - 博客园 参考链接 Autolabor-ROS机器人入门课程《ROS理论与实践》 ubuntu 18.04

    2024年02月05日
    浏览(45)
  • 基于单片机的灭火机器人设计

    摘 要 I Abstract II 引 言 1 1 系统方案设计 4 1.1 方案论证 4 1.2 灭火机器人系统工作原理 4 2 系统硬件设计 6 2.1 单片机 6 2.2 火焰探测系统设计 8 2.3 灭火系统设计 8 2.4 循迹模块设计 9 2.5 电机驱动模块 10 3 系统软件设计 12 3.1 系统软件开发环境 12 3.2 系统总程序设计 12 3.3 各模块程序

    2024年03月22日
    浏览(50)
  • 基于单片机的搬运机器人设计

    目录 摘 要 1 ABSTRACT 2 第1章 绪论 4 1.1 机器人概述 4 1.2 机器人的历史、现状 6 1.3 机器人发展趋势 7 第2章 实验平台介绍及搬运机器人的设计 9 2.1自由度及关节 9 2.2基座及连杆 9 2.2.1 基座 9 2.2.2 大臂 10 2.2.3 小臂 10 2.3搬运机器人的设计 10 2.4驱动方式 13 2.5传动方式 15 2.6制动器 1

    2024年03月24日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包