- 博客(21)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 图文讲解归并排序
在日常生活中有很多排序例子。比如说排队,就是按照时间的先后顺序;医院就医,紧急情况下会按照病情的严重程度;高考录取通常是按照分数的高低。从这些例子中似乎看不出排序算法的必要性。事实上并不是,就说高考的问题吧,全省的考生排名,假如全省有30万考生,该如何高效的排名呢?这就需要排序算法了。介绍归并排序(英语:Merge sort),是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)O(n\log n)O(nlogn)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide an
2020-07-24 22:28:09
317
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
翻译 图文理解自注意力(self-attention)
谷歌在2017年发表了一篇论文《Attention Is All You Need》,论文中提出了transformer模型,其核心就是self-attention的架构,这一突破性成果不仅洗遍了NLP的任务,也在CV中取得了非常好的效果,有大道至简的感觉。本文通过一个通俗易懂的例子1来介绍self-attention。(注:本文例子完全来在参考文章,包括文章的gif动图,感谢作者的文章)介绍接下来将通过一下几个步骤来介绍:预处理输入数据初始化权重计算key,query 和value计算输入
2020-07-20 22:18:43
2586
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 深入理解LSTM网络
刚开始学习神经网络的时候,连基础的CNN都看不懂,更无法理解,它是如何从图片中提取特征的。看到LSTM单元更加懵掉了。如此复杂的结构究竟是怎样被发明出来的?每一步为什么要这么做呢?本文是一篇详细介绍的基础文章,包含数学公式肯定是在所难免的,要搞清楚这些原理,就必须理解这些公式。循环神经网络LSTM长短时记忆网络是一种特殊的循环神经网络,所以我们还是从普通的RNN说起。网络结构长这个样子,核心的部分就是那个循环结构。对于t时刻的输入xtx_txt,输出为hth_tht,状态为sts_tst,于
2020-07-20 14:13:58
1025
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Python类型标注
机器学习越来越火,大量的机器学习包都支持Python,导致了Python近几年非常火爆,入手门槛低,编程简单,概念非常少。越来越多的新手小白加入到Python编程。Python虽然简单,但也带来很多问题。尤其是弱类型一直被诟病,平时在写代码时,经常也会模糊参数的类型,导致debug难度增加。自从Python3.5以来,发布了typing包,推荐标注类型,并且IDE会检查类型,让Python看起来有点静态语言的感觉了。本文主要参考Python3.7.5的官方文档 1关注我的Python专栏常用的类型
2020-07-20 13:55:03
985
原创 词频词云工具
词频词云工具对于文字工作者,和内容运营的朋友,经常需要统计词频词性,然后画出词云图这样的需求。本文推荐一种词频词性统计工具,功能齐全,模板丰富,欢迎大家使用。功能点支持表格编辑词、简单编辑和文本分词生成词云图词云的模板可以选择,模板的种类在持续增加除了词频,还支持文本分词的词性统计支持词云、词频、词性的下载自定义背景颜色支持中英文两种语言工具的使用非常简单,如有任何问题可以查看帮助。...
2021-11-09 23:16:13
4191
原创 NLP论文笔记-新标签的关系抽取
之前写过一篇公众号,介绍在没有参考中科院专家论文情况下,我在项目中也使用了类似思路。本文就重点介绍一下这篇论文《Joint Extraction of Entities and Relations Based on a Novel Tagging Scheme》,2017年由中科院团队发表1的论文,当时被评为年度杰出论文。关系抽取简介实体(Entity)的关系抽取(Relation Extraction)作为NLP领域的一项基本任务,很早就被学者关注到了。早期的实体识别通常基于概率图模型,如隐马尔可夫
2020-11-25 15:45:34
426
原创 NLP论文笔记
本文整理个人读论文的一点心得,分享其中有意思的论文观点,主要作为学习笔记,如果能够对读者有帮助,那就更好了。本文主要关注注意力机制。注意力机制最早在2014年出现在CV领域1,之后Bahdanau,Bengio等人将这种机制运用到自然语言处理领域2,开创了基于注意力机制刷榜NLP各类任务的时代。既然注意力机制这么牛皮,那为什么不直接使用呢?于是Vaswani,Shazeer,Kaiser等人3直接抛弃了RNN,提出了自注意力机制,这就是后来的Transformer架构。之后沿着Transformer这条路
2020-11-18 11:35:01
460
原创 循环神经网络的原理分析
原理介绍循环神经网络在大多数人看来其实很简单。的确原理是非常简单的,但是代码的实现细节却没有那么简单。往往纸上谈兵容易,实战起来才发现跟理论是有差距的。本文重点介绍RNN的原理,之后基于PyTorch框架,介绍RNN类的输入和输出,重点在于理解RNN的原理。结尾我们发现PyTorch的RNN模块其实只计算了隐藏层矩阵。下图是一个简单RNN的单元图,xtx_txt为t时刻的输入,yty_tyt为t时刻的输出,hth_tht为隐藏层输出,Whh,WihW_{hh}, W_{ih}Whh,Wih为隐
2020-11-17 11:41:42
865
原创 PyTorch预训练Bert模型
本文介绍以下内容:使用transformers框架做预训练的bert-base模型;开发平台使用Google的Colab平台,白嫖GPU加速;使用datasets模块下载IMDB影评数据作为训练数据。transformers模块简介transformers框架为Huggingface开源的深度学习框架,支持几乎所有的Transformer架构的预训练模型。使用非常的方便,本文基于此框架,尝试一下预训练模型的使用,简单易用。本来打算预训练bert-large模型,发现colab上GPU显存不够
2020-11-17 00:47:34
2273
1
原创 图文讲解Huffman树
本文通过图文介绍Huffman树的构成,重点在于理解Huffman树的形成原理,另外给出Huffman树的参考代码。之后通过文本压缩的例子来介绍Huffman编码,本文将从以下几个方面来介绍:什么是Huffman树案例介绍Huffman树的构成Huffman编码Huffman编码的应用什么是Huffman树Huffman树是一种树状的数据结构。任何一种数据结构都是用来解决特定的问题,那么首先我们先来弄出清楚Huffman树解决什么样的问题?现在有一些不同数值的节点(图中蓝色),要把这些节
2020-08-03 14:37:29
1323
原创 堆的实现与TopK问题
喜欢我的文章,欢迎关注个人公众号:数学编程在《图文讲解堆排序》中介绍了堆数据的基本概念以及存储方法,同时也介绍了其应用就是堆排序。虽然堆的概念相对简单,代码的实现具有学习意义。本文重点介绍最小堆的实现,再介绍一种堆的应用,解决TopK问题。Talk is cheap, Show me the code很多时候原理简单,代码的实现并非如此,下面就重点解读一下代码。本文代码参考heapq.py源码最小堆的实现首先来看一下最小堆的抽象数据类型(Abstract Data Type, ADT),用.
2020-07-30 15:30:04
388
原创 图文讲解堆排序
喜欢我的文章,欢迎关注个人公众号:数学编程以前面试的时候碰到过问堆数据结构的,当时对数据结构了解太少,没能回答上来,可能因此错过了一次非常好的机会。从那以后一直在补基础知识,今天就全面总结一下堆以及堆的应用。这里你需要一些树数据结构的基础知识。介绍数据结构-堆把稻谷堆在地上就形成了堆,堆的结构非常清楚,上面小下面大,这样的堆称为小顶堆(又称作最小堆)。最小堆在数据结构中是这样定义的父节点的值恒小于等于子节点的值,此堆称为最小堆,那么大顶堆就是父节点的值恒大于等于子节点的值1。堆是一种树状的数据结
2020-07-28 16:49:40
181
原创 图文讲解冒泡排序
喜欢我的文章欢迎关注微信公众号:数学编程冒泡排序算法是一种非常基础的排序算法,算法的原理相对简单,同时也是稳定的排序算法,算法的时间复杂度为o(n2)o(n^2)o(n2),另外还是一种原地排序。比较适用于小规模数据的排序。解释一下概念:排序算法的稳定性是指两个相等的元素排序以后相对位置不发生变化,则认为是稳定的排序算法的时间复杂度是指随着问题规模的增加,理论执行时间的变化趋势。比如o(n)o(n)o(n)是指随之问题规模的增加,理论执行时间是线性递增的。放在排序问题中就是随着数据个数增加,排.
2020-07-27 14:51:34
202
原创 一元二次方程的简单解法
记得在初中三年级就学过求解一元二次方程,万能的求根公式就行了。最近看到卡耐基梅隆大学的一个教授发明了一种简单方法1,看起来有点意思,的确比求根公式要简单很多。具体方法对于任意一个一元二次方程都可以化简为如下形式:x2+bx+c=0 x^2 +b x + c = 0 x2+bx+c=0两个复数域的根为x1,x2.根据韦达定理x1+x2=−b,x1x2=c x_1 + x_2 = -b, x_1 x_2 = c x1+x2=−b,x1x2=c假定存在一个复数z使得:x1=−b2+zx2=−
2020-07-20 22:44:46
2408
原创 Python读写PDF
PDF的基本操作主要是读取、创建,合并等操作。使用Python的第三方包PyPDF2.安装依赖包使用Python的pip进行安装,安装包名称大小写不敏感。pip install PyPDF2查看基本的类和方法进入包的__init__.py文件可以看到主要的几个类和方法from .pdf import PdfFileReader, PdfFileWriterfrom .merger import PdfFileMergerfrom .pagerange import PageRange, p
2020-07-20 22:28:08
496
原创 牛顿切线法求解正数的N次方根
介绍本文简述牛顿法求算术平方根,进而推导出求一个数的nnn次方根,并给出相应的代码实现。二分法以前我上初中学习平方根的时候,就在思考这个问题。如何计算正实数的平方根,每次在计算的时候心里默念几的平方等于这个数。比如25=5225=5^225=52,那么262626怎么办呢?数学家实在太聪明了,用26\sqrt{26}26来表示这个数。但是这个带根号的数,似乎不是很直观,具体落在那个范围之内还是很难估计。于是我还是使用这种笨办法,不断尝试法。比如62=366^2=3662=36,而262626介于5
2020-07-20 22:24:28
651
原创 衡量模型的参数-ROC曲线
最近在新冠肺炎新闻报道中频繁出现一个词“假阴性”。就是检测结果呈现是阴性(没有检测出病毒),实际上是一种假象,真实情况是阳性的。检测结果表现出“假阴性”,后果是非常严重的,相当于你把一个感染者放回家了。今天就来总结一下衡量检测或者说预测结果的方法和指标。我们把“检测”归纳为“预测”,认为检测新冠病毒实际上就是对是否感染做预测,把所有的检测方法抽象成模型。模型的输入就是病人待检测的样本,输出结果为阴性或者阳性两种。如果用函数来描述就是y=f(x) y = f(x) y=f(x)其中xxx就是待检测样本,
2020-07-20 14:27:43
700
原创 keras源码分析-Tokenizer
非常喜欢keras框架,平时都是使用封装好的API,基本完全可以满足需求,很少需要修改源码的。最近对keras的实现更加好奇了,于是花点时间读源码,然后整理点学习笔记吧。我大致浏览了keras中文文档以及英文文档和源码,发现文档不太全面,很多源码实现的接口而文档中没有涉及到,于是萌生了自己整理分析源码的想法。本文作为第一篇文档,先从预处理的tokenizer开始整理。tokenizer是什么计算机在处理语言文字时,是无法理解文字的含义,通常会把一个词(中文单个字或者词组认为是一个词)转化为一个正整数
2020-07-20 14:10:08
750
原创 通俗介绍梯度下降算法
深度学习近几年如火如荼,先后出现了很多的应用案例。那么深度学习是怎样的学习过程呢?其实理解起来不难,只需要一点点数学知识而已。本文介绍深度学习中最基础的一种优化算法–梯度下降算法,大量的优化算法都是在此基础上修改,不断优化出来的。理解了此算法,你就知道深度学习是如何学习的?简单例子的应用在中学我们都学过用导数求函数极值。基本思路就是求出f′(x)=0f'(x)=0f′(x)=0方程的解,就是极值点,如果这个方程是超越方程,很难求出解析解怎么办?我们可以利用计算机求出数值解。我们先来看一个例子,大致了解梯
2020-07-20 14:04:49
280
原创 用Python模拟MapReduce分布式计算
谷歌最早提出了一种分布式计算框架,就是MapReduce。当时发布这个框架的时候,一句话形容那是相当火爆啊,主要用来解决大规模数据(大于1TB)的并行计算。提出了两个核心过程分别是Map和Reduce过程。大致的过程就是先将大规模数据进行分块,每个块通过映射函数处理得到独立结果,整个过程是高度并行的,这个过程称为Map。将上面的结果进行归纳操作,得到最终的结果,这个过程称为Reduce。简单说就是先拆分后合并。在Python的函数式编程中,也有类似的函数map和reduce,这两个函数与MapReduc
2020-07-20 14:01:55
827
原创 Python的集合框架
collections官网翻译为容器数据类型,在Java中称为集合框架,名字不同而已。Python内置了一些数据类型,dict , list , set , 和 tuple。某些情况下这些数据容器不够用,我们得继承基本数据容器,然后实现定制化的功能。比如原始的字典是无序的,假如需要有序的字典怎么办?集合框架collections就提供了OrderedDict这样的数据容器。除此之外集合框架提供了以下类型:名称含义namedtuple()创建命名元组子类的工厂函数deque类似
2020-07-20 13:51:40
274
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人