装备名称检索与推荐

1、引言

在这个信息爆炸的时代,无论是军事爱好者、科研工作者,还是户外探险者,他们都需要快速准确地获取特定装备的信息。装备名称检索推荐系统正是为了应对这一挑战而生。它像一位经验丰富的向导,引领用户穿越复杂的装备海洋,找到最适合自己需求的那件“神器”。本项目采用faiss+uvicorn+fastapi多并发模式。

2、设计思路

2.1、验证输入的装备名称

系统将首先检查用户输入的词汇是否直接匹配我们的装备名称数据库。如果找到匹配项,系统将立即提供相关信息并返回结果。

2.2、检查输入与装备别称的对应关系

若直接名称匹配未果,系统将继续检索用户输入是否与任何装备的别称或俗称相符。一旦确认输入与装备别称相匹配,相应的装备信息将被检索并展示给用户。

2.3、探索向量数据库

如果前两步均未发现匹配项,系统将采用先进的向量搜索技术,深入我们的向量数据库进行更广泛的搜索。这一步骤旨在识别与用户输入在语义上相似的装备,从而提供更为全面和深入的检索结果。本文采用faiss深度学习向量库。

3、测试数据

F-16战斗机    战隼    蝰蛇 毒蛇 
A-10攻击机    雷电II    疣猪
F-22猛禽战斗机    猛禽
F-35战斗机    闪电II    
米格-29战斗机    支点    
苏-27战斗机    侧卫
B-52轰炸机    同温层堡垒    
B-2轰炸机    幽灵    
C-130运输机    大力神    
SR-71侦察机    黑鸟
U-2侦察机    龙女    
AH-64武装直升机    阿帕奇    
CH-47运输直升机    奇努克    
V-22倾转旋翼机    鱼鹰    
F-4战斗机    鬼怪II    
F-15战斗机    鹰    
F/A-18战斗机    大黄蜂    
图-95轰炸机    熊    
图-160轰炸机    黑色杰克    
歼-20战斗机    威龙    炎齿
A-10攻击机    雷电II    疣猪
F-22猛禽战斗机    猛禽
F-35战斗机    闪电II    
米格-29战斗机    支点    
苏-27战斗机    侧卫
B-52轰炸机    同温层堡垒    
B-2轰炸机    幽灵    
C-130运输机    大力神    
SR-71侦察机    黑鸟
U-2侦察机    龙女    
AH-64武装直升机    阿帕奇    
CH-47运输直升机    奇努克    
V-22倾转旋翼机    鱼鹰    
F-4战斗机    鬼怪II    
F-15战斗机    鹰    
F/A-18战斗机    大黄蜂    
图-95轰炸机    熊    
图-160轰炸机    黑色杰克    
歼-20战斗机    威龙    炎齿
F-16轰炸机      飞龙 雷电II

4.、设置配置

主要代码如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-import argparseclass Args:@staticmethoddef parse():parser = argparse.ArgumentParser()return parser@staticmethoddef initialize(parser):parser.add_argument('--config_dir', default='./config.yaml',help='config')parser.add_argument('--model_dir', default='./sentence_transformers/uer_sbert-base-chinese-nli/', help='mdoel dir for uer')parser.add_argument('--all_weapon_data_dir', default='./test_data.xlsx',help='all weapon data dir')parser.add_argument('--weapon_data_dir', default='./weapon_data.xlsx',help='Weapons and equipment include nicknames and addresses')
......return parserdef get_parser(self):parser = self.parse()parser = self.initialize(parser)return parser.parse_args()

5、生成武器yaml文件方便检索

import yaml
import pandas as pd
from Project_parameters import Args
args = Args().get_parser()class ReadConfig:def __init__(self):passdef read_yaml(self):with open(args.config_dir, "rb") as f:dict = yaml.load(stream=f.read(), Loader=yaml.FullLoader)return dictdef write_yaml(self):with open(args.config_dir, encoding='utf-8', mode='w') as f:df = pd.read_excel(args.weapon_data_dir)for weapon_values in df.values:if weapon_values[1].__len__() == 1:data = [{weapon_values[0]: weapon_values[1]}]else:data = [{weapon_values[0]: weapon_values[1].split("、")}]yaml.dump(data, stream=f, allow_unicode=True)

