RNN/LSTM (二) 实践案例
admin
2024-03-06 10:01:10
0

文章目录

  • 介绍
  • 主要步骤
  • 踩坑
    • module ‘torchtext.data‘ has no attribute ‘Field
    • 缺少spacy语言模型en_core_web_sm
    • 相关教程
  • 其它RNN案例

介绍

本文参考swarnabha/pytorch-text-classification-torchtext-lstm,讲解一个用LSTM训练kaggle数据集的案例。该项目使用torchtext的API构建数据集,而torchtext又使用了spacy库为句子分词。本文会先讲解项目架构,并附上运行代码时可能遇到的踩坑讲解。

主要步骤

粗略通读项目架构如下:

第一步,使用scikit-learn的工具方法切分pandas dataframe形式的数据集

# split data into train and validation
train_df, valid_df = train_test_split(train)
print(train_df.head())
print(valid_df.head())

第二步,设置tokenize策略

TEXT = data.Field(tokenize = 'spacy', include_lengths = True)
LABEL = data.LabelField(dtype = torch.float)

利用Field,将Pandas dataframe包装成torchtext dataset

fields = [('text',TEXT), ('label',LABEL)]
train_ds, val_ds = DataFrameDataset.splits(fields, train_df=train_df, val_df=valid_df)

第三步,构建词库,对单词作one-hot编码。

TEXT.build_vocab(train_ds,max_size = MAX_VOCAB_SIZE,vectors = 'glove.6B.200d',unk_init = torch.Tensor.zero_)LABEL.build_vocab(train_ds)

第四步,切分数据集

train_iterator, valid_iterator = data.BucketIterator.splits((train_ds, val_ds),batch_size = BATCH_SIZE,sort_within_batch = True,device = device)

最后,循环读取批次,将embedding送入lstm网络。

for epoch in range(num_epochs):train_loss, train_acc = train(model, train_iterator)

踩坑

module ‘torchtext.data‘ has no attribute ‘Field

由于版本兼容性问题,运行代码可能遇到错误AttributeError: module ‘torchtext.data‘ has no attribute ‘Field‘,也可以参考attributeerror-module-torchtext-data-has-no-attribute-field。使用torchtext 0.10(可能会安装旧版的pytorch,所以用conda开个新环境,凑合着用吧),然后from torchtext import data改成from torchtext.legacy import data

阅读torchtext的版本更新与api变迁可以得知APi变迁。

  • 在0.8版本以前,是from torchtext import data
  • 在0.9到0.12版本之间,是from torchtext.legacy import data
  • 在0.12版本之后,该data库已经删除,如果坚持要用,需要参考新版API教程。

总之,要复用教程的API,最好用torchtext 0.9或0.10。pytorch-sentiment-analysis列出了一些基于该版本API的教程,可以参考它的第一个教程运行下。

缺少spacy语言模型en_core_web_sm

如果运行遇到以下问题,说明需要下载spacy语言模型en_core_web_sm并安装。

Can’t find model ‘en_core_web_sm’. It doesn’t seem to be a Python package or a valid path to a data directory.

这是因为自然语言处理类库spacy需要加载语言模型en_core_web_sm。尽管官方教程 Quickstart会建议你运行以下命令:

python -m spacy download en_core_web_sm

但是因为无法连接外网的缘故,这条命令大概率会连接失败(你可以开启代理再尝试,但笔者并没成功)。

所以我参考NLP Spacy中en_core_web_sm安装问题,及最新版下载地址,做法如下:

  1. 到github的release界面搜索"en_core_web_sm",找最新版的压缩包下载
  2. pip install 安装这个压缩包。

笔者下载的是3.4.1版本。如果下载2.5.2,可能会出现cannot read config之类的错误。笔者不知道怎么解决。

相关教程

  • 为了更好理解torchtext0.9~0.12版本下的torchtext.legacy.data包,可以学习bentrevett/pytorch-sentiment-analysis的教程1,其中有提到了Field是如何帮助构建vocab的,并在这期间对句子的单词作清洗工作(为了减少要训练的embedding的数,保留最高频率的单词)。
  • 文章使用的是自定义的torchtext Dataset,如果想了解自定义pytorch Dataset的用法,可学习pytorch dataset

其它RNN案例

