标签归档:深度学习

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

鼠年春节临近,来试试新的基于 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年度阅读收藏清单

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

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

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


继续阅读

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

深度学习环境部署的方法有很多种,其中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公众号新增SnowNLP情感分析模块

上周给AINLP公众号对话增加了百度中文情感分析接口:百度深度学习中文情感分析工具Senta试用及在线测试,很多同学通过公众号对话进行测试,玩得很嗨,不过感觉中文情感分析的成熟工具还是不多。这个周末调研了一下之前用于测试中文分词和词性标注的工具,发现SnowNLP和HanLP提供情感分析的接口,不过后者貌似没有提供Python接口,而SnowNLP作为原生的Python中文自然语言处理工具包,用起来还是比较方便的,唯一的问题是它的训练语料覆盖领域,官方文档是这样说的:

SnowNLP: https://github.com/isnowfy/snownlp

情感分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决)

使用起来也很简单,注意SnowNLP的情感分析只有正向概率,以下测试例子也有bad case:

In [1]: from snownlp import SnowNLP                                            
 
In [2]: s = SnowNLP('我爱自然语言处理')                                        
 
In [3]: s.sentiments                                                           
Out[3]: 0.9243733698974206
 
In [4]: s = SnowNLP('我不爱自然语言处理')                                      
 
In [5]: s.sentiments                                                           
Out[5]: 0.8043511626271524
 
In [6]: s = SnowNLP('太难吃了')                                                
 
In [7]: s.sentiments                                                           
Out[7]: 0.27333037073511146

感兴趣的同学可以直接关注AINLP公众号,直接测试这两个中文情感分析模块:BaiduSenta和SnowNLP


继续阅读

百度深度学习中文情感分析工具Senta试用及在线测试

情感分析是自然语言处理里面一个热门话题,去年参加AI Challenger时关注了一下细粒度情感分析赛道,当时模仿baseline写了一个fasttext版本:AI Challenger 2018 细粒度用户评论情感分析 fastText Baseline ,至今不断有同学在star这个项目:fastText-for-AI-Challenger-Sentiment-Analysis

周末通过PaddleHub试用了一下百度的深度学习中文情感分析工具Senta,还是很方便,于是,将这个作为中文情感分析的一个技能点加入到了AINLP公众号的对话中,感兴趣的同学可以先测试:

至于安装和使用,还是简单说一下,以下是在Ubuntu16.04, Python3.x virtualenv环境下安装和测试。

安装直接通过pip install即可:

pip install paddlepaddle(这里用的是CPU版本)
pip install paddlehub

关于如何使用百度这个中文情感分析工具,最直接的方法还是follow官方demo脚本:

PaddleHub/demo/senta/senta_demo.py

在iPython中大致如下调用:

Python 3.5.2 (default, Nov 12 2018, 13:43:14) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help.
 
In [1]: import paddlehub as hub                                                                 
 
In [2]: senta = hub.Module(name="senta_bilstm")                                                 
2019-07-06 22:33:01,181-INFO: Installing senta_bilstm module
2019-07-06 22:33:01,182-INFO: Module senta_bilstm already installed in /home/textminer/.paddlehub/modules/senta_bilstm
 
In [3]: test_text = ["这家餐厅很好吃", "这部电影真的很差劲","我爱自然语言处理"]                
 
In [4]: input_dict = {"text": test_text}                                                        
 
In [5]: results = senta.sentiment_classify(data=input_dict)                                     
2019-07-06 22:33:53,835-INFO: 13 pretrained paramaters loaded by PaddleHub
2019-07-06 22:33:53,839-INFO: 20 pretrained paramaters loaded by PaddleHub
 
In [6]: for result in results: 
   ...:     print(result) 
   ...:                                                                                         
{'positive_probs': 0.9363, 'text': '这家餐厅很好吃', 'sentiment_key': 'positive', 'negative_probs': 0.0637, 'sentiment_label': 2}
{'positive_probs': 0.0213, 'text': '这部电影真的很差劲', 'sentiment_key': 'negative', 'negative_probs': 0.9787, 'sentiment_label': 0}
{'positive_probs': 0.9501, 'text': '我爱自然语言处理', 'sentiment_key': 'positive', 'negative_probs': 0.0499, 'sentiment_label': 2}

继续阅读

百度深度学习中文词法分析工具LAC试用之旅