结果如下

- F-16战斗机:- 战隼- 蝰蛇- 毒蛇
- A-10攻击机:- 雷电II- 疣猪
- F-22猛禽战斗机:- 猛禽
- F-35战斗机:- 闪电II
- 米格-29战斗机:- 支点
--27战斗机:- 侧卫
- B-52轰炸机:- 同温层堡垒
- B-2轰炸机:- 幽灵
- C-130运输机:- 大力神
- SR-71侦察机:- 黑鸟
- U-2侦察机:- 龙女
- AH-64武装直升机:- 阿帕奇
- CH-47运输直升机:- 奇努克
- V-22倾转旋翼机:- 鱼鹰
- F-4战斗机:- 鬼怪II
- F-15战斗机:- F/A-18战斗机:- 大黄蜂
--95轰炸机:--160轰炸机:- 黑色杰克
--20战斗机:- 威龙- 炎齿
- F-16轰炸机:- 飞龙- 雷电II

6、检索

#!/usr/bin/env python
# -*- coding: utf-8 -*-import pandas as pd
import time, re
import faiss
import numpy as np
from sentence_transformers import SentenceTransformer
from Read_Config import ReadConfig
from Project_parameters import Args
from logs import Loggingsloggings = Loggings()
args = Args().get_parser()class weapon_and_weapon_alias_search:def __init__(self):pass......return weapon_resclass faiss_vector_text_search:def __init__(self):self.model = SentenceTransformer(args.model_dir)loggings.info(f"model loading completed")def Text_steering_vector(self):df = pd.read_excel(args.all_weapon_data_dir)time.sleep(3)sentences = df['sentence'].tolist()
......def text_search(self, text, top):df = pd.read_excel(args.all_weapon_data_dir)sentences = df['sentence'].tolist()sentence_embeddings = self.model.encode(sentences)dimension = sentence_embeddings.shape[1]index = faiss.IndexFlatL2(dimension)faiss_array = np.load(args.out_pth)index.add(faiss_array)search = self.model.encode([text])query_emb = np.array(search)similars, indices = index.search(query_emb, top)final_res = []print("process finished!")loggings.info(f"top{top}——序号列表: {indices}")loggings.info(f"top{top}——相似度列表: {similars} ")loggings.info(f"top{top}——相似文本索引:")for idx in indices[0]:with open(args.out_index_pth, encoding='utf-8') as f:for i, line in enumerate(f):if i == idx:loggings.info(line.replace("\n", ""))pattern = re.compile(r'text:\s*(.*)')final_res.append(pattern.findall(line))print("----------------------------------------------------------------------------------------------")return final_resclass final_search:def __init__(self):rc = ReadConfig()  # 调用Readconfig类的rc.write_yaml()self.config = rc.read_yaml()loggings.info(f"Configuration loading completed")def final_weapon_search(self, text, top):weapon_res = weapon_and_weapon_alias_search().weapon_search(text, self.config)if weapon_res.__len__() == 0:weapon_alias_res = weapon_and_weapon_alias_search().weapon_alias_search(text, self.config)if weapon_alias_res.__len__() == 0:final_res = faiss_vector_text_search().text_search(text, top)return final_reselse:return weapon_alias_reselse:return weapon_resif __name__ == '__main__':args.config_dir = './config.yaml'args.model_dir = './sentence_transformers/uer_sbert-base-chinese-nli/'args.weapon_data_dir = './weapon_data.xlsx'args.all_weapon_data_dir = './test_data.xlsx'args.out_pth = './models/faiss.npy'args.out_index_pth = './models/faiss_index.txt'args.top = 3# faiss_vector_text_search().Text_steering_vector()# i = '阿帕奇'# j = '鹰击'# k = 'F-16'# final_res = final_search().final_weapon_search(i, args.top)# print(final_res)

