当前位置: 首页 > news >正文

NLP---自然语言处理

一·语言转换方法

统计语言模型存在的问题:

1 、由于参数空间的爆炸式增长,它无法处理
( N>3 )的数据。
2 、没有考虑词与词之间内在的联系性。例如,
考虑 "the cat is walking in the bedroom" 这
句话。如果我们在训练语料中看到了很多类似
“ the dog is walking in the bedroom” 或是
“ the cat is running in the bedroom” 这样
的句子;那么,哪怕我们此前没有见过这句
话 "the cat is walking in the bedroom" ,也
可以
从“ cat” 和“ dog” (“ walking” 和“ runni
ng” )之间的相似性,推测出这句话的概率。

经语言模型 --- 词嵌入 embedding

在处理自然语言时,通常将词语或者字做向量化,例如 one-hot 编码,例如我们有一句话为:“我爱北京天安门”,我们分词后对其
进行 one-hot 编码,结果可以是:

“我”:          [1,0,0,0]

“爱”:         [0,1,0,0]

“北京”:         [0,0,1,0]

“天安门”:     [0,0,0,1]

如果需要对语料库中的每个字进行 one-hot 编码如何实
现?

2 、按顺序依次给每个词进行 one-hot 编码,例如第 1 个词为: [1,0,0,0,0,0,0,….,0] ,最后 1 个词为: [0,0,0,0,0,0,0,….,1]

存在的问题?

矩阵为非常稀疏,出现维度灾难。例如有一句话为“我爱北京天安门”,传入神经网络输入层的数据为:

[1,0,0,0,0,0,0,
….,0]
[0,1,0,0,0,0,0,    ( 4*4960 )
….,0]
[0,0,1,0,0,0,0,
….,0]

如何解决维度灾难问题 ?

通过神经网络训练,将每个词都映射到一个较短的词向量上来。

这个较短的词向量维度是多大呢?
一般需要在训练时自己来指定。现
在很常见的例如 300 维。

例如有一句话为“我爱北京天安门”,通过神经网络训练后的数据为:

[0.62,0.12,0.01,0,0,0,0,
….,0]
[0.1,0.12,0.001,0,0,0,0,  ( 4*300 )
….,0]
[0,0,0.01,0.392,0.39, 0,
….,0]
[0,0,0,1,0,0.01,0.123,
….,0.11]


什么是词嵌入?
这种将高维度的词表示转换为低维度的词表示的方法,我们称之为词嵌入( word embedding )。
Google 研究团队里的 Tomas Mikolov 等人于 2013 年的《 Distributed Representations ofWords and Phrases and their
Compositionality 》以及后续的《 Efficient Estimation of Word Representations in Vector Space 》两篇文章中提出的一种
高效训练词向量的模型,也就是 word2vec 。

二·循环神经网络 RNN

序列数据:如文本、语音、股票、时间序列等数据,当前数据内容与前面的数据有关

传统神经网络存在的问题?

无法训练出具有顺序的数据。模型搭建时没有考虑数据上下之间的关系。

提出一种新的神经网络:

RNN ( Recurrent Neural Network )在处理序列输入时具有记忆
性,可以保留之前输入的信息并继续作为后续输入的一部分进行计算。

RNN 的特点:引入了隐状态 h ( hidden state )的概念,隐状态 h 可以对序列形的数据提取特征,接着再转换为输出。

为了方便起见,只画出序列长度为4的情况,实际上,这个计算过程可以无限地持续下去。

注意:
1 、在计算时,每一步使用的参数 U 、 W 、
b 都是一样的,也就是说每个步骤的参数都
是共享的,这是 RNN 的重要特点;
2 、下文的 LSTM 和 GRU 中的权值则不共
享。

RNN 结构中输入是 x1, x2, .....xn ,输出为 y1,
y2, ...yn ,也就是说,输入和输出序列必须要
是等长的

循环的由来:

RNN的局限:

当出现“我的职业是程序员,…,我最擅长的是电脑”。当需要预测最后的词“电脑”。当前的信息建议下一个词可能是一种技能,但是如果我们需要弄清楚是什么技能,需要先前提到的离当前位置很远的“职业是程序员”的上下文。这说明相关信息和当前预测位置之间的间隔就变得相当的大。 在理论上,RNN绝对可以处理这样的长期依赖问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN则没法太好的学习到这些知识。 原因是:梯度会随着时间的推移不断下降减少,而当梯度值变得非常小时,就不会继续学习。​

循环神经网络 --- LSTM网络

LSTM的介绍:是一种RNN特殊的类型,可以学习长期依赖信息。大部分与RNN模型相同,但它们用了不同的函数来计算隐状态。

举例:当你想在网上购买生活用品时,一般都会查看一下其他已购买的用户评价。当你浏览评论时,大脑下意识记住重要的关键词,比如“好看”和“真酷”这样的词汇,而不太会关心“我”、“也”、“是”等字样。如果朋友第二天问你用户评价都说了什么,你不可能会全部记住它,而是说出大脑里记得的主要观点,比如“下次肯定还会来买”,无关紧要的内容自然会从记忆中逐渐消失。

