一个简单的 NLP 神经网络

2024-09-02 19:52
文章标签 简单 神经网络 nlp

本文主要是介绍一个简单的 NLP 神经网络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何搭建一个简单的 NLP 神经网络?

假设我们一个变量名列表,根据这个变量名列表,学习其中的特征并生成新的变量名。训练一个模型用于预测下一个字符并生成新的变量名。使用一个单层的神经网络实现,假设我们的变量名只能用英文字母,作为网络的输入,使用 Onehot encoding,那么输入就是 (1, 27),使用 one hot 表示,添加一个特殊字符在作为开始和结束标志 “#”,首先用pytorh 创建 onehot。

# 例如我们有个名字的列表
names = ['one', 'two','three']#  XS 输入字符串为 #abc#
import torch
import torch.nn.functional as F
import matplotlib.pyplot as pltxs = torch.tensor([0 ,1,2,3]) xenc = F.one_hot(xs, num_classes=27).float()
xencplt.imshow(xenc)

在这里插入图片描述

有了onehot 输入,我们添加一层神经元,wx + b,初始化 w,实现最简单的网络,这里的 b 就用 0,当层网络的数据就是 wx,wx 的输出是 Logits。

# 初始化 w
W = torch.randn((27, 1))
xenc @ w

这里使用 27 个神经元,因为要预测 27 种可能性。并将输出转为概率,目标是预测下一个字母,结果中表示每个输入对应 27 个字符输出的概率。

g = torch.Generator().manual_seed(2147483647)
W = torch.randn((27, 27), generator=g)logits = xenc @ W # predict log-counts
counts = logits.exp() # counts, equivalent to N
probs = counts / counts.sum(1, keepdims=True) # probabilities for next character

之后,定义损失函数,使用 likelyhood 损失函数。在没有经过训练的情况下,loss 的值很高。


ys = torch.tensor([1,2,3,0])loss = -probs[torch.arange(4), ys].log().mean()loss

进行梯度计算,并调整 w。反向计算通过链式法则计算每个参数对loss 的影响并进行微调。
在这里插入图片描述

# backward pass
W.grad = None # set to zero the gradient
loss.backward()W.data += -0.1 * W.grad

总结

本文创建了一个简单的神经网络,输入、输出、Loss 和反向计算实现一个简单的神经网络,通过整个流程可以了解神经网络的基本工作原理。

这篇关于一个简单的 NLP 神经网络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130911

相关文章

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经