AI快速构建中文文本蕴含深度学习模型-NeuronBlocks(一)

案例介绍

随着自然语言处理(NLP)领域研究的不断深入,如何让机器能够真正地理解自然语言,而不是仅简单地处理语句的表层信息,渐渐成为了许多学者面临的问题。实现对文本深层次理解,是自然语言处理研究最主要也是最重要的目的之一。

在获取了文本的语义后,一旦获得了它们之间的推理关系,这些文本便不再互相孤立,而是彼此联系起来,构成一张语义推理网络,从而促使机器能够真正理解并应用文本的语义信息。文本间的推理关系,又称为文本蕴含关系。作为一种基本的文本间语义联系,广泛存在于自然语言文本中。

简单的来说文本蕴含关系描述的是两个文本之间的推理关系,其中一个文本作为前提,另一个文本作为假设,如果根据前提能够推理得出假设,那么就说两者之间存在蕴含关系。

正如以下两个句子,我们可以轻松地判断出两者之间存在蕴含关系,但如果用机器该如何进行判断呢?

  • 阿尔卑斯山的景色看上去像是从奥地利或瑞士直接出来的。
  • 阿尔卑斯山的地貌看起来与奥地利或瑞士相似。

本案例将会给大家介绍如何使用NeuronBlocks进行文本蕴含关系的分析

案例价值

  • 可以了解中文文本蕴含(NLI)的基础内容
  • 可以学会使用微软开源项目NeuronBlocks的使用方法
  • 能利用NeuronBlocks快速构建、训练、测试你的NLI深度学习模型

使用场景

文本蕴含技术在众多语义相关的自然语言处理(NLP)任务和日常生活中有着广泛的应用。

  1. 在问答系统中,文本蕴含技术可以生成候选答案,或对用其他方法生成的候选答案进行筛选排序
  2. 在机器翻译评价领域,可以利用机器译文和标准译文的互相蕴含程度来对机器翻译系统的性能进行评估
  3. 在学生作业评分任务中,学生的作答与标准答案之间的蕴含关系也可以指示学生答案的完善程度等等。

神经元块

为了提升构建自然语言理解深度学习模型的效率,微软推出了NeuronBlocks——自然语言处理任务的模块化深度学习建模工具包。

目前,微软在GitHub上拥有3.9k个开源项目,是世界上最大的开源项目支持者。从底层的协议、编程语言,到各种框架、类库,再到应用工具,微软的开源贡献一直在持续。微软开源项目入口

作为微软的开源项目之一,NeuronBlocks可帮助工程师、研究者们快速构建用于NLP任务的神经网络模型训练的端到端管道。该工具包的主要目标是将NLP深度神经网络模型构建的开发成本降到最低,包括训练阶段和推断阶段。NeuronBlocks由两个主要组件组成:Block Zoo和Model Zoo。Block Zoo提供常用的神经网络组件作为模型架构设计的构建模块,如BiLSTM、BiGRU、Transformer、CNN等;在Model Zoo中,针对常见的NLP分类任务,如情感分析、文本分类、序列标注、机器阅读理解等,以JSON配置文件的形式为其提供了一套NLP模型。更多详细信息,请查看GitHub项目地址。

本案例中,中文文本蕴含任务本质也是一种分类任务,所以我们选择Model Zoo来快速构建中文文本蕴含(NLI)深度学习算法模型。

先修知识

  • 了解微软开源项目Neuronblocks
    参考链接: NeuronBlocks
  • 了解主流深度学习框架
    参考链接: Pytorch

案例大纲与核心知识点

序号内容关键知识点收获实战技能
1配置环境与工具虚拟环境与Pytorch使用虚拟环境安装Pytorch
2数据获取Python数据处理使用Python对数据集处理
3模型构建神经元块 / BiGRU使用Neuronblocks与BiGRU构建中文文本蕴含深度学习模型
4模型训练神经元块使用Neuronblocks进行模型训练
5模型测试神经元块使用Neuronblocks进行模型测试
6模型推理神经元块使用Neuronblocks进行模型推理

推荐学习时长

  • 初次学习的实战者:5~8 小时
  • 有一定经验学习者:3~5 小时
  • 模型训练时间:6~24小时

案例详解

环境与工具

本案列运行具有CPU的计算机上,系统可以是Windows / Macos / Linux 需要的软件环境如下:

  • 蟒蛇 3.7

