自然语言处理-自学笔记-05 用CNN进行句子分类

本文介绍了如何利用CNN进行句子分类,包括数据转化(如单词向量化)、卷积操作以及随时间池化的步骤,并提供了代码实现。
摘要由CSDN通过智能技术生成

自然语言处理-自学笔记-05 用CNN进行句子分类

用CNN进行句子分类

在自然语言处理领域,一种有效使用CNN的应用是句子分类。
句子分类是指将给定句子划分为某一类别。使用CNN进行句子分类与图片分类有所不同,卷积和池化操作要在一个维度而不是两个维度进行。

数据转化

现在有一个句子库,句子由单词构成,第一步就是对句子进行向量化。先令句子的个数用b表示,最长句子的单词数用n表示,单词总个数用k表示。
例如有如下三句话:

  • Bob and Mary are friends.
  • Bob plays soccer.
  • Mary likes to sing in the choir.

一共有三个句子,因此b=3,第三个句子单词最多,因此n=7,一共有13个不同的单词,因此k=13。单词可以用独热编码表示,也可以使用skip-gram、CBOW或GloVe学习的Word2vec词向量。

卷积操作

如果每次只处理一个句子,那么数据就是一个 n ∗ k n*k nk的矩阵。现在将卷积权重矩阵定义为大小为 m ∗ k m*k mk,其中m为一维卷积运算的卷积核大小。通过将大小为 n ∗ k n*k nk的输入与大小为 m ∗ k m*k mk的权重矩阵进行卷积,将产生大小为 1 ∗ n 1*n 1n的输出。
为了学习一组丰富的特征,使用具有不同卷积核大小的并行卷积层。每个卷积层输出一个大小为 1 ∗ n 1*n 1n的隐藏向量,形成一个大小 q ∗ n q*n qn的下一层输入。

随时间池化

随时间池化操作通过把每个卷积层的最大元素连接起来而创建向量。

代码实现

from __future__ import print_function
import collections
import math
import numpy as np
import os
import random
import tensorflow as tf
import zipfile
from matplotlib import pylab
from six.moves import range
from six.moves.urllib.request import urlretrieve
import tensorflow as tf

url = 'https://cogcomp.org/Data/QA/QC/'
dir_name = 'question-classif-data'

def maybe_download(dir_name, filename, expected_bytes):
  dir = os.path.join(dir_name, filename)
  print(dir)
  """Download a file if not present, and make sure it's the right size."""
  if not os.path.exists(dir_name):
        os.mkdir(dir_name)
  if not os.path.exists(os.path.join(dir_name, filename)):
    filename, _ = urlretrieve(url + filename, os.path.join(dir_name, filename))
  print(os.path.join(dir_name, filename))
  statinfo = os.stat(dir)
  if statinfo.st_size == expected_bytes:
    print('Found and verified %s' % os.path.join(dir_name, filename))
  else:
    print(statinfo.st_size)
    raise Exception(
      'Failed to verify ' + os.path.join(dir_name,filename) + '. Can you get to it with a browser?')
  return filename

filename = maybe_download(dir_name, 'train_1000.label', 60774)
test_filename = maybe_download(dir_name, 'TREC_10.label',23354)

# Check the existence of files
filenames = ['train_1000.label','TREC_10.label'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值