Lambda,柯里化与聊天机器人

2020 年 1 月 11 日 AINLP

作者:段清华(金证优智技术总监)

知乎专栏:AI工程

原文链接:

https://zhuanlan.zhihu.com/p/100084125



1. 什么是高阶函数与柯里化函数


以Python为例,一个普通函数是这样的:

def add(a, b):
return a + b

一个高阶函数是可以把函数当参数输入的函数,例如:

def calc(a, b, f):
return f(a, b)

它可以这么调用:

calc(1, 2, add)

柯里化函数:

# 如下add_2是一个lambda函数,把add这个两参数函数变为了一个单参数的函数,这被称为柯里化

add_2 = lambda x: add(2 + x)

2. 命令式与自然语言式

NLP和对话机器人的一个趋向,似乎就是鄙视命令行,觉得能用自然语言执行就特别厉害。这两者其实本质是等价的,或者说自然语言命令也只是命令的自然语言泛化而已。

自然语言式:帮我查北京的天气
等价命令式:weather(北京)

或者说这就像是做了多个自然语言到一个命令的泛化,即

自然语言式:帮我查北京的天气
自然语言式:查天气,北京
自然语言式:北京的天气怎么样?
全部都等价命令式:weather(北京)

3. 上下文、多轮对话、高级函数、柯里化

自然语言对话:

- 帮我查北京的天气
- 上海呢

命令式等价:

- weather(北京)
-(上海)


那么有人就会问了,自然语言的第二句是“上海呢”,没提到天气啊,命令式的第二个是(上海),没有查天气啊,这样是不是说明自然语言才有上下文呢?

从自然语言的角度我们可以认为,第二句虽然只说了上海呢,但是其实通过上下文判断,这句话也可以等价改写为“上海的天气呢”。也就是说这里在自然语言中也相当与隐藏了一个来自上下文的天气函数!

假设我们有一个函数是解释命令的,它是一个高阶函数,如:

def parse_func(cmd_func=None, cmd_parameters=None):
cmd_func(cmd_parameters)

即 parse_func(weather, 北京) 是 weather(北京) 的等价

那我们为了融入weather这个上文怎么做呢?我们需要把上面函数改写为一个高阶函数

def parse_func(cmd_func=None, cmd_parameters=None, last_func=None, last_parameters=None):
cmd_func = cmd_func or last_func
cmd_parameters = cmd_parameters or last_parameters
cmd_func(cmd_parameters)
return cmd_func, cmd_parameters

即我们调用的时候变成了:

last_func, last_parameters = None, None
last_func, last_parameters = parse_func(weather, 北京, last_func, last_parameters)
last_func, last_parameters = parse_func(None, 上海, last_func, last_parameters)

也就是说我们通过高阶函数与柯里化确实的相当于解决了上下文问题!

总结

在实际的工程中,当然肯定不需要了解什么是高阶函数什么是柯里化,也并不似乎如上所说这么写的代码。实际中机器人会保存所有上下文变量,就类似我们上面的last_func和last_parameters做为对话状态(Dialog State / Dialog Belief)。而cmd_func和cmd_parameters实际上就是对话中NLU所解析出来的意图(Intent)和槽值(Slot)。




推荐阅读

最简单的BERT模型调用方法

从互联网爬虫、自动驾驶到对话机器人,什么是Semantic(语义)?

Rasa介绍:对话系统、产品与技术

AINLP年度阅读收藏清单

征稿启示 | 稿费+GPU算力+星球嘉宾一个都不少

我们建了一个免费的知识星球:AINLP芝麻街,欢迎来玩,期待一个高质量的NLP问答社区

关于AINLP


AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP君微信(id:AINLP2),备注工作/研究方向+加群目的。


登录查看更多
0

相关内容

Chatbot,聊天机器人。 chatbot是场交互革命,也是一个多技术融合的平台。上图给出了构建一个chatbot需要具备的组件,简单地说chatbot = NLU(Natural Language Understanding) + NLG(Natural Language Generation)。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
GCN如何并行化?分布式图卷积神经网路,13页pdf
专知会员服务
33+阅读 · 2020年7月20日
专知会员服务
165+阅读 · 2020年6月4日
《DeepGCNs: Making GCNs Go as Deep as CNNs》
专知会员服务
30+阅读 · 2019年10月17日
微软小冰:全双工语音对话详解
AI100
7+阅读 · 2019年2月10日
深度学习面试100题(第6-10题)
七月在线实验室
7+阅读 · 2018年7月9日
如果聊天机器人想要成功,还需要这个……
手把手教你用Python创建微信聊天机器人
新智元
4+阅读 · 2018年3月14日
赛尔原创 | 教聊天机器人进行多轮对话
哈工大SCIR
18+阅读 · 2017年9月18日
如何在Chatbot中应用深度学习? | 赠书
人工智能头条
5+阅读 · 2017年9月12日
当知识图谱遇上聊天机器人
PaperWeekly
34+阅读 · 2017年7月16日
Caffe 深度学习框架上手教程
黑龙江大学自然语言处理实验室
14+阅读 · 2016年6月12日
Arxiv
14+阅读 · 2020年1月27日
Relational recurrent neural networks
Arxiv
8+阅读 · 2018年6月28日
Arxiv
5+阅读 · 2018年1月23日
VIP会员
相关资讯
微软小冰:全双工语音对话详解
AI100
7+阅读 · 2019年2月10日
深度学习面试100题(第6-10题)
七月在线实验室
7+阅读 · 2018年7月9日
如果聊天机器人想要成功,还需要这个……
手把手教你用Python创建微信聊天机器人
新智元
4+阅读 · 2018年3月14日
赛尔原创 | 教聊天机器人进行多轮对话
哈工大SCIR
18+阅读 · 2017年9月18日
如何在Chatbot中应用深度学习? | 赠书
人工智能头条
5+阅读 · 2017年9月12日
当知识图谱遇上聊天机器人
PaperWeekly
34+阅读 · 2017年7月16日
Caffe 深度学习框架上手教程
黑龙江大学自然语言处理实验室
14+阅读 · 2016年6月12日
Top
微信扫码咨询专知VIP会员