如果您有Nvidia的显卡,可以根据以下的Nvidia显卡算力表来查询您显卡的算力 Nvidia显卡算力
表: CUDA GPU

根据您显卡算力的不同,模型训练时间可以加快50-100倍。在后续的流程中,显卡流程将被折叠起来,请您根据折叠部分的提示,打开对应的折叠内容。

实现流程

配置环境与工具

  1. 打开终端并选择合适的路径

    # 将YOUR_LIKE_PATH替换为你常用或合适的路径# Windows pwsh / Mac / Linux bash
    cd YOUR_LIKE_PATH
  2. 将Microsoft开源项目NeuronBlocks Clone至本地,并进入该目录:

    git clone https://github.com/microsoft/NeuronBlocks.git
    cd NeuronBlocks

如果您有Nvidia的显卡,请点击此处折叠CPU流程

  1. 创建虚拟环境(可选),安装Python依赖包

    # 可以选择你喜欢的虚拟环境管理方式# pipenv
    > pipenv shell --python 3.7
    > pip install nltk==3.5 gensim==3.8.3 tqdm==4.59.0 numpy==1.20.1 scikit-learn==0.24.1 ftfy==5.9 jieba==0.42.1
    > pip install torch==1.8.0+cpu torchvision==0.9.0+cpu -f https://download.pytorch.org/whl/torch_stable.html# conda (Windows)
    > conda create -n YOUR_ENV_NAME python=3.7
    > activate YOUR_ENV_NAME
    > pip install nltk==3.5 gensim==3.8.3 tqdm==4.59.0 numpy==1.20.1 scikit-learn==0.24.1 ftfy==5.9 jieba==0.42.1
    > pip install torch==1.8.0+cpu torchvision==0.9.0+cpu -f https://download.pytorch.org/whl/torch_stable.html# pip (无虚拟环境)
    > pip install nltk==3.5 gensim==3.8.3 tqdm==4.59.0 numpy==1.20.1 scikit-learn==0.24.1 ftfy==5.9 jieba==0.42.1
    > pip install torch==1.8.0+cpu torchvision==0.9.0+cpu -f https://download.pytorch.org/whl/torch_stable.html
  2. 在安装后,我们的环境应该如下

    >pip listnltk==3.5
    gensim==3.8.3
    tqdm==4.59.0
    numpy==1.20.1
    scikit-learn==0.24.1
    ftfy==5.9
    jieba==0.42.1
    torch==1.8.0+cpu
    torchvision==0.9.0+cpu

如果您有Nvidia显卡,且算力大于3.5,请打开此折叠部分

如果您有Nvidia显卡,且算力小于等于3.5,请打开此折叠部分


数据获取

我们利用的是开源的中文文本蕴含数据集,数据集train.txt主要包含三种文本蕴含关系:entailment、contradiction、 neutral, 数据示例如下所示,第一个文本句子为为前提(premise),第二个文本句子为假设(hypothesis),其次是前提和假设的蕴含关系,每一行代表一个样本,以\t分隔。数据量级在42万左右,类别比例entailment:contradiction:neutral = 1:1:1,不存在数据类别不平衡问题。

一个年轻人在呼啦圈。这位老人正在呼啦圈。矛盾
两个人正在大教堂或清真寺里交谈。两个人在谈话蕴涵
穿着黑色外套的妇女边看报纸边等着洗衣服。一个女人在洗衣店。中性

数据下载并处理

首先,我们先将数据集克隆到本地并启动python

git clone https://github.com/liuhuanyong/ChineseTextualInference.git

中文文本蕴含数据集只提供了train.txt,为了方便测试验证我们的模型,我们将该据集划分训练集、验证集、测试集。

