向AI转型的程序员都关注了这个号????????????

机器学习AI算法工程   公众号:datayx

自然语言生成也是NLP中重要的一个方面,将来的计算机一定能够吟诗作对、写书画画,具有创造性,能够生成有创意的文化作品,让我们闭上眼一起来畅想一下美好的未来:在北京零下三十度的天气里,一层窗户玻璃之隔,好似天堂地狱之分,当此际,屋外滴水成冰,屋内温暖如春,你的机器姬望着屋外纷飞大雪,意兴大发,挥毫泼墨来幅浓墨重彩的中国风山水画,再即席赋诗一首题于其上,然后弹起了你心爱的土琵琶……..这该是怎样醉人的场景@^^@,到了那一天,很多三流诗人、作家、画家、书法家估计也得成为“供给侧改革”的牺牲品,时刻准备着下岗再就业。

理想虽美好,现实行路难。

让我们鼓起革命主义大无畏精神,在研发雷区里散步,科学血池中游泳,听起来挺骇人,但是我的意思是咱们脚踏实地一步一步来,今天的文章先讨论解决一个简单的问题:假设你给出一句汉语句子或者短语,怎么让机器自动生成和它语义相关的句子?如果有训练数据的话,很明显这是一盘小菜,可以通过训练模型来自动生成。但是假设你跟我一样一穷二白,没有训练数据,此时怎么做呢?俗话说:巧妇难为无米之炊。不过俗话也说了,在没有米的情况下不会修理汽车的厨师不是一个好算法工程师,今天咱们就介绍在缺盐少油的境况下怎么做出一道菜的具体方法。

在介绍这个我们拍脑袋拍出来的土鳖方法前,我想先问个问题:您觉得如果把下面这些句子喂给计算机,计算机会产生什么句子出来呢?

输入:“明天星期二”/计算机:“???”

输入:“小葱拌豆腐”/计算机:“???”

输入:“***访问沙特”/计算机:“???”

输入:“床前明月光”/计算机:“???”

输入:“台湾大选美国更紧张”/计算机:“???”

输入:“总编有千种风情更与谁人说”/估计计算机会边吐血边说:“先生,是总编还是纵便啊?麻烦你先回去重修下小学一年级!”

……………………………………………………

您完全可以脑洞大开,蹿天入地去想想如果是你看到这些句子,打算说一句语义相近的话会怎么说。本文后面会给出计算机产生的答案,您可以和您想的对比一下,看看是不是您的脑袋还不如计算机灵光,如果您想的句子还不如计算机的顺畅……..施主,往楼上走100米再左拐10米就是为您这种VIP专供的可以随心使用的天台。

下面介绍如何根据给定的句子自动生成一个语义接近的句子。

首先,把输入的汉语短语或者句子分词,这个一般是处理中文首先要做的事情,想必您也知道;

然后,对每个中文单词,找到和它语义接近的其它汉语单词。这步怎么做呢?我们可以用Word Embedding来做这个事。

如果用Word2Vec跑一遍训练数据,每个中文单词就可以得到对应的Word Embedding,这是一种低维度向量形式的单词表示,能够表征单词的部分语义及语法含义。

对于任意两个已经用WordEmbedding形式表示的单词,我们可以简单通过计算两个向量之间的Cosine相似性,就得出两个单词语义接近程度了。比如通过计算可以得出如下单词对的语义相似性:

Cosine(WE“台湾”,WE“香港”) =0.79

Cosine(WE“林志玲”,WE“舒淇”) =0.93

Cosine(WE“教练”,WE“领队”) =0.81

Cosine(WE“星期二”,WE“星期四”) =0.93

于是乎,对于输入句子的某个单词,我们可以从所有其它单词中找出和这个单词语义最接近的一部分单词,也就是Cosine得分最高的一批单词。

