基于tensorflow2实现的用于文本分类的RNN(LSTM)模型

这里简单记录一下、
我学习NLP原理之后,对其用RNN模型进行一个简单的实现。

RNN模型基本结构:
1.导入训练数据库 , 得到其词语-id的映射表,然后将其转化为id-词语的映射表。
2.基于词频进行统计,构建语料表 ,并将在训练集中出现频率多的词语进行统计,构建新的词语-id的映射表。
3.根据预训练好的词向量库,根据上一步得到的词语-id的映射表构建 id-向量 的映射表。
4. 构建数据生成器,并对数据进行统一化(长的截断,短的补充)
5. 构建RNN模型,类似于CNN模型
6. 设置损失函数,优化器,然后进行训练~

这里直接贴上我关于RNN模型实现的代码:

import os
import warnings
warnings.filterwarnings("ignore")
import tensorflow as tf
import numpy as np
import pandas as pd
import zipfile
import collections
from tensorflow import keras
import matplotlib as mpl
import random
import time
import logging
from pathlib import Path
import matplotlib.pyplot as plt
%matplotlib inline

#载入数据
(train_data,train_labels),(test_data,test_labels) = tf.keras.datasets.imdb.load_data()

# 此时,读进来的数据已经是 id 映射的结果
train_data[0]

#载入词表: 词语 - id 的映射
_word_index = tf.keras.datasets.imdb.get_word_index()
word_index = {
    k:(v+3) for k, v in _word_index.items()}#把所有的id往上偏移 3

#几个特殊字符 ,必须这么做,至于为什么 不清楚
word_index['<PAD>'] = 0
word_index['START'] = 1
word_index['UNK'] = 2
#word_index['END'] = 3

# 得到 id - 词语 的映射
index2word = dict([(value, key) for key, value in word_index.items()])

# 按文本长度大小 排序
def sort_by_len(x,y):
    x, y = np.asarray(x), np.asarray(y)
    idx = sorted(range(len(x)),key =lambda i : len(x[i]))
   
    return x[idx],y[idx]

train_data,train_labels = sort_by_len(train_data,train_labels)
test_data,test_labels = sort_by_len(test_data,test_labels)


# 将 id 映射成 词语 ,构建新的 训练数据集
def write_file(f_path,xs,ys):
    with open(f_path,'w',encoding='utf-8') as f:
        for x,y in zip(xs,ys):
            f.write(str(y)+ '\t'+ ' '.join([index2word[i] for i in x][1:])+'\n')

write_file('./dataset/imdb/train.txt',train_data,train_labels)
write_file('./dataset/imdb/test.txt',test_data,test_labels)

# 构建语料表 ,基于词频进行统计
counter = collections.Counter()

with open('./dataset/imdb/train.txt',encoding='utf-8') as f:
    for line in f:
        line =line.rstrip() #   去掉以' .'或者'!'的结尾
        label,words = line.split('\t')
        words =words.split(' ')
        counter.update(words
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值