在网络上可以看到不少用RNN搭建的模型:

  • pytorch官方的教程,SEQUENCE MODELS AND LONG SHORT-TERM MEMORY NETWORKS 的模型代码很清晰,架构完整,但是缺乏训练数据集training_data变量的数据很匮乏),所以只能个人理解。
  • towardsdatascience的教程,lstm-text-classification-using-pytorch,其训练集存在kaggle链接

相关内容

热门资讯

手机系统安卓和ios系统下载地... 你有没有发现,现在手机的世界里,安卓和iOS两大系统就像是一对双胞胎,各有各的特色,让人爱不释手。今...
安卓系统最早开发公司,从安卓起... 你有没有想过,我们每天离不开的安卓系统,它究竟是由哪家公司最早开发的呢?没错,就是谷歌(Google...
安卓系统平板推荐学生用,学生适... 作为一名热爱学习的学生,你是不是也在寻找一款既实用又好用的平板电脑呢?平板电脑在学习和生活中可是个得...
安卓5.0系统多大容量,存储容... 你有没有想过,你的安卓手机里那个神秘的安卓5.0系统到底有多大容量呢?别急,今天就来给你揭秘这个谜团...
芒果嗨是安卓系统吗,揭秘这款热... 你有没有听说过“芒果嗨”这个名字?最近,这个名词在手机圈里可是火得一塌糊涂。不过,别急,今天咱们就来...
安卓系统锁屏如何破,破解攻略全... 你是不是也遇到了安卓手机锁屏的烦恼?每次解锁都要输入复杂的密码或者滑动图案,有时候真是急得团团转。别...
安卓系统app开机自启,深度解... 你有没有发现,每次手机开机,那些APP就像一群调皮的小精灵,迫不及待地跳出来和你打招呼?没错,说的就...
安卓系统拨号连接在哪,拨号连接... 你是不是也和我一样,有时候在使用安卓手机时,突然想连接一下网络,却发现不知道怎么操作?别急,今天就来...
安卓系统为什么会赢,技术革新与... 你有没有想过,为什么安卓系统在智能手机市场上如此火爆,几乎成了“手机必备”的存在呢?今天,就让我带你...
电脑可以做安卓系统么,电脑上运... 你有没有想过,电脑能不能装上安卓系统呢?这听起来是不是有点像科幻电影里的情节?别急,让我带你一探究竟...
国产安卓系统碎片化软件,软件生... 你有没有发现,现在手机上的安卓系统越来越丰富多样了?没错,这就是我们今天要聊的话题——国产安卓系统的...
安卓系统的蚂蚁花呗,蚂蚁花呗在... 你知道吗?在安卓系统的世界里,有一个超级方便的支付工具,那就是蚂蚁花呗。它就像你的贴心小助手,让你在...
安卓2系统彩蛋在哪找,揭秘隐藏... 你有没有发现,安卓2系统里竟然隐藏着一些神秘的彩蛋?没错,就是那些让你忍不住想要一探究竟的小惊喜。今...
全球最大的安卓系统,全球最大移... 你知道吗?在智能手机的世界里,有一个系统可是当之无愧的“王者”——那就是安卓系统!它就像一位全能的魔...
安卓系统就没有碎片了,迈向无缝... 你知道吗?最近在科技圈里,安卓系统可是掀起了一阵不小的波澜呢!有人说,安卓系统再也没有碎片化了?这可...
安卓系统平板电脑评测,安卓平板... 你有没有想过,在这个信息爆炸的时代,拥有一台性能卓越的安卓系统平板电脑,简直就是移动办公和娱乐的完美...
双系统安卓自动关机,双系统安卓... 你有没有遇到过这样的情况:手机里装了双系统安卓,一边是工作用的,一边是娱乐用的,结果有时候不小心,手...
圣地安列斯安卓9系统,圣地安列... 亲爱的读者,你是否也像我一样,对科技新动态充满好奇?今天,我要和你分享一个超级有趣的话题——圣地安列...
平果有安卓系统的吗,畅享智能生... 你有没有想过,手机的世界里,竟然还有这样一个有趣的现象?那就是——平果手机,竟然也有安卓系统!是不是...
vivoy27安卓系统下载,畅... 你有没有听说最近Vivo Y27这款手机的新鲜事儿?没错,就是它的安卓系统下载!今天,我就要给你来个...