自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 资源 (1)
  • 收藏
  • 关注

原创 keras实现seq2seq做Chatbot

今天在《自然语言处理实战》一书中看到一个seq2seq实现的Chatbot的例子,感觉可以很好地体现出seq2seq的架构,这里我们一起来实现如何用seq2seq实现Chatbot。首先,seq2seq架构大家都比较熟悉,我们一起来看看本文的seq2seq的架构是怎样的:首先是encoder,这里我们使用LSTM,当encoder编码完成序列之后,会生成一个中间向量,然后中间向量连接着decoder,decoder用的也是LSTM,在decoder的部分,以作为解码的开始,作为解码的结束。整个Chat

2020-10-28 16:16:01 714

原创 使用pytorch做文本多分类的原理与代码保姆级详解

在B站看到刘洪普老师的视频,用RNN对18个国家的人名进行多分类的训练,然后对人名所属的国家进行预测的实战。这里,我将视频中的代码和思路进行了消化和总结,在这里和大家一起分享一下。首先就是看一下数据集,我们可以读取一下数据进行观察:import gzipimport csvimport randomres =[]is_train_set = Truefile_name = 'D:/BaiduNetdiskDownload/PyTorch深度学习实践/names_train.csv.gz' if

2020-08-15 19:28:30 4011 14

原创 浅谈抽取式文本摘要

文本摘要在NLP领域也是非常热门的一个领域,主要分成抽取式和生成式的,生成式的主要涉及到深度学习,个人觉得其实抽取式的文本摘要在效果上,只要算法得当,并不比生成式的差。这里我们一起来探讨一下抽取式的文本摘要,这里我们用朱自清的《背影》作为文本来提取10句这篇文章的摘要,我们来看看《背影》这篇文章:document = '我与父亲不相见已二年余了,我最不能忘记的是他的背影。\那年冬天,祖母死了,父亲的差使也交卸了,正是祸不单行的日子,我从北京到徐州,\打算跟着父亲奔丧回家。到徐州见着父亲,看见满院狼藉的

2020-05-16 11:32:32 2639 2

原创 SVM做文本分类代码实现详解

