Tensorflow使用LSTM实现中文文本分类(1)
前言
使用Tensorflow,利用LSTM进行中文文本的分类。
数据集格式如下:
‘’’
体育 马晓旭意外受伤让国奥警惕 无奈大雨格外青睐殷家军记者傅亚雨沈阳报道 来到沈阳,国奥队依然没有摆脱雨水的困扰。…
‘’’
可以看出 label:体育,接着是一个 tab,最后跟随一段文字。
目标:传入模型一段文字,预测出这段文字所属类别。
数据集下载
中文文本分类数据集下载:https://download.csdn.net/download/missyougoon/11221027
文本预处理
- 中文分词
- 词语转化为 id ,embeding
例如: 词语A 转化为 id(5)
同时,将 label 转化 id - 统计词频
代码演示
# -*- coding:utf-8 -*-import sys
import os
import jieba# 输入文件
train_file = './news_data/cnews.train.txt'
val_file = './news_data/cnews.val.txt'
test_file = './news_data/cnews.test.txt'# 分词结果
seg_train_file = './news_data/cnews.train.seg.txt'
seg_val_file = './news_data/cnews.val.seg.txt'
seg_test_file = './news_data/cnews.test.seg.txt'# 词语 和 label到id 的 映射
vocab_file = './news_data/cnews.vocab.txt'
category_file = './news_data/cnews.category.txt'#print(label)def generate_seg_file(input_file, output_seg_file):'''生成分词之后的文本数据:param input_file: 待分词的输入文件:param output_seg_file: 已经分词完毕的文本:return:'''with open(input_file, 'r') as f:lines = f.readlines()with open(output_seg_file, 'w') as f:for line in lines:label, content = line.strip('\n').split('\t')word_iter = jieba.cut(content)word_content = ''for word in word_iter:word = word.strip(' ')if word != '':word_content += word + ' 'out_line = '%s\t%s\n'%(label, word_content.strip(' ')) # 将最后一个空格删除f.write(out_line)# 对 三个 文件 进行分词
#generate_seg_file(train_file, seg_train_file)
#generate_seg_file(val_file, seg_val_file)
#generate_seg_file(test_file, seg_test_file)def generate_vocab_file(input_seg_file, output_vocab_file):''':param input_seg_file: 已经分词的文件:param output_vocab_file: 输出的词表:return:'''with open(input_seg_file, 'r') as f:lines = f.readlines()word_dict = {} # 统计 词频 信息,因为 我们只需要 关注的 是词频for line in lines:label, content = line.strip('\n').split('\t')for word in content.split(' '):word_dict.setdefault(word, 0) # 如果 没有这个 词语,就把给词语的默认值设为 0word_dict[word] += 1# dict.item() 将字典转化为列表# 详情参考:http://www.runoob.com/python/att-dictionary-items.htmlsorted_word_dict = sorted(word_dict.items(), key=lambda d:d[1], reverse=True)# 现在sorted_word_dict的格式为: [(word, frequency).....(word, frequency)]with open(output_vocab_file, 'w') as f:f.write('<UNK>\t1000000\n') # 因为不是所有词汇都有的,对于一些没有的词汇,就用 unk 来代替for item in sorted_word_dict:f.write('%s\t%d\n'%(item[0], item[1]))#generate_vocab_file(seg_train_file, vocab_file) # 从训练集中 统计 词表def generate_category_dict(input_file, category_file):with open(input_file, 'r') as f:lines = f.readlines()category_dict = {}for line in lines:label, content = line.strip('\n').split('\t')category_dict.setdefault(label, 0)category_dict[label] += 1category_number = len(category_dict)with open(category_file, 'w') as f:for category in category_dict:line = '%s\n' % category # 现在才知道,原来遍历字典,原来默认查出的是keyprint('%s\t%d' % (category, category_dict[category]))f.write(line)generate_category_dict(train_file, category_file)
数据预处理完毕,接下来进行模型的训练和测试,请参考: Tensorflow使用LSTM实现中文文本分类(二)
Tensorflow使用LSTM实现中文文本分类(1)相关推荐
- Tensorflow使用Char-CNN实现中文文本分类(1)
前言 在之前的中文文本分类中,使用了LSTM来进行模型的构建(详情参考: Tensorflow使用LSTM实现中文文本分类(2).使用numpy实现LSTM和RNN网络的前向传播过程).除了使用LST ...
- TensorFlow使用CNN实现中文文本分类
TensorFlow使用CNN实现中文文本分类 读研期间使用过TensorFlow实现过简单的CNN情感分析(分类),当然这是比较low的二分类情况,后来进行多分类情况.但之前的学习基本上都是在英文词 ...
- TensorFlow – 使用CNN进行中文文本分类
使用卷积神经网络(CNN)处理自然语言处理(NLP)中的文本分类问题.本文将结合TensorFlow代码介绍: 词嵌入 填充 Embedding 卷积层 卷积(tf.nn.conv1d) 池化(poo ...
- 使用Tensorflow训练LSTM+Attention中文标题党分类
这里用Tensorflow中LSTM+Attention模型训练一个中文标题党的分类模型,并最后用Java调用训练好的模型. 数据预处理 首先根据语料和实验数据训练词向量word2vec模型,这个有很 ...
- 【NLP】TensorFlow实现CNN用于中文文本分类
代码基于 dennybritz/cnn-text-classification-tf 及 clayandgithub/zh_cnn_text_classify 参考文章 了解用于NLP的卷积神经网络( ...
- Tensorflow使用CNN卷积神经网络以及RNN(Lstm、Gru)循环神经网络进行中文文本分类
Tensorflow使用CNN卷积神经网络以及RNN(Lstm.Gru)循环神经网络进行中文文本分类 本案例采用清华大学NLP组提供的THUCNews新闻文本分类数据集的一个子集进行训练和测试http ...
- 【NLP】BERT 模型与中文文本分类实践
简介 2018年10月11日,Google发布的论文<Pre-training of Deep Bidirectional Transformers for Language Understan ...
- 万字总结Keras深度学习中文文本分类
摘要:文章将详细讲解Keras实现经典的深度学习文本分类算法,包括LSTM.BiLSTM.BiLSTM+Attention和CNN.TextCNN. 本文分享自华为云社区<Keras深度学习中文 ...
- AI练手系列(四)—— cnews中文文本分类(RNN实现)
数据集介绍 这个数据集是由清华大学根据新浪新闻RSS订阅频道2005-2011年间的历史数据筛选过滤生成的,数据集包含50000个样本的训练集,5000个样本的验证集,10000个样本的测试集,词汇表 ...
最新文章
- 【哈利波特】Sherbert Lemon对HP的解读之六
- android分辨率px跟dp,Android屏幕适配 px,dp,dpi及density的关系与深入理解
- java 外部类和内部类_java – 外部和内部类方法之间的锁定和同...
- 简单 python 小说爬虫 ultimate
- Mac的「预览」程序如何旋转图片
- plantUML 学习
- 三读《UNIX编程艺术》——UNIX哲学
- 基于R语言的数据分析报告
- 谷歌金山词霸合作版在PDF中不能取词
- (5)Spring框架----Bean作用域
- 单链表之首尾相连,成对输出
- Elastic Stack 开源的大数据解决方案
- Simscape物理网络建模的基本原理
- layui自定义工具栏
- 文件误删秒恢复!微软又发布了一款命令行神器!
- linux内核Kmalloc - GFP_ATOMIC - GFP_KERNEL - GFP_USER
- 实现一个简陋的MVC框架
- [转载]蛋白质相互作用数据库
- [转帖]三星F488E的JAVA安装方法
- 伪原创视频模糊 视频md5值查询
热门文章
- 2018 年全年详细工作日、周末、节假日数据json
- win32 打印机任务管理的 node 模块 (3)详解Win32 Spooler API 获取打印机列表及状态
- 计算机工作室名字大全,设计工作室名字(精选300个)
- 一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下
- spring boot 2.0 官方文档 (一)
- 转不撞南墙不回头——树规总结
- 用while输出1到100的偶数python_用while语句,求1到100的偶数之和
- HTML网页设计期末课程大作业 ~中国茶文化5页面带轮播(HTML+CSS+JS)~ 学生网页设计作业源码...
- 一张图片告诉你win10各版本之间的主要区别
- 3D CV 论文调研