标签归档:人工智能

自动作诗机&藏头诗生成器:五言、七言、绝句、律诗全了

AINLP

这是自然语言处理里面最有意思的任务之一:自然语言生成,本文主要是指古诗自动写诗,或者自动作诗机藏头诗生成器,目前支持五言绝句、七言绝句、五言律诗、七言律诗的自动生成(给定不超过7个字的开头内容自动续写)和藏头诗生成(给定不超过8个字的内容自动合成)。先看一下效果,也算是一个简单的自动作诗机和藏头诗生成器使用指南,感兴趣的同学请关注公众号AINLP,直接关键词触发测试:

自动作诗机或者自动写诗:
输入 “写诗 起头内容” 触发古诗自动生成(自动续写),输入内容不要超过7个字,会根据字数随机生成几首五言绝句、七言绝句、五言律诗、七言律诗:

藏头诗生成器:
输入 “藏头诗 藏头内容” 触发藏头诗自动生成,输入内容不超过8个字,会根据字数随机生成绝句或者律诗:

五言诗生成器:
输入“五言 起头内容” 触发五言诗自动生成,输入内容不要超过5个字,会随机生成五言绝句或者五言律诗

七言诗生成器:
输入 “七言 起头内容” 触发七言诗自动生成,输入内容不要超过7个字,会随机生成七言绝句或者七言律诗

绝句生成器:
输入 “绝句 起头内容” 触发绝句自动生成,输入内容不要超过7个字,会根据字数随机生成五言绝句或者七言绝句

律诗生成器:
输入 “律诗 起头内容” 触发律诗自动生成,输入内容不要超过7个字,会根据字数随机生成五言律诗或者七言律诗

五言绝句生成器和五言律诗生成器:
输入 “五言绝句 起头内容” 触发五言绝句自动生成,输入 “五言律诗 起头内容” 触发五言律诗自动生成,输入内容不要超过5个字:

七言绝句生成器和七言律诗生成器:
输入 “五言绝句 起头内容” 触发五言绝句自动生成,输入 “五言律诗 起头内容” 触发五言律诗自动生成,输入内容不要超过5个字:

最后让我们再看一下藏头诗自动生成的功能,支持任意8个字以内的输入,以下是对“自然语言”, “自然语言处理”,“我爱自然语言处理”的输入测试:

关于机器自动写诗,我们已经谈到多次,请参考:
AINLP公众号自动作诗上线
用GPT-2自动写诗,从五言绝句开始
鼠年春季,用GPT-2自动写对联和对对联

目前用 GPT2-Chinese 这个工具对古诗和对联数据一起训练,设计好数据格式,单个模型可以一站式支持多种体裁古诗和对联生成,非常方便,再次安利。

关于古诗体裁介绍,以下来源于百科:

五言绝句是中国传统诗歌的一种体裁,简称五绝,是指五言四句而又合乎律诗规范的小诗,属于近体诗范畴。此体源于汉代乐府小诗,深受六朝民歌影响,成熟定型于唐代。五绝每首仅二十字,便能展现出一幅幅清新的图画,传达一种种真切的意境。因小见大,以少总多,在短章中包含着丰富的内容,是其最大特色。五绝有仄起、平起二格。代表作品有王维的《鸟鸣涧》、李白的《静夜思》、杜甫的《八阵图》、王之涣的《登鹳雀楼》、刘长卿的《送灵澈上人》等。

七言绝句是中国传统诗歌的一种体裁,简称七绝,属于近体诗范畴。此体全诗四句,每句七言,在押韵、粘对等方面有严格的格律要求。诗体起源于南朝乐府歌行或北朝乐府民歌,或可追溯到西晋的民谣,定型、成熟于唐代。代表作品有王昌龄的《芙蓉楼送辛渐二首》、李白的《早发白帝城》、杜甫的《江南逢李龟年》、厉声教的《观潮有感》等。

五言律诗,是中国传统诗歌的一种体裁,简称五律,属于近体诗范畴。此体发源于南朝齐永明时期,其雏型是沈约等讲究声律、对偶的新体诗,至初唐沈佺期、宋之问时基本定型,成熟于盛唐时期。全篇共八句,每句五个字,有仄起、平起两种基本形式,中间两联须作对仗。代表作品有李白的《送友人》、杜甫的《春望》、王维的《山居秋暝》、厉声教的《辛卯季春谒厉杭二公祠》等。