# 新建一个split_data.py,输入以下代码并运行即可划分好并放置在指定目录
import random
import os
dirs = "./dataset/chinese_nli/"
def split_data():samples = {"neutral": [], "contradiction": [], "entailment": []}with open("./ChineseTextualInference/data/train.txt", "r", encoding="utf-8") as fout:for line in fout:contents = line.strip().split("\t")if len(contents) < 3:continuesamples[contents[-1]].append(line)print(f'neutral:{len(samples["neutral"])}, contradiction:{len (samples["contradiction"])}, entailment: {le(samples ["entailment"])}')def split_hepler(data):# 根据data的6:2:2划分train, dev, testlength = len(data)train = data[: int(length * 0.6)]dev = data[int(length * 0.6): int(length * 0.8)]test = data[int(length * 0.8):]return train, dev, testdef save_data(data, filename):with open(filename, "w", encoding="utf-8") as fout:for line in data:fout.write(line)# 数据按比例分开neu_train, neu_dev, neu_test = split_hepler(samples["neutral"])cont_train, cont_dev, cont_test = split_hepler(samples["contradiction"])ent_train, ent_dev, ent_test = split_hepler(samples["entailment"])# 将数据合并train = neu_train + cont_train + ent_traindev = neu_dev + cont_dev + ent_devtest = neu_test + cont_test + ent_test# 打乱数据random.shuffle(train)random.shuffle(dev)random.shuffle(test)# 保存需要测试的数据save_data(train, f"{dirs}cnli_train.txt")save_data(dev, f"{dirs}cnli_dev.txt")save_data(test, f"{dirs}cnli_test.txt")
if not os.path.exists(dirs):os.makedirs(dirs)
# 读取数据并处理统计
split_data()
下载中文预训练词向量

运用已在大规模语料上预训练得到的中文词向量初始化词向量参数,提升模型的性能。我们此处选用的搜狗新闻语料预训练的Word300的词向量,下载并解压缩获得词向量文件sgns.sogou.word,词向量下载地址。https://github.com/Embedding/Chinese-Word-Vectors#pre-trained-chinese-word-vectors

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

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

相关文章

2017-2021年中国城市数字经济指数

2017-2021年中国城市数字经济指数 1、时间&#xff1a;2017-2021年 2、指标&#xff1a;年份、城市名称、城市代码、城市分级、发展阶段、总得分、总排名、总排名变更、数据及信息化基础设施得分、数据及信息化基础设施排名、数据及信息化基础设施排名变更、城市服务得分、城…

c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)