第三步,对某个单词W找出语义最接近的单词列表后对其进行过滤,过滤规则是:根据词性过滤,把这些单词中词性和W相同的留下来,不同的过滤掉。这步其实是很关键的,对于后面最终产生的句子语义一致性及可读性有很大影响。主要原因是,尽管理论上通过Word Embedding可以找到语义相似的其它单词,但是其实还是有不少看上去不合理的内容,这是Word Embedding本身产生方式决定的,没有办法,增加合理的过滤措施能够极大改善句子生成质量,而根据词性过滤就是一个简单易行效果也不错的小Trick。

接下来,通过上述办法,输入句子中的每个单词都找出了对应的语义接近且词性相同的单词列表。下面机器该真正地生成句子了。

假设输入句子包含三个单词“W1 W2 W3”,W1找出了10个语义接近的单词,W2找出了8个,W3找出了10个,那么对这些单词按W1W2 W3原始顺序进行排列组合,那么会有10*8*10=800个可能的组合。这些组合就是根据“W1 W2 W3”生成的各种语义可能句子的所有句子语义空间。

此时,我们需要一种度量标准来对这些句子进行打分,给出看上去最合理的句子作为输出结果。那么度量标准选什么呢?可以用语言模型来做这个事情。语言模型本质上是衡量一个句子表达流畅性的技术工具,就是说给了一句话,语言模型可以判断这句话是像人话还是像鬼话,如果越像人话,那么语言模型给这个句子的打分越高。语言模型是NLP中非常广泛使用的工具,比如机器翻译、语音识别、输入法等等都是必需要用语言模型来评估句子流畅性的。例如通过语言模型给下面两个句子打分,就可以判断出哪个句子读起来更合理:

LanguageModel(“我最喜欢看知音杂志”)>LanguageModel(“我喜欢最知音看杂志”)

在实际做的时候,我们通过LSTM模型训练出语言模型,然后用来判断各种排列组合出的句子哪些更合理,选择得分最高的一部分输出作为最终的句子产生结果。当然,从上面例子可以看出,如果输入句子比较长的话,产生的单词组合空间是非常非常巨大的,对每个句子依次进行语言模型运算速度会非常慢,此时可以引入类似Beam Search的思路来大幅提升计算速度。

经过上述几个步骤,给定一个输入句子,机器就能产生跟这个句子语义接近的中文句子了。

|举栗说明

上面的解释过程已经够好理解的了吧,不过为了照顾小部分读者的理解力,下面给个具体例子来说明:

假设你打一岁起就深深喜爱着林志玲,于是情不自禁地对着计算机输入了你喜欢她的理由:“林志玲嗲声嗲气”。并期待着计算机和你发出同样的心声,你这个期待不过分,因为我们说过了,我们制造这个机器就是让它说和你类似的话的。

机器看到你输入的句子,斜着眼看了看你,对输入句子分词,得到:

“林志玲  嗲声嗲气”

第二步,根据Word Embedding的语义相似性,它找出和这两个单词语义最接近的单词,并经过同词性的词性过滤,产生的结果如下,后面那些数值是两个单词Word Embedding的真实Cosine相似性分值:

第四步,机器对各种组合进行语言模型评估,按照语言模型打分进行排序,输出得分最高的5个生成句子结果是:

这就是机器对你的暗表心声的回答。有人问了:为什么Top结果里面没有出现“张雨绮或者舒淇童心未泯”这种说法呢?要记住这是机器它老人家使用语言模型通过大量训练数据得出的铁一般的结论,套上目前流行到令人作呕的大数据分析的思路,您可以深入思考一下具体原因,也许您的最终结论是:贵圈真乱,社会现实真是令人痛心疾首@^^ @。

这就是输入一个汉语句子,利用Word Embedding生成语义相近句子的整个过程。其实这从思路上跟拼音输入法的做法思路是一脉相承的,区别无非是拼音输入法是从拼音找到汉字然后套上语言模型输出,而这个方法是通过单词的Word Embedding找到语义相关的单词而已。

