NLP理论实践-Task1 数据集探索

1、数据集

数据集:中、英文数据集各一份
中文数据集:THUCNews
THUCNews数据子集:https://pan.baidu.com/s/1hugrfRu 密码:qfud
英文数据集:IMDB数据集 Sentiment Analysis

2、IMDB数据集下载和探索

参考TensorFlow官方教程: 影评文本分类 | TensorFlow

科赛 - Kesci.com

2.1下载IMDB数据集

TensorFlow 中包含 IMDB 数据集。我们已对该数据集进行了预处理,将影评(字词序列)转换为整数序列,其中每个整数表示字典中的一个特定字词。

以下代码会将 IMDB 数据集下载到您的计算机上(如果您已下载该数据集,则会使用缓存副本):

imdb = keras.datasets.imdb

(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)

index转成文本

下面代码是将处理后的数据集依据index重新转换为文本(原来是一对数字数组,这一步可以参照词汇表转化成文本单词)

word_index = imdb.get_word_index()

word_index = {k:(v+3) for k,v in word_index.items()}
word_index["<PAD>"] = 0
word_index["<START>"] = 1
word_index["<UNK>"] = 2  # unknown
word_index["<UNUSED>"] = 3

reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])

def decode_review(text):
    return ' '.join([reverse_word_index.get(i, '?') for i in text])

看下get_word_index方法

def get_word_index(path='imdb_word_index.json'):
  origin_folder = 'https://storage.googleapis.com/tensorflow/tf-keras-datasets/'
  path = get_file(
      path,
      origin=origin_folder + 'imdb_word_index.json',
      file_hash='bfafd718b763782e994055a2d397834f')
  with open(path) as f:
    return json.load(f)

主要是通过imdb_word_index.json这个词汇表文件中单词对应的index,通过上面的decode_review方法来实现index重新转换为文本。

3、THUCNews数据集下载和探索

参考博客中的数据集部分和预处理部分:
CNN字符级中文文本分类-基于TensorFlow实现 - 一蓑烟雨 - CSDN博客
参考代码

本文采用了清华NLP组提供的THUCNews新闻文本分类数据集的一个子集(原始的数据集大约74万篇文档,训练起来需要花较长的时间)。数据集请自行到THUCTC:一个高效的中文文本分类工具包下载,请遵循数据提供方的开源协议。

本次训练使用了其中的10个分类,每个分类6500条,总共65000条新闻数据。

类别如下:

体育, 财经, 房产, 家居, 教育, 科技, 时尚, 时政, 游戏, 娱乐

数据集划分如下:

训练集: 5000* 10
验证集: 500* 10
测试集: 1000*10
从原数据集生成子集的过程请参看helper下的两个脚本。其中,copy_data.sh用于从每个分类拷贝6500个文件,cnews_group.py用于将多个文件整合到一个文件中。执行该文件后,得到三个数据文件:

cnews.train.txt: 训练集(50000条)
cnews.val.txt: 验证集(5000条)
cnews.test.txt: 测试集(10000条)

预处理

data/cnews_loader.py为数据的预处理文件。

read_file(): 读取文件数据;
build_vocab(): 构建词汇表,使用字符级的表示,这一函数会将词汇表存储下来,避免每一次重复处理;
read_vocab(): 读取上一步存储的词汇表,转换为{词:id}表示;
read_category(): 将分类目录固定,转换为{类别: id}表示;
to_words(): 将一条由id表示的数据重新转换为文字;
preocess_file(): 将数据集从文字转换为固定长度的id序列表示;
batch_iter(): 为神经网络的训练准备经过shuffle的批次的数据。

CNN卷积神经网络

配置项

CNN可配置的参数如下所示,在cnn_model.py中。

class TCNNConfig(object):
“”“CNN配置参数”""


    embedding_dim = 64      # 词向量维度
    seq_length = 600        # 序列长度
    num_classes = 10        # 类别数
    num_filters = 128        # 卷积核数目
    kernel_size = 5         # 卷积核尺寸
    vocab_size = 5000       # 词汇表达小

    hidden_dim = 128        # 全连接层神经元

    dropout_keep_prob = 0.5 # dropout保留比例
    learning_rate = 1e-3    # 学习率

    batch_size = 64         # 每批训练大小
    num_epochs = 10         # 总迭代轮次

    print_per_batch = 100    # 每多少轮输出一次结果
    save_per_batch = 10      # 每多少轮存入tensorboard

训练与验证

运行 python run_cnn.py train可以开始训练。

若之前进行过训练,请把tensorboard/textcnn删除,避免TensorBoard多次训练结果重叠。

测试

运行python run_cnn.py test 在测试集上进行测试。

Testing...
Test Loss:   0.13, Test Acc:  96.07%
Precision, Recall and F1-Score...
              precision    recall  f1-score   support

          体育       0.99      0.99      0.99      1000
          财经       0.94      0.99      0.97      1000
          房产       1.00      1.00      1.00      1000
          家居       0.99      0.87      0.93      1000
          教育       0.89      0.95      0.92      1000
          科技       0.92      0.99      0.95      1000
          时尚       0.96      0.97      0.96      1000
          时政       0.97      0.90      0.93      1000
          游戏       0.98      0.97      0.98      1000
          娱乐       0.97      0.98      0.97      1000

    accuracy                           0.96     10000
   macro avg       0.96      0.96      0.96     10000
weighted avg       0.96      0.96      0.96     10000

Confusion Matrix...
[[994   0   0   0   4   2   0   0   0   0]
 [  0 990   0   0   4   2   0   4   0   0]
 [  0   0 996   0   2   2   0   0   0   0]
 [  1  25   0 870  27  27  23  21   1   5]
 [  1   5   0   2 954  18   6   4   6   4]
 [  0   1   0   0   6 987   2   0   4   0]
 [  2   2   0   2  14   3 967   0   1   9]
 [  0  22   0   3  49  19   0 900   3   4]
 [  1   2   0   0  10   2   7   0 972   6]
 [  1   1   0   3   6   6   3   1   2 977]]
Time usage: 0:00:20

4、学习召回率、准确率、ROC曲线、AUC、PR曲线这些基本概念

参考1:机器学习之类别不平衡问题 (2) —— ROC和PR曲线_慕课手记

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值