7、api服务

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
from fastapi import FastAPI, Response
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
import traceback
from final_search import *
app = FastAPI()@app.post("/weapon")
async def get_geo(request_data: dict) -> Response:return_result = {"code": 200, "message": "success", "data": None}try:texts = request_data["text"]top=request_data["top"]loggings.info("ner 入参 " + str({"texts": texts, "top": top}))final_res = final_search().final_weapon_search(texts,top)return_result['data'] = final_resexcept Exception as e:loggings.error(str(e) + "@@@" + traceback.format_exc())return_result["code"] = 400return_result["message"] = str(e)# Use jsonable_encoder to convert the Python object to JSON-compatible datajson_content = jsonable_encoder(return_result)# Pass the JSON-compatible data to JSONResponsereturn JSONResponse(content=json_content, media_type="application/json; charset=utf-8")if __name__ == "__main__":import uvicornip = socket.gethostbyname(socket.getfqdn(socket.gethostname()))uvicorn.run(app='api:app', host= ip, port=6410, workers=4)

8、结果

8.1、基于武器装备名称的检索结果如下:

在这里插入图片描述

8.2、基于武器装备别称的检索结果如下:

在这里插入图片描述

8.3、基于faiss的检索结果如下:

在这里插入图片描述
总结:此项目只作为初步的探讨demo,还有很多的上升空间。例如数据的读入、存储、Embedding模型选择等等。

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

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

相关文章

微信公众号打通与登录的实现

今天实现一下与微信公众号进行对接,通过扫描二维码的方式来进行注册与登录,获取用户的微信唯一标识作为用户的username,下面我们开始编写。 骨架建立: 建包: 第一步还是先将骨架建好,与网关骨架差不多&a…

玄机平台应急响应—MySQL应急