通过上述方法生成的句子一般来说语义相关性和可读性还是不错的。这主要得益于:首先通过单词Word Embedding加上词性过滤找到和输入单词语义相关的单词,这在一定程度上保证了生成的句子在语义上是接近于输入句子的;另外,语言模型在一定程度上保证了生成句子的可读性;再者,因为输出的句子是参照输入句子一个单词一个单词产生的,而每个单词又有一定的语义相似性保证,因为输入句子是人输入的,本身就具有语义一致性,所以产生的句子在语义一致性方面其实也可以保证一定的质量。

当然也有一定比例的输出句子语义性和可读性都比较差,我觉得这主要还是Word Embedding阶段产生的语义相关单词质量不高导致的,如果这个阶段能够保证单词质量,理论上产生的句子质量应该是比较高的,原因就是上面说的三点。

|更多的真的栗子

下面给出一些例子,可以通过这些例子看看目前这种做法的实际效果,首先来一些看上去还不错的例子,短的开胃菜开路:

再来些长点的大餐:

可以看出无论是语言的流畅性可读性和语义一致性都还是不错的。

如果我们Bigger高些,耍点文艺腔,那么计算机会怎么喷你一脸呢:

好像计算机也随你,挺文艺的,不是吗?@^^@

您开始想的答案和机器比如何呢?比它好?恭喜您,至少您有1岁儿童的智商。不如?天台位置不用我再给您指出来了吧?

不能光捡些好听的说,下面是一些效果不好的例子:

我觉得主要问题是根据WordEmbedding寻找语义相近单词比较糟糕导致的,如果Word Embedding质量能够大幅提高,这个问题能够大大缓解。


阅读过本文的人还看了以下文章:

【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

《美团机器学习实践》_美团算法团队.pdf

《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

特征提取与图像处理(第二版).pdf

python就业班学习视频,从入门到实战项目

2019最新《PyTorch自然语言处理》英、中文版PDF+源码

《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

《深度学习之pytorch》pdf+附书源码

PyTorch深度学习快速实战入门《pytorch-handbook》

【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

《Python数据分析与挖掘实战》PDF+完整源码

汽车行业完整知识图谱项目实战视频(全23课)

李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

《神经网络与深度学习》最新2018版中英PDF+源码

将机器学习模型部署为REST API

FashionAI服装属性标签图像识别Top1-5方案分享

重要开源!CNN-RNN-CTC 实现手写汉字识别

yolo3 检测出图像中的不规则汉字

同样是机器学习算法工程师,你的面试为什么过不了?

前海征信大数据算法:风险概率预测

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

VGG16迁移学习,实现医学图像识别分类工程项目

特征工程(一)

特征工程(二) :文本数据的展开、过滤和分块

特征工程(三):特征缩放,从词袋到 TF-IDF

特征工程(四): 类别特征

特征工程(五): PCA 降维

特征工程(六): 非线性特征提取和模型堆叠

特征工程(七):图像特征提取和深度学习

如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

Machine Learning Yearning 中文翻译稿

蚂蚁金服2018秋招-算法工程师(共四面)通过

