27 Oct

什么时候多进程的加速比可以大于1?

多进程或者多线程等并行加速目前已经不是什么难事了,相信很多读者都体验过。一般来说,我们会有这样的结论:多进程的加速比很难达到1。换句话说,当你用10进程去并行跑一个任务时,一般只能获得不到10倍的加速,而且进程越多,这个加速比往往就越低。

要注意,我们刚才说“很难达到1”,说明我们的潜意识里就觉得加速比最多也就是1。理论上确实是的,难不成用10进程还能获得20倍的加速?这不是天上掉馅饼吗?不过我前几天确实碰到了一个加速比远大于1的例子,所以在这里跟大家分享一下。

词频统计

我的原始任务是统计词频:我有很多文章,然后我们要对这些文章进行分词,最后汇总出一个词频表出来。一般的写法是这样的:

tokens = {}

for text in read_texts():
    for token in tokenize(text):
        tokens[token] = tokens.get(token, 0) + 1

这种写法在我统计THUCNews全部文章的词频时,大概花了20分钟。

点击阅读全文...

20 Aug

开源一版DGCNN阅读理解问答模型(Keras版)

去年写过《基于CNN的阅读理解式问答模型:DGCNN》,介绍了一个纯卷积的简单的问答模型。当时是用Tensorflow实现的,而且没有开源,这几天抽空用Keras复现了一下,决定开源。

模型综述

关于DGCNN的基本介绍,这里不再赘述。本文的模型并不是之前模型的重复实现,而是有所改动,这里只介绍一下被改动的地方。

1、这里放出的模型,线下验证集的分数大概是0.72(之前大约是0.75);

2、本次模型以字为单位,使用笔者之前探索出来的“字词混合Embedding”(之前是以词为单位);

3、本次模型完全去掉了人工特征(之前用了8个人工特征);

4、本次模型去掉了位置Embedding(之前将位置Embedding拼接到输入上);

5、模型架构和训练细节有所微调。

点击阅读全文...

23 Dec

2020年全年天象

Astronomy Calendar of Celestial Events
2020年全年天象

翻译自NASA:http://eclipse.gsfc.nasa.gov/SKYCAL/SKYCAL.html

(北京时间)

2011年版本

2012年版本

2013年版本

2014年版本

2015年版本

2016年版本

2017年版本

2018年版本

2019年版本

点击阅读全文...

29 Sep

第1000篇文章

后台提示,本文是科学空间的第1000篇文章。

本想写下一篇文章的,但是看到这个提示,就先瞎写个水文纪念一下。都说人老了就喜欢各种感叹,这话还真不假。看到别人高考来个感想,博客十周年了来个感想,现在第1000篇文章了也来个感想,似乎总想找点理由感叹一下一样。那今天又能扯些啥犊子呢?

1000

1000

首先,自恋一下。1000篇文章,如果要印刷下来,就算每篇文章印一页,那也能印个1000页了,相信不少人都没捧起过1000页的书吧(我还真读过,有文章为证:《哈哈,我的“〈圣经〉”到了》),我居然能写个1000篇,也是挺佩服自己的。当然,早期的文章有部分是转载的,不是全部都自己写的,不过还是坚持了不少原创内容,而且就算是转载的也是经过自己编辑整理的,不算纯Copy,所以也勉强能说的过去吧。

然后,庆幸一下。博客开始的主题是天文和科普,后来慢慢偏向了理论物理和数学,现在则偏向了机器学习,但不管怎样,总算很庆幸地在科学这条路坚持了下来。虽然没有像幼时设想的那样成为一名真正的自然科学家/数学家,但终究有点相关,闲时依然可以做做科学计算,勉强也对得起当初的梦想。

点击阅读全文...

27 Oct

TeaForN:让Teacher Forcing更有“远见”一些

Teacher Forcing是Seq2Seq模型的经典训练方式,而Exposure Bias则是Teacher Forcing的经典缺陷,这对于搞文本生成的同学来说应该是耳熟能详的事实了。笔者之前也曾写过博文《Seq2Seq中Exposure Bias现象的浅析与对策》,初步地分析过Exposure Bias问题。

Teacher Forcing示意图

Teacher Forcing示意图

本文则介绍Google新提出的一种名为“TeaForN”的缓解Exposure Bias现象的方案,来自论文《TeaForN: Teacher-Forcing with N-grams》,它通过嵌套迭代的方式,让模型能提前预估到后$N$个token(而不仅仅是当前要预测的token),其处理思路上颇有可圈可点之处,值得我们学习。

(注:为了尽量跟本博客旧文章保持一致,本文的记号与原论文的记号有所不同,请大家以理解符号含义为主,不要强记符号形式。)

点击阅读全文...

7 Dec

【龟鱼记】全陶粒的同程底滤生态缸

最近一段时间入了水族的坑,整了个60cm×40cm的超白缸来玩,主要是龟鱼共养。个人比较追求自然仿生,所以希望能在缸里建立一个相对稳定的仿生态环境。当然,其实这都是借口,根本原因是懒得换水,也不想洗过滤棉,所以就想着依靠生态系统自身的净化能力来延长换水时间。为此,参考网上的资料搞了个同程底滤,并且根据自己的经验做了一些修改。

生态缸-俯视图

生态缸-俯视图

点击阅读全文...

19 Jul

用开源的人工标注数据来增强RoFormer-Sim

大家知道,从SimBERTSimBERTv2(RoFormer-Sim),我们算是为中文文本相似度任务建立了一个还算不错的基准模型。然而,SimBERT和RoFormer-Sim本质上都只是“弱监督”模型,跟“无监督”类似,我们不能指望纯弱监督的模型能达到完美符合人的认知效果。所以,为了进一步提升RoFormer-Sim的效果,我们尝试了使用开源的一些标注数据来辅助训练。本文就来介绍我们的探索过程。

有的读者可能想:有监督有啥好讲的?不就是直接训练么?说是这么说,但其实并没有那么“显然易得”,还是有些“雷区”的,所以本文也算是一份简单的“扫雷指南”吧。

前情回顾

笔者发现,自从SimBERT发布后,读者问得最多的问题大概是:

为什么“我喜欢北京”跟“我不喜欢北京”相似度这么高?它们不是意思相反吗?

点击阅读全文...

10 Sep

在五花八门的预训练任务设计中,NSP通常认为是比较糟糕的一种,因为它难度较低,加入到预训练中并没有使下游任务微调时有明显受益,甚至RoBERTa的论文显示它会带来负面效果。所以,后续的预训练工作一般有两种选择:一是像RoBERTa一样干脆去掉NSP任务,二是像ALBERT一样想办法提高NSP的难度。也就是说,一直以来NSP都是比较“让人嫌弃”的。

不过,反转来了,NSP可能要“翻身”了。最近的一篇论文《NSP-BERT: A Prompt-based Zero-Shot Learner Through an Original Pre-training Task--Next Sentence Prediction》(下面简称NSP-BERT)显示NSP居然也可以做到非常不错的Zero Shot效果!这又是一个基于模版(Prompt)的Few/Zero Shot的经典案例,只不过这一次的主角是NSP。

背景回顾

曾经我们认为预训练纯粹就是预训练,它只是为下游任务的训练提供更好的初始化,像BERT的预训练任务有MLM(Masked Language Model和NSP(Next Sentence Prediction),在相当长的一段时间内,大家都不关心这两个预训练任务本身,而只是专注于如何通过微调来使得下游任务获得更好的性能。哪怕是T5将模型参数训练到了110亿,走的依然是“预训练+微调”这一路线。

点击阅读全文...