无锁环形缓冲(Lock-free RingBuffer),又称无锁管道,是一个在不使用锁的情况下允许多线程访问的缓冲区,是在竞争条件下维护数据的最高性能选择之一。该方法早在1994年的 Implementing Lock-Free Queues 论文中就开始被研究,该文尝试实现了无锁链表,而本文将尝试实现无锁的环形数组。

Read More

分布式消息队列的优势是很好地对计算机系统进行了解耦,不同系统之间通过消息队列来交换消息。Kafka是分布式消息队列的代表作之一,很好的兼顾了性能和一致性,但代价就是使用起来更加复杂。我花了点时间阅读了Kafka 0.10版本的源码,本文不对繁杂的源码细节和实现做描述,只关注架构和思路。

Read More

前文讲述了Raft算法的核心,本文提供将Raft算法应用于分布式系统的宏观指导,将不再赘述算法细节而是专注于用户层面和应用层面,描述一个Raft的分布式系统需要进行哪些工作。

Read More

Raft 是一种分布式一致性算法,详细可见论文。主要作用是确保分布式系统的一致性问题。考虑主从模式的集群下,服务器挂掉或网络故障等情况发生时如何确保数据安全。在raft中,主节点称为leader,从节点称为follower。

下面我尝试以简洁流畅的语言描述raft算法的各个重要部分,某些地方会结合etcd/raft的源码说明。也可以结合raft.github.io这个网站的可视化工具来理解raft。

Read More

词性标注(Part-of-Speech Tagging, 简称POS tagging)是将句子中的每个词做一些标记,如动词,名词,副词,形容词等。词性很有用,因为它们揭示了一个单词及其相邻词的很多信息。知道一个单词是名词还是动词可以告诉我们可能的相邻单词(名词前面有限定词和形容词,动词前面有名词)和句法结构单词(名词通常是名词短语的一部分)。一个单词的词性甚至可以在语音识别或合成中发挥作用,因为有些单词不同词性时的读音是不同的。在本综述中,将讨论词性标注的相关算法,比如早期的隐马尔可夫模型 (Hidden Markov Model, HMM)和随机条件域 (Conditional Random Fields, CRF),以及近几年的神经网络。

Read More

先说明一些关于Linux进程间通信的基本知识:Linux的进程间通信是基于文件的,也可以称之为设备,因为所有设备其实都是文件。描述符其实指的是文件描述符,与文件系统中的一个文件对应,每当你创建出一个描述符,就创建出一个设备驱动进程,该进程一直监听着该文件的变化。

Read More

BERT,完整描述是使用双向编码器的Transformer (Bidirectional Encoder Representations from Transformers), 是Google在2018年发布的一个神经网络模型 [1]。该模型与以往大多数NLP模型不同,它本身便是一个用于迁移训练的模型。

对于迁移训练,在计算机视觉中迁移训练已经是个常态了,一般都是在经过ImageNet数据训练的预训练模型上进行微调。如今,研究人员在处理NLP问题上也希望能够通过预训练来提高模型能力。而BERT的该论文主要阐述如何在BERT模型上进行预训练,然后基于预训练模型,对于不同任务(task)进行微调。

Read More

Facebook激进地使用卷积网络处理NLP问题,意外地取得了很不错的效果。而 Google 一不做二不休,发布了一种新型的网络结构,transformer模型 [1],该网络结构既不使用RNN,也不使用CNN,而且也获得不错的效果。

Read More

使用长短时期记忆(LSTM)用于序列模型取得了很好的效果,在2017年由Facebook提出了使用卷积神经网络构建Seq2Seq模型 [1]。循环神经网络通过窗口移动方式输入数据进行训练,当句子有 \(\large n\) 个窗口时,获得对应的特征表示的时间复杂度为 \(\large \mathcal{O}(n)\)。而使用卷积神经网络进行并行化计算,当卷积核宽度为 \(\large k\) ,其时间复杂度为 \(\large \mathcal{O}(\frac{n}{k})\)

Read More

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×