分类目录归档:深度学习

鼠年春节,用 GPT-2 自动生成(写)春联和对对联

AINLP

鼠年春节临近,来试试新的基于 GPT2-Chinese 自动对联系统:自动写对联(输入开头进行对联自动生成)和自动对对联(输入上联自动写下联)。老的自动对联功能是去年基于深度学习机器翻译模型上线的一个自动对对联的对话模块:风云三尺剑,花鸟一床书---对联数据集和自动对联机器人

这一年来,以BERT为代表的预训练模型不断推陈出新,席卷整个自然语言处理(NLP)领域,这其中NLP的难题之一自然语言生成(NLG)也得到了很大的助力,特别是去年上半年 OpenAI 的 GPT-2 的推出,非常惊艳,不过 GPT-2 的模型主要是基于英文领域的语料训练的,虽然到目前为止已经发布了含有15亿参数的完整模型,对于英文领域的自动文本生成非常有帮助,但是对于中文领域的NLG来说还是很受限。

回到中文领域,我们之前推荐过AINLP技术交流群杜则尧同学的开源项目 GPT2-Chinese:GPT2-Chinese:《【Github】GPT2-Chinese:中文的GPT2训练代码》,这个项目可以针对中文数据进行GPT-2模型的训练,可以写诗,新闻,小说,或是训练通用语言模型。所以对于自动对联生成来说,我能想到的就是基于GPT2-Chinese和对联数据训练一份对联领域的GPT2模型,用于对联自动生成:写对联和对对联。幸运的是,对联数据已经有了,依然是我们去年使用过 couplet-dataset ,特别感谢提供这份数据的同学,这份对联数据包含70多万条对联,唯一可惜的是没有横批,要是有横批,就可以造更完整的自动写对联和对对联系统了。

特别需要说明的是,这里并不是基于一个大的中文 GPT-2 模型进行特定领域 finetune 的,虽然目前已经有了大型的中文 GPT-2 预训练模型:gpt2-ml ,但是和 GPT2-Chinese 是两个体系,而 GPT2-Chinese 目前还不支持这个大模型的迁移。关于如何使用 GPT2-Chinese 进行对联数据的 GPT2 模型训练,这个项目的代码和文档都写得非常清楚,直接参考即可,如果有问题,可以查看一下issue,我遇到的问题基本上就是通过文档和issue解决的,这里提几个注意的点:

1)训练数据可以按 GPT2-Chinese 训练数据的格式要求写个脚本进行转换,可以加一些标记符,譬如开头,结尾以及上联下联之间的分隔符,这样在生成的时候可以基于这些标记符做trick;
2)训练时请将参数 min-length 设置为一个较小的数字,默认为128,由于对联数据长度比较短,按默认的设置训练后只会得到乱码,我直接设置为1;
3)根据自己GPU显存的大小调整 batch_size 和配置参数, 这里 batch_size 默认为8,训练时在1080TI的机器上会出现OOM,将其设置为4就可以完全跑通了,其他参数不用动;

对联 GPT-2 模型训练完成后,可以直接基于 GPT2-Chinese 里面的 generate.py 脚本进行测试,很方便,我基于 generate.py 和 flask-restful 写了一个 server 版本,对接到AINLP公众号后台了,感兴趣的同学可以关注AINLP公众号,直接进行测试:

关键词“写对联”触发对联自动生成,例如输入“写对联鼠年”,对联模型会基于“鼠年”进行自动续写,会给出以“鼠年”开头大概3个对联:

关键词“对对联”触发基于上联对下联,例如输入“对对联 一帆风顺年年好”,会给出大概3个候选对联:

当然你可以用“上联”触发老的对联版本进行对比:

至于两个版本的效果,欢迎多做对比,如果遇到了很棒的机器对联,也欢迎在评论里分享。最后,欢迎关注AINLP公众号,测试自动生成对联和自动对对联功能:

关于AINLP对话功能模块,感兴趣的同学可以参考:

腾讯词向量和相似词、相似度、词语游戏系列
相似词查询:玩转腾讯 AI Lab 中文词向量
玩转腾讯词向量:词语相似度计算和在线查询
腾讯词向量实战:通过Annoy进行索引和快速查询
玩转腾讯词向量:Game of Words(词语的加减游戏)
词向量游戏:梅西-阿根廷+葡萄牙=?
腾讯 800 万中文词向量 API Demo 搭建

NLP相关工具及在线测试(公众号对话测试)
五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP
中文分词工具在线PK新增:FoolNLTK、LTP、StanfordCoreNLP
Python中文分词工具大合集:安装、使用和测试
八款中文词性标注工具使用及在线测试
百度深度学习中文词法分析工具LAC试用之旅
来,试试百度的深度学习情感分析工具
AINLP公众号新增SnowNLP情感分析模块

自动对联及作诗机
风云三尺剑,花鸟一床书---对联数据集和自动对联机器人
自动对联活动获奖结果以及机器对联赏析
"自动作诗机"上线,代码和数据都是公开的

夸夸聊天机器人及其他技能
一行Python代码实现夸夸聊天机器人
为了夸夸聊天机器人,爬了一份夸夸语料库
夸夸聊天机器人升级:从随机到准个性化
来,试试语音(识别)聊天(机器人)
来,试试成语接龙
推荐一份中文数据,来试试汉字、词语、成语、歇后语在线检索
AINLP公众号新增"狗屁不通文章生成器"接口
来,试试彩虹屁生成器

如果对AINLP公众号感兴趣,也欢迎参考我们的年度阅读清单:AINLP年度阅读收藏清单

AINLP-DBC GPU 云服务器租用平台建立,价格足够便宜

AINLP

我用过不少深度学习服务器,也包括一些GPU云服务器,相对来说,GPU云服务器是比较贵的。最近深脑链的同学让我试用了通过DBC Token结算的GPU云服务器,感觉相当的便宜和好用,所以尝试推荐大家试用,我们和深脑链达成合作,建立了AINLP-DBC GPU云服务器租用平台https://gpu.ainlp.cn

需要提前说明的时候,基于深脑链技术提供的GPU服务平台是采用数字货币DBC Token结算的,对于这块儿我之前是比较犹豫的,不希望大家通过这个涉及“炒币”,只是希望大家可以通过一种比较便宜好用的方式尝试使用GPU云服务器。在完整的体验了整个使用流程之后,我觉得是可用推荐给大家使用的,特别是学习深度学习,又没有GPU机器的同学,或者打比赛的时候有临时GPU需求的同学。欢迎感兴趣的同学加入我们的种子用户交流群(群二维码见文末,或者添加微信id:AINLP2,注明GPU,邀请入群),深脑链的同学会给每位新用户提供2400DBC,约可以使用48小时的GPU云服务器,对于使用过程中的任何问题,深脑链的同学都会在群里进行及时的解答。
继续阅读

认真推荐一份深度学习笔记:简约而不简单

AINLP

认真推荐一份深度学习笔记:dl-notes ,作者是我的师兄朱鉴,很多年前,他也给过我一份《无约束最优化》的笔记,在这里发布过。这份文件虽然被他命名为:一份简短的深度学习笔记,但是我读完后的第一反应是:简约而不简单。师兄在工作上一直是我的偶像,他在腾讯深耕自然语言处理相关方向6年,之后又一直在小米打拼,作为技术专家,现在主要负责对话系统相关的工作。他在工作上兢兢业业,但是工作之余也一直在学习,前两天他把这份笔记给我,说这是工作之余学习的一个总结,希望分享给大家。这份深度学习笔记共有150多页,从基础的微积分、线性代数、概率论讲起,再到数值计算、神经网络、计算图、反向传播、激活函数、参数优化、损失函数、正则化等概念,最后落笔于网络架构,包含前向网络、卷积网络、递归网络以及Transformer和Bert等,涵盖的内容非常系统全面。强烈推荐给大家,个人觉得这是一份极好的深度学习中文材料,可用于深度学习入门或者平时工作参考,当然也可以基于这份笔记的任何一个章节做深度扩展阅读和学习。