之前在调研中文分词词性标注相关工具的时候就发现了百度的深度学习中文词法分析工具:baidu/lac(https://github.com/baidu/lac),但是通过这个项目github上的文档描述以及实际动手尝试源码编译安装发现非常繁琐,缺乏通常中文分词工具的易用性,所以第一次接触完百度lac之后就放弃了:

LAC是一个联合的词法分析模型,整体性地完成中文分词、词性标注、专名识别任务。LAC既可以认为是Lexical Analysis of Chinese的首字母缩写,也可以认为是LAC Analyzes Chinese的递归缩写。

LAC基于一个堆叠的双向GRU结构,在长文本上准确复刻了百度AI开放平台上的词法分析算法。效果方面,分词、词性、专名识别的整体准确率95.5%;单独评估专名识别任务,F值87.1%(准确90.3,召回85.4%),总体略优于开放平台版本。在效果优化的基础上,LAC的模型简洁高效,内存开销不到100M,而速度则比百度AI开放平台提高了57%。

本项目依赖Paddle v0.14.0版本。如果您的Paddle安装版本低于此要求,请按照安装文档中的说明更新Paddle安装版本。如果您使用的Paddle是v1.1以后的版本,请使用该项目的分支for_paddle_v1.1。注意,LAC模块中的conf目录下的很多文件是采用git-lfs存储,使用git clone时,需要先安装git-lfs。

为了达到和机器运行环境的最佳匹配,我们建议基于源码编译安装Paddle,后文也将展开讨论一些编译安装的细节。当然,如果您发现符合机器环境的预编译版本在官网发布,也可以尝试直接选用。

最近发现百度将自己的一些自然语言处理工具整合在PaddleNLP下,文档写得相对清楚多了:

PaddleNLP是百度开源的工业级NLP工具与预训练模型集,能够适应全面丰富的NLP任务,方便开发者灵活插拔尝试多种网络结构,并且让应用最快速达到工业级效果。

PaddleNLP完全基于PaddlePaddle Fluid开发,并提供依托于百度百亿级大数据的预训练模型,能够极大地方便NLP研究者和工程师快速应用。使用者可以用PaddleNLP快速实现文本分类、文本匹配、序列标注、阅读理解、智能对话等NLP任务的组网、建模和部署,而且可以直接使用百度开源工业级预训练模型进行快速应用。用户在极大地减少研究和开发成本的同时,也可以获得更好的基于工业实践的应用效果。

继续阅读

八款中文词性标注工具使用及在线测试

结束了中文分词工具的安装、使用及在线测试,开启中文词性标注在线测试之旅,一般来说,中文分词工具大多数都附带词性标注功能的,这里测试了之前在AINLP公众号上线的8款中文分词模块或者工具,发现它们都是支持中文词性标注的,这里面唯一的区别,就是各自用的词性标注集可能有不同:

以下逐一介绍这八个工具的中文词性标注功能的使用方法,至于安装,这里简要介绍,或者可以参考之前这篇文章:Python中文分词工具大合集:安装、使用和测试,以下是在Ubuntu16.04 & Python3.x的环境下安装及测试。
继续阅读

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

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

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

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

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

近期一直关注着斯坦福大学深度学习自然语言处理课程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深度学习自然语言处理课程视频和相关资料分享

中文分词文章索引和分词数据资源分享

昨天在AINLP公众号上分享了乐雨泉同学的投稿文章:《分词那些事儿》,有同学留言表示"不过瘾",我想了想,其实我爱自然语言处理博客上已经积攒了不少中文分词的文章,除了基于深度学习的分词方法还没有探讨外,“古典”机器学习时代的中文分词方法都有涉及,从基于词典的中文分词(最大匹配法),到基于统计的分词方法(HMM、最大熵模型、条件随机场模型CRF),再到Mecab、NLTK中文分词,都有所涉及。回头看,这些文章最早的大概有10年了,现在看有些稚嫩,可能不适宜再放到公众号上推了,但是这里做个索引,感兴趣的同学可以在博客上阅读,基本上都是有代码可以参考的。

中文分词入门系列

rickjin老大的两篇日文翻译文档,很有帮助

其他同学在52nlp博客上分享的中文分词相关文章,感谢大家

最后关于中文分词的数据资源,多说两句,中文分词的研究时间比较长,方法比较多,从实际经验看,好的词库资源可能更重要一些,最后提供一份中文分词的相关资源,包括中文分词字标注法全文pdf文档,以及web上其他同学分享的词库资源,感兴趣的同学可以关注AINLP,回复“fenci"获取:

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

本文链接地址:中文分词文章索引和分词数据资源分享 http://www.52nlp.cn/?p=11408