聊聊从逻辑门到操作系统的计算机
现代计算机已经发展的非常复杂,要理解计算机的运行原理都已经变得异常艰难,虽说我们无法亲自去制造他,但我们可以了解下计算机系统是怎么从0发展而来的。 逻辑门是计算机的基础元件,通过它可以完成逻辑运算(也称布尔运算),这类运算输入输出都只有0和1。 执行“与”操作,两个输入一个输出…
同义词相似度可以怎样计算
词语的相似性的计算方法有很多,比如字面相似度计算方法、基于语义词典的计算方法、基于统计的相似度(向量空间模型)计算方法和基于神经网络的相似度计算方法。 本篇文章讲讲基于词林的语义相似性。 《同义词词林》是上世纪80年代出版的对汉语词汇进行语义分类的义类词典,共收录64223条词…
从Java到JVM到OS线程的优先级
Java 的线程的调度机制由 JVM 实现,假如有若干条线程,你想让某些线程拥有更长的执行时间,或某些线程分配少点执行时间,这时就涉及“线程优先级”。 Java 把线程优先级分成10个级别,线程被创建时如果没有明确声明则使用默认优先级,JVM 将根据每个线程的优先级分配执行时间…
字符串连接你用+还是用StringBuilder
据我所知字符串确实已经成为 Java 开发人员最常用的类了,而且是大量使用。我们都知道,String 其实是封装了字符,所以俩字符串连接就是将字符串对象里面的字符连起来。很多人习惯使用+来连接字符串,也有人会用 StringBuilder 的append方法。 看看如果我们在程…
图灵机与计算理论
图灵机和计算理论是人工智能乃至整个计算机科学的理论基础,邱奇-图灵论题告诉我们一切可计算过程都可以用图灵机模拟。 图灵机,又称图灵计算、图灵计算机,是由数学家艾伦·麦席森·图灵(1912~1954)提出的一种抽象计算模型,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的…
闲聊URL
URL 即统一资源定位符(Uniform Resource Locator)。它是互联网上标准资源的地址,通过它来对资源定位。 我们访问资源时会有不同的协议,比如http:、ftp:、news:。不同的协议对于客户端可用于区分不同的资源类型,比如 http 协议对应 web 服…
怎样衡量两个字符串的相似度(编辑距离动态规划求解)
目前计算句子相似性有很多不同的方案,比如基于语义词典的方法、基于相同词汇的方法、基于统计的方法和基于编辑距离的方法。这篇文章先介绍编辑距离的基础。 编辑距离其实就是指把一个字符串转换为另外一个字符串所需要的最小编辑操作的代价数。包括插入字符、替换字符和删除字符。编辑距离越小,相…
Java线程的状态
对于线程的状态的分类并没有严格的规定,只要能正确表示状态即可,如图,先看其中一种状态分类,一个线程从创建到死亡可能会经历若干个状态,但在任意一个时间点线程只能处于其中一种状态,总共包含五个状态:新建(new)、可运行(runnable)、运行(running)、非可运行(not…
怎样实现基于Trie树和字典的分词功能
目前做分词比较流行的是用深度学习来做,比如用循环神经网络和条件随机场,也有直接用条件随机场或隐马尔科夫模型的。前面也实现过上面几种,效果挺不错,基于隐马尔科夫模型的差一点,条件随机场的效果较好,而加入深度学习的效果最好。 而最最传统的分词做法很多都是基于字典的,然后通过最大匹配…
从JDK源码看StringBuffer
Java 中处理字符串时经常使用的 String 是一个常量,一旦创建后不能被改变。为了提供可修改的操作,引入了 StringBuilder 类,可看前面的文章《从JDK源码看StringBuilder》。但它不是线程安全的,只用在单线程场景下。所以引入了线程安全的 Strin…
开源一个机器学习文本分析项目
A text analyzer which is based on machine learning that can analyze text. So far, it supports hot word extracting, text classification, par…
直接内存和堆内存谁快
直接内存大多时候也被称为堆外内存,自从 JDK 引入 NIO 后,直接内存的使用也越来越普遍。通过 native 方法可以分配堆外内存,通过 DirectByteBuffer 对象来操作。 直接内存不属于 Java 堆,所以它不受堆大小限制,但是它受物理内存大小的限制。 可以通…
人工智能六十多年
作为吃瓜群众,多数人对人工智能的了解主要是通过科幻片,里面的机器人拥有人类的思维和超凡的能力。然而目前现实的人工智能却只是很弱的人工智能,它仅仅是功能单一的某个程序。 人工智能六十多年的发展经历了几度繁荣和衰落,虽然已取得不错的进展,然而现实与理想的差距还是很大,前进道路曲折。…
从JDK源码看StringBuilder
在 Java 中处理字符串时经常会使用 String 类,实际上 String 对象的值是一个常量,一旦创建后不能被改变。正是因为其不可变,所以也无法进行修改操作,只有不断地 new 出新的 String 对象。 为此 Java 引入了可变字符串变量 StringBuilder…
一图简看基于搜索的问答机器人设计
对于 chatbot,现在学界更流行的实现方式是基于深度学习和强化学习,比如seq2seq模型,具体可参考前面的文章《深度学习的seq2seq模型》。 而对于工业界,直接用 seq2seq 模型来实现端对端的还是几乎没有的,但在很多模块的处理也开始引入深度学习,除此之外也会尝试…
Java9后String的空间优化
据我所知 Java 开发人员几乎任何时候都会想到 String,字符串确实已经成为最常用的类了,而且是大量使用。我们都知道,String 其实是封装了字符,里面必须由字符或字节数组来存放,从 Java9 开始 Java 语言开发者对 String 做了一些空间的优化。 JDK9…
双向循环神经网络+条件随机场进行分词
目前 NLP 领域的很多任务基本都会朝深度学习、注意力模型、半监督等方向发展,而且确实也取得了更好的效果,而有些也会把深度学习和传统机器学习结合起来,都能有不错的性能提升。这里讲一个用深度学习和机器学习结合来做分词。 分词就是将一句话按照最合理的单词分开,英语一般就没有这个麻烦…
Java对象在JVM中长啥样
Java 是门面向对象的开发语言,那么我们自己编写的 Java 类生成的对象是什么样的?它肯定保存在虚拟机的内存中,但它以怎样的结构来保存的呢?带着疑问往下看看。 Java 层的开发可能不太熟悉 Klass,但肯定熟悉 class,我们只要知道 Klass 是 class 在 …
神经网络原理的可视化
神经网络具有很强的学习能力和自适应自组织能力,而且随着隐含层的数量增大学习能力也将变得更强,因此目前很多场景都使用神经网络,比如深度学习,我们更熟悉的就是阿法狗。 神经网络已经有很多变种,比如卷积神经网络、循环神经网络等等。 感知器是一种最基础的神经网络,他只有输入层和输出层,…
读《Linux之父自传-只是为了好玩》
很久前看了《Linux之父林纳斯自传-只是为了好玩》,趁有空写下些东西。Linux几乎作为最伟大的开源项目,我觉得跟机器打交道的人都应该了解下它是怎么诞生的。 就是那个很在意自己长了个大鼻子的人,1969年出生,从小受外公影响并从十一岁就开始捣鼓计算机,而且成功写出了自己的第一…