全球AI挑战-场景分类的比赛源码(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

python+flask搭建CNN在线识别手写中文网站

中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

QQ群

333972581

利用Word Embedding自动生成语义相近句子相关推荐

  1. word目录自动生成未定义标签问题解决

    近期在做毕业设计的论文,利用word的自动生成目录功能后,需要将目录拷贝至其他的文档中,这样一旦打印的时候就会出现未定义标签的错误. 这个问题很另人苦恼,但是也非常容易处理. 处理方法 1选中全部生成 ...

  2. word如何自动生成目录-----如何写软件文档

    最近在写软件文档的过程中,目录是必不可少的一项,但是手动写起来非常麻烦,下面我介绍一下如何利用word自动生成目录并动态更新.这里介绍两种方法: 一.利用大纲级别自动生成目录 如果要插入目录,请单击& ...

  3. word中自动生成目录和图表目录

    word中自动生成目录和图标目录 文档的目录生成: 一. 定义目录标题的样式:先选定文章中的任意一篇的标题,对标题进行字体.字号.加粗.颜色等字体格式的定义及居中.左右缩进.行距等段落格式的定义.然后 ...

  4. 根据Word表格自动生成SQL数据库脚本的VBScript代码

    这是几年前写的根据Word表格自动生成SQL数据库脚本的VBScript代码,最近修改了下(原来只支持单个Word表格)使其支持一个Word文档中的多个表格,生成的SQL文件名以Word文件名+.SQ ...

  5. 实体类dao接口mysql_利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件...

    解决问题: 可利用MyBatis生成器自动生成实体类.DAO接口和Mapping映射文件. 测试环境准备: 新建一个mysql数据库,例如mungerzTest. 生成一张主键为自增ID的学生表: C ...

  6. python的api库_python 利用toapi库自动生成api

    在学习做接口测试自动化的时候,我们往往会自己动手写一些简单的API,比如写一个简单的TODO API之类. 不过自己写API的时候经常需要造一些假数据,以及处理分页逻辑,开始的时候还觉得比较有意思,但 ...

  7. webstorm如何自动换行_怎样在word中自动生成目录

           欢迎关注支持,谢谢!!! 用 Word 编排好一本书后,不用制作目录,可以用自动生成的方法生成,那么Word2016目录怎么自动生成呢?如果要自动生成目录,排版时就要设置好章节,如果等排 ...

  8. php识别名片,用户信息名片怎么利用PHP实现自动生成

    用户信息名片怎么利用PHP实现自动生成 发布时间:2020-12-10 14:29:56 来源:亿速云 阅读:70 作者:Leah 本篇文章为大家展示了用户信息名片怎么利用PHP实现自动生成,内容简明 ...

  9. 利用strut2标签自动生成form前端验证代码

    利用strut2标签自动生成form前端验证代码,使用到的技术有 1.struts2标签,如<s:form> <s:textfieled> 2.struts2读取*Valida ...

最新文章

  1. 微服务实战(六):选择微服务部署策略
  2. 将shell脚本转为python_shell脚本将python脚本加入Linux系统服务
  3. boost::regex模块实现在 cpp 文件中搜索类定义的测试程序
  4. Angular2组件与指令的小实践——实现一个图片轮播组件
  5. SAP CRM,C4C和Hybris的product Cockpit
  6. linux学习-简单命令介绍及安装VMware Tools
  7. tar包在linux下 java安装
  8. php完全匹配,如何在PHP中使用正则表达式找到完全匹配的内容?
  9. python好东西啊
  10. 如何在网页打开CAD,DWG文件,(在线CAD)在线CAD平台,H5前端显示CAD,网页CAD
  11. csm和uefi_【一点资讯】关于CSM和UEFI你要知道的一些事 www.yidianzixun.com
  12. linux与windows笔记本连线共享wifi
  13. 数据分析师的任职要求——阿里巴巴
  14. 微信更新,重点关注!
  15. 位操作技巧:Bit Twiddling Hacks
  16. PrintWriter的 write() 与 print() 的区别
  17. java注释【单行注释,多行注释,文档注释】
  18. 文件操作和IO --- 文件操作
  19. html格子像素画,有趣的CSS像素
  20. MATLAB示例——图像中米粒个数的识别

热门文章

  1. 读取excel表格并且解析数据进行批量插入
  2. 短短9分55秒,15万台小米手机3被抢购一空背后的秘密!
  3. python 云计算_云计算开发学习笔记:Python的环境搭建
  4. 【流媒体】WebRTC基础入门
  5. 996.ICU难逃凉凉,互联网从业者难逃“高薪陷阱”
  6. 服务器显示器蓝屏怎么办
  7. 基于IDEA的Java学生管理系统
  8. 美国硕士计算机专业排名,2021美国硕士计算机专业排名
  9. [绍棠] iphone手机机型判断
  10. Servlet和JSP简述