领域分类/识别方案

news2024/12/28 10:59:50

将用户输入与预定义的领域进行匹配

针对领域分类任务,如上图所示,我们首先会从不同的业务中收集大量的业务数据,作为基础的训练数据,虽然这些数据来自不同的业务,但是依然存在一些问题,主要有以下两方面:

  • 标签不准:用户有可能会在某个业务对话中提问其它领域的问题;
  • 领域重叠:某些问题可能会在多个领域中出现。

所以,原始数据不能直接拿来作为训练数据,必须要经过人工筛选和标注方可使用。

当前方案:https://git.longhu.net/yuanzihan/it_domain

  • 用分类模型训,目标是这个query属于哪个baseCode,保存编码模型;
  • 计算domainEmb:同一领域下所有主问题emb beding的平均作为类中心;
  • 预测时,计算 query 跟 domainEmb 的cosin相似度,返回分值大于 domainEmbThreshold 的结果
-----> 106
source activate whenv
-----> 144
source activate yzh
-----> 
cd /data/ningshixian/work/new-it-domain
# 0、根据 sql.txt 拉取 data.csv 和 IT所有basecode.csv
# 1、数据增强
python 221209_data_aug.py
# 2、训练分类模型 BERT+MLP
python 221209_cw_classifier.py --batch_size 128 --total_epoch 20 --gpu_id 0
# 3、计算类向量,并存入ES(记得修改es连接环境)
python 221209_es_index_update.py

# 起emb服务(记得端口修改20193→20190)
nohup python emb_server.py > emb.log 2>&1 &
# 起定时更新任务
nohup python new_class_emb_update.py > task.log 2>&1 &

-----> 

起emb服务;PROD的话是这个:

PROD:
nohup python emb_server.py -e pre -ap /etc/apollo/apollo_private_key -ak 7f3251a5-4e15-4542-84be-cd99e9f6ba54 -at 41581c4771d2c39ba9eff7f644d99eb21824c529 --apollo_app_id=aicare --apollo_uri=https://apolloconfig.longhu.net --apollo_namespace=nlu_domain --apollo_cluster=prod --model_path=chatbot/nlu-domain/prod/model/1027_cw_model_1 > emb.log 2>&1 &

PROD的服务器应该是
http://10.9.192.144:20190/embedding

SIT:
nohup python emb_server.py -e sit  -ap /etc/apollo/apollo_private_key -ak 26f577d6-1d6c-48d8-b355-5029337c2c69 -at 4324dcafc46201ce85772250b583050df8f37de1 --apollo_app_id=aicare --apollo_uri=http://apolloconfig.longfor.sit/ --apollo_namespace=nlu_domain --apollo_cluster=sit --model_path=chatbot/nlu-domain/prod/model/1027_cw_model_1 > emb.log 2>&1 &

SIT的服务器应该是
http://10.231.135.106:20193/embedding

优化方案:

  • 根据用户的历史信息和上下文来进行更加精准的领域识别 --
  • 单标签多分类任务:在模型的最后用一个全连接层输出每个类的分数,然后用softmax激活并用交叉熵作为损失函数。只能学习从n个候选类别中选1个目标类别×
  • 多标签分类:
    • 将“softmax+交叉熵”推广到多标签分类问题。n个二分类 → Circle Loss,解决类别不均衡问题。需标注,费时费×
    • 多标签二分类方法:将每个标签视为一个二元分类任务,将每个标签的预测结果独立计算,最终将所有标签的预测结果组合起来得到最终的预测结果 ̄□ ̄
    • 多输出模型方法:使用一个深度神经网络来直接预测所有标签,输出层有多个节点,每个节点对应一个标签。此方法可以同时优化所有标签的预测结果,相比其他方法具有更高的预测精度。但针对仅一个标签情况下,可能会导致倾向于某一类领域;√