LSTM (长短时记忆网络)或 GRU(门控循环单元)就是如此,它们可以学习只保留相关信息来进行预测,并忘记不相关的数据。简单说,因记忆能力有限,记住重要的,忘记无关紧要的。

LSTM网络的介绍

LSTM 和 GRU 是解决短时记忆问题的解决方案,它们具有称为“门”的内部机制,可以调节信息流。

RNN网络的结构

1、第一个词被转换成了机器可读的向量,然后 RNN 逐个处理向量序列。

小细节
tanh 函数确保值保持在 -1~1 之间,从而调节了
神经网络的输出,相当于给每一层做了一次归一化。

LSTM 有3种类型的门结构:

遗忘门

功能:决定应丢弃或保留哪些信息。
步骤:来自前一个隐藏状态的信息和当前
输入的信息同时传递到 sigmoid 函数中
去,输出值介于 0 和 1 之间,越接近
0 意味着越应该丢弃,越接近 1 意味着
越应该保留。

输入门

功能:用于更新细胞状态。
步骤: 1 、首先将前一层隐藏状态的信息和当前输入的信息传
递到 sigmoid 函数中去。将值调整到 0~1 之间来决定要
更新哪些信息。 0 表示不重要, 1 表示重要。
2 、将前一层隐藏状态的信息和当前输入的信息传递到 tanh
函数中去,创造一个新的侯选值向量。最后将 sigmoid 的输
出值与 tanh 的输出值相乘, sigmoid 的输出值将决定
tanh 的输出值中哪些信息是重要且需要保留下来的。

输出门

功能:用来确定下一个隐藏状态的值。
步骤: 1 、将前一个隐藏状态和当前输入传递到 sigmoid
函数中,然后将新得到的细胞状态传递给 tanh 函数。
2 、将 tanh 的输出与 sigmoid 的输出相乘,以确定隐
藏状态应携带的信息。再将隐藏状态作为当前细胞的输出,
把新的细胞状态和新的隐藏状态传递到下一个时间步长中
去。

自然语言处理项目(情感分析)

项目介绍

vocab

思考:向模型中传递数据时,需要提前处理好数据
1 、目标:将评论内容转换为词向量。
2 、每个词 / 字转换为词向量长度 ( 维度 )200
3 、每一次传入的词 / 字的个数是否就是评论的长度 ?
应该是固定长度,每次传入数据与图像相似。
例如选择长度为 32 。则传入的数据为 32*200
4 、一条评论如果超过 32 个词 / 字怎么处理?
直接删除后面的内容
5 、一条评论如果没有 32 个词 / 字怎么处理?
缺少的内容,统一使用一个数字(非词 / 字的数字)替代。
6 、如果语料库中的词 / 字太多是否可以压缩?
可以,某些词 / 字出现的频率比较低,可能训练不出特征。因此可以
选择频率比较高的词来训练。例如选择 4760 个。
7 、被压缩的词 / 字如何处理?
可以统一使用一个数字(非词 / 字的数字)替代。

http://www.dtcms.com/a/393846.html

相关文章:

  • 多条件查询中的日期交互指南:从前端到后端的顺畅协作
  • 系分论文《论人工智能在网络安全态势感知系统中的分析与设计》
  • 【Kubernetes】(六)Service
  • Coze源码分析-资源库-删除工作流-后端源码-核心技术与总结
  • vue Ai 流试回答实现打字效果
  • 【架构】面向对象六大设计原则
  • ✅ 基于OpenCV与HyperLPR的车牌识别系统 PyQt5可视化 支持多种输入 深度学习毕业设计
  • 深度学习在计算机视觉中的最新进展:范式转变与前沿探索
  • 本地免费使用网页表格控件websheet
  • Spring Boot集成MQTT与单片机通信
  • 【Axios 】web异步请求
  • FreeRTOS实战指南 — 6 临界段保护
  • 关于CFS队列pick_next_task_fair选取下一个任务的分析
  • 【算法笔记】链表相关的题目
  • Netty从0到1系列之Recycler对象池技术【3】
  • 网页开发入门:CSS与JS基础及BS/CS架构解析
  • css单位换算及适配
  • Java制作双脑同步 Hemi-Sync 音频
  • webrtc弱网-ProbeBitrateEstimator类源码分析与算法原理
  • 在OpenHarmony上适配图形显示【4】——rk3568_4.0r_mesa3d适配
  • 嵌入式(3)——RTC实时时钟
  • 内核模块组成和裁剪参考表
  • 140-understanding_the_armv8.x_and_armv9.x_extensions_guide
  • 【序列晋升】40 Spring Data R2DBC 轻量异步架构下的数据访问最佳实践
  • TGRS | 视觉语言模型 | 语言感知领域泛化实现高光谱跨场景分类, 代码开源!
  • Oracle / MySQL / MariaDB / SQL Server 常用连接与基础查询(Linux操作系统上)
  • 将 Jupyter Notebook 转换为 PDF
  • torchvision 编译安装 nano
  • 华为昇腾 910 到 950 系列 NPU 深度解析
  • 设计模式---门面模式