文本分类

NLP-文本分类之开始(0)

风格不统一 提交于 2019-12-04 13:50:13
转眼读研一年了,开题也开了,方向也定了,大方向就是NLP,然而从一开始的上课、做项目开题什么的(自己也比较贪玩,以前不打游戏,结果王者上瘾了),到现在对NLP是一知半解,不对,半解都没有半解,然后时间是不等人的,学制两年,也该考虑毕业条件了(一篇SCI或两篇EI),很难,用一句网上流行的话:我太难了。所以卸载王者,下定决心学习NLP,发个文本分类的文章,所以从文本分类学习开始吧。至到现在,我删除王者已有半月有余,但是对NLP还是那个状态,心情浮躁,再加上和同届同学已经有了差距,还有不知道怎么入门(给了一头猪,不知道从哪啃,从哪啃都感觉难,这更加浮躁了,心里着急但是还学不了),最重要的是数学基础差。奈何不能心里有个声音在呐喊,不能一直这样,所以决心从这篇博客作为开始,好好学好好做。先记录一下自己目前所知道的有关NLP的知识,纯基于自己知道的,不百度。 一、NLP之文本分类的大概过程   准备数据集:要么选公共数据集(先辈们已经给规划好了,打好了标签或者用文件夹表示标签,文件夹里放的是好多.txt文件(所有.txt文件都属于该类),要么是一个.txt文件,里面每行属于一类,行头为类别)   数据预处理:分词、去停用词,去干扰(标点符号),向量化(word2vec、BoW、One-hot、N-gram)   分类模型:CNN、LSTM、Bi-lstm等 二、我会多少   找公共数据集

LSH搜索算法

我们两清 提交于 2019-12-04 01:32:24
LSH(Location Sensitive Hash),即位置敏感哈希函数。与一般哈希函数不同的是位置敏感性,也就是散列前的相似点经过哈希之后,也能够在一定程度上相似,并且具有一定的概率保证。 作者注:LSH算法分两种:SimHash和MinHash。 simhash的原理是减少搜索空间,用汉明距离替代余弦距离 minHash的原理是降维。通过hash映射函数,将特征元素的个数降下来。 形式化定义: 对于任意q,p属于S,若从集合S到U的函数族H={h1,h2...hn}对距离函数D(,),如欧式距离、曼哈顿距离等等,满足条件: 则称D(,)是位置敏感的。 如下图,空间上的点经位置敏感哈希函数散列之后,对于q,其rNN有可能散列到同一个桶(如第一个桶),即散列到第一个桶的概率较大,会大于某一个概率阈值p1;而其(1+emxilong)rNN之外的对象则不太可能散列到第一个桶,即散列到第一个桶的概率很小,会小于某个阈值p2. LSH的作用 ◆高维下近似查询 相似性检索在各种领域特别是在视频、音频、图像、文本等含有丰富特征信息领域中的应用变得越来越重要。丰富的特征信息一般用高维向量表示,由此相似性检索一般通过K近邻或近似近邻查询来实现。一个理想的相似性检索一般需要满足以下四个条件: 1. 高准确性。即返回的结果和线性查找的结果接近。 2. 空间复杂度低。即占用内存空间少。理想状态下

文本聚类——Kmeans

