文本相似度的三种算法

​为了实现基于嵌入向量相似度来查找输入文本与给定列表中最相似的元素,你可以使用预训练的文本嵌入模型(例如,sentence-transformers),并计算输入文本与列表元素之间的余弦相似度。如果想避免依赖外部库或模型,也可以使用传统的文本相似度方法(如 TF-IDF、词袋模型)配合 scikit-learn 来实现相似度计算,但这些方法通常无法捕捉到语义层次的相似度。

1 TF-IDF 向量化器

import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarityphrases = ['查询闹钟', '打开闹钟', '关闭闹钟', '删除闹钟', '设置闹钟', '设置日程', '删除日程', '修改日程','按照图片地址导航', '导航', '查询周边', '查询地址', '查询当前位置', '设置操作', '查询手机状态','打开应用', '关闭应用', '卸载应用', '安装应用', '订火车票', '订机票', '票务查询', '图片查询','查询文件', '播放音乐', '播放视频', '给图片里的电话号码发送短信', '发送短信', '删除短信','删除通话记录', '查询通话记录', '拨打图片里的电话号码', '打电话', '保存图片里的电话号码','保存电话号码', '删除电话号码', '查询电话号码', '其他意图'
]# 新的意图
new_intent = '打开文件'# 初始化向量化器计算TF-IDF矩阵
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(phrases + [new_intent])# 计算相似度
similarities = cosine_similarity(tfidf_matrix[-1], tfidf_matrix[:-1])
similarities = similarities.flatten()# 找到最相似的意图
best_match_index = np.argmax(similarities)
best_match = phrases[best_match_index]print(f"{new_intent} 最相似的意图: {best_match}")
print(f"所有相似度: {list(zip(phrases, similarities))}")

打开文件 最相似的意图: 查询闹钟
所有相似度: [(‘查询闹钟’, 0.0), (‘打开闹钟’, 0.0), (‘关闭闹钟’, 0.0), (‘删除闹钟’, 0.0), (‘设置闹钟’, 0.0), (‘设置日程’, 0.0), (‘删除日程’, 0.0), (‘修改日程’, 0.0), (‘按照图片地址导航’, 0.0), (‘导航’, 0.0), (‘查询周边’, 0.0), (‘查询地址’, 0.0), (‘查询当前位置’, 0.0), (‘设置操作’, 0.0), (‘查询手机状态’, 0.0), (‘打开应用’, 0.0), (‘关闭应用’, 0.0), (‘卸载应用’, 0.0), (‘安装应用’, 0.0), (‘订火车票’, 0.0), (‘订机票’, 0.0), (‘票务查询’, 0.0), (‘图片查询’, 0.0), (‘查询文件’, 0.0), (‘播放音乐’, 0.0), (‘播放视频’, 0.0), (‘给图片里的电话号码发送短信’, 0.0), (‘发送短信’, 0.0), (‘删除短信’, 0.0), (‘删除通话记录’, 0.0), (‘查询通话记录’, 0.0), (‘拨打图片里的电话号码’, 0.0), (‘打电话’, 0.0), (‘保存图片里的电话号码’, 0.0), (‘保存电话号码’, 0.0), (‘删除电话号码’, 0.0), (‘查询电话号码’, 0.0), (‘其他意图’, 0.0)]

2 Word2Vec 模型 加载微调模型

from gensim.models import Word2Vecfrom sklearn.metrics.pairwise import cosine_similarityimport numpy as np# 加载Word2Vec模型model = Word2Vec.load('/honebug.100.model')from gensim.models import Word2Vec, Doc2Vecwordvec_size = 100  # 每个词向量的大小# noinspection PyBroadExceptiondef get_char_pos(string, char):"""找出string中char的索引:param string: 待查找字符串:param char: 目标字符:return: 索引列表"""chPos = []try:chPos = list((pos for pos, val in enumerate(string) if (val == char)))except:passreturn chPosdef word2vec(data, model_):"""计算file_name中的词的词向量。如果在model_中能找到就设置为model_中相应的词向量,否则设置为默认的全0向量:param file_name::param model_::return:"""word_vec_all = np.zeros(wordvec_size)# 通过提前设置一个假的空格索引 -1 来处理第一个词的索引space_pos = [-1]space_pos.extend(get_char_pos(data, ' '))len=0 for word in data:if model_.wv.__contains__(word):len+=1word_vec_all += np.array(model_.wv[word])return word_vec_alldef cal_similarity(v1, v2):"""计算v1和v2的余弦相似性:param v1::param v2::return:"""v1_mod = np.sqrt(v1.dot(v1))v2_mod = np.sqrt(v2.dot(v2))if v1_mod * v2_mod != 0:sim_ = v1.dot(v2) / (v1_mod * v2_mod)else:sim_ = 0return sim_# 短语列表phrases = ['查询闹钟', '打开闹钟', '关闭闹钟', '删除闹钟', '设置闹钟', '设置日程', '删除日程', '修改日程','按照图片地址导航', '导航', '查询周边', '查询地址', '查询当前位置', '设置操作', '查询手机状态','打开应用', '关闭应用', '卸载应用', '安装应用', '订火车票', '订机票', '票务查询', '图片查询','查询文件', '播放音乐', '播放视频', '给图片里的电话号码发送短信', '发送短信', '删除短信','删除通话记录', '查询通话记录', '拨打图片里的电话号码', '打电话', '保存图片里的电话号码','保存电话号码', '删除电话号码', '查询电话号码', '其他意图']# 新的意图new_intent = '打开文件'# 获取新意图的向量new_intent_vec = word2vec(new_intent, model)# 计算每个短语与新意图的相似度similarities = [cal_similarity(new_intent_vec, word2vec(phrase, model)) for phrase in phrases]# 找到最相似的短语best_match_index = np.argmax(similarities)best_match = phrases[best_match_index]

