放大招:NLP-探索深度学习在自然语言处理中的应用:构建标题生成器

引言

在深度学习的领域中,自然语言处理(NLP)是一个令人兴奋且快速发展的分支。它使得机器能够理解、解释和生成人类语言。在本博客中,我们将通过构建一个简单的标题生成器来探索NLP的基础知识,了解如何使用深度学习模型处理序列数据。

序列数据与自然语言

与图像数据不同,语言数据是序列化的,这意味着单词的顺序对于理解整个句子的意图至关重要。处理这类数据时,我们通常需要使用专门的模型,如循环神经网络(RNN)。

目标

通过本节的学习,您将能够:

  • 准备循环神经网络(RNN)使用的序列数据。
  • 构建和训练模型以执行单词预测任务。

标题生成器的构建

我们将构建一个模型,它可以根据一些起始单词预测出一个完整的标题。这个模型将使用《纽约时报》的文章标题作为训练数据。

读入和清洗数据

首先,我们需要从CSV文件中读取数据,并将它们存储在一个列表中。同时,我们需要清洗数据,过滤掉任何标记为“未知”的标题。

import os
import pandas as pdnyt_dir = 'data/nyt_dataset/articles/'
all_headlines = []
for filename in os.listdir(nyt_dir):if 'Articles' in filename:headlines_df = pd.read_csv(nyt_dir + filename)all_headlines.extend(list(headlines_df.headline.values))# 清洗数据,移除 'Unknown'
all_headlines = [h for h in all_headlines if h != 'Unknown']

分词和创建序列

接下来,我们使用Keras的Tokenizer将文本数据转换为数字序列。分词是将文本转换为模型可以理解的数字表示的过程。

from tensorflow.keras.preprocessing.text import Tokenizertokenizer = Tokenizer()
tokenizer.fit_on_texts(all_headlines)
total_words = len(tokenizer.word_index) + 1# 创建序列
input_sequences = []
for line in all_headlines:token_list = tokenizer.texts_to_sequences([line])[0]for i in range(1, len(token_list)):partial_sequence = token_list[:i+1]input_sequences.append(partial_sequence)

填充序列

由于序列长度不一致,我们需要使用pad_sequences来填充序列,使它们长度一致。

from tensorflow.keras.preprocessing.sequence import pad_sequencesmax_sequence_len = max([len(x) for x in input_sequences])
input_sequences = np.array(pad_sequences(input_sequences, maxlen=max_sequence_len, padding='pre'))

创建预测器和目标

我们将序列分为预测器(predictors)和目标(labels)。预测器是序列中除了最后一个词以外的所有词,而目标则是序列的最后一个词。

predictors = input_sequences[:, :-1]
labels = input_sequences[:, -1]# 将标签转换为独热编码
from tensorflow.keras import utils
labels = utils.to_categorical(labels, num_classes=total_words)

构建模型

我们构建一个包含嵌入层、长短期记忆层(LSTM)和输出层的模型。

from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout
from tensorflow.keras.models import Sequentialinput_len = max_sequence_len - 1 
model = Sequential()
model.add(Embedding(total_words, 10, input_length=input_len))
model.add(LSTM(100))
model.add(Dropout(0.1))
model.add(Dense(total_words, activation='softmax'))

编译和训练模型

我们使用Adam优化器和多分类交叉熵作为损失函数来编译模型。

model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(predictors, labels, epochs=30, verbose=1)

进行预测

最后,我们可以使用训练好的模型来预测新标题。

def predict_next_token(seed_text):token_list = tokenizer.texts_to_sequences([seed_text])[0]token_list = pad_sequences([token_list], maxlen=max_sequence_len-1, padding='pre')prediction = model.predict_classes(token_list, verbose=0)return prediction# 生成新标题
def generate_headline(seed_text, next_words=1):for _ in range(next_words):prediction = predict_next_token(seed_text)next_word = tokenizer.sequences_to_texts([prediction])[0]seed_text += " " + next_wordreturn seed_text.title()seed_texts = ['washington dc is','today in new york','the school district has','crime has become'
]for seed in seed_texts:print(generate_headline(seed, next_words=5))

结语

通过本博客,我们探索了如何使用深度学习处理自然语言数据,并构建了一个简单的标题生成器。这个模型使用了RNN,特别是LSTM层,来处理序列数据。虽然我们的例子相对简单,但它展示了深度学习在NLP领域的潜力。随着模型的进一步训练和优化,它将能够生成更加复杂和语义上有意义的标题。


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

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

相关文章

【学习笔记】人群归因分数 PAF 以及combined PAF(更新)

在此推荐2篇发表在lancet以及jama子刊上的paf文章,这两篇文章套路是一样的,只是在不同国家进行。 在计算combined PAF或者说weighted PAF的时候,先建立了相关矩阵,再做主成分分析,得到communality。详细信息大家可翻阅…

【Pytest官方文档翻译及学习】1.1 安装和入门

目录 1.1 安装和入门 1.1.1 安装pytest 1.1.2 创建第一个测试 1.1.3 运行多个测试 1.1.4 断言引发了某个异常 1.1.5 将多个测试分组在一个类中 1.1.6 请求功能测试的唯一临时目录 1.1.7 继续阅读 Pytest是一个成熟的全功能的Python测试框架,它可以满足大多数…

huffman编码【python】【算法】

哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。该方法完全依据字符出现概率来构造整体平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(…

MFC/QT利用COM组件接口从字体名称、粗体、斜体获取到字体文件路径的方法

MFC/QT利用COM组件接口从字体名称、粗体、斜体获取到字体文件路径的方法 这个是目前唯一能准确从字体名称加粗斜体三个属性定位到ttf/ttc字体路径的方法,其他的方式是没有办法区分后两个属性而且会出现不准确的问题 之前无意间在MSDN找到的资料: IDWr…

el-calendar自定义日程,显示文字内容,el-date-picker和el-calendar互动互联

Vue实现 el-calendar自定义日程,显示文字内容,el-date-picker和el-calendar互动互联 效果展示 首先el-calendar需要自定义日程内容的话,其格式一般必须满足如下结构 dataList = [{date: 2024-05-08, content: "数学模拟试卷(3)"},{date: 2024-05-08, content: …

【STM32 |程序实例】按键控制、光敏传感器控制蜂鸣器

目录 前言 按键控制LED 光敏传感器控制蜂鸣器 前言 上拉输入:若GPIO引脚配置为上拉输入模式,在默认情况下(GPIO引脚无输入),读取的GPIO引脚数据为1,即高电平。 下拉输入:若GPIO引脚配置为下…

C语言(指针)6

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…

深度学习之神经网络理论基础

深度学习之神经网络理论基础 人工神经元 人工神经元:人类神经元中抽象出来的数学模型 MP模型 mp模型:1943年心理学家W.S.McCulloch和数理逻辑学家W.Pitts研究出人工神经元,称为M-P模型。 M-P神经元(一个用来模拟生物行为的数学模…

.NET开源、功能强大、跨平台的图表库LiveChart2

LiveCharts2 是 从LiveCharts演变而来,它修复了其前身的主要设计问题,它专注于在任何地方运行,提高了灵活性,并继承LiveCharts原有功能。 极其灵活的数据展示图库 (效果图) 开始使用 Live charts 是 .Net 的跨平台图表库,请访问 https://livecharts.dev 并查看目标平…

React 基础案例

React的特点&#xff1a; 1、声明式编程 2、组件化开发 3、多平台适配yuan 原生实现&#xff1a; <h2 class"title"></h2><button class"btn">改变文本</button><script>let msg "Hello World";const titleEl d…

P6397 [COI2008] GLASNICI

题目描述 一条直线上有 &#x1d45b; 个信使&#xff0c;将他们按照从左至右的顺序以 1 至 &#x1d45b; 编号。换句话说&#xff0c;设 &#x1d456; 号信使的的坐标为 &#x1d451;&#x1d456;​&#xff0c;则对于 1≤&#x1d456;<&#x1d45b;&#xff0c; &am…

TCP协议建立连接的过程及其意义

目录 三次握手 四次挥手 三次握手的意义 在客户端与服务器传输数据之前&#xff0c;要在两台主机之间先建立连接&#xff0c;然后再传输业务数据。三次握手&#xff0c;就是建立连接的过程&#xff0c;是在传输业务之前&#xff0c;就要先进行。握手好了&#xff0c;才能进行…

【新手入门】Github与Git使用教程

Github与Git 一、Github基础教程 1.1 基本操作 点击代码文件可以直接查看文件的内容&#xff0c;支持在线修改文件&#xff0c;只需要点击(文件内容)右上角的编辑按钮即可进行编辑。 README.md一般介绍项目的功能&#xff0c;用法&#xff0c;注意事项&#xff1b;有时还有…

LeetCode //C - 93. Restore IP Addresses

93. Restore IP Addresses A valid IP address consists of exactly four integers separated by single dots. Each integer is between 0 and 255 (inclusive) and cannot have leading zeros. For example, “0.1.2.201” and “192.168.1.1” are valid IP addresses, bu…

虚拟机有线已连接但无法上网—·可能性之一

背景 VMware虚拟机&#xff0c;搭建了三台Linux服务器&#xff0c;组成Hadoop集群&#xff0c;由于在Hadoop102上有一些经常与Mysql数据库交互的任务&#xff0c;需要经常打开运行&#xff0c;而Hadoop103和104则经常处于关闭状态&#xff0c;一段时间后再次启动集群时候&…

ES6 笔记03

01 回调地狱 回调地狱: 回调函数嵌套回调函数 嵌套过深导致维护不方便 02 promise语法的基本使用 promise语法的基本使用: 1.new Promise 对象 并接收新对象 2.在构造函数里面传入回调函数 3.回调函数里面有两个形参: resolve reject resolve 表示积极状态 reject 表示消极状…

Springboot整合 Spring Cloud Gateway

1.Gateway介绍 1.是spring cloud官方推出的响应式的API网关框架&#xff0c;旨在为微服务架构提供一种简单有效的API路由的管理方式&#xff0c;并基于Filter的方式提供网关的基本功能&#xff0c;例如&#xff1a;安全认证&#xff0c;监控&#xff0c;限流等等。 2.功能特征…

【逆天OP懒狗的JAVA自学笔记--5.判断和循环】第二阶段始篇

文章目录 前言一、流程控制语句1.顺序结构&#xff08;最简单&#xff09;2.分支结构2.1 if 语句2.1.1 if语句的三种格式2.1.2 if 的注意事项 2.2 switch 语句2.2.1switch 的扩展知识 3.循环结构3.1 for 循环 扩展小点&#xff1a;//1.求和的变量不能定义在循环的里面&#xff…

php全局变量

PHP 全局变量 PHP中预定义了几个超级全局变量&#xff08;superglobals&#xff09; &#xff0c;这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明&#xff0c;就可以在函数及类中使用。 PHP 超级全局变量列表: $GLOBALS$_SERVER$_REQUEST$_POST$_GET$_FILE…

解决finalshell无法连接,一直提示登陆密码

问题描述 在使用FinalShell连接配置虚拟机时&#xff0c;无法正常连接&#xff0c;一直提示输入登录密码&#xff0c;即使输入的密码是正确的。 切换到root 模式,输入密码 su root 此时需要输入root账户的密码&#xff0c;但是我们又不知道root的密码&#xff0c;怎么办&…