丶灬走出姿态 提交于 2019-12-04 01:28:37
上两篇文章分别用朴素贝叶斯算法和KNN算法对newgroup文本进行了分类测试,本文使用Kmeans算法对文本进行聚类。 1、文本预处理 文本预处理在前面两本文章中已经介绍,此处(略)。 2、文本向量化 package com.datamine.kmeans; import java.io.*; import java.util.*; import java.util.Map.Entry; /** * 计算文档的属性向量,将所有文档向量化 * @author Administrator */ public class ComputeWordsVector { /** * 计算文档的TF-IDF属性向量,返回Map<文件名,<特征词,TF-IDF值>> * @param testSampleDir 处理好的聚类样本测试样例集 * @return 所有测试样例的属性向量构成的map * @throws IOException */ public Map<String,Map<String,Double>> computeTFMultiIDF(String testSampleDir) throws IOException{ String word; Map<String,Map<String,Double>> allTestSampleMap = new TreeMap<String,

pytorch -- CNN 文本分类 -- 《 Convolutional Neural Networks for Sentence Classification》

 ̄綄美尐妖づ 提交于 2019-12-04 00:52:40
论文 《 Convolutional Neural Networks for Sentence Classification》通过CNN实现了文本分类。 论文地址: 666666 模型图:    模型解释可以看论文,给出code and comment: 1 # -*- coding: utf-8 -*- 2 # @time : 2019/11/9 13:55 3 4 import numpy as np 5 import torch 6 import torch.nn as nn 7 import torch.optim as optim 8 from torch.autograd import Variable 9 import torch.nn.functional as F 10 11 dtype = torch.FloatTensor 12 13 # Text-CNN Parameter 14 embedding_size = 2 # n-gram 15 sequence_length = 3 16 num_classes = 2 # 0 or 1 17 filter_sizes = [2, 2, 2] # n-gram window 18 num_filters = 3 19 20 # 3 words sentences (=sequence_length is 3)

Spring Boot 如何给微信公众号返回消息

江枫思渺然 提交于 2019-12-03 23:02:52
hello 各位小伙伴,今天我们来继续学习如何通过 Spring Boot 开发微信公众号。还没阅读过上篇文章的小伙伴建议先看看上文,有助于理解本文: Spring Boot 开发微信公众号后台 上篇文章中我们将微信服务器和我们自己的服务器对接起来了,并且在自己的服务器上也能收到微信服务器发来的消息,本文我们要看的就是如何给微信服务器回复消息。 消息分类 在讨论如何给微信服务器回复消息之前,我们需要先来了解下微信服务器发来的消息主要有哪些类型以及我们回复给微信的消息都有哪些类型。 在上文中大家了解到,微信发送来的 xml 消息中有一个 MsgType 字段,这个字段就是用来标记消息的类型。这个类型可以标记出这条消息是普通消息还是事件消息还是图文消息等。 普通消息主要是指: 文本消息 图片消息 语音消息 视频消息 小视频消息 地址位置消息 链接消息 不同的消息类型,对应不同的 MsgType,这里我还是以普通消息为例,如下: 消息类型 MsgType 文本消息 text 图片消息 image 语音消息 voice 视频消息 video 小视频消息 shortvideo 地址位置消息 location 链接消息 link 大家千万不要以为不同类型消息的格式是一样的,其实是不一样的,也就是说,MsgType 为 text 的消息和 MsgType 为 image 的消息

文本处理工具awk

ぐ巨炮叔叔 提交于 2019-12-03 21:06:55
目录 awk:(Aho, Weinberger, Kernighan,)报告生成器,格式化文本输出 gawk:模式扫描和处理语言 awk语言 awk工作原理 print awk变量 自定义变量 printf命令 awk操作符 awk的条件判断 awk的循环 awk的数组 awk的函数 awk调⽤系统命令和其他功能 文本处理工具awk awk:(Aho, Weinberger, Kernighan,)报告生成器,格式化文本输出 有多种版本:New awk(nawk),GNU awk( gawk) @ gawk:模式扫描和处理语言 1. 基本用法: awk [options] 'program' var=value file… awk [options] -f programfile var=value file… awk [options] 'BEGIN{action;… }pattern{action;… }END{action;… }' file ... awk 程序可由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块,共3部分组成 program 通常是被放在单引号中 2. 选项: -F “分隔符” 指明输入时用到的字段分隔符 -v var=value 变量赋值 awk语言 1. 基本格式:awk [options] 'program' file… Program

地理文本处理技术在高德的演进(下)

房东的猫 提交于 2019-12-03 20:50:47
​在上篇里,我们介绍了地理文本处理技术在高德的整体演进,选取了几个通用query分析的点进行了介绍。下篇中,我们会选取几个地图搜索文本处理中特有的文本分析技术做出分析,包括城市分析,wherewhat分析,路径规划,并对未来做一下展望。 四、query分析技术演进 4.1 城市分析 在高德地图的检索场景下,从基础的地图数据索引、到在线召回、最终产品展示,均以市级别行政单位为基础粒度。一次完整的检索需求除了用户输入的query外,还会包含用户的图面城市以及用户位置城市两个城市信息。 通常,大多数的搜索意图都是在图面或者用户位置城市下,但是仍存在部分检索意图需要在其他城市中进行,准确的识别出用户请求的目标城市,是满足用户需求的第一步,也是极其重要的一步。 在query分析策略流程中,部分策略会在城市分析的多个结果下并发执行,所以在架构上,城市分析的结果需要做到少而精。同时用户位置城市,图面城市,异地城市三个城市的信息存在明显差异性,不论是先验输出置信度,还是用后验特征做选择,都存在特征不可比的问题。 在后验意图决策中,多个城市都有相关结果时,单一特征存在说服力不足的问题,如何结合先验置信度和后验的POI特征等多维度进行刻画,都是我们要考虑的问题。 原始的城市分析模块已经采用先验城市分析和后验城市选择的总体流程 但是原始的策略比较简陋,存在以下问题: 问题1:先验和后验两部分均基于规则

地理文本处理技术在高德的演进(下)

我的梦境 提交于 2019-12-03 20:46:14
​在上篇里,我们介绍了地理文本处理技术在高德的整体演进,选取了几个通用query分析的点进行了介绍。下篇中,我们会选取几个地图搜索文本处理中特有的文本分析技术做出分析,包括城市分析,wherewhat分析,路径规划,并对未来做一下展望。 四、query分析技术演进 4.1 城市分析 在高德地图的检索场景下,从基础的地图数据索引、到在线召回、最终产品展示,均以市级别行政单位为基础粒度。一次完整的检索需求除了用户输入的query外,还会包含用户的图面城市以及用户位置城市两个城市信息。 通常,大多数的搜索意图都是在图面或者用户位置城市下,但是仍存在部分检索意图需要在其他城市中进行,准确的识别出用户请求的目标城市,是满足用户需求的第一步,也是极其重要的一步。 在query分析策略流程中,部分策略会在城市分析的多个结果下并发执行,所以在架构上,城市分析的结果需要做到少而精。同时用户位置城市,图面城市,异地城市三个城市的信息存在明显差异性,不论是先验输出置信度,还是用后验特征做选择,都存在特征不可比的问题。 在后验意图决策中,多个城市都有相关结果时,单一特征存在说服力不足的问题,如何结合先验置信度和后验的POI特征等多维度进行刻画,都是我们要考虑的问题。 原始的城市分析模块已经采用先验城市分析和后验城市选择的总体流程 但是原始的策略比较简陋,存在以下问题: 问题1:先验和后验两部分均基于规则

博客小程序开源了~

早过忘川 提交于 2019-12-03 20:21:28
好像快半个月没有写文章了,因为这半个月一直在开发博客小程序。到今天初级版差不多可以问世了,目前已上线功能:博客系统,好友系统和会话系统。接下来谈谈这三个系统的基本使用吧。 博客系统 用户在首页可以分页浏览所有文章,也可以按照分类去浏览对应分类的文章。分类目前就是固定的几种分类。数据量目前全来源于一个支持爬取数据的技术社区,所以数据来源完全合法。 可以在顶部的搜索框进行关键字搜索,找对应关键字的文章数据。不过这里有一个小缺点,由于我忙着先将基本构架做出来所以我对搜索结果还未来得及做分页,所以比较热门的关键字去搜索可以响应时间会比较慢。 点击文章进入文章详情界面,文章详情界面采用towxml插件去加载markdown格式的html文本渲染,所以渲染效果比较美观。目前只支持文本和图片也就是图文格式,后期会开放音频等文件。 在文章右下角可以对文章进行点赞和评论。设计评论功能的时候一直在和朋友探讨,究竟评论功能放在文章底部合适还是放在一个新界面合适呢?由于考虑到有很多时候技术文章都会是长文,可能用户还没看完就不想看了,一些优质评论根本没看到,所以采用将评论功能设计为一个新的界面,点击右下角评论图标即可进入评论界面。然后点击底部写评论按钮即可弹出评论框。 在文章详情界面点击用户头像可以进入作者主页,如果非好友关系可以添加作者为好友。作者主页可以按分类查看作者的全部原创文章。

tf.nn.softmax_cross_entropy_with_logits详解

拟墨画扇 提交于 2019-12-03 13:07:12
衡量的是独立互斥离散分类任务的误差 该网络会计算logits和labels的softmax cross entropy loss,独立互斥离散分类任务是因为,在这些任务中类与类之间是独立而且互斥的,比如VOC classification、Imagenet、CIFAR-10甚至MNIST,这些都是多分类任务,但是一张图就对应着一个类,class在图片中是独立的,并且一张图中只能有一个class,所以是独立且互斥事件。 直观表现为label形式为[0,0,…,1,0,…0],1000个元素中有且只有一个元素是1,其余都是0。 在卷积神经网络中的全连接层一般需要计算loss最小代价值(误差),也就是下面方法: loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=outputs, logits=prediction) (即将废弃) loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=labels, logits=logits)) (等同上面) labels :类维度的每个向量应该保持有效的概率分布,比如10分类[0,0,0,0,0,0,0,1,0,0] logits :未缩放的日志概率(全连接层的输出)