打开文件 最相似的意图: 打开闹钟
所有相似度: [(‘打开闹钟’, 0.8072092553698458), (‘打开应用’, 0.7269706034870335), (‘播放视频’, 0.5405680826922469), (‘发送短信’, 0.4790000629146775), (‘给图片里的电话号码发送短信’, 0.4649656506898843), (‘播放音乐’, 0.4545530988917655), (‘拨打图片里的电话号码’, 0.4532980073059747), (‘删除短信’, 0.44935904869964166), (‘查询文件’, 0.3914059209961313), (‘打电话’, 0.3691177589995263), (‘保存图片里的电话号码’, 0.3308392514839321), (‘关闭闹钟’, 0.32003954620104585), (‘查询周边’, 0.3138997641405225), (‘关闭应用’, 0.31332593929683933), (‘删除通话记录’, 0.29426637062028804), (‘删除闹钟’, 0.2853542271752315), (‘安装应用’, 0.28089819464847265), (‘查询通话记录’, 0.2622928100889822), (‘保存电话号码’, 0.2606886724156244), (‘删除电话号码’, 0.25131759945953613), (‘查询闹钟’, 0.25111720813768934), (‘票务查询’, 0.24924928145201014), (‘查询电话号码’, 0.22482839031657623), (‘订火车票’, 0.22011223707908914), (‘导航’, 0.1951030588654122), (‘查询地址’, 0.19334403702018269), (‘设置闹钟’, 0.18050198893454736), (‘查询手机状态’, 0.17879356628877804), (‘卸载应用’, 0.17849515141252753), (‘删除日程’, 0.1531080801926018), (‘按照图片地址导航’, 0.14225845984930433), (‘设置操作’, 0.11196845949292437), (‘设置日程’, 0.10190409311542345), (‘图片查询’, 0.09616832112007914), (‘其他意图’, 0.0765345666409708), (‘修改日程’, 0.06255222870200443), (‘查询当前位置’, 0.044133291358547266), (‘订机票’, 0.005617997322751946)]

3 Word2Vec 模型

   import numpy as npfrom gensim.models import Word2Vecfrom sklearn.metrics.pairwise import cosine_similarityimport numpy as npphrases = ['查询闹钟', '打开闹钟', '关闭闹钟', '删除闹钟', '设置闹钟', '设置日程', '删除日程', '修改日程','按照图片地址导航', '导航', '查询周边', '查询地址', '查询当前位置', '设置操作', '查询手机状态','打开应用', '关闭应用', '卸载应用', '安装应用', '订火车票', '订机票', '票务查询', '图片查询','查询文件', '播放音乐', '播放视频', '给图片里的电话号码发送短信', '发送短信', '删除短信','删除通话记录', '查询通话记录', '拨打图片里的电话号码', '打电话', '保存图片里的电话号码','保存电话号码', '删除电话号码', '查询电话号码', '其他意图']# 新的意图new_intent = '打开文件'# 训练Word2Vec模型model = Word2Vec([phrase.split() for phrase in phrases + [new_intent]], vector_size=50, min_count=1)# 获取向量def get_vector(phrase):return np.mean([model.wv[word] for word in phrase.split() if word in model.wv], axis=0)vectors = [get_vector(phrase) for phrase in phrases]new_vector = get_vector(new_intent)# 计算相似度similarities = cosine_similarity([new_vector], vectors)similarities = similarities.flatten()# 找到最相似的意图best_match_index = np.argmax(similarities)best_match = phrases[best_match_index]print(f"{new_intent} 最相似的意图: {best_match}")print(f"所有相似度: {sorted(list(zip(phrases, similarities)), key=lambda x: x[1], reverse=True)}")