以下是这份笔记的完整目录:


继续阅读

通过Docker部署深度学习项目环境

AINLP

深度学习环境部署的方法有很多种,其中Docker化深度学习环境和项目是一个很不错的选择。这里写过一些深度学习主机安装和部署的文章,这篇文章记录一下相关的通过Docker来部署和测试深度学习项目的一些经验,以下是在一台4卡1080TI,Ubutu16.04的机器上的记录。

一、安装Docker:

关于Docker的相关介绍资料比较多,这里就不多说了,感兴趣的同学可以自行Google或者看一下参考资料。

1)使用APT安装:

$ sudo apt-get update

$ sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
            software-properties-common

2) 使用国内源:

curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 官方源
# $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

3) 向source_list添加Docker源:

$ sudo add-apt-repository \
            "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu
            \
                $(lsb_release -cs) \
                stable"

# 官方源
# $ sudo add-apt-repository \
#    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
#    $(lsb_release -cs) \
#    stable"

4)更新 apt 软件包缓存,并安装 docker-ce:

$ sudo apt-get update
$ sudo apt-get install docker-ce

5) 添加用户组(安装后貌似这个组已经存在了):

sudo groupadd docker

6) 将当期用户添加到这个组里并退出重新登录:

sudo usermod -aG docker $USER

7) 测试Docker:

docker run hello-world

8) 添加过内镜像代理:

sudo vim /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://registry.docker-cn.com"
    ]
}

9)重启Docker服务

sudo systemctl daemon-reload
sudo systemctl restart docker

二、安装nvidia-docker:

单独安装Docker之后还无法使用带GPU的深度学习机器,需要再安装一下英伟达出品的Nvidia-docker。

1)安装:

# Add the package repositories
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker

继续阅读

AINLP公众号"自动作诗机"上线

AINLP

最近对自然语言生成或者文本自动生成技术比较感兴趣,做了一些调研,作为自然语言处理领域的难题之一,个人一直觉得自然语言生成(NLG)是最难的,虽然这一两年动辄会看机器模仿莎士比亚写剧本,模仿金庸写小说,这些不过是媒体用来吸引眼球的,总之这些字凑到一起看起来像模像样,但是读了之后不知所云。不过对于特定格式的文本,类似诗歌这种,如果不细究,从直观的角度来看确实还有点像那么回事,例如清华大学自然语言处理与社会人文计算实验室开发的九歌计算机诗词创作系统,还是很强大的:

所以我首先将目光瞄准了诗歌自动生成相关的资料上,在google了一圈后,锁定了ioiogoo同学的这篇文章和两个开源版本实现:

1)介绍文章:用Keras实现RNN+LSTM的模型自动编写古诗
2)ioiogoo同学原始版本代码:https://github.com/ioiogoo/poetry_generator_Keras
3)youyuge34同学的更新版本:https://github.com/youyuge34/Poems_generator_Keras

特别是最后这个版本,作者直接提供了训练好的模型数据:poetry_model.h5,如果不想训练,直接下载这个模型把玩即可。我尝试了一下训练流程,训练几百步的时候会报错,具体原因还没有细究。不过在继续训练自己的模型之前,可以基于作者提供的模型将这个自动作诗模块包装到AINLP公众号对话接口中去,所以花了一点时间,在AINLP公众号上上线了这个自动作诗机模块,算是玩具级别的自动作诗机吧,目前支持两个功能:藏头诗(提供四个字)和首字诗(提供一个字):

请注意这两个功能目前只提供'五言绝句'的生成,因为上述代码在训练模型的时候已经过滤了其他诗词,另外这套代码也用了一些trick,生成的结果也是随机的,每次都不一样。最后,感兴趣的同学欢迎关注AINLP公众号,直接在公众号对话里测试即可:

关于文本自动生成或者自然语言生成,如果有好的idea或者素材或者想法,欢迎留言讨论,这里也会继续关注这个话题。

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:http://www.52nlp.cn