前言 这个是比较简单的,其实和MySQL没啥太大的关系,没涉及太多MySQL的知识。看一下它的flag要求吧。 flag1 它说黑客写入的shell,那我们就去它的网站目录去看看,果然有一个叫sh.php的文件。 flag1{ccfda79e-7aa1-4275-bc26-a61…

DeepDriving | CUDA编程-05:流和事件

本文来源公众号“DeepDriving”,仅用于学术分享,侵权删,干货满满。 原文链接:CUDA编程-05:流和事件 1 CUDA流 在CUDA中有两个级别的并发:内核级并发和网格级并发。前面的文章DeepDriving | CUDA编程-04&…

ESP32 BLE学习(0) — 基础架构

前言 (1)学习本文之前,需要先了解一下蓝牙的基本概念:BLE学习笔记(0.0) —— 基础概念(0) (2) 学习一款芯片的蓝牙肯定需要先简单了解一下该芯片的体系结构&a…

园区地图导航系统:技术原理、部署方案与智能化应用解析

随着智能化时代的到来,园区管理面临诸多挑战。维小帮园区地图导航系统,采用前沿技术,为园区提供全面的导航解决方案,极大提升了园区管理效率和用户体验。 一、园区地图导航系统的功能特点 维小帮园区地图导航系统,以其…

MongoDB 多层级查询

多层级查询 注意&#xff1a;要注意代码顺序 查询层级数据代码放前面&#xff0c;查询条件放后面 if (StringUtils.isBlank(params.getDocType())) {params.setDocType(DOC_TDCTYPE);}String docName mapper.findByDocInfo(params.getDocType());List<ExpertApprovalOpin…

智能化状态管理:自动状态流转处理模块

目录 基本背景介绍 具体实现 基本数据准备 基本数据表 状态转换常量 状态转换注解 任务处理模版 各任务实现逻辑 开启比对任务进行处理 降噪字段处理任务处理 开启业务数据比对处理 业务数据比对处理 开始核对数据生成最终报告处理 核对数据生成最终报告处理 状…

AI项目二十二:行人属性识别

若该文为原创文章&#xff0c;转载请注明原文出处。 分享一个行人属性分析系统&#xff0c;识别行人&#xff0c;并标记每个人的属性。 项目代码来自公众号渡码的项目。 本人用Win10复现完整项目&#xff0c;并记录过程。 源码会上传到github,可以自行下载测试。 Yinyifen…

Flutter 简化CustomPainter的绘制

文章目录 前言一、为何简化&#xff1f;1、通常做法&#xff08;1&#xff09;、绘制形状1&#xff08;2&#xff09;、绘制形状2&#xff08;3&#xff09;、界面显示 2、简化 二、完整代码三、使用示例1、绘制图形2、动态触发绘制 总结 前言 使用Flutter做界面时&#xff0c…

Linux DMA-Buf驱动框架

一、DMABUF 框架 dmabuf 是一个驱动间共享buf 的机制&#xff0c;他的简单使用场景如下&#xff1a; 用户从DRM&#xff08;显示驱动&#xff09;申请一个dmabuf&#xff0c;把dmabuf 设置给GPU驱动&#xff0c;并启动GPU将数据输出到dmabuf&#xff0c;GPU输出完成后&#xf…

大数据实训项目(小麦种子)-02、实训项目整体功能介绍与演示

文章目录 前言界面及功能描述实现功能描述技术选型界面展示首页界面功能1&#xff1a;HDFS&#xff0c;选择文件上传文件详细步骤 功能2&#xff1a;MapReduce预处理数据功能3&#xff1a;Hbase存储小麦种子数据并查询前10条记录功能4&#xff1a;Hive分析原始csv文件数据并ech…

RTA_OS基础功能讲解 2.9-警报器

RTA_OS基础功能讲解 2.9-警报器 文章目录 RTA_OS基础功能讲解 2.9-警报器一、警报器简介二、警报器配置2.1 激活一个任务2.2 设置一个事件2.3 执行回调函数2.4 递增一个(软件)计数器三、警报器设置3.1 绝对警报3.1.1 单次触发3.1.2 周期触发3.1.3 在过去设置警报3.1.4 将绝对…

swift微调牧歌数据电商多模态大语言模型

大规模中文多模态评测基准MUGE_数据集-阿里云天池多模态理解和生成评估挑战榜(MUGE)是由阿里巴巴达摩院智能计算实验室发起,由阿里云天池平台承办,并由浙江大学、清华大学等单位共同协办。 Mhttps://tianchi.aliyun.com/dataset/107332微调的是牧歌数据集,结果都不好,记录…

中望CAD 2025 (ZW3D2025) 简体中文修改版

名称&#xff1a;中望CAD 2025 (ZW3D2025) 简体中文修改版 描述&#xff1a;一款三维CAD设计工具&#xff0c;运行破解补丁ZW3D2025-2024-Patch执行修补。 链接&#xff1a;夸克网盘分享 &#x1f4c1; 大小&#xff1a;3.2GB &#x1f3f7; 标签&#xff1a;#PC软件 #CAD #设…

支付宝 沙盒demo使用

简介&#xff1a;支付宝沙箱环境是一个为开发者提供的模拟测试环境&#xff0c;用于在应用上线前进行接口功能开发和联调。在这个环境中&#xff0c;开发者可以模拟开放接口&#xff0c;进行开发调试工作&#xff0c;以确保应用上线后能顺利运行。 1. 配置沙盒 1. 1 沙箱控制…

【odoo15】前端自定义模态弹窗

概要 在odoo15或者在15之前&#xff0c;odoo前端的owl框架还没完全替换当前前端框架的时候&#xff0c;我们很多时候都是用js或者jq来直接操作dom&#xff0c;那么我们如果需要在前端用到一个模态弹窗&#xff0c;可以怎么解决呢&#xff1f; 方法1 直接用js原生的模态弹窗&am…

Oracle的这些BUG你要遇到,说明你是一个DBA老鸟...

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…

【LVGL】Guider 界面分析

文章目录 前言架构创建 UI切换界面空间释放分析创建页面空间变化 前言 分析Gui Guider-1.7.2-GA 生成的 LVGL 界面切换&#xff0c;资源管理等处理 架构 所有控件存放于同一个结构体 lv_ui 内&#xff0c;每个页面都至少包含 screen_xxx 和 screen_xxx_del 两个成员 typede…

用HAL库改写江科大的stm32入门-7-1 ADC

实验目的:了解ADC基本概念 电路图&#xff1a; ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器&#xff0c;它可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁。 实验效果&#xff1a; &#xff0…

【html】学会这一套布局,让你的网页更加

很多小伙伴们在刚刚开始学习网页设计的时候不知道怎么布局今天给大家介绍一种非常实用且更加专业的一种布局。 灵感来源&#xff1a; 小米官网 布局图; 实例效果图&#xff1a; 这是一个简单的HTML模板&#xff0c;包括头部、内容区域和底部。 头部部分包括一个分为左右两部分…