精华内容
下载资源
问答
  • 通常,图像处理任务是借助CNN来完成,其特有卷积、池化结构能够提取图像中各种不同程度纹理、结构,并最终结合全连接网络实现信息的汇总和输出。RNN由于其记忆功能为处理NLP中上下文提供了途径。 在短文...

    深度学习近一段时间以来在图像处理和NLP任务上都取得了不俗的成绩。通常,图像处理的任务是借助CNN来完成的,其特有的卷积、池化结构能够提取图像中各种不同程度的纹理、结构,并最终结合全连接网络实现信息的汇总和输出。RNN由于其记忆功能为处理NLP中的上下文提供了途径。

    在短文本分析任务中,由于句子句长长度有限、结构紧凑、能够独立表达意思,使得CNN在处理这一类问题上成为可能。论文Convolutional Neural Networks for Sentence Classification(论文作者Yoon Kim)即在这一类问题上做了尝试。首先来看看论文中介绍的模型结构及原理:

    CNN模型结构如下:

     

    一共包括4部分:

    1、  输入层:

     

    如图所示,输入层是句子中的词语对应的wordvector依次(从上到下)排列的矩阵,假设句子有 n 个词,vector的维数为  k  ,那么这个矩阵就是  n × k 的(在CNN中可以看作一副高度为n、宽度为k的图像)。

    这个矩阵的类型可以是静态的(static),也可以是动态的(non static)。静态就是word vector是固定不变的,而动态则是在模型训练过程中,word vector也当做是可优化的参数,通常把反向误差传播导致word vector中值发生变化的这一过程称为Fine tune。(这里如果word vector如果是随机初始化的,不仅训练得到了CNN分类模型,还得到了word2vec这个副产品了,如果已经有训练的word vector,那么其实是一个迁移学习的过程)

    对于未登录词的vector,可以用0或者随机小的正数来填充。

    2、  第一层卷积层:

    输入层通过卷积操作得到若干个Feature Map,卷积窗口的大小为 h ×k ,其中 h  表示纵向词语的个数,而  k  表示word vector的维数。通过这样一个大型的卷积窗口,将得到若干个列数为1的Feature Map。(熟悉NLP中N-GRAM模型的读者应该懂得这个意思)。

    3、  池化层:

    接下来的池化层,文中用了一种称为Max-over-timePooling的方法。这种方法就是简单地从之前一维的Feature Map中提出最大的值,文中解释最大值代表着最重要的信号。可以看出,这种Pooling方式可以解决可变长度的句子输入问题(因为不管Feature Map中有多少个值,只需要提取其中的最大值)。最终池化层的输出为各个Feature Map的最大值们,即一个一维的向量。

    4、  全连接+softmax层:

    池化层的一维向量的输出通过全连接的方式,连接一个Softmax层,Softmax层可根据任务的需要设置(通常反映着最终类别上的概率分布)。

    训练方案:

    在倒数第二层的全连接部分上使用Dropout技术,Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了,它是防止模型过拟合的一种常用的trikc。同时对全连接层上的权值参数给予L2正则化的限制。这样做的好处是防止隐藏层单元自适应(或者对称),从而减轻过拟合的程度。

    在样本处理上使用minibatch方式来降低一次模型拟合计算量,使用shuffle_batch的方式来降低各批次输入样本之间的相关性(在机器学习中,如果训练数据之间相关性很大,可能会让结果很差、泛化能力得不到训练、这时通常需要将训练数据打散,称之为shuffle_batch)。

    论文作者也公布了自己的实现程序(下载戳这里),同时有一位同行对上述论文给出了解读并基于上述程序做了对比实验(论文解读戳这里)。本人上面的分析也是基于原始论文和解读,算是锦上添花吧。

    实验流程及结果:

    参考上述论文和源程序,本人对其在中文短文本分类问题上进行了实验。

    实验要求:

           Python环境

           安装结巴分析的python版本

           安装numpy、pandas等一系列科学计算相关库,windows下借助Anaconda进行安装比较方便

           安装theano,这个参考各种安装、使用教程吧。

    语料库:使用的是搜狗语料库,搜索SogouC.reduced可找到下载连接。

    文本预处理:

           使用jieba分词后将一些实词汉词提取出来,同时,由于CNN输入窗口的大小是一定的,对于长度小于N的句子,使用Pad with zeroes的方式,对于长度大于N的句子,将其切分为若干段长度小于等于N的句子。使用军事和教育两个题材的预料进行处理后,样本总数量大致在2W的样子。

    训练调参:

           模型结构与trikc均与原文一直,在处理word vector size时,采用原始论文采用的300时,效果不是太理想,将该参数调低,采用szie=50、size=100,最终效果还算可以。同时,feature_map的数量要比word vector size值大一些,以尽可能提取更为丰富的句子信息。

           下面是训练过程中的一些结果:

    word vector size=50& feature_maps size = 100

    来看看训练得到的wordvector在语义空间的映射效果如果,以该词对应的向量空间的余弦积的形式衡量词之间的相似性:

    左:word vector size=50 & feature_maps size= 100 右:word vector size=100& feature_maps size = 100

    军事题材类的词,语义表达的效果较好,而医疗卫生相关的则效果一般。如果原始预料集更大,可能效果还会进一步提升的。同时,也可以考虑使用word2vec模型训练得到word vector,在使用上述模型训练CNN分类模型,同时更新word vector。

    本文同时在知加发表,欢迎围观。

    最后,进过本人使用的实验代码可从github下载(Theano),对作者的原始代码做了比较详尽的注释,同时增加汉语的分词预处理模块和后面的word vector展现模块。

    --------------------- 本文来自 大愚若智_ 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zbc1090549839/article/details/53055386?utm_source=copy

    展开全文
  • “使用Python进行文本分析”是一本书,其中包含674页有用的信息,这些信息基于技术,算法,经验以及随着时间推移在分析文本数据时吸取各种经验教训。 该存储库包含本书中使用数据集和代码。 我还将不时在此处...
  • 有些网站为了维护版权信息, 用户在复制完成后, 发现粘帖出来的内容往往都还有一些作者名字之的版权信息, 那么这样的功能是怎么实现的呢? 其实原理也是非常的简单,就是监听一下剪切板事件. <!DOCTYPE html> ...
        

    有些网站为了维护版权信息, 用户在复制完成后, 发现粘帖出来的内容往往都还有一些作者名字之类的版权信息, 那么这样的功能是怎么实现的呢? 其实原理也是非常的简单,就是监听一下剪切板事件.

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <div>前端好难学啊</div>
        <script>
            let oDiv = document.querySelector('div');
            oDiv.oncopy = function(e) { // 复制事件
                e.preventDefault();
                let copyMsg = window .getSelection() + '商业转载请注明出处。'; // window .getSelection() 表示选择的内容
                e.clipboardData.setData("Text", copyMsg); // 将复制信息添加到剪切板
            }
        </script>
    </body>
    </html>
    原理: 监听文本复制事件, 并阻止事件默认行为, window .getSelection() 表示选中的文本内容, 再调用 clipboardData.setData() 方法将修改后的文本添加到剪切板

    猛戳这里查看 clipboardData 对象的兼容性

    注意

    • 在IE中,clipboardData对象是window对象的属性;
    • 在Chrome、Safari和Firefox 4+中,clipboardData对象是相应event对象的属性。
    展开全文
  • 1. 数据元数据格式 图片 文本 视频 音频 2 2. 按照应用功能使用分类 2 2.1. Diary Cyarlog 2 2.2. Blog bbs 笔记 2 2.2.1. 印象笔记 evernote 2 2.2.2. Blog cp browfav pc browfav Qzone sina...

    Atitit  信息管理 艾提拉著作 CAPT1信息源数据源

     

    目录

    1. 数据元的数据格式  图片 文本 视频 音频 2

    2. 按照应用功能使用分类 2

    2.1. Diary  Cyarlog 2

    2.2. Blog bbs 笔记类 2

    2.2.1. 印象笔记类 evernote 2

    2.2.2. Blog  cp browfav  pc browfav Qzone  sina mic 2

    2.2.3. Blog  blog shwashwa 2

    2.3. Im 2

    2.3.1. Wechat fav  qq fav 2

    2.3.2. 短信sms  email 2

    2.3.3. Qqlog Qq wecaht 2

    2.4. Other 3

    2.4.1. 通讯录 3

    2.4.2. Note备份txt导出 3

    2.4.3. 日程icalend 3

    2.4.4. lyric 3

    2.5. Music video 3

    2.5.1. Lryic  music 3

    3. 按照提供者 3

    3.1. Web爬虫  db redis 3

    3.2. Txt ftp eml imap 3

    3.3. Excell csv 3

    4. 按照访问协议 3

    4.1. File web ftp imap eml http SSH 3

    4.2. RPC SSDP 3

    5. 按照app来源分类 3

    5.1. Taobao 抖音 im软件 4

    6. 按照设备来源分类 手机 pc 网络 4

    7. ref 4

     

     

    1. 数据元的数据格式  图片 文本 视频 音频
    2. 按照应用功能使用分类
      1. Diary  Cyarlog

     

      1. Blog bbs 笔记类
        1. 印象笔记类 evernote
        2.  Blog  cp browfav  pc browfav Qzone  sina mic
        3.  Blog  blog shwashwa

     

      1. Im
        1. Wechat fav  qq fav

     

        1. 短信sms  email

     

        1. Qqlog Qq wecaht

     

      1.  Other
        1. 通讯录
        2. Note备份txt导出
        3. 日程icalend
        4. lyric
      2. Music video
        1. Lryic  music
    1. 按照提供者
      1. Web爬虫  db redis 
      2. Txt ftp eml imap 
      3. Excell csv
    2. 按照访问协议
      1. File web ftp imap eml http SSH 
      2. RPC SSDP 
    3. 按照app来源分类
      1. Taobao 抖音 im软件 
    4. 按照设备来源分类 手机 pc 网络
    5. ref

     

     

    Imlog

     

     

    D:\000atibek\000sum doc body 4fulltext v3 t55

     

     

    Atitit 需要全文索引的文档资料分类

    Atitit 网络协议概论 艾提拉著作

     

    展开全文
  • 卷积神经网络文本分类

    万次阅读 2018-03-24 10:14:23
    卷积神经网络(CNN)在图像处理领域取得了很大成绩,它卷积和池化结构能很好提取图像的信息,而在 NLP 领域循环神经网络(RNN)则使用更多,RNN 及其各种变种因拥有记忆功能使得它们更擅长处理上下文。...

    前言

    卷积神经网络(CNN)在图像处理领域取得了很大的成绩,它的卷积和池化结构能很好提取图像的信息,而在 NLP 领域循环神经网络(RNN)则使用的更多,RNN 及其各种变种因拥有记忆功能使得它们更擅长处理上下文。但 NLP 领域很多方面使用 CNN 取得了出色的效果,比如语义分析、查询检索、文本分类等任务。这篇文章看看如何用 CNN 进行文本分类。

    模型结构

    模型结构可以通过下图一层层来看,总共由4部分组成,包括了输入层、卷积层、池化层和全连接层。
    这里写图片描述

    输入层

    图中最左边的部分即为输入层,总的来说输入层就是句子对应的矩阵。一般不会使用 ont-hot 向量来表示单词,而是使用 k 维的分布式词向量。那么对于一个长度为 n 的句子,则构成一个 n × k 的矩阵。

    所以,可以设 xixi 为句子的第 i 个单词,它为 k 维向量。那么一个句子为 x1:n=x1x2...xnx1:n=x1⨁x2⨁...⨁xn,其中表示串联的意思。

    另外,根据对词向量的作用可以分为两种模式:静态和非静态。静态模式的意思就是我直接使用第三方发布的词向量或者自己训练的词向量来初始化矩阵,并且在每次训练的过程中不对反向误差传播产生作用,不改变词向量,整个训练过程词向量都是固定不变的。而非静态模式则不同,同样是使用词向量来初始化矩阵后,在此后的每次训练过程中,根据反向误差传播会对词向量进行微调,整个训练过程词向量都会更新。

    卷积层

    图中第二部分为卷积层,卷积层的作用就是用于提取句子的特征。主要是通过一个 h × k 的卷积核 w 在输入层从上到下进行滑动进行卷积操作,通过该卷积操作得到一个 feature map。feature map 的列为1,行为 (n-h+1),即 c=(c1,c2,...cnh+1)c=(c1,c2,...cn−h+1),其中 ci=f(wxi:i+h1+b)ci=f(w⋅xi:i+h−1+b)

    上图中输入层上红色框框就是卷积操作的卷积核,可以看到它是 2 × k 维的,运算后变为 feature map 的一个元素。除此之外,还可以将 h 定为3,此时卷积核变为 3 × k 维,如图中黄色框框部分。相同维度的可以有若干个参数不同的卷积核,所以最终在每种维度下都可以得到若干个 feature map。

    卷积操作的意义是什么?可以看到它其实是根据 h 大小不同提取不同长度相邻单词的特征,这个其实可以跟 n-gram 语言模型对应起来。

    池化层

    图中第三部分为池化层,池化层的作用是对特征做进一步提取,将最重要的特征提取出来。这里使用的是 max-over-time pooling 操作,即取出 feature map 中的最大值作为最重要的特征,即cˆ=max{c}c^=max{c}。所以最终对于每个 feature map 池化后都得到一个一维向量,取最大值作为特征也解决了不同句子长短的问题,尽管短的句子会用 0 进行填充,但通过取最大值消除了该问题。

    前面的通过卷积层的多个不同卷积核操作得到若干 feature map,而再经过池化层处理后得到若干个一维向量。

    全连接层

    图中最后部分为全连接层,全连接层通过使用 softmax 分类器得到各个分类的概率。前面的池化层的输出以全连接的形式连到 softmax 层,softmax 层定义好分类。

    防止过拟合

    为了防止过拟合,训练过程中在倒数第二层使用 dropout 技术,它将随机丢弃隐含层的某些节点使其不 work。具体做法可以在网络向前传输时将一些节点设置为0,比如倒数第二层上,z=[cˆ1,cˆ2...,cˆm]z=[c^1,c^2...,c^m],这里假设我们有 m 个卷积核。通过 dropout 后为,y=w(zr)+by=w⋅(z∘r)+b,其中和 r 实现了掩码的功能,即 r 是大小与 z 相同的一个向量,它的值为随机的0或1,0对应的节点为丢弃的节点。

    同时,还可以在全连接层使用L2正则化来约束权值向量w。

    主要实现代码

    构建图

    首先,构建需要的占位符和常量,其中占位符包括输入占位符、标签占位符和 dropout 占位符,L2 正则损失常量。

    train_inputs = tf.placeholder(tf.int32, [None, sequence_length])
    train_labels = tf.placeholder(tf.float32, [None, classes_num])
    keep_prob = tf.placeholder(tf.float32)
    l2_loss = tf.constant(0.0)

    接着我们会需要一个嵌入层将词汇嵌入到指定的维度空间上,维度由 embedding_size 指定。同时 vocabulary_size 为词汇大小,这样就可以将所有单词都映射到指定的维数空间上。嵌入层通过tf.nn.embedding_lookup就能找到输入对应的词空间向量了,这里稍微解释下embedding_lookup操作,它会从词汇中取到 inputs 每个元素对应的词向量,inputs 为2维的话,通过该操作后变为3维,因为已经将词用 embedding_size 维向量表示了。此外,由于要调用卷积操作,这里将结果扩展了一维。

    with tf.device('/cpu:0'):
        embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
        embed = tf.nn.embedding_lookup(embeddings, train_inputs)
        conv_inputs = tf.expand_dims(embed, -1)

    接着开始做卷积操作及池化操作。由于我们会定义若干个卷积核,而且每个高度的都有若干个卷积核,所以我们会得到很多不同的 feature map,然后对这些 feature map 做 max-over-time pooling 操作,最终得到池化后的 feature。

    features_pooled = []
    for filter_height, filter_num in zip(filters_height, filter_num_per_height):
        conv_filter = tf.Variable(tf.truncated_normal([filter_height, embedding_size, 1, filter_num], stddev=0.1))
        conv = tf.nn.conv2d(conv_inputs, conv_filter, strides=[1, 1, 1, 1], padding="VALID")
        bias = tf.Variable(tf.constant(0.1, shape=[filter_num]))
        feature_map = tf.nn.relu(tf.nn.bias_add(conv, bias))
        feature_pooled = tf.nn.max_pool(feature_map, ksize=[1, sequence_length - filter_height + 1, 1, 1],
                                            strides=[1, 1, 1, 1],
                                            padding='VALID')
        features_pooled.append(feature_pooled)

    现在网络就剩下全连接层了,其中要先进行 dropout 操作来暂时使得一些节点失效,接着做线性计算得到分数,从而得到预测。

    filter_num_total = sum(filter_num_per_height)
    features_pooled_flat = tf.reshape(tf.concat(features_pooled, 3), [-1, filter_num_total])
    features_pooled_flat_drop = tf.nn.dropout(features_pooled_flat, keep_prob)
    W = tf.get_variable("W", shape=[filter_num_total, classes_num], initializer=tf.contrib.layers.xavier_initializer())
    b = tf.Variable(tf.constant(0.1, shape=[classes_num]))
    scores = tf.nn.xw_plus_b(features_pooled_flat_drop, W, b)

    最后计算损失,一个是L2正则损失一个是交叉熵损失,通过两者求得总的损失。并且计算得到准确率。

    l2_loss += tf.nn.l2_loss(W)
    l2_loss += tf.nn.l2_loss(b)
    losses = tf.nn.softmax_cross_entropy_with_logits(logits=scores, labels=train_labels)
    loss = tf.reduce_mean(losses) + l2_lambda * l2_loss
    predictions = tf.argmax(scores, 1)
    correct_predictions = tf.equal(predictions, tf.argmax(train_labels, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_predictions, "float"))

    github

    github附上完整代码。

    https://github.com/sea-boat/nlp_lab/tree/master/cnn_text_classify

    reference

    Convolutional Neural Networks for Sentence Classification

    ————-推荐阅读————

    我的2017文章汇总——机器学习篇

    我的2017文章汇总——Java及中间件

    我的2017文章汇总——深度学习篇

    我的2017文章汇总——JDK源码篇

    我的2017文章汇总——自然语言处理篇

    我的2017文章汇总——Java并发篇

    ——————广告时间—————-

    知识星球:远洋号

    公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。

    为什么写《Tomcat内核设计剖析》

    欢迎关注:

    这里写图片描述

    展开全文
  • 信息收集渠道:文本分享网站PasteSitePasteSite是一种专门的文本分享网站。用户可以将一段文本性质内容(如代码)上传到网站,然后通过链接分享给其他用户。这一点很类似于现在优酷视频分享功能。该功能...
  • 信息检索作为互联网应用重要组成部分, 1.1 我博客次标题 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;amp...
  • 应用场景:最近由于开发同事需求,需要在各个区服游戏配置文件中追加一个BI相关redis配置信息。如在app.conf.php中有如下字段'redis_list' => array('normal' => array('host' => '192.168.5.7','port' ...
  • NLPIR文本分析工具的功能和特色介绍

    千次阅读 2019-11-05 15:39:52
    通常用于研究分析数据中,非结构化数据所占比例更高,这些非结构化数据中也包含着重要的信息量,要运用文本分析工具来完成信息提取。文本分析是自然语言处理一个小分支,是指从文本中抽取特征词进行量化以...
  • 静态文本类 - CStatic 显示文本 2.按钮 - CButton 按钮,功能,嘿嘿 3.编辑框类 - CEdit 接收输入 4.滚动条 - CScrollBar 滚动窗口 5.列表框类 - CListBox 同时显示多条信息 6.组合...
  • 本文分步介绍了用C#如何从文本文件 (.txt) 检索信息,然后使用 ArrayList 向用户显示该信息。 要求 Microsoft Visual C# 2005 或 Microsoft Visual C# .NET 在 Visual C# 2005 或 Visual C# .NET 中读取文本...
  • 文本中获取合格身份证信息定义判断工具定义执行方法测试功能获取结果 定义判断工具 package com.kunjuee.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util....
  • 与传统机器学习不同,深度学习既提供特征提取功能,也可以完成分类的功能。 以FastText为例,学习基于深度学习的文本分类。 FastText基本信息 FastText是一种典型的深度学习词向量的表示方法,它非常简单通过...
  • 获取概念属性信息有助于构建概念间关系,进而改进基于概念的信息检索等应用性能。研究了如何从机器可读词典中获取释义项属性信息并实现了一个相应系统DAE(Dictionary Attribute Extractor)。系统基于...
  • 在TextCNN模型中通过卷积技术实现对文本的分类功能。目前文本分类在工业界的应用场景非常普遍,从新闻的分类、商品评论信息的情感分类到微博信息打标签辅助推荐系统,都用到了这种技术。下面我们主要了解这个模型的...
  • django中富文本ckeditor设置(图片上传、添加代码等功能)前文安装并配置pip安装添加应用:添加ckeditor路由添加CKEditor设置:开始使用为模型添加字段:有个bug其他可选配置自定义编辑器添加代码功能代码高亮、...
  • C#控件系列--文本类控件 文本类控件主要包含Label... Label用来显示用户不能直接改变的文本信息。 属性 Image--指定标签上显示图像。Text--此属性是与文件相关联的文本。Name--标识对象名称。AutoSize-...
  • 我们在Twitter中进行性别识别方法仅利用文本信息,包括推文预处理,功能构建,使用潜在语义分析(LSA)进行降维以及分类模型构建。 我们提出了一种线性支持向量机(SVM)分类器,具有不同类型单词和字符n-...
  • 1.简介:这是一个基于文本界面简单项目,用于存储客户信息的一个简单系统 2.需要用到知识: (1)对象数组创建和数组初始化 (2)和对象(属性,方法和构造器调用) (3)四种权限修饰符理解和...
  • 自动分类器利用机器学习原理对网页进行分类。分类器工作步骤如下:(1)利用搜狐分类...分类器自动判断出文本所属分类,然后按分类下结果多少给出提示,帮助用户有效缩小结果集,更精准地找到所需的信息。百度新...
  • 在ASP中为实现公司简介,页脚信息,联系我们信息类的简单信息发布页面,我会建立一个数据表,后台依靠2个文件完成。例中数据表名为table_Content,文件为default.asp和edit.asp.table_Content有3个字段分别为:Id,...
  • 数据挖掘中的文本挖掘分类算法综述 摘要 随着 Internet 上文档信息的迅猛发展文本分类成为处理和组织大量文档数 据关键技术 本文首先对数据挖掘进行了概述包括数据挖掘常用方法 功能 以及存在主要问题 其次...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,503
精华内容 601
关键字:

信息类文本的功能