七言律诗是中国传统诗歌的一种体裁,简称七律,属于近体诗范畴,起源于南朝齐永明时沈约等讲究声律、对偶的新体诗,至初唐沈佺期、宋之问等进一步发展定型,至盛唐杜甫手中成熟。其格律严密,要求诗句字数整齐划一,由八句组成,每句七个字,每两句为一联,共四联,分首联、颔联、颈联和尾联,中间两联要求对仗。代表作品有崔颢的《黄鹤楼》、杜甫的《登高》、李商隐的《安定城楼》等。

用 GPT-2 自动写诗,从五言绝句开始

AINLP

春节前用 GPT2 训练了一个自动对联系统:鼠年春节,用 GPT-2 自动生成(写)春联和对对联 ,逻辑上来说这套NLG方法论可以应用于任何领域文本的自动生成,当然,格式越固定越好,这让我自然想到了自动写诗词,诗词的格式相对比较固定,我们之前已经有所涉及,譬如已经在AINLP公众号上上线了自动写藏头诗首字诗的功能,不过是直接复用的:"自动作诗机"上线,代码和数据都是公开的 ,另外还有一个更大的诗词数据项目可以用作自动作诗的“原料”:【Github】Chinese-poetry: 最全中华古诗词数据库,加上 GPT2-Chinese 这个项目:【Github】GPT2-Chinese:中文的GPT2训练代码 ,可以说万事俱备,只欠试用。

所以本周我们从五言绝句开始继续自然语言生成的主题,关于五言绝句,百度百科是这样说的:

五言绝句是中国传统诗歌的一种体裁,简称五绝,是指五言四句而又合乎律诗规范的小诗,属于近体诗范畴。此体源于汉代乐府小诗,深受六朝民歌影响,成熟定型于唐代。五绝每首仅二十字,便能展现出一幅幅清新的图画,传达一种种真切的意境。因小见大,以少总多,在短章中包含着丰富的内容,是其最大特色。五绝有仄起、平起二格。代表作品有王维的《鸟鸣涧》、李白的《静夜思》、杜甫的《八阵图》、王之涣的《登鹳雀楼》、刘长卿的《送灵澈上人》等。

我主要用了 Chinese-poetry 里的《全唐诗》和《全宋诗》数据 ,首先向这个项目的作者致敬:

《全唐诗》是清康熙四十四年(1705年),彭定求、沈三曾、杨中讷、汪士鋐、汪绎、俞梅、徐树本、车鼎晋、潘从律、查嗣瑮10人奉敕编校,“得诗四万八千九百余首,凡二千二百余人”, 共计900卷,目录12卷。 来自百科

《全宋诗》继唐诗的高度繁荣之后,宋诗在思想内容和艺术表现上有新的开拓和创造,出现了许多优秀作家作品,形成了许多流派,对元、明、清的诗歌发展产生了深远影响。

说明
《全唐诗》和《全宋诗》是繁体存储, 如有需要请自己转换, 但转换后的字不符合上下文。

这里需要首先通过OpenCC做了繁简转换,其次提取里面的五言绝句,最后转换为 GPT2-Chinese 的训练格式,然后就是训练和测试了,感兴趣的同学可以自己尝试,很方便,训练经验可以复用上文关于自动对联的:

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

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

关键词“写诗/作诗”触发诗歌的自动生成,例如输入“写诗春”,自动作诗模型会基于“春”进行自动续写,会给出以“春”开头的诗,给出其他的字同理,目前不能多于五个字,因为只能自动生成五言绝句:

关键词“藏头诗”触发藏头诗生成,例如输入“藏头诗春夏秋冬",基于GPT2模型叠加trick生成:

最后,欢迎关注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情感分析模块

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

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

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

鼠年春节,用 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

自从把腾讯词向量对接到AINLP公众号后台后,发现相似词相关的查询需求是逐渐增大的,已经不止一次有非CS专业的同学通过后台查询相似词或者相似度来做课程设计,这让我觉得这个事情有一些意义,当然,通过微信(公众号)后台快速查询相似词(同义词、近义词、反义词)这个需求应该是更普遍的,欢迎推荐给有需求的朋友。关于词向量、相似词、相似度、词语加减,这里写了一些文章:

相似词查询:玩转腾讯 AI Lab 中文词向量
玩转腾讯词向量:词语相似度计算和在线查询
腾讯词向量实战:通过Annoy进行索引和快速查询
玩转腾讯词向量:Game of Words(词语的加减游戏)

特别是最后一篇文章,在这篇文章发布后,很多同学通过AINLP的公众号后台对话玩得很嗨,并且在微博、微信平台留言,这里基于大家的群体智慧,提供一些有意思的词(类比)加减例子,这些例子可以直接在AINLP公众号后台测试:

=======不错的词类比(Word Analogy)例子======

机场-飞机+火车=高铁站