之前的一篇博文 SVM做文本分类详细操作流程 由于是很早之前写的,大部分都是调用脚本,代码也不是很全,这里我再对之前的博文进行一个详细的补充。代码详见 GitHub 。首先需要导入必要的包:import jiebaimport numpy as npimport pandas as pd然后我们把天气相关的语料称为正语料,其他类别的语料称为负语料,接着我们读取这两个类别的语料:pos = pd.read_csv('../Desktop/weather_pos.txt', encoding='U

2020-05-13 16:16:41 5500 2

原创 Negative Sampling 负采样详解

在word2vec中,为了简化训练的过程,经常会用到Negative Sampling负采样这个技巧,这个负采样到底是怎么样的呢?之前在我的博文 word2vec算法理解和数学推导 中对于word2vec有了很详细的数学推导,这里主要讲解一下负采样是如何降低word2vec的复杂度的。首先我们直接写出word2vec的目标函数,假设有一句话:query=w1,w2,w3,..,wnquery =...

2020-04-23 10:01:26 7138 8

原创 超详细分析如何用python处理ECG&PPG数据

这篇博文主要和大家分享一下如何使用python处理ECG和PPG的数据,从而使用PPG和ECG的数据进行血压的推测。首先普及一下ECG和PPG,首先ECG 心电图(electrocardiogram)心脏在每个心动周期中,由起搏点、心房、心室相继兴奋,伴随着生物电的变化,通过心电描记器从体表引出多种形式的电位变化的图形。PPG(photoplethysmograph)是利用光电容积描记(PPG)...

2020-03-20 15:23:24 23074 49

原创 搭建一个简易的医疗导诊系统

这里我们来介绍一个简易的医疗导诊系统,基于我们产品有五大测量的功能:心电,血氧,血压,血糖和体脂。这个医疗导诊系统主要是通过用户描述的一些症状来判断用户可能的指标异常,然后引导用户进行相关指标的测量,如果测量得到相关指标有异常的话,那么就指导用户去医院相关科室就诊。整个流程如图所示:所以说首先我们要了解症状如何来对应指标的异常呢,首先我们得统计出五大测量的功能对应哪些病症,这些病症又对应哪些症...

2020-02-20 14:54:26 1956

原创 如何训练一个词向量

现在在NLP领域,词向量是一切自然语言处理的基础,有了词向量我们就可以进行数据分析,文本聚类分类的一系列操作了。接下来我们就开始学习如何训练词向量,之前我们有介绍关于 word2vec 的博文 word2vec算法理解和数学推导,这篇博文我们就一起来学习如何实现词向量的训练。首先我们运用的语料是我之前爬取的京东小米9的好评,训练一个关于手机类的词向量。数据如下所示:首先我们需要给数据进行分词...

2019-09-26 16:44:26 3189 2

原创 中文命名实体识别NER详解

中文命名实体识别是在自然语言处理领域有着具足轻重的地位,因为在很多应用中,我们一定要提取出我们话术中的实体,所以说命名实体识别是非常重要的。一般来说,现在网上有很多NER的开源库,我们通过调用API就可以进行人名、地名、时间、机构名等实体的识别,效果也非常不错。但是这仅仅是限于某一些领域的命名实体识别,所以我们如果要进行特定领域的命名实体识别,就要另行进行开发。这里我们来一起学习用双向LSTM和C...

2019-09-21 16:40:17 3596 9

原创 中文情感分析

情感分析在NLP领域中是应用很广泛的技术,一般用深度学习来解决这一类的问题。其实我的理解就是情感分析就是一个分类问题。这里我爬取了京东小米9的用户评论,正面和负面的评价各1000条,爬虫和整体的代码我放在了 GitHub 。然后我把预训练的词向量文件放在了 百度网盘,提取码:rxci。我们一起来看看数据长得啥样,首先是小米9正面的评价:然后是小米9负面的评价:从这些数据印证了一句话,幸福...

2019-09-19 16:01:28 5880 6

原创 中文词性标注详解

所谓的词性标注在NLP领域是一个应用非常广泛的技术,总的来说,词性标注所解决的问题就是说,给定一句话 sss,我们将sss进行分词操作,可以将 sss 分成 nnn 个词,那么 sss 可以表示成:s=w1w2...wns = {w_1}{w_2}...{w_n}s=w1​w2​...wn​,我们将这 nnn 个词每一个词标注一个词性那么这句话词性可以表示成 t=z1z2...znt = {z_1...

2019-09-18 15:39:14 2892

原创 LeetCode 72. 编辑距离

编辑距离在自然语言处理中的应用是非常广泛的,比如在文本纠错中,编辑距离是必不可少的算法,下面这个题目就是计算两个单词的编辑距离计算:这道题目基本上用普通的办法很难去解决,只能考虑用动态规划来进行递推解答。首先我们可以确定只定义一维的DP[i]DP[i]DP[i]不能够有效地简化问题的处理,那么我们尝试用二维的DPDPDP来解答这个问题,首先我们定义一个二维的DP列表 DP[i][j]DP[i]...

2019-09-02 14:47:07 198

原创 LeetCode 3. 无重复字符的最长子串

这道题目是很经典的一道字符串题目,是要我们找出字符串中不含重复字符的子字符串长度,题目如下所示:刚拿到这道题目的时候,似乎唯一的办法就是穷举法,双重遍历整个字符串,找到不含重复的字符的字符串并记录长度,然后取最长的一个,所以我们需要 O(N2)O(N^2)O(N2) 的时间复杂度。我们秉承着“万物皆可动态规划”的思想,用动态规划来解决这个问题,我们首先遍历整个字符串然后判断每个字符 s[i]s...

2019-08-28 11:16:07 136

原创 LeetCode 53. 最大子序和

这是一道痕常见的题目,这里我们一起来学习如何使用动态规划的思想来查找一个序列中最大子序列和,题目如下:一般来说,我们首先会想到暴力求解的方法,双重循环遍历所有的子序列,然后求和取最大值,这样的方法显然比较低效。我们可以通过动态规划的思想来更新这个序列,如果加上这一位的数比之前一位的数要大,那么我们就进行更新,否则我们就不更新,就取自己本身的值,这里可以列出递推方程:nums[i]=max(n...

2019-08-27 22:33:04 184

原创 LeetCode 135. 分发糖果

这道题目是一道很有意思的题目,是老师给下朋友分糖的策略,题目如下:这道题目的难点就在于,相邻的孩子中,评分高的孩子必须获得更多的糖果。我们必须把所有的小朋友左右都进行遍历一遍,然后根据评分来分配糖果,我们可以用如下策略:首先我们给每个小朋友先发一颗糖,然后正向遍历一遍小朋友的评分,如果相邻的右边小朋友的评分比左边小朋友高,那么我们就给右边这个小朋友发一颗糖,然后将额外多发的糖的数量记录下来。...

2019-08-27 15:41:46 200

原创 LeetCode 650. 只有两个键的键盘

这是一道很有趣的题目,我们要在只能进行全部复制和粘贴操作的情况下做最少的操作次数,题目如下所示:这道题目从表面上看,这道题目似乎没有思路,我们应该在什么时候复制什么时候进行粘贴,这些细节都是很难处理的。所以我们可以不考虑这些细节,直接用动态规划的思想来分析这道题目,那么这道题目的核心就是求解出动态规划的递推方程。首先我们想一下,在最普通的情况下,我们一个个地粘贴单字母‘A’,需要 i−1i-...

2019-08-26 10:13:46 210

原创 LeetCode 46. 全排列

这道题目是数学中的一个排列组合的问题,我们要用代码来罗列出所有可能的组合,题目如下:在数学中,这是一道非常简单的排列组合,很容易就解决了。但是我们代码中需要用到回溯的思想,什么是回溯的思想呢,我们可以把这个数字序列可能的组合进行树形分解,如下图所示:我们把这个树形结构分成3层。第一层是红色的表示序列[1,2,3][1,2,3][1,2,3]所有的组合;第二层黄色层有三个分支,可以看成是1+...

2019-08-23 14:59:16 137

原创 LeetCode 435. 无重叠区间

这道题目是在给定的集合中找到需要去掉的区间最小数量,使得剩余区间互相不重叠,题目如下:这道题目似乎无从下手,因为找重叠的区域确实是比较麻烦的。我们可以尝试用贪心算法来解答这个问题,我们假设有集合:intervals=[[1,2],[3,5],[2,3],[3,6],[7,8],[6,7]]intervals=[[1,2],[3,5],[2,3],[3,6],[7,8],[6,7]]interv...

2019-08-14 17:32:04 268

原创 LeetCode 455. 分发饼干

这是一道很有意思的题目,给小朋友分饼干,要让尽可能多的小朋友满意,问如何分配饼干,题目如下所示:这里每个小朋友的胃口值都是不一样的,有的小朋友容易满足,有的小朋友比较难满足,甚至还可能满足不了。我们如何让尽可能多的小朋友满意呢,这里我们可以尝试用贪心算法来解决分配的问题,所谓贪心算法就是我们尽可能在当前获取最大的利益,也就是说我们只考虑当下,不考虑将来。以g=[8,7,6,4]g=[8,7,6...

2019-08-14 15:24:04 132

原创 LeetCode 377. 组合总和 Ⅳ

这道题目是在数组中找到和为给定目标正整数的组合的个数,题目如下所示:这道题目就难在不限数组中元素使用的个数,我们如果用穷举的方法很难得到正确的答案。于是我们可以想到用动态规划的思想来解决这个问题。首先我们求的是和,我们就可以把和进行拆分,如题目中的例子为例,nums=[1,2,3]nums = [1,2,3]nums=[1,2,3];target=4target=4target=4,那么我们...

2019-08-12 14:52:39 169

原创 LeetCode 309. 最佳买卖股票时机含冷冻期

这是股票买卖系列的一道题目,这道题目的难点主要是加上了一个卖出股票的一个冷冻期,题目如下所示:这里因为有了一个冷冻期,我们整体的解题难度就比较大了,也不好从正常的思路去解答。我们可以从动态规划的思想来解决问题。首先我们定义三个列表 sell、buy、cool,其中 sell[i]sell[i]sell[i] 表示截止到第 i 天,最后操作是卖的时候最大的收益;buy[i]buy[i]buy[i...

2019-08-10 19:06:52 146

原创 LeetCode 62. 不同路径

这是一道经典的二维动态规划题目,题目如下:这道题目用穷举的方法肯定是没有办法求解的,使用动态规划算法是最优秀的,我们可以想到每走到一格的路径数等于这个格子上面一格和左边一格的路径数之和,那么我们就可以定义动态规划的递推方程了:dp[i][j]=dp[i−1][j]+dp[i][j−1]dp[i][j] = dp[i-1][j] + dp[i][j-1]dp[i][j]=dp[i−1][j]+...

2019-08-10 12:29:08 197

原创 LeetCode 279. 完全平方数

这道题目是要用若干个完全平方数组成一个整数 n,目的是要组成和的完全平方数的个数最少,题目如下:这道题目看似无从下手,因为没有办法通过暴力去求解,因为把一个数分解成数的和的形式,我们不知道可以分解成多少个数。所以我们可以考虑使用动态规划明首先我们定义一个长度为 n+1 的列表,然后我们可以定义一个动态规划的递推方程:dp[j]=min(dp[j],dp[j−i∗∗2]+1)dp[j] = m...

2019-08-10 11:10:13 160

原创 LeetCode 108. 将有序数组转换为二叉搜索树

这道题目目的是将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。所谓的平衡二叉树,是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。如图所示:拿到题目似乎无从下手,要建立一个平衡二叉搜索树,我们可以联想到快速排序的算法思想。因为数组是有序的,首先我们可以找到一个中位数,然后分别从左右子树进行递归建立二叉树。代码如下所示:# Definition for a binar...

2019-08-09 14:39:38 168

原创 LeetCode 112.路径总和

这同样是一道递归和二叉树的题目,就是给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。返回一个布尔类型,题目描述如下:这道题目看似没有头绪,拿到题目很多朋友就会想是不是要深度优先遍历一遍二叉树,然后分别求和,找出结果。其实,我们可以运用一下逆向思维,入上图中的例子,sum = 22,那么我们除去根节点 5 ,在 5 的左右子树中找到和为 ...

2019-08-08 17:00:21 130

原创 LeetCode 226.翻转二叉树

这道题目是一道很经典的关于二叉树的算法题,题目如下:题目的描述非常简单,就是翻转一棵给定的二叉树,然而有趣的是这个备注,这个故事是 mac 系统的包管理工具 Homebrew 的开发者 Max Howell 去谷歌面试的时候没有做出这道面试题而遭淘汰了,所以这道题目也是引发血案的一道二叉树题目。其实这道题目比较标准的解法是用到递归的思想,运用递归调用来对左右子树的二叉树进行翻转交换操作,代码...

2019-08-08 14:44:58 136

原创 城市类知识图谱的搭建(elasticsearch+Django)(下)

上一篇博文说了整个工程的数据整理,我们这里再来说一下如何进行语义的理解,如何理解用户所要问的问题。这里我们运用的是类似一个正则匹配的规则匹配来解析我们输入的 query,这里我拍脑袋列出了城市类的知识图谱的一些常见的提问方式,如下图所示:这里我列出了8大类城市类的提问方法,比如第一类的问题表示什么城市有哪些景点,一般都是两种的提问方式:城市 有什么 景点,有什么 景点在 城市。我们可以用一些常...

2019-08-05 12:13:35 1914 2

原创 城市类知识图谱的搭建(elasticsearch+Django)(上)

这里写一篇博文来整理一下如何构建城市类的知识图谱,废话不多说,一般来说在知识图谱中比较重要的技术点就是实体识别和关系抽取。就比如在城市的类别中,一个城市有它的一些特性,比如说北京,如下图所示:中间表示是城市北京,蓝色圆框中间表示一些内容,而连接线表示北京与这些内容的一些关系,我们在做知识图谱的时候就要建立这些实体之间的关系。首先第一步是数据的整理,我们需要从网上爬取城市的数据,这里比较好的数...

2019-08-03 16:28:06 2839 11

原创 搭建一个简单的FAQ系统

现在的智能问答系统的应用是非常普遍的,比如说客服,前台机器人,讲解机器人等很多场景都可能会用到FAQ问答系统,所谓的FAQ就是 frequently asked questions,也就是说在某个场景下,比较常见的一些问题。首先我们来看看整体的FAQ流程,我们需要对输入的问题进行预处理,比如去停,分词等;然后需要对预处理之后的语料进行向量化,这里向量化的方法很多,也不拘泥于一种,常见的向量化方法...

2019-08-01 12:07:45 4890 7

原创 Transformer详解

Transformer是Google团队在17年提出的,在目前NLP的领域应用非常的广泛,是由Ashish Vaswani等人在论文《Attention is all your need》中提出的。Transformer 在机器翻译任务上的表现超过了 RNN,CNN,只用 encoder-decoder 和 attention 机制就能达到很好的效果,最大的优点是可以高效地并行化。那么为什么Tra...

2019-07-30 10:26:02 8429 15

原创 LeetCode 69.x 的平方根

这道题目其实就是求一个数 x 的平方根,不能使用调库实现,并且是取整数部分,题目如下:这道题目其实很简单,主要的思想其实就是二分查找,如何进行二分查找呢,首先我们来看看二分查找的代码模板:left, right = 0, len(array) - 1while left <= right: mid = (left + right) / 2 if array[mid] == tar...

2019-06-26 10:38:31 155

原创 LeetCode 98.验证二叉搜索树

这道题目是二叉搜索树种很经典的一道,题目说明很简单,就是验证一棵二叉树是否是二叉搜索树,题目如下:解决这样的题目就需要从二叉搜索树的特性入手,那么二叉搜索树最重要的一个特性就是:二叉树中所有节点的左子树中的节点的值都小于该节点的值,所有节点的右子树中的节点的值都大于该节点的值。 根据这个特性,这个题目最有效的解法就是,将这个二叉树进行中序遍历,那么每个子树遍历的顺序都是:左→根→右,因为在二叉...

2019-06-25 14:16:59 164

原创 LDA主题模型

LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,这个模型包含了词、主题和文档三层结构。所谓的生成模型,就是说我们人为一篇文章的每个词都是通过 “以一定概率选择了某个主题,并从这个主题中以一定的概率选择某个词语” 的这样的一个过程得到的。其中,词、主题和文档的关系就是文档到主题服从多项式分布,主题到词也服从多项式分布。首先,我们直观地看一下 LDA 模型,比...

2019-06-04 11:29:45 4464

原创 随机梯度下降SGD算法理解

随机梯度下降算法(Stochastic gradient descent,SGD)在神经网络模型训练中,是一种很常见的优化算法。这种算法是基于梯度下降算法产生的,所以要理解随机梯度下降算法,必须要对梯度下降算法有一个全面的理解。梯度下降:这个算法我在之前的博文Logistic Regression的数学推导过程以及Python实现 中有详细的说明介绍,这里我们再来简单回顾一下梯度下降算法:假设...

2019-05-29 10:13:21 22872 9

原创 LSTM架构详解

LSTM 是深度学习中很常见也很有用的一种算法,特别是在自然语言处理中更是经常用到,那么 LSTM 架构中的内部结构又是什么样子的呢?首先我们来看 LSTM 的整体框架:在这幅图中,中间是一个 LSTM 模块,有三个输入分别是:ct−1{c^{t - 1}}ct−1、ht−1{h^{t - 1}}ht−1 和 xtx^txt,然后经过 LSTM 之后,输出分别是 ct{c^t}ct、ht{h^...

2019-05-25 16:53:49 12633 9

原创 attention机制详解

attentionattentionattention机制一般来说会用在深度学习中,在图像处理和自然语言处理方面都有所应用,在自然语言处理中一般会用在机器翻译中,如下图所示,假设我们要翻译“机器学习”四个字:这是一个简易的RNNRNNRNN模型,h1−h4h1-h4h1−h4 是 t1−t4t1-t4t1−t4 输出的向量,这四个时刻的输入分别是“机”、“器”、“学”、“习” 四个字,这个时候...

2019-05-23 10:47:37 602

原创 LeetCode 322.零钱兑换

这道零钱兑换的题目很有意思,给定总金额和不同面额的硬币,需要找到硬币凑成金额的最少硬币数,题目如下所示:如何来解决这个问题呢?首先拿到这个题目,很多人会想到的是贪心算法,首先选取面值最大的硬币,然后依次选取面值较小的硬币,这种解法看似可行,其实还是有不可行的地方,我们举个例子:coins=[1,6,7];amount=30coins=[1,6,7];amount=30coins=[1,6,7]...

2019-04-29 14:26:02 179

原创 LeetCode 300.最长上升子序列

这道题目就是在一个数组中找到最长的上升子序列,且元素之间不必相邻,题目如下所示:除了暴力解法,我们最优的解法还是用动态规划DP的方法来解答这个问题,那么解答的流程是怎么样的呢?我们来看下面这个流程图:首先有一组 [10,9,2,5,3,7,101,18,21][10,9,2,5,3,7,101,18,21][10,9,2,5,3,7,101,18,21] 这样的一个数组,我们首先遍历这个数...

2019-04-29 11:37:31 318

原创 LeetCode 152.乘积最大子序列

这道题目是给定一个整数数组,返回乘积最大的连续子序列,题目如下所示:拿到题目我们肯定会想到的是暴力解法,通过两层循环遍历数组中所有的元素,记录每一次循环之后的全局乘积最小值,直到循环结束,我们就可以得到乘积最大的连续子序列,显然这样的解法时间复杂度达到了 O(n2)O(n^2)O(n2)。除了暴力的解法,我们可以想一下是否可以用动态规划DP的方法来解决此问题,那么如何DP呢?我们来看以下的这...

2019-04-27 10:59:43 241

原创 LeetCode 120.三角形最小路径和

这道题目是给定一个三角形的数组,找到自顶向下的的一条路径,使得路径上的元素之和最小,首先我们来看一下这道题的题目:首先我们拿到这个题目,我们会想到递归的方法,因为我们每次向下只能选择相邻的元素,那么我们递归的方程可以写成:triangle(i,j){ triangle(i, j + 1); triangle(i + 1, j + 1)}我们用这种递归的方法可以遍历所有的路径,我们可...

2019-04-26 17:24:39 252

机器学习基础

机器学习基础,ML的技术都用在哪里,最常用的LR是什么,ML工程师都在干什么。

2018-12-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除