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

「日拱一码」076 深度学习——自然语言处理NLP

目录

深度学习与NLP介绍

什么是自然语言处理(NLP)?

深度学习如何赋能NLP?

核心概念:词嵌入(Word Embedding)

代码示例


深度学习与NLP介绍

什么是自然语言处理(NLP)?

自然语言处理是人工智能的一个子领域,它致力于使计算机能够理解、解释和生成人类语言。它的目标是填补人类自然语言与计算机二进制语言之间的鸿沟。

NLP的应用无处不在,例如:

  • 搜索引擎(如Google、百度)
  • 智能助手(如Siri、Alexa、小爱同学)
  • 机器翻译(如Google Translate、百度翻译)
  • 垃圾邮件过滤
  • 情感分析(分析评论的正负面情绪)
  • 文本自动摘要
  • 聊天机器人

深度学习如何赋能NLP?

在深度学习出现之前,传统的NLP方法严重依赖手工制作的特征和规则,处理过程繁琐且难以覆盖语言的复杂性。

深度学习,特别是循环神经网络(RNN)长短期记忆网络(LSTM)门控循环单元(GRU) 以及革命性的Transformer架构,彻底改变了NLP领域。它们能够:

  1. 自动学习特征:无需人工设计特征,模型能从海量文本数据中自动学习词汇、语法和语义的分布式表示(即词向量)。
  2. 处理序列数据:RNN、LSTM等架构专为处理文本这类序列数据而设计,能考虑上下文信息。
  3. 实现卓越性能:基于Transformer的模型(如BERT, GPT)在几乎所有NLP任务上都取得了前所未有的 state-of-the-art (SOTA) 性能。

核心概念:词嵌入(Word Embedding)

这是深度学习NLP的基石。它将词汇从高维稀疏的one-hot表示,映射到低维稠密的向量空间中。在这个空间中,语义相近的词,其向量在空间中的位置也更接近。例如,“国王”和“女王”的向量距离,会远小于“国王”和“苹果”的向量距离。

代码示例

我们使用一个非常流行的深度学习库 Keras 和一个经典数据集 IMDb电影评论数据集(包含5万条标注了正面/负面情感的评论)来构建一个简单的情感分析模型。

任务:训练一个模型,使其能够判断一条电影评论是正面的还是负面的。

# 导入必要的库
import tensorflow as tf
from tensorflow.keras.datasets import imdb
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, SimpleRNN, Dense
from tensorflow.keras.preprocessing import sequence# 加载数据
# num_words=10000 表示只保留数据集中最常出现的10,000个单词
(top_train_data, top_train_labels), (top_test_data, top_test_labels) = imdb.load_data(num_words=10000)# 数据预处理(标准化序列长度)
# 每条评论的单词数量不同,我们需要将其统一长度。
# maxlen=500 表示超过500词的评论会被截断,不足500词的会用0填充。
max_review_length = 500
X_train = sequence.pad_sequences(top_train_data, maxlen=max_review_length)
X_test = sequence.pad_sequences(top_test_data, maxlen=max_review_length)
y_train = top_train_labels
y_test = top_test_labels# 构建模型
model = Sequential()
# 添加嵌入层:将10,000个词的索引映射为32维的向量
model.add(Embedding(input_dim=10000, output_dim=32, input_length=max_review_length))
# 添加一个简单的RNN层,带有32个神经元
model.add(SimpleRNN(32))
# 添加全连接层(Dense Layer)用于输出,使用sigmoid激活函数进行二分类(正面/负面)
model.add(Dense(1, activation='sigmoid'))# 打印模型结构
model.summary()# 编译模型
# 配置优化器、损失函数和评估指标
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])# 训练模型
# 将训练数据分为训练集和验证集,训练5个轮次
history = model.fit(X_train, y_train,epochs=5,batch_size=128,validation_split=0.2) # 20%的数据用作验证# 评估模型
# 在测试集上评估最终性能
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f'\n测试集准确率: {test_acc:.4f}')  # 0.7821# 进行预测
# 假设我们有一条新评论,需要将其转换为模型可接受的格式(这里用训练数据中的一条代替演示)
sample_review = X_test[0:1] # 取测试集第一条数据
prediction = model.predict(sample_review)
print(f"\n预测结果(值越接近1表示越正面,越接近0表示越负面): {prediction[0]}")  # [0.45097703]
if prediction[0] > 0.5:print("这是一条正面评论!")
else:print("这是一条负面评论!")  # 这是一条负面评论!
http://www.xdnf.cn/news/19410.html

相关文章:

  • SOME/IP-SD中IPv4端点选项与IPv4 SD端点选项
  • Coze源码分析-工作空间-资源库-前端源码
  • 掌握正则表达式与文本处理:提升 Shell 编程效率的关键技巧
  • FFmpeg 不同编码的压缩命令详解
  • 【扩充位数三位变五位】2022-10-30
  • mysql导出csv中字段里有换行符的处理办法及hive导出处理办法
  • 【php反序列化字符串逃逸】
  • Go 面试题: new 和 make 是什么,差异在哪?
  • ADSL 代理 Proxy API 申请与使用指南
  • NLP技术突破:浅层与深层语义分析全解析
  • test隐藏能力
  • 5-ATSAM3X8-定时器
  • 架构选型:为何用对象存储替代HDFS构建现代数据湖
  • 腾讯混元翻译大模型Hunyuan-MT-7B:重塑跨语言沟通的技术革命
  • 定时器设计之->分级时间轮
  • 基于SpringBoot的二手交易平台【2026最新】
  • 2025我“生发”了『折行』|『内注』|『终端正偿』|『中文负偿』四大“邪术”(前二造福python代码阅读者;后二助力所有艺术人)
  • Kali自带的录屏工具:recordmydesktop
  • 基于单片机电动车充电桩/充电车棚环境监测设计
  • 如何将照片从电脑传输到安卓设备
  • vscode翻译插件
  • Kafka 架构原理
  • 【大模型】大模型微调-RLHF(强化学习)
  • Certificate is Signed Using a Weak Signature Algorithm漏洞解决
  • Uniapp 图片前端上传功能实现与详解
  • JVM:内存区域划分、类加载的过程、垃圾回收机制
  • 【Spring Cloud微服务】8.深度实战:微服务稳定性的守护神——Sentinel
  • 项目升级--mysql主从复制和读写分离
  • 统计学的“尝汤原理”:用生活案例彻底理解中心极限定理
  • 9.1C++——类中特殊的成员函数