Windows-microsoft+google=android

老婆-老公+丈夫=妻子

北京-中国+法国=巴黎

天安门-北京+巴黎=艾菲尔铁塔

渣男-男朋友+女朋友=小三

渣男-男+女=渣女

很快-快+慢=缓慢

马云-互联网+房地产=恒大许家印

北京-中国+美国=华盛顿特区

范冰冰-李晨+刘恺威=大幂幂

射雕英雄传-郭靖+杨过=神雕侠侣

姜文-中国+美国=史泰龙

上海-中国+美国=旧金山

小龙女-杨过+郭靖=黄蓉

梅西-阿根廷+葡萄牙=C罗

梅西-阿根廷+意大利=皮耶罗

飞机场-飞机+火车=火车路

汽车-轮胎+翅膀=飞翔
继续阅读

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公众号后台测试,结果看起来也还不错:“机场-飞机+火车=高铁站”:


继续阅读

腾讯词向量实战:通过Annoy进行索引和快速查询

AINLP

上周《玩转腾讯词向量:词语相似度计算和在线查询》推出后,有同学提到了annoy,我其实并没有用annoy,不过对annoy很感兴趣,所以决定用annoy试一下腾讯 AI Lab 词向量

学习一个东西最直接的方法就是从官方文档走起:https://github.com/spotify/annoy , Annoy是Spotify开源的一个用于近似最近邻查询的C++/Python工具,对内存使用进行了优化,索引可以在硬盘保存或者加载:Approximate Nearest Neighbors in C++/Python optimized for memory usage and loading/saving to disk。

Annoy (Approximate Nearest Neighbors Oh Yeah) is a C++ library with Python bindings to search for points in space that are close to a given query point. It also creates large read-only file-based data structures that are mmapped into memory so that many processes may share the same data.

照着官方文档,我在自己的机器上进行了简单的测试(Ubuntu16.04, 48G内存, Python2.7, gensim 3.6.0, annoy, 1.15.2),以下是Annoy初探。

安装annoy很简单,在virtuenv虚拟环境中直接:pip install annoy,然后大概可以按着官方文档体验一下最简单的case了:

In [1]: import random
 
In [2]: from annoy import AnnoyIndex
 
# f是向量维度
In [3]: f = 20
 
In [4]: t = AnnoyIndex(f)
 
In [5]: for i in xrange(100):
   ...:     v = [random.gauss(0, 1) for z in xrange(f)]
   ...:     t.add_item(i, v)
   ...:     
 
In [6]: t.build(10)
Out[6]: True
 
In [7]: t.save('test.ann.index')
Out[7]: True
 
In [8]: print(t.get_nns_by_item(0, 10))
[0, 45, 16, 17, 61, 24, 48, 20, 29, 84]
 
# 此处测试从硬盘盘索引加载
In [10]: u = AnnoyIndex(f)
 
In [11]: u.load('test.ann.index')
Out[11]: True
 
In [12]: print(u.get_nns_by_item(0, 10))
[0, 45, 16, 17, 61, 24, 48, 20, 29, 84]

看起来还是比较方便的,那么Annoy有用吗? 非常有用,特别是做线上服务的时候,现在有很多Object2Vector, 无论这个Object是Word, Document, User, Item, Anything, 当这些对象被映射到向量空间后,能够快速实时的查找它的最近邻就非常有意义了,Annoy诞生于Spotify的Hack Week,之后被用于Sptify的音乐推荐系统,这是它的诞生背景:
继续阅读

玩转腾讯词向量:词语相似度计算和在线查询

AINLP

先讲一个故事,自从《相似词查询:玩转腾讯 AI Lab 中文词向量》发布后,AINLP公众号后台查询相似词的信息还是蛮多的。前段时间的一天,发现一个女生id频繁的查询相似词,近乎每分钟都在操作(这里要说明一下,腾讯公众号后台是可以看到用户最近二十条消息记录的,信息会保留5天)。然后第二天这个id依然很规律的在查询相似词,作为偶尔玩玩爬虫、也弄弄网站的程序员,第一反应会不会是程序模拟操作,但是观察下来虽然很规律, 查询频率不像是机器所为,另外貌似到了晚上10点之后这个id就停止查询了。然后到了第3天,依然发现这个id在查询,所以我没有忍住,回复了一句:请确认是否是人工查询?如果这个id没有反馈,依然我行我素的查询,我可能就准备拉黑这个id了。但是她很快回复了一句:是人工查询;我有点好奇的追问了一句:为什么不通过程序直接加载和查询腾讯词向量呢?岂不更方便。她回复:不懂程序,不会,然后大概追加了一句:我在做一个课程设计,需要积攒一批相似词,所以通过AINLP公众号这个功能手动查询了一批词,抱歉带来困扰,感谢背后的程序员。