文章目录 1.把字符串转换成整数题目详情代码思路 2. 344.反转字符串题目详情代码1思路1代码2思路 3. 387. 字符串中的第一个唯一字符题目详情代码思路 4. 917. 仅仅反转字母题目详情代码思路 1.把字符串转换成整数 传送门 题目详情 代码 class Solution { public:int StrToI…

详解SpringCloud微服务技术栈:一文速通RabbitMQ,入门到实践

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;DockerCompose部署微服务集群 &#x1f4da;订阅专栏&#xff1a;微服务技术全家桶 希…

ELK分离式日志(2)

目录 一.FilebeatELK 部署 开台服务器&#xff08;192.168.233.50&#xff09;下载fliebeat&#xff1a; 安装nginx后查看下日志文件&#xff1a; 设置 filebeat 的主配置文件: 关闭logstash&#xff0c;检测文件&#xff1a; 在50节点上启动filebeat&#xff1a; 访问页…

SpikingJelly笔记之IFLIF神经元

文章目录 前言一、脉冲神经元二、IF神经元1、神经元模型2、神经元仿真 三、LIF神经元1、神经元模型2、神经元仿真 总结 前言 记录整合发放(integrate-and-fire, IF)神经元与漏电整合发放(leaky integrate-and-fire, LIF)神经元模型&#xff0c;以及在SpikingJelly中的实现方法…

x-cmd pkg | yq - 命令行 YAML处理工具

目录 简介首次用户支持格式转换友好的显示和操作语法与 jq 类似竞品和相关作品进一步阅读 简介 yq (YAML Query) 是一个轻量级的 YAML、JSON、XML 处理器&#xff0c;主要用于查询和提取 YAML 数据。 本 yq 的包来自 mikefarah/yq 项目&#xff0c;语法类似于 jq 。相比 kisly…

java数据结构与算法刷题-----LeetCode645. 错误的集合(位运算解法需要重点掌握)

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 法一&#xff1a;桶排序思想法二&#xff1a;位运算 法一&#x…

Python文件操作和异常处理:高效处理数据的利器

文章目录 一、引言1.1 文件操作和异常处理对于编程的重要性1.2 Python作为实现文件操作和异常处理的强大工具 二、为什么学习文件操作和异常处理2.1 处理各种文件格式&#xff1a;从文本到图像到音频等2.2 确保代码的鲁棒性&#xff1a;有效处理异常情况 三、文件读取和写入3.1…

什么是关键字?C语言的关键字有哪些?(C语言32个关键字详解)

目录 一、问题 二、解答 1、数据类型关键字&#xff08;12个&#xff09; (1) 声明和定义的区别 (2) 数据类型关键字 • char&#xff1a;声明字符型变量 1、声明字符变量 2、字符数组 3、ASCII码表示 4、指针与字符数组 5、多字节字符集&#xff08;如UTF-8&#xff…

【C++】初识类和对象

引言 在C语言中&#xff0c;我们用结构体来描述一个复杂的对象&#xff0c;这个对象可能包括许多的成员&#xff0c;如用结构体描述一个学生的成绩&#xff0c;或者描述一个日期等。 struct Date {int _year;int _month;int _day; }; 如上是一个描述日期的结构体定义&#x…

超融合基础架构理解

1 超融合基础架构 1.1 定义 超融合基础架构&#xff08;Hyper-converged infrastructure&#xff0c;缩写为HCI&#xff09;&#xff0c;是一种集成了存储设备及虚拟运算的信息基础架构框架。在这样的架构环境中&#xff0c;同一厂商的服务器与存储等硬件单元&#xff0c;搭配…

【网站项目】基于SSM的263货物进销管理系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

探索Docker-Compose:从基础到高级命令全解析

探索Docker-Compose&#xff1a;从基础到高级命令全解析 引言Docker-Compose基础1. Docker-Compose简介2. 安装Docker-Compose3. 编写第一个Compose文件4. 基本命令 Docker-Compose文件结构解析1. 理解docker-compose.yml2. 基本组件3. 文件示例4. 配置项解析 常用Docker-Compo…

洛谷P1319 压缩技术(C语言)

这样一道入门题目&#xff0c;本来可以用for循环直接操作&#xff0c;但作者异想天开(xian de dan teng)地把所有数据登记在一个数组里面&#xff0c;然后再统一按格式输出。也就是定义一个数组Map&#xff0c;大小为n成n&#xff0c;然后按照输入数据&#xff0c;把Map中每一个…

【50.2K⭐】Tabby:一款强大、灵活且跨平台的免费终端应用程序

【50.2K⭐】Tabby&#xff1a;一款强大、灵活且跨平台的免费终端应用程序 在快节奏的现代生活中&#xff0c;我们总是在寻找提高工作效率的方法。如果你是一位开发人员&#xff0c;或者是一个对技术充满好奇心的电脑爱好者&#xff0c;我们经常需要在 Windows 上进行远程操作与…

加密机授权报错如何排查?进入加密机后台的方式介绍

我们在此前的文章中介绍过不少TSINGSEE青犀视频安防监控视频平台关于加密机授权操作及相关疑问解答&#xff0c;感兴趣的用户可以翻阅往期的文章进行了解。由于新用户咨询该方面的问题较多&#xff0c;今天我们再来介绍一下用户在使用过程中遇到的问题。 1、如何进入加密机后台…

Vue-33、Vue中为什么使用render函数

1、main.js //该文件是整个项目的入口文件 //引入Vue import Vue from vue //引入APP组件&#xff0c;他是所有组件的父组件 import App from ./App.vue //关闭Vue是生产提示 Vue.config.productionTip false; //创建Vue实例对象---vm new Vue({render: h > h(App), }).$m…

笔试面试题——二叉树进阶(二)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、二叉搜索树与双向链表1、题目讲解2、思路讲解递归展开图3、代码实现 二、从前序遍历和中序…

安装向量数据库milvus可视化工具attu

使用docker安装的命令和简单就一个命令&#xff1a; docker run -p 8000:3000 -e MILVUS_URL{milvus server IP}:19530 zilliz/attu:v2.3.5sunyuhuasunyuhua-HKF-WXX:~/dockercom/milvus$ docker run -p 8000:3000 -e MILVUS_URL127.0.0.1:19530 zilliz/attu:latest yarn run…

Xcode查看APP文件目录

一、连接真机到MAC电脑上 二、打开Devices 点击window -> Devices and Simulatores 三、选中设备、选择app 四、选择下载内容 五、查看文件内容 得到的文件 右键显示包内容&#xff0c;获得APP内数据 六、分发证书无法下载 使用分发的证书无法下载文件内容&#xf…