打开文件 最相似的意图: 卸载应用
所有相似度: [(‘卸载应用’, 0.27056545), (‘给图片里的电话号码发送短信’, 0.2406449), (‘设置闹钟’, 0.21057102), (‘删除电话号码’, 0.18602197), (‘修改日程’, 0.16704077), (‘查询电话号码’, 0.16078651), (‘设置日程’, 0.15019883), (‘删除短信’, 0.1449261), (‘查询地址’, 0.1320439), (‘关闭应用’, 0.12670074), (‘发送短信’, 0.12138837), (‘按照图片地址导航’, 0.09984553), (‘保存图片里的电话号码’, 0.07528752), (‘其他意图’, 0.070641875), (‘关闭闹钟’, 0.059367646), (‘打开闹钟’, 0.04979121), (‘导航’, 0.04237302), (‘删除日程’, 0.040677644), (‘查询通话记录’, 0.02298998), (‘订机票’, 0.021350864), (‘设置操作’, 0.012442164), (‘订火车票’, 0.011333406), (‘保存电话号码’, -0.010425169), (‘安装应用’, -0.012591086), (‘打开应用’, -0.014475267), (‘删除闹钟’, -0.015218685), (‘拨打图片里的电话号码’, -0.029464297), (‘查询闹钟’, -0.030767186), (‘图片查询’, -0.03880935), (‘票务查询’, -0.052148208), (‘查询文件’, -0.053809457), (‘查询周边’, -0.05607654), (‘查询当前位置’, -0.05974648), (‘打电话’, -0.06265731), (‘查询手机状态’, -0.118212834), (‘播放视频’, -0.137457), (‘播放音乐’, -0.26305935), (‘删除通话记录’, -0.330595)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP OB52 财务账期月结月底月初开关

公告:周一至周五每日一更,周六日存稿,请您点“关注”和“在看”,后续推送的时候不至于看不到每日更新内容,感谢。 这是一条刮刮乐,按住全部选中:点关注的人最帅最美,欢迎&#xff1…

roles安装wordpress

debug模块 1.如何查看ansible-playbook执行过程中产生的具体信息 vim test3.yaml --- - hosts: allremote_user: roottasks:- name: lsshell: ls /rootregister: var_stdout # register:将var_stdout注册为变量- name: debugdebug:var: var_stdout # 查看所有的输出信息#var…

vuInhub靶场实战系列--Kioptrix Level #4

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 arp-scan主机扫描 2.2 端口扫描2.3 指纹识别2.4 目…

开源大模型GLM-4,超越Gemini、Qwen-VL-Max!附推理代码

简介 GLM-4-9B 是智谱AI推出的最新一代预训练模型GLM-4 系列中的开源版本。在语义、数学、推理、代码和知识等多方面的数据集测评中, GLM-4-9B及其人类偏好坐标的版本GLM-4-9B-Chat表现出超越Llama-3-8B的卓越性能。 除了能进行多轮对话,GLM-4-9B-Chat还提供了网页浏览、代码…

nodejs——原型链污染

一、引用类型皆为对象 原型和原型链都是来源于对象而服务于对象的概念,所以我们要先明确一点: JavaScript中一切引用类型都是对象,对象就是属性的集合。 Array类型、Function类型、Object类型、Date类型、RegExp类型等都是引用类型。 也就…

Unity创建简单的Http服务器/客户端测试

服务器部分&#xff1a; using System; using System.Collections; using System.Collections.Generic; using System.Net; using System.Threading.Tasks; using UnityEngine;/// <summary> /// 服务器部分 /// </summary> public class Sever_Yang : MonoBehavi…

Vue22-v-model收集表单数据

一、效果图 二、代码 2-1、HTML代码 2-2、vue代码 1、v-model单选框的收集信息 v-model&#xff1a;默认收集的就是元素中的value值。 单选框添加默认值&#xff1a; 2、v-model多选框的收集信息 ①、多个选择的多选 注意&#xff1a; 此处的hobby要是数组&#xff01;&…

【深度学习基础】激活函数:Tanh、Sigmoid 和 Softmax

激活函数是深度学习模型中不可或缺的一部分&#xff0c;它们赋予神经网络强大的非线性变换能力&#xff0c;使其能够拟合复杂的函数关系。在这篇博文中&#xff0c;我们将探讨三种常见的激活函数&#xff1a;Tanh、Sigmoid 和 Softmax&#xff0c;并提供一些记忆它们的技巧。 1…

海豚调度器自动监测每日报表及自动重跑异常工作流(综合应用可用代码

如何在海豚调度器自动监测报表是否跑出数据 海豚调度器调用api接口启动工作流(亲试可用) 海豚调度器调用api接口来获取工作流信息(获取processDefinitionId) 在前面的3篇文章,介绍了海豚调度器如何检测报表是否跑出数据,如果获取工作流信息和启动工作流。通过这3个步…

C++基础知识(八:STL标准库 deque )

deque在C的STL(Standard Template Library)中是一个非常强大的容器&#xff0c;它的全称是“Double-Ended Queue”&#xff0c;即双端队列。deque结合了数组和链表的优点&#xff0c;提供了在两端进行高效插入和删除操作的能力&#xff0c;同时保持了随机访问的特性。 双端队列…

#慧眼识模每日PK[话题]##用五种语言说爸爸我爱你[话题]#

#慧眼识模每日PK #用五种语言说爸爸我爱你 你觉得哪个模型回答得更好&#xff1f;欢迎留言 A.蓝 B.紫 更多问题&#xff0c;扫码体验吧&#xff5e; by 国家&#xff08;杭州&#xff09;新型交换中心

养猫发现猫毛过敏?宠物空气净化器真的能拯救猫毛过敏吗?

广东省 猫咪是许多人梦寐以求的伴侣&#xff0c;但对于轻度猫毛过敏和鼻炎患者来说&#xff0c;养猫似乎是个遥不可及的梦想。我常在社交媒体上羡慕地观看朋友们的吸猫日常&#xff0c;却因过敏无法亲自养猫。这种遗憾驱使我寻找解决方案&#xff0c;从研究低过敏猫种到尝试空气…

d3.js获取流程图不同的节点

在D3.js中&#xff0c;获取流程图中不同的节点通常是通过选择SVG元素并使用数据绑定来实现的。流程图的节点可以通过BPMN、JSON或其他数据格式定义&#xff0c;然后在D3.js中根据这些数据动态生成和选择节点。 以下是一个基本的示例&#xff0c;展示如何使用D3.js选择和操作流…

2024/06/13--代码随想录算法3/17|01背包问题 二维、01背包问题 一维、416. 分割等和子集

01背包问题 二维 卡码网链接 动态规划5步曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;dp[i][j] &#xff1a;从下标为[0,i-1]个物品中任取&#xff0c;放进容量为j的背包&#xff0c;价值总和最大为多少。确定递推公式&#xff0c; 有两个方向可…

算法专题总结链接地址

刷力扣的时候会遇到一些总结类型的题解&#xff0c;在此记录&#xff0c;方便自己以后找 前缀和 前缀和https://leetcode.cn/problems/unique-substrings-in-wraparound-string/solutions/432752/xi-fa-dai-ni-xue-suan-fa-yi-ci-gao-ding-qian-zhui-/ 单调栈 单调栈https:…

Javaweb04-Servlet技术2(HttpServletResponse, HttpServletRequest)

Servlet技术基础 HttpServletResponse对象 HttpServletResponce对象是继承ServletResponse接口&#xff0c;专门用于封装Http请求 HttpServletResponce有关响应行的方法 方法说明功能描述void setStatus(int stauts)用于设置HTTP响应消息的状态码&#xff0c;并生成响应状态…

DeepSORT(目标跟踪算法) 卡尔曼滤波 状态向量是如何映射到观测向量(测量向量)的即观测矩阵的构建方式

DeepSORT&#xff08;目标跟踪算法&#xff09; 卡尔曼滤波 状态向量是如何映射到观测向量&#xff08;测量向量&#xff09;的即观测矩阵的构建方式 flyfish 测量向量和观测变量在卡尔曼滤波的上下文中通常是同一个意思。它们都指的是从系统中直接获得的数据&#xff0c;这些…

第17章通信系统架构设计理论与实践

常见的5种常用的网络架构和构建网络的相关技术&#xff0c;以及网络构建的分析和设计方法。 17.1通信系统概述 通信技术和网络技术的发展&#xff0c;通信网络发生很大变化&#xff0c;入网的形式变化&#xff0c;传输的速率的提高、接入网络的方式多样化、网络结构的更为复杂…

~$开头的临时文件是什么?可以删除吗?

&#xff08;2023.12.4&#xff09; 在进行Word文档编辑的时候&#xff0c;都会产生一个以~$开头的临时文件&#xff0c;它会自动备份文档编辑内容&#xff0c;若是正常关闭程序&#xff0c;这个文档就会自动消失&#xff1b;而在非正常情况下关闭word文档&#xff0c;如断电&…