本文链接地址:AINLP公众号"自动作诗机"上线 http://www.52nlp.cn/?p=11995

Python中文分词工具大合集:安装、使用和测试

AINLP

这篇文章事实上整合了前面两篇文章的相关介绍,同时添加一些其他的Python中文分词相关资源,甚至非Python的中文分词工具,仅供参考。

首先介绍之前测试过的8款中文分词工具,这几款工具可以直接在AINLP公众号后台在线测试,严格的说,它们不完全是纯粹的中文分词工具,例如SnowNLP, Thulac, HanLP,LTP,CoreNLP都是很全面的(中文)自然语言处理工具。安装这些模块其实很简单,只要按官方文档的方法安装即可,以下做个简单介绍,在Python3.x的环境下测试,Ubuntu16.04 或 MacOS 测试成功。

再附加介绍12款其他的中文分词工具或者中文分词模块,最后的两款fnlp和ansj是比较棒的java中文分词工具,貌似还没有python接口,记录一下。这些中文分词工具我没有测试,感兴趣的同学可以动手试试。
继续阅读

AI技术内参:关于数据科学的9个分享

AINLP

最近被安利了一个极客时间的专栏:《AI技术内参》,作者是洪亮劼老师,美国Etsy工程总监,前雅虎研究院高级研发经理。选了一些章节试读,觉得可以安利一下这个专栏,好东西要分享,希望你能耐心看完这篇文章。通过这个专栏大概可以一窥工业界的一些玩法,工业界和学术界的碰撞,另外从目录来看这个专栏覆盖的范围也很广,包括自然语言处理、计算机视觉、数据科学、推荐系统、广告系统、搜索核心技术的传统机器学习方法和新的深度学习方法。这个专栏目前已经完结,稍微花一些时间大概就可以看完或者听完,从现在开始到5月4日24时,79元,大概一本书的价格,感兴趣的同学可以参与:《AI技术内参

前十讲主要是关于数据科学的一些经验,分享一下打动我的9个点,关于数据科学,个人觉得这些对于还没有进入工业界的同学特别是想进入人工智能行业的同学来说很有参考意义,AI相关技术的算法工程师不仅仅玩算法,玩框架,更需要有数据科学思维、系统闭环思维、以及面向产品思维:


继续阅读

玩转腾讯词向量:Game of Words(词语的加减游戏)

AINLP

上一篇文章《腾讯词向量实战:通过Annoy进行索引和快速查询》结束后,觉得可以通过Annoy做一点有趣的事,把“词类比(Word Analogy)”操作放到线上,作为AINLP公众号聊天机器人的新技能,毕竟这是word2vec,或者词向量中很有意思的一个特性,刚好,Annoy也提供了一个基于vector进行近似最近邻查询的接口:

get_nns_by_vector(v, n, search_k=-1, include_distances=False) same but query by vector v.

英文词类比中最有名的一个例子大概就是: king - man + woman = queen, 当我把这个例子换成中文映射到腾讯的中文词向量中并且用gensim来计算,竟然能完美复现:国王 - 男人 + 女人 = 王后

In [49]: result = tc_wv_model.most_similar(positive=[u'国王', u'女人'], negative
    ...: =[u'男人'])
 
In [50]: print("%s\t%.4f" % result[0])
王后    0.7050

然后把国王换成皇帝,还能完美的将“王后”替换为“皇后”:

In [53]: result = tc_wv_model.most_similar(positive=[u'皇帝', u'女人'], negative
    ...: =[u'男人'])
 
In [54]: print("%s\t%.4f" % result[0])
皇后    0.8759

虽然知道即使在英文词向量中,完美的词类比列子也不多,另外据说换到中文词向量场景下,上述例子会失效,没想到在腾讯AI Lab这份词向量中得到完美复现,还是要赞一下的,虽然感觉这份腾讯词向量在处理词的边界上不够完美,引入了很多无关介词,但是"大力(量)出奇迹",882万的词条数,一方面有很高的词语覆盖率,另外一方面可以完美的将英文词向量空间中的"king - man + woman = queen"映射到中文词向量空间的"国王 - 男人 + 女人 = 王后",不得不感慨一下数学之美,词语之美。