这个回复让我突然有一种释然,也很开心,觉得做了一件有意义的事情,在52nlp微博的简介里,有两句话:Make something people want; A blog for fools written by fools。第一句话“Make something people want”, 大概就是做用户想用或者有用的东西,这句话我忘了什么时候看到的,因为它触动了我,所以记录在微博简介里了,不过google后发现是硅谷孵化器YC的“口头禅”。

关于word2vec词语相似度,这里早期写过几篇相关的文章:《中英文维基百科语料上的Word2Vec实验》、《维基百科语料中的词语相似度探索》,《相似词查询:玩转腾讯 AI Lab 中文词向量》对于熟悉word2vec,熟悉gensim的同学来说,使用这份腾讯AI Lab的词向量其实很简单,只要有个内存大一些的机器(实际加载后貌似用了12G左右的内存),大概就可以通过几行python代码进行查询了:

from gensim.models.word2vec import KeyedVectors
wv_from_text = KeyedVectors.load_word2vec_format(file, binary=False)

但是这个世界大家并不都是程序员,即使是程序员也有很多同学不了解word2vec, 不知道gensim,所以这个word2vec相似词在线查询功能突然变得有点意思,有那么一点用了。其实,当时给AINLP后台聊天机器人加这个技能点的时候,还想过是否有用或者有必要,不过,经历了开头这件事,并且发现后台有越来越多不同领域查询词的时候,我能感知这件事还是很有意义的,特别对于那些不懂程序的同学来说。不过关于这份腾讯词向量相似词在线查询接口,虽然借助了gensim,但是在线服务的时候并不是基于gensim,用了一些trick,对于高并发也没有太多压力,所以对于开头这个小姑娘的持续查询操作,并不介意,还很欢迎,我介意的是机器恶意查询。

当然,还是有很多同学熟悉词向量,熟悉word2vec,也熟悉gensim的接口,所以发现有部分同学很自然的加了查询操作:相似度 词1 词2,期待AINLP后台相似词查询功能能给出两个值词语相似度,这个需求还是很自然的,所以昨晚,我花了一点时间,把这个接口也加上了,感兴趣的同学可以关注AINLP公众号:

然后后台对话操作,例如这样,选择计算AI和人工智能的相似度,AI和NLP的相似度:


继续阅读

相似词查询:玩转腾讯 AI Lab 中文词向量

AINLP

周末闲来无事,给AINLP公众号聊天机器人加了一个技能点:中文相似词查询功能,基于腾讯 AI Lab 之前公布的一个大规模的中文词向量,例如在公众号对话窗口输入"相似词 自然语言处理",会得到:自然语言理解、计算机视觉、自然语言处理技术、深度学习、机器学习、图像识别、语义理解、语音识别、自然语言识别、语义分析;输入"相似词 文本挖掘",会得到:数据挖掘、文本分析、文本数据、自然语言分析、语义分析、文本分类、信息抽取、数据挖掘算法、语义搜索、文本挖掘技术。如下图所示:

关于这份腾讯中文词向量 Tencent_AILab_ChineseEmbedding.txt ,解压后大概16G,可参考去年10月份腾讯官方的描述:腾讯AI Lab开源大规模高质量中文词向量数据,800万中文词随你用

从公开描述来看,这份词向量的质量看起来很不错:

腾讯AI Lab此次公开的中文词向量数据包含800多万中文词汇,其中每个词对应一个200维的向量。相比现有的中文词向量数据,腾讯AI Lab的中文词向量着重提升了以下3个方面,相比已有各类中文词向量大大改善了其质量和可用性:

⒈ 覆盖率(Coverage):

该词向量数据包含很多现有公开的词向量数据所欠缺的短语,比如“不念僧面念佛面”、“冰火两重天”、“煮酒论英雄”、“皇帝菜”、“喀拉喀什河”等。以“喀拉喀什河”为例,利用腾讯AI Lab词向量计算出的语义相似词如下:

墨玉河、和田河、玉龙喀什河、白玉河、喀什河、叶尔羌河、克里雅河、玛纳斯河

⒉ 新鲜度(Freshness):

该数据包含一些最近一两年出现的新词,如“恋与制作人”、“三生三世十里桃花”、“打call”、“十动然拒”、“供给侧改革”、“因吹斯汀”等。以“因吹斯汀”为例,利用腾讯AI Lab词向量计算出的语义相似词如下:

一颗赛艇、因吹斯听、城会玩、厉害了word哥、emmmmm、扎心了老铁、神吐槽、可以说是非常爆笑了

⒊ 准确性(Accuracy):

由于采用了更大规模的训练数据和更好的训练算法,所生成的词向量能够更好地表达词之间的语义关系,如下列相似词检索结果所示:

得益于覆盖率、新鲜度、准确性的提升,在内部评测中,腾讯AI Lab提供的中文词向量数据相比于现有的公开数据,在相似度和相关度指标上均达到了更高的分值。在腾讯公司内部的对话回复质量预测和医疗实体识别等业务场景中,腾讯AI Lab提供的中文词向量数据都带来了显著的性能提升。

当然官方的说法归官方,我还是遇到了一些bad case,例如输入官方例子 "相似词 兴高采烈" 和输入"相似词 腾讯",我们会发现一些"bad case":

另外这里用到的这份腾讯词向量数据的词条数总计8824330,最长的一个词条是:关于推进传统基础设施领域政府和社会资本合作(ppp)项目资产证券化相关工,查询的结果是:

很像一些文章标题,可能预处理的时候没有对词长做一些限制,感兴趣的同学可以详细统计一下这份词向量的词长分布。当然,少量的 bad case 不会降低这份难得的中文词向量的质量,也不会降低我们玩转这份词向量的兴趣,继续测试一些词或者短语。例如输入"相似词 马化腾"、"相似词 马云",会得到:

输入"相似词 深度学习"、"相似词 人工智能"会得到:

输入"相似词 AI"、"相似词 NLP"会得到:

当然,要是输入的"词条"没有在这份词库中,AINLP的聊天机器人无名也无能为力了,例如输入"词向量","AINLP",那是没有的:

需要说明的是,这里的查询功能间接借助了gensim word2vec 的相关接口,在腾讯这份词向量说明文档的主页上也有相关的用法提示:Tencent AI Lab Embedding Corpus for Chinese Words and Phrases,可能一些同学早就试验过了。不过对于那些机器资源条件有限的同学,或者不了解词向量、word2vec的同学,这个微信接口还是可以供你们随时查询相近词的,甚至可以给一些查询同义词、近义词或者反义词的同学提供一些线索,当然,从统计学意义上来看这份词向量的查询结果无法做到语言学意义上的准确,但是很有意思,需要自己去甄别。

最后感兴趣的同学可以关注我们的微信公众号AINLP,随时把玩腾讯 AI Lab 的这份词向量:

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

本文链接地址:相似词查询:玩转腾讯 AI Lab 中文词向量 http://www.52nlp.cn/?p=11234

风云三尺剑,花鸟一床书---对联数据集和自动对联机器人

AINLP

很多年前看到过微软的自动对联工具,写了一篇《机器翻译与微软对联》博文,赞了MSRA用统计机器翻译(SMT)的思路做自动对联系统,当时开玩笑的说:

微软研究院的这个“对联语料库”的规模是67万对,所采用的技术是他们自己的web语料库自动获取技术。开玩笑的说,如果周明老师能给我这个语料库,我也能几天之内构建一个简单的“52nlp自动对联系统”。

前段时间看到了一份对联语料:couplet-dataset

https://github.com/wb14123/couplet-dataset

这份数据包含70万条对联数据,按字切分,作者很用心的给大家准备了训练集、测试集还有词汇表;同时还开源了一个基于Tensorflow的深度学习工具来训练自动对联模型: seq2seq-couplet

https://github.com/wb14123/seq2seq-couplet

感兴趣的同学可以直接上手操作,作者甚至还提供了Demo供大家把玩,不过目前貌似需要科学上网才能访问:

https://ai.binwang.me/couplet/

对我来说,看到这份数据的第一想法就是用神经网络机器翻译(NMT)的思路来尝试自动对联系统,这里NMT开源工具可选择的范围很广,我还是选择了Marian,跑了一个简单的对联“翻译”模型,现在接入AINLP公众号聊天机器人,感兴趣的朋友可以一试。具体方法请关注AINLP公众号,然后后台和AINLP聊天机器人互动:

回复“上联 输入上联内容” ,AINLP机器人将自动回复“下联 自动对联内容”,例如:

例子1:
上联 风云三尺剑
自动回复:
下联 花鸟一床书

注意上图来自微软亚洲研究院电脑对联页面:https://duilian.msra.cn/

其他例子可参考:

关于AINLP公众号相关信息,可参考:AINLP公众号索引、关键字和其他相关资源

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

本文链接地址:风云三尺剑,花鸟一床书---对联数据集和自动对联机器人 http://www.52nlp.cn/?p=11145