【Python深度学习】循环神经网络RNN中文分词实战(附源码)

简介: 【Python深度学习】循环神经网络RNN中文分词实战(附源码)

需要全部代码请点赞关注收藏后评论区留言私信~~~

长期依赖问题

以基本单元为基础构建的循环神经网络具备记忆性,虽然能够处理有关联的序列数据问题,但是因为梯度消散和爆炸问题的存在,不能有效利用间距过长的信息,效果有限,称之为长期依赖(Long-Term Dependencies)问题。长短时记忆网络是在普通循环神经网络基本单元的基础上,在隐层各单元间传递时通过几个可控门(遗忘门、输入门、候选门、输出门),控制之前信息和当前信息的记忆和遗忘程度,从而使循环神经网络具备了长期记忆功能,能够利用间距很长的信息来解决当前问题。

LSTM基本单元

RNN基本单元的状态s_i和输出y_i可表示为

标记为①、②、③、④的分别称为遗忘门、输入门、候选门、输出门,σ表示Sigmoid激活函数,tanh表示tanh激活函数。

遗忘门用来控制上一步的状态s_i−1输入到本步的量,也就是遗忘上一步的状态的程度,它的输入是上一步的输出和本步的输入[■8(y_i−1&x_i)],它的输出为:

f_i=σ([■8(y_i−1&x_i)]∙W_f+b_f)

候选门通过tanh函数提供候选输入信息:

s ̃_i=tanℎ([■8(y_i−1&x_i)]∙W_s+b_s)

输入门通过Sigmoid函数来控制输入量:

in_i=σ([■8(y_i−1&x_i)]∙W_in+b_in)

为了进一步理解长短时记忆网络的单元结构,来计算一下它的参数个数。以示例为例,输入的x_i是1维的,输出y_i是100维的,单元状态s_i为100维,W_f、W_s、W_in和W_o是101×100的矩阵,b_f、b_s、b_in和b_o是100维的向量,因此,单元的参数个数为40800。

双向循环神经网络

深度循环神经网络

中文分词应用示例

1)提取训练语料中的所有字,形成字典

该步的主要目的是给训练语料中用到的字进行编号

2)将语料中的句子转化为训练样本

模型对每个输入训练样本的长度要求一致,因此,可以指定一个固定长度,过长的句子应截断后面过长的部分。过短的句子在后面填充0,并指定一个新的标签“X”与之对应。通过字典将句子的汉字序列转换为数字序列。标签用独热编码表示。

3)搭建深度双向循环神经网络模型进行训练

4)利用训练好的模型进行分词

训练过程如下

 

先要将待分词的句子转换成适合模型输入的形式,再用模型进行分词。分词结果为:“中国 首次 火星 探测 任务 天问 一 号 探测器 实施 近 火 捕 获制动”。

部分代码如下

# 4.利用训练好的模型进行分词
def predict(testsent):
    # 将汉字句子转换成模型需要的输入形式
    x = [0] * maxlen
    replace_len = len(testsent)
    if len(testsent) > maxlen:
        replace_len = maxlen
    for j in range(replace_len):
        x[j] = char2id[testsent[j]]
    # 调用模型进行预测
    label = model.predict([x]) 
    # 根据模型预测结果对输入句子进行切分
    label = np.array(label)[0]
    s = ''
    for i in range(len(testsent)):
        tag = np.argmax(label[i])
        if tag == 0 or tag == 3: # 单字和词结尾加空格切分
            s += testsent[i] + ' '
        elif tag ==1 or tag == 2:
            s += testsent[i]
    print(s)
# 2.将训练语句转化为训练样本
trainX = []
trainY = []
for i in range(len(new_sents)):
    x = [0] * maxlen # 默认填充值
    y = [4] * maxlen # 默认标签X
    sent = new_sents[i][0]
    labe = sents_labels[i][0]
    replace_len = len(sent)
    if len(sent) > maxlen:
        replace_len = maxlen
    for j in range(replace_len):
        x[j] = char2id[sent[j]]
        y[j] = tags[labe[j]]
    trainX.append(x)
    trainY.append(y)
trainX = np.array(trainX)
trainY = tf.keras.utils.to_categorical(trainY, 5)
print("训练样本准备完毕,训练样本共" + str(len(trainX)) + "句。")

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
28天前
|
机器学习/深度学习 PyTorch 算法框架/工具
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
73 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
|
30天前
|
搜索推荐 程序员 调度
精通Python异步编程:利用Asyncio与Aiohttp构建高效网络应用
【10月更文挑战第5天】随着互联网技术的快速发展,用户对于网络应用的响应速度和服务质量提出了越来越高的要求。为了构建能够处理高并发请求、提供快速响应时间的应用程序,开发者们需要掌握高效的编程技术和框架。在Python语言中,`asyncio` 和 `aiohttp` 是两个非常强大的库,它们可以帮助我们编写出既简洁又高效的异步网络应用。
108 1
|
8天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
46 6
|
12天前
|
安全 网络安全 数据安全/隐私保护
|
28天前
|
机器学习/深度学习 数据采集 存储
时间序列预测新突破:深入解析循环神经网络(RNN)在金融数据分析中的应用
【10月更文挑战第7天】时间序列预测是数据科学领域的一个重要课题,特别是在金融行业中。准确的时间序列预测能够帮助投资者做出更明智的决策,比如股票价格预测、汇率变动预测等。近年来,随着深度学习技术的发展,尤其是循环神经网络(Recurrent Neural Networks, RNNs)及其变体如长短期记忆网络(LSTM)和门控循环单元(GRU),在处理时间序列数据方面展现出了巨大的潜力。本文将探讨RNN的基本概念,并通过具体的代码示例展示如何使用这些模型来进行金融数据分析。
180 2
|
17天前
|
存储 网络安全 数据安全/隐私保护
|
1天前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
|
3天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
9天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
32 4
|
13天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
53 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型

热门文章

最新文章

下一篇
无影云桌面