model = Sequential()
model.add(Dense(32, activation='relu', input_dim=input_shape))
model.add(Dense(num_labels, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy')
model.fit(x_train, y_train, epochs=10, batch_size=64)

y_pred = model.predict(x_test)
y_pred = (y_pred > 0.5).astype(int)
  • 向量相似度匹配:√
    • 多分类任务训练,保存编码模型,最后向量相似度检索;
    • 度量学习的 Classification-based 思路,存储压力大;

二分类器集成学习代码示例:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.metrics import accuracy_score

# 生成一个二分类数据集
X, y = make_classification(n_samples=1000, n_features=10, n_classes=2)

# 将标签转化为 one-hot 编码
y = to_categorical(y)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义一个基础模型,包含 3 个全连接层
def create_model(input_dim, output_dim):
    model = Sequential()
    model.add(Dense(32, input_dim=input_dim, activation='relu'))
    model.add(Dense(16, activation='relu'))
    model.add(Dense(output_dim, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

# 定义一个集成模型,包含多个二分类器
def create_ensemble_models(n_models, input_dim, output_dim):
    models = []
    for i in range(n_models):
        model = create_model(input_dim, output_dim)
        models.append(model)
    return models

# 训练集成模型
def train_ensemble_models(models, X_train, y_train, epochs, batch_size):
    for model in models:
        model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, verbose=0)

# 预测测试集并返回集成结果
def predict_ensemble_models(models, X_test):
    y_preds = []
    for model in models:
        y_pred = model.predict(X_test)
        y_preds.append(y_pred)
    return np.mean(y_preds, axis=0)

# 创建集成模型
n_models = 5
input_dim = X_train.shape[1]
output_dim = y_train.shape[1]
models = create_ensemble_models(n_models, input_dim, output_dim)

# 训练集成模型
epochs = 10
batch_size = 32
train_ensemble_models(models, X_train, y_train, epochs, batch_size)

# 预测测试集并计算准确率
y_pred_ensemble = predict_ensemble_models(models, X_test)
y_pred_ensemble = np.argmax(y_pred_ensemble, axis=1)
y_test = np.argmax(y_test, axis=1)
accuracy = accuracy_score(y_test, y_pred_ensemble)
print("Ensemble model accuracy: {:.2f}%".format(accuracy * 100))

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

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

相关文章

YOLOv7测距+碰撞检测

YOLOv7测距碰撞检测 1. 相关配置2. 测距原理3. 标定和测距4. 碰撞检测4.1 相关代码4.2 主代码 5. 实验效果 相关链接 1. YOLOV5 单目测距(python) 2. YOLOV7 单目测距(python) 3. 具体实现效果已在Bilibili发布,点击…

vscode+gdbserver实现图形化调试Linux应用

一、环境: 1.远程Linux主机Ubuntu22.04; 2.vscode 1.76 二、环境搭建 1.Ubuntu 安装gdb、gdbserver、openssh-server 2.vscode 安装Remote Development、C/C 3.远程连接Linux 点击左下角的绿色按钮,然后选择connect to host----->…

Day1 组队竞赛、删除公共字符

✨个人主页: 北 海 🎉所属专栏: C/C相关题解 🎃操作环境: Visual Studio 2019 版本 16.11.17 文章目录 选择题1.C基础语法 编程题组队竞赛删除公共字符 选择题 1.C基础语法 题目:以下程序的运行结果是&am…

RSA加密为什么能保证安全

问题:我们都知道RSA加密是安全的,但是我们在使用的使用,怎么使用才能保证数据的安全传输呢? 一、原则:公钥机密、私钥解密、私钥签名、公钥验签 公钥私钥都可以加密和解密数据,但是因为持有公钥和私钥的人…

【Elsevier】中科院2区TOP, 高被引119篇, 稳定检索22年, 1周可见刊,5月15截稿~

一、【期刊简介】 中科院2区软计算类SCI (TOP) 【期刊概况】IF:8.0-9.0, JCR1区, 中科院2区; 【终审周期】走期刊部系统,3-5个月左右录用; 【检索情况】SCI&EI双检;正刊; 【数据库收录年份】2001年&#xff1…

【测试】概念篇

目录 🌟一、了解软件测试 🌈1、什么是软件测试 🌈2、软件测试与开发的区别(常考) 🌈3、一个优秀的软件测试人员应该具备的素质 🌟二、需求与测试用例、软件错误,软件生…

一旦80%的开发人员都开始利用ChatGPT提升工作效率后,挑战与机遇在哪里?

其实我现在已经开始逐渐开始喜欢上ChatGPT了,上班时间摸摸鱼,和ChatGPT畅谈一下理想,遇见一些不太熟练的代码也懒得去上网查了,直接问一问ChatGPT,然后自己再放置到自己的代码里,改一改,很完美。…

快递出入库管理APP开发 收发快递更方便

网购的盛行让收发快递成为很多人日常生活必不可少的一个环节,对于快递公司来说,每天有那么多的快递,如果没有一个好用的管理系统的话,不仅麻烦还很容易出现纰漏,所以快递出入库管理APP软件就显得很必要了。 快递…

python-imageio库简单使用

目录 imread_v2() get_reader() 使用imageio方法将彩色视频变为黑白视频 相关:python-动图制作及分解_觅远的博客-CSDN博客 imageio是一个用于读取和写入图像及视频数据的库,支持多种格式,且可以使用NumPy数组进行操作。常用方法&#xff…

JS逆向 -- 某平台登录加密分析

一、打开网站,使用账号密码登录 账号:aiyou123.com 密码:123456 二、通过F12抓包,抓到如下数据,发现密码加密了 三、加密结果是32位,首先考虑是md5加密。 四、全局搜索pwd,点击右上角&#xf…

C# 纯text文本字符添加上下角标

工作的需求,需要在GridView列HeaderText中插入带入带有上标和下标的字符串,比如这样的一个字符串:。。 解决办法:使用转义字符加Unicode的NumEntity就可以实现了。定义字符串如下:"O"。其中O为 。 实现&…

Linux系统目录树结构以及解释

FHS标准 Filesystem Hierarchy Standard(文件系统层次化标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最…

rk平台调试音频(从驱动到apk)

需要实现的功能: 输入:hdmiin、uvc、mic可以实时切换 输出:耳机和HDMI OUT同时输出声音 这里注意:mic是存在hedset情况,4节耳机,即可输出又可输出同时进行 开发情况: 一、先熟悉大致的Andro…

【24】核心易中期刊推荐——图像处理研究大数据及智能处理研究

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

springboot内嵌tomcat文件上传路径不存在问题原因

错误提示: 临时文件目录被删除,导致文件上传报错,我们使用的是linux系统,10天没有使用,就会被删除 代码: 解决办法: 配置文件中自定义临时文件上传目录 server:port: 9090tomcat:basedir: /crm/tmp 特殊情况: 当我上传小文件的时候可以上传成功,大文件的时候上传失败 猜测可…

利用Linux的corntab定时任务和shell脚本,解决傻妞卡死、发信息没反应、一直卡在即将重启、查询数据异常等问题

利用Linux的corntab定时任务和shell脚本,解决傻妞卡死、数据异常等问题 安装corntab创建shell脚本添加corntab定时任务 原理 定时杀死傻妞进程,并自动重启傻妞 安装corntab Linux crontab是用来定期执行程序的命令。 CentOS安装命令如下 yum -y insta…

【Android -- 开发工具】Source Insight 4.0 安装和使用教程

简介 Source Insight 工具是一款功能强大的代码阅读器,它能使大量的代码产生联系,方便阅读,而且支持各种语言的程序代码。 安装 & 激活 1. 下载 下载地址 直接点击下载即可,我下载的是 4.0 版本。 然后按照步骤安装完成即…

chatGPT给出Python time.sleep()假死(挂起)的解决办法

1. time.sleep()假死(挂起)的原因与解决办法 最近,使用chatGPT帮着写程序,完成通过API获取天气数据的程序,运行起来后出现了状况:莫名其妙的的假死(程序被挂起来,不执行了&#xff…

项目结构如何改造(利用RuoYi-Vue脚手架开发一个健身房会员管理系统,改造项目结构)

项目结构如何改造(利用RuoYi-Vue脚手架开发一个健身房会员管理系统,改造项目结构) 1. 全局查找替换(Ctrl Shift R)2. 全局查找替换版本号3. 全局查找替换模块名4. 修改项目名5. ShiftF6 重命名模块6. ShiftF6 重命名…

Nginx配置使用GeoIP2模块

一、Nginx简介 Nginx(engine x)是一个免费的、开源的、高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个…