tensorflow2.0 基于LSTM和GRU的中文文本分类

该博客介绍了如何在TensorFlow2.0中使用LSTM和GRU进行中文文本分类,基于ChnSentiCorp_htl_all.csv数据集,涉及中文切词、词向量矩阵生成等步骤。文中还分享了GRU模型的训练代码,指出若要切换到LSTM只需简单修改模型层。
摘要由CSDN通过智能技术生成

tensorflow2.0 基于LSTM和GRU的中文文本分类)

前言

 在英文文本分类(见https://blog.csdn.net/ziyi9663/article/details/106997930)的基础上,添加了中文切词、编码、生成词向量矩阵的操作。

备注

  1. 基于中文酒店评论分类,分正负面评论两类,数据ChnSentiCorp_htl_all.csv,来自https://blog.csdn.net/alip39/article/details/95891321
  2. 使用预训练的词向量sgns.sogou.char

前置工作

先生成几个重要的变量,这几个变量计算时间挺长,计算之后保存在本地

"""
word_embeddings: 词—词向量,预下载并处理
word_index:      词—词编码,手动生成,按出现次数由多到少,从1开始编码,出现最多的词编码为1,以此类推
embedding_matrix:词向量矩阵,一行表示一个词的向量,行的顺序与词编码表的编码对应
"""

Coding!

import jieba
import pickle
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import Sequential, layers, losses, optimizers

TOTAL_WORDS = 20000
EMBEDDING_LEN = 300

data = pd.read_csv('ChnSentiCorp_htl_all.csv')
data = data.dropna(axis=0,how='any')
x = np.expand_dims(data['review'].to_list(),axis=1)

def get_word_embeddings():
    """
    对下载好的词-词向量做个处理,原格式是一行一行的,每一行一个词,空格,再是词向量
    :return: 字典,例:{
   '中国':词向量}
    """
    word_embeddings = {
   }
    with open('sgns.sogou.char',encoding='utf-8') as f:
        lines = f.readlines()
        for _,line in enumerate(lines):
            # 不要第一行,第一行是词向量表的统计信息
            if _ != 0:
                values = line.split()
                # 每一行的数据按空格分开,就变成了词和词向量
                word = values[0]
                # 取词
                coefs = np.asarray(values[1:], dtype='float32')
                # 取词向量。参与计算的tensor一般float32即可满足计算精度,有需求可以自己调节
                word_embeddings[word] = coefs
    return word_embeddings


stopwords = [line.strip() for line in open('cn_stopwords.txt',encoding='utf-8').readlines()]
def remove_stopwords(str):
    """
    去除停用词
    :param str: jieba.lcut切词后返回的列表
    :return: 在输入的列表中剔除停用词
    """
    sen = [i for i in str if i not in stopwords]
    return sen

def get_word_index():
    ""
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值