在此前google的时候,据说在中文词向量场景下一个更容易出现的词类比例子是:机场-飞机+火车=火车站,这个确实可以通过gensim在腾讯词向量中得到复现:

In [60]: result = tc_wv_model.most_similar(positive=[u'机场', u'火车'], negative
    ...: =[u'飞机'])
 
In [61]: print("%s\t%.4f" % result[0])
火车站  0.7885

通过Annoy,我把这个服务做到线上,现在可以在AINLP公众号后台测试,结果看起来也还不错:“机场-飞机+火车=高铁站”:


继续阅读

斯坦福大学深度学习自然语言处理课程CS224N 2019 全20个视频分享

AINLP

近期一直关注着斯坦福大学深度学习自然语言处理课程CS224N在油管上的视频更新情况,直到昨天看到他们分享了第20个视频资源:

Stanford CS224N: NLP with Deep Learning | Winter 2019 | Lecture 20 – Future of NLP + Deep Learning

结合斯坦福大学CS224n官网课程Schedule,大概率这门课程的视频官方应该分享完了:CS224n: Natural Language Processing with Deep Learning Stanford / Winter 2019

通过youtube-dl以及bypy两个神器这里再次更新一下CS224n的20个课程视频,感兴趣的同学可以关注我们的公众号AINLP,回复'cs224n'获取全部视频合集:

最后列一下cs224N的相关资源:

课程主页:
http://web.stanford.edu/class/cs224n/index.html

官方课程视频网站:
http://onlinehub.stanford.edu/cs224

官方油管视频List:
https://www.youtube.com/playlist?list=PLoROMvodv4rOhcuXMZkNm7j3fVwBBY42z

课程除视频以为的相关资料都可以从schedule下载,包括ppt等:
http://web.stanford.edu/class/cs224n/index.html#schedule

课程优秀项目网站:
http://web.stanford.edu/class/cs224n/project.html

B站视频链接:
https://www.bilibili.com/video/av46216519

参考:
2019斯坦福CS224n深度学习自然语言处理课程视频和相关资料分享

2019斯坦福CS224n深度学习自然语言处理课程视频和相关资料分享

AINLP

斯坦福大学2019年新一季的CS224n深度学习自然语言处理课程(CS224n: Natural Language Processing with Deep Learning-Stanford/Winter 2019)1月份已经开课,不过视频资源一直没有对外放出,直到前几天官方在油管上更新了前5节视频:CS224n: Natural Language Processing with Deep Learning | Winter 2019

这门自然语言处理课程是值得每个NLPer学习的NLP课程,由 Christopher Manning 大神坐镇主讲,面向斯坦福大学的学生,在斯坦福大学已经讲授很多年。此次2019年新课,有很多更新,除了增加一些新内容外,最大的一点大概是代码由Tensorflow迁移到PyTorch:

这几年,由于深度学习、人工智能的概念的普及和推广,NLP作为AI领域的一颗明珠也逐渐广为人知,很多同学由此进入这个领域或者转行进入这个领域。Manning大神在第一堂课的视频开头之处给学生找位子(大概还有很多同学站着),同时开玩笑的说他在斯坦福大学讲授自然语言处理课程的第一个十年,平均每次选课的学生大约只有45个。

这门课程的主要目标是希望学生:能学到现代深度学习相关知识,特别是和NLP相关的一些知识点;能从宏观上了解人类语言以及理解和产生人类语言的难度;能理解和用代码(PyTorch)实习NLP中的一些主要问题和人物,例如词义理解、依存句法分析、机器翻译、问答系统等。

关于课程视频,目前官方只放出了前5节课程视频,我下载了一份放到了百度网盘里,感兴趣的同学可以关注AINLP,回复"cs224n"获取,这份视频会持续更新,直到完整版,欢迎关注:


继续阅读