自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Irving_zhang的专栏

对代码的不满足,是所有程序员的本质特征

  • 博客(138)
  • 资源 (5)
  • 收藏
  • 关注

原创 对话系统综述

在人工智能领域,模仿人类交谈能力的尝试可以追溯到人工智能的早期阶段。在1950年,艾伦·图灵(Alan Turing)提出了一种方法来测试一台机器的智能水平,这个机器被普遍称为图灵测试或模仿游戏。在图灵测试中,一台机器被要求与人交谈。机器的智能水平取决于机器如何能够欺骗人类评估者,使其相信机器是基于文本响应的人类。如果人类的评估者无法区分机器和人类的区别,那么就说机器已经通过了图灵测试,这意味着人工

2017-12-21 17:20:26 11438 2

原创 leetcode分类题解

leetcode的题解专栏多如牛毛,但很少有系统的全面的专栏。在专栏里,按照如下的分类方式进行刷题,从暴力解->优化解->最优解三个层次来分析题目,希望能够帮助到找工作的你。数组Remove Duplicates from Sorted Array Remove Duplicates from Sorted Array II Search in Rotated Sorted Array Sea

2017-12-18 19:45:00 4563 1

原创 程序员书单

这里写链接内容天天刷微博知乎,自己的大脑早就已经信息过剩,不堪重负。碎片化时代不断消耗人的耐心,你有多久没充电了?读书或许是让你静下心的好方法。 这里列举的首先是技术书籍,然后是非技术书籍。 书籍以列表的形式展示,标记已读、想读、和未整理,期待同你一起进步。计算机经典 ——经典的力量,跨越时间深入理解计算机系统代码大全程序员修炼之道计算机程序的构造和解释SICP算法导论重构:改善既有

2017-07-04 10:39:03 1636 2

原创 NLP入门实例推荐(Tensorflow实现)

自然语言处理(NLP)是机器学习的应用之一,用于分析、理解和生成自然语言,以便人类与计算机,人类与人类更好的交流。自然语言处理按照任务类型可以分为分类、匹配、翻译、结构化预测、与序贯决策过程。自然语言处理中的绝大多数问题皆可归入下图其中的一个。这为我们学习自然语言处理提供了大的指导方向,让我们可以心无旁骛的寻找、理解和复现论文。在自然语言处理发展的过程中,出现了如下趋势: 第一,传统的基于句法-语

2017-04-06 17:34:18 38485 13

原创 第0节-斯坦福cs229机器学习笔记

国内本科和研究生对于机器学习的热情特别高涨,北邮研一开了一门机器学习与模式识别的课程100人的课容量,两秒就抢没了。然而据我观察很多同学学习机器学习的时候有两个问题,第一学习资料杂乱,符号标记不一致导致公式推导过程难以记忆。第二,缺少动手编程的机会,因此对很多公式理解不深刻。   斯坦福人工智能实验室是人工智能领域的扛把子,牛人包括现在在百度的吴恩达NG(具体课程CS229)和现在在Google

2017-01-15 11:14:52 4551 1

原创 leetcode题解 滑动窗口总结

—核心:左右双指针(left,right)在起始点,right向右逐位滑动循环。——核心:左右双指针(left,right)在起始点,right向右逐位滑动循环。如果:窗口内满足条件,right向右扩大窗口,并更新最优结果。如果:窗口元素满足条件,left向右缩小窗口,并更新最优结果。如果:窗口元素不满足条件,right向右扩大窗口。如果:窗口元素不满足条件,left向右缩小窗口。滑动窗口使用思路(寻找最长)滑动窗口使用思路(寻找最短)——right到达结尾。——right到达结尾。

2023-08-27 14:17:33 203

原创 推荐系统用户长序列建模

基于这些问题,作者干脆直接模仿推荐系统多阶段过滤的方法,第一阶段通过相对粗略的搜索模式,提取行为序列中与候选AD较相关的节点,第二阶段通过精准搜索的模式,得到序列与候选AD的关系,并形成embedding供MLP使用。右图是DIN的模型结构,作者将每个行为节点与候选节点做交叉得到权重(即途中的activation unit),再通过weighted-sum-pooling的模型得到行为的embedding,这样,对于每个候选商品,提取的用户行为embedding是不同的。这是针对写操作的一种优化。

2023-05-16 16:36:59 932

原创 leetcode题解-27. Remove Element

解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。输入:nums = [0,1,2,2,3,0,4,2], val = 2。元素的顺序可以改变。输入:nums = [3,2,2,3], val = 3。输出:5, nums = [0,1,4,0,3]

2023-03-04 17:49:15 650

原创 leetcode题解-704. 二分查找

if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1。我们定义 target 是在一个在左闭右闭的区间里,也就是[left, right] (这个很重要非常重要)。输入: nums = [-1,0,3,5,9,12], target = 9。输入: nums = [-1,0,3,5,9,12], target = 2。

2023-03-04 16:29:31 449

转载 蒙特卡洛采样与Gibbs采样

采样采样问题指的是给定一个特定的概率分布p(z),得到一批符合这个概率分布的样本点。采样的方法有很多,MCMC是其中的一类方法,意思是利用Mento Carlo和Markov Chain完成采样。当然,要完成对各种分布的采样,有一个默认的假设,就是我们已经能够对均匀分布进行采样了(后面就专指范围为0-1的均匀分布),也就是编程中通常会用到的伪随机数发生器,在各大编程语言中通常以random命...

2018-09-25 17:08:07 2435 2

原创 leetcode题解-6. ZigZag Conversion

题意:将字符串按照锯齿形排列,然后把从上到下把所有行顺序输出,组成新的字符串。例子: Input: s = “PAYPALISHIRING”, numRows = 3 Output: “PAHNAPLSIIGYIR” Example 2:Input: s = “PAYPALISHIRING”, numRows = 4 Output: “PINALSIGYAHRPI” Exp...

2018-08-28 15:42:26 526

原创 leetcode题解-3、Longest Substring Without Repeating Characters

题意:给定一个字符串,求最长不重复子串(非子序列)。例子: Input: “abcabcbb” Output: 3 分析: “abc”, 它的长度为 3.Input: “bbbbb” Output: 1 分析: “b”, 它的长度为 1.Input: “pwwkew” Output: 3 分析: The answer is “wke”, with the lengt...

2018-08-27 15:12:02 560

原创 最长公共子序列、最长连续公共子序列、最长递增子序列

面试中除了排序问题,还会经常出现字符串的子序列问题,这里讲解使用动态规划解决三个常见的子序列问题: 1、最长公共子序列问题(LCS,longest-common-subsequence problem) 2、最长连续公共子序列问题 3、最长递增子序列(LIS,longest-increment-subsequence)最长公共子序列问题LCS问题描述:给定两个序列X=&l...

2018-04-04 17:49:02 11041

原创 记忆网络系列之Recurrent Entity Network

这篇论文是facebook AI在2017年的ICLR会议上发表的,文章提出了Recurrent Entity Network的模型用来对world state进行建模,根据模型的输入对记忆单元进行实时的更新,从而得到对world的一个即时的认识。该模型可以用于机器阅读理解、QA等领域。本文参考了Google团队的NTM和其他的神经计算单元,能够基于内容和位置对记忆单元进行读写操作。本文在babi

2018-01-30 12:15:03 2424

原创 记忆网络系列之Key Value Memory Network

在上一篇End to end memory network中提到,在问答系统中加入KB(knowledge bases)能提高训练的效果。但是一些KB,如FreebaseKB有内在的局限性,即1、不完整;2、有固定的模式不能支持所有类型的答案。因此即使KB方式能够满足特定领域的问题,但是不能扩大规模,在任何所有领域都行得通。因此,本文Key-Value Memory Networks for Di

2018-01-26 16:30:06 6020 1

原创 记忆网络模型系列之End to End Memory Network

上文记忆网络介绍模型并非端到端的QA训练,该论文End-To-End Memory Networks就在上文的基础上进行端到端的模型构建,减少生成答案时需要事实依据的监督项,在实际应用中应用意义更大。本文分为三个部分,分别是数据集处理、论文模型讲解及模型构造、模型训练。主要参考代码为MemN2N。数据集处理==论文中使用了babi数据集,关于本数据集在文章Ask Me Anyt

2018-01-19 21:55:28 5584 2

原创 记忆网络Memory Network

在本专栏的第一篇文章对话系统综述中提到,seq2seq中的记忆依靠rnnCell或者lstmCell实现,但是rnn和lstm的记忆能力实在有限,最多也就记忆十几个时间步长。因此当句子长度增长时或者需要添加先验知识时,seq2seq就不能满足此时对话系统的需求了。比起人工增加RNN隐藏状态大小,我们更愿意任意增加加入模型的知识量,同时对模型本身做出最小限度改变。基本上,我们能用独立存储器——作

2018-01-18 11:55:10 16302 1

原创 实现基于seq2seq的聊天机器人

前几篇博客介绍了基于检索聊天机器人的实现、seq2seq的模型和代码,本篇博客将从头实现一个基于seq2seq的聊天机器人。这样,在强化学习和记忆模型出现之前的对话系统中的模型就差不多介绍完了。后续将着重介绍强化学习和记忆模型在对话系统中的应用。基于检索的聊天机器人的实现seq2seq模型详解tensorflow中的seq2seq的代码详解闲聊机器人在网上有很多有趣的小例子:c

2018-01-17 17:42:21 15184 6

原创 python 项目自动生成requirements.txt文件

我们为什么要使用requirements.txt呢?主要使用目的:任何应用程序通常需要设置安装所需并依赖一组类库来满足工作要求。要求文件是指定和一次性安装包的依赖项具体一整套方法。requirements.txt文件格式:requests==1.2.0 Flask==0.10.1这样我们就可以安装requirements.txt依赖pip install -r r

2018-01-17 17:05:43 106350 5

原创 Tensorflow模型的保存与恢复

最近在写对话生成的代码时,遇到一个问题就是在预测阶段,对于相同的输入,每一次生成的文本都不一样,而且生成的结果乱七八糟。因此定位到是训练好的模型没有restore,特此记录一下TensorFlow中模型的保存与恢复问题,即tf.train.saver函数的使用。创建Saver模型保存,先要创建一个Saver对象:如saver=tf.train.Saver()在创建这个Sav

2018-01-17 09:49:28 4058

原创 面试中常用的排序算法

排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、选择排序、基数排序、桶排序等。面试官对于这些排序可能会要

2017-12-29 11:47:13 2478

原创 tensorflow中的seq2seq的代码详解

seq2seq模型详解中我们给出了seq2seq模型的介绍,这篇文章介绍tensorflow中seq 2seq的代码,方便日后工作中的调用。本文介绍的代码是版本1.2.1的代码,在1.0版本后,tensorflow要重新给出一套seq2seq的接口,把0.x的seq2seq搬到了legacy_seq2seq下,今天读的就是legacy_seq2seq的代码。目前很多代码还是使用了老的seq2seq

2017-12-25 22:28:13 7825

原创 seq2seq模型详解

在李纪为博士的毕业论文中提到,基于生成的闲聊机器人中,seq2seq是一种很常见的技术。例如,在法语-英语翻译中,预测的当前英语单词不仅取决于所有前面的已翻译的英语单词,还取决于原始的法语输入;另一个例子,对话中当前的response不仅取决于以往的response,还取决于消息的输入。其实,seq2seq最早被用于机器翻译,后来成功扩展到多种自然语言生成任务,如文本摘要和图像标题的生成。本文将介绍

2017-12-25 09:41:04 22846 3

原创 leetcode题解-147. Insertion Sort List

题意:使用插入排序,将链表的值从小到大排列。分析:Insertion Sort就是把一个一个元素往已排好序的list中插入的过程。忘记插入排序过程的同学可以看插入排序维基百科初始时,sorted list是空,把一个元素插入sorted list中。然后,在每一次插入过程中,都是找到最合适位置进行插入。因为是链表的插入操作,需要维护pre,cur和next3个指针。pre用来发现合适的插入位置,cu

2017-12-19 21:42:21 494

原创 leetcode题解-23. Merge k Sorted Lists

题意:合并k个有序的链表,分析描述算法的复杂度。分析:这道题目在分布式系统中非常常见,来自不同client的sorted list要在central server上面merge起来。解法就是有点类似于归并排序的思路,就是分治法,不了解归并排序的朋友,请参见归并排序-维基百科,是一个比较经典的O(nlogn)的排序算法,还是比较重要的。思路是先分成两个子任务,然后递归求子任务,最后回溯回来。这个题目也

2017-12-18 22:34:50 442

原创 leetcode题解-21. Merge Two Sorted Lists

题意:合并两个排好序的链表,并返回这个新链表。新链表应该由这两个链表的节点拼接而成。例子:给定链表 l1: 1->2->4, l2: 1->3->4 返回链表: 1->1->2->3->4->4分析:本题是简单题,但是我做出来却花费约四十分钟。因为感觉两个链表节点的大小关系不好定。做完以后我看了一下discuss,基本上都是使用递归来做的,我个人不喜欢用递归,因为空间的消耗量太大。因此就写出了

2017-12-18 21:48:31 358

原创 leetcode题解-88. Merge Sorted Array

题解:给定两个排序的整型数组nums1和nums2,将nums2合并到nums1成一个排序数组。你可以假设nums1中有足够的空间(空间大于或等于m+n)来存放来自nums2的额外元素。nums1和nums2的初始空间分别是m和n。分析:题目本身比较简单,要求in-place处理数组,因此不能另外申请一个m+n的数组nums3。好在nums1有足够的空间,但是如果从数组头部开始merge的话,可能会

2017-12-18 16:53:31 636

原创 leetcode题解-150. Evaluate Reverse Polish Notation

题意:这道题是逆波兰式的求解,不了解逆波兰式的朋友可以参考一下逆波兰表示法 - wiki。例子: [“2”, “1”, “+”, “3”, ““] -> ((2 + 1) 3) -> 9 [“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6逆波兰式有个优点就是他不需要括号来表示优先级,直接根据式子本身就可以求解。思路是维护一个运算数栈,读到运算数的

2017-12-16 17:37:29 660

原创 leetcode题解-84.Largest Rectangle in Histogram

题解:给出的n个非负整数表示每个直方图的高度,每个直方图的宽均为1,在直方图中找到最大的矩形面积。例子:给定数组: height = [2,1,5,6,2,3],返回 10 (5 * 2) 分析:总体来说首先很自然会想到暴力法解决,但是优化的方式不容易想到。自己看了网上的答案都特别抽象,看了一个多小时最后靠举例子才勉强明白怎么优化。1、暴力法 首先,可以使用暴力破解法。以每一个数字作为高度,遍历

2017-12-16 16:39:49 1076

原创 leetcode题解-32. Longest Valid Parentheses

题意:给定一个括号组成的字符串,要求求出最长的合法括号长度。例子: 输入: s = “(()” 输出: 2输入: s = “)()())” 输出: 4分析:一开始我想的是,当遇到”(“时,将”(“入栈;遇到”)”时,如果栈不为空,那么弹出一个”(“,然后最大长度加2;如果栈为空,就说明count需要重新计数。即:for(int i = 0; i < len; i++){ if(s.

2017-12-15 10:28:32 553

原创 leetcode题解-20. Valid Parentheses

题意:给出一个只包含 ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ 和 ‘]’ 的字符串,判断它的输入是否是有效的。例子:括号必须是以正确的顺序关闭的, “()” 和 “()[]{}” 都是有效的,但是 “(]” 和 “([)]” 是无效的。分析:判断括号匹配的合法性。需要使用一个栈来解决问题。遇到左括号入栈,遇到右括号,检查栈顶的左括号是否匹配,如果匹配,弹栈,如果不匹配,返回错误。 需要注意

2017-12-14 09:57:47 348

原创 基于检索的聊天机器人的实现

在文章NLP入门实例推荐中提到,对话系统有两种形式: 基于检索的对话系统 模式:s1,s2–>R,即字符串s1和s2符合一定的规则。 基于生成的对话系统 模式:s1–>s2,即由字符串s1得到s2。两者各有优势与不足。首先基于检索的对话系统,将回复使用的数据预先存储,那么优点就是回复的内容不会有语法和语义的错误,但因为不会像基于生成的对话系统那样创造出新的回答,因此也无法对未训练的问题作

2017-12-13 11:27:14 15754 6

原创 leetcode题解-146. LRU Cache

题意:本题的题目较难读懂,不过这能考察一个面试者能否短时间内,理解一段未见过的内容的能力。在题目的wiki链接里提供了这样一张图: 缓存的长度(capacity )为4,A、B、C、D首先插入缓存中;插入E时,超过了capacity ,需要覆盖最近最少使用的A;插入F时,超过了capacity ,需要覆盖B。为最近最少使用(LRU)的缓存策略设计一个数据结构,它应该支持以下操作:获取数据(get)

2017-12-12 22:22:16 1031

原创 leetcode题解-143. Reorder List

题意:给定一个链表,把最后一个结点插入到第1个结点后,倒数第二个结点插入到第2个结点后,倒数第三个结点插入到第3个结点后,以此类推……注意:需要在原数组上进行操作,同时不能改变链表的value。例子: 给定链表: L0→L1→…→Ln-1→Ln, 返回链表: L0→Ln→L1→Ln-1→L2→Ln-2→…给定链表 1->2->3->4->5->6 返回链表 1->6->2->5->3->4分析

2017-12-12 20:58:37 385

原创 leetcode题解-142. Linked List Cycle II

题意:判断一个链表是否有环,有环的话返回环的起始节点,无环的话返回NULL。分析:此题是141. Linked List Cycle的follow up。因此是剑指offer的原题,因此这里不再选用其他方法,直接采用剑指offer的方法。总共分为三步: 1、得到环的长度circleLen。 2、设置fast节点和slow节点,初始值都为head。先将fast节点走circleLen个长度。 3

2017-12-11 22:33:31 428

原创 leetcode题解-141. Linked List Cycle

题意:判断一个单链表是否存在环分析: 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇 。 时间复杂度:O(n)代码:/** * Definition for singly-linked list. * class ListNode { * int val;

2017-12-11 22:11:15 279

原创 leetcode题解-138. Copy List with Random Pointer

题意:深拷贝一个链表,链表除了含有next指针外,还包含一个random指针,该指针指向字符串中的某个节点或者为空。节点定义为:// Definition for singly-linked list. public class RandomListNode { int label; RandomListNode next, random; RandomListNod

2017-12-11 21:54:09 390

原创 leetcode题解-25. Reverse Nodes in k-Group

题意:把原始链表k个k个的反转,如果最后剩余的不到k个结点,那么保持不变。例子: 给定链表: 1->2->3->4->5 如果 k = 2, 返回链表: 2->1->4->3->5 如果 k = 3, 返回链表: 3->2->1->4->5分析:前两天十大上有师兄分享17年算法岗面经时提到了本题,因此在做本题的时候也格外认真。晚上洗澡的时候理了一下思路,然后手写代码bug-free,还是很开心

2017-12-11 21:43:22 685

原创 leetcode题解-24. Swap Nodes in Pairs

题意:给定一个链表,交换相邻的两个结点,返回交换之后的头结点。例子:给定链表 1->2->3->4, 返回链表 2->1->4->3.分析:关键在于分析循环的结束条件。以例子来说明: 设置三个指针pre,leftNode,secondNode。初始值如下, pre = dummyNode; leftNode= 节点1; secondNode = 节点2;循环条件为while(right.ne

2017-12-11 20:47:17 499

原创 leetcode题解-19. Remove Nth Node From End of List

题意:给一个链表和数字n,移除倒数第n个数,返回head。例子: 给定链表 1->2->3->4->5, 并且n = 2. 返回链表 1->2->3->5.

2017-12-11 20:15:04 477

第十三到十五课

斯坦福人工智能实验室是人工智能领域的扛把子。本笔记是于NG的CS229课程的讲解做出,NG风度翩翩,逻辑清晰,有着理工男特有的人格魅力。本笔记也会结合《统计学习方法》和林轩田《机器学习基石》对NG课程没有展开的点做通俗的说明,一来做到理清知识点关系,二来可以备忘,温故知新。

2018-01-12

第十到十二课

斯坦福人工智能实验室是人工智能领域的扛把子。本笔记是于NG的CS229课程的讲解做出,NG风度翩翩,逻辑清晰,有着理工男特有的人格魅力。本笔记也会结合《统计学习方法》和林轩田《机器学习基石》对NG课程没有展开的点做通俗的说明,一来做到理清知识点关系,二来可以备忘,温故知新。

2018-01-12

第七到九课

斯坦福人工智能实验室是人工智能领域的扛把子。本笔记是于NG的CS229课程的讲解做出,NG风度翩翩,逻辑清晰,有着理工男特有的人格魅力。本笔记也会结合《统计学习方法》和林轩田《机器学习基石》对NG课程没有展开的点做通俗的说明,一来做到理清知识点关系,二来可以备忘,温故知新。

2018-01-11

第四到六课

斯坦福人工智能实验室是人工智能领域的扛把子。本笔记是于NG的CS229课程的讲解做出,NG风度翩翩,逻辑清晰,有着理工男特有的人格魅力。本笔记也会结合《统计学习方法》和林轩田《机器学习基石》对NG课程没有展开的点做通俗的说明,一来做到理清知识点关系,二来可以备忘,温故知新。

2018-01-11

机器学习要点第一到三课

斯坦福人工智能实验室是人工智能领域的扛把子。本笔记是于NG的CS229课程的讲解做出,NG风度翩翩,逻辑清晰,有着理工男特有的人格魅力。本笔记也会结合《统计学习方法》和林轩田《机器学习基石》对NG课程没有展开的点做通俗的说明,一来做到理清知识点关系,二来可以备忘,温故知新。

2018-01-11

空空如也

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

TA关注的人

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