自然语言处理在 2017 年有哪些值得期待的发展？
很高兴有人关注这个领域。这是当前人工智能发展的重要前沿技术。 说到前沿，前面有几个回答已经讲了，其实这个PPL的概念（主要代表Church、WebPPL和Edward）跟以前的贝叶斯编程工具例如BUGS, PyMC或者Stan，并没有本质的区别，都是用于做贝叶斯推理的一些工具。所以从功能上讲归于一类也是可以的（请见http://probabilistic-programming.org/wiki/Home）。所以这也许会令你扫兴：这会不会又是一个炒冷饭的玩意！ 对，确实是一个很老的概念了。 早于大家现在都很熟悉的Kolmogorov在1933年提出的基于集合和测度论的axiomatic probabilistic theory，人类对于认知（cognition），认知论（epistemology）、逻辑（logic）和概率（probability）其实有更多的思考（参考概率论沉思录：Probability Theory: The Logic of Science，E. T. Jaynes）。在John Maynard Keynes的A Treatise on Probability中，有这样一段思想实验： 换言之，虽然我们可以通过某些外在的参数／correlated variables去推测某一件事情发生的概率，但是这并不理性，因为我们并无法知道这些事件之间的潜在因果关系，或者说，在不确定性如此之大，变量如此复杂的现实世界，我们无法像在经典牛顿系统中那样假定初始条件和严格地定义所有影响事件发生的条件。How do we know we know? How do we know what we don’t know? 这些问题，无论是符号主义（https://plato.stanford.edu/entries/logic-ai/） 还是连接主义（当下流行的深度学习），都无法有一个好的解释：符号主义偏向于知识表示和逻辑推理，但是对于不确定性毫无办法（一条规则无法是90%的情况下对，10%的情况下不对的），而连接主义虽然可以对概率进行建模，但却是一个黑盒子，谁也不知道它是根据哪些规则／特征来进行推理的，进而也无法进行验证，只能凑合着用。而且，当前的深度学习往往需要大量的训练数据来使它们工作，这也与人类通过少量的sample就可以学到大量知识的能力不符。 Bayesian Cognitive Science填补了这两个学派之间的空隙。它的主要功能就是为人类对于不确定的事物进行推理的过程（probabilistic reasoning）进行建模。它是基于知识表示、可解释的，但又同时可以容忍不确定性，同时，相比于深度学习模型，也不需要大量的训练数据。用CSAIL的Joshua B. Tenenbaum教授在“Bayesian Model of Cognition”（http://cocosci.berkeley.edu/tom/papers/bayeschapter.pdf）  里的话说： 尤其是，在Tenenbaum教授的另外一篇文章How to Grow a Mind: Statistics, Structure, and Abstraction（http://web.mit.edu/cocosci/Papers/tkgg-science11-reprint.pdf） 中解释了，Hierarchical Bayesian Model (HBM）很好地对应了人脑能从”sparse, noisy, and ambiguous”的数据中总结出规律的特性。 在”Probabilistic Models of Cognition“（https://probmods.org/） 中，作者进一步解释到： 也就是说，贝叶斯方法的一个显著优点，就是贝叶斯方法是一种生成式的模型：每次推断我们都是得出一个分布，这代表了一个有关世界结构的模型。 （图： 我们都看过的LeCun的蛋糕） 可是这和PPL(probabilistic programming)有什么关系呢？ 在“Chuch: a language for generative models”（https://stanford.edu/~ngoodman/papers/churchUAI08_rev2.pdf)和“Towards common-sense reasoning via conditional simulation: legacies of Turing in Artificial Intelligence”（https://arxiv.org/pdf/1212.4799.pdf） 里，N. D. Goodman和Joshua B. Tenenbaum分别从理论（probabilistic turing machine）和实践（Church programming language）的角度，分析了采用图灵完备的概率编程语言来对贝叶斯生成模型进行建模的理论可行性和实际操作。这是尝试通过逻辑来将带概率的推理过程形式化的一种研究，用Goodman的话说就是： 通俗地说，就是他们找到了一种规范的语法，来描述带有概率的推理过程（生成过程），这就是PPL。 一边通过研究表明贝叶斯模型是描述认知最好的模型，一边通过给普通编程语言注入概率元素创造了一种方便描述贝叶斯推断的计算模型，这两种理论当然就一拍即合。 不过，话说回来，虽然PPL看上去很美，不过依然没有解决“底层实现”的问题。熟悉贝叶斯分析的同学都知道，跑Simulation是非常慢的，这当然不会因为漂亮的理论分析就变得简单。尤其是PPL一般而言为了语言的表达力（图灵完备），牺牲了计算效率。无论是Church还是WebPPL（http://webppl.org/） ，都只能做一些简单的推断，可能对于学术界还有点帮助，对于工业界来说就显得有点捉急了。 Edward（https://arxiv.org/abs/1701.03757） 可能是在PPL工业化的路上走得最远的。Edward源自于哥伦比亚大学教授David M. Blei的Build, Compute, Critique, Repeat: Data Analysis with Latent Variable Models：在做完inference以后，还可以通过Criticism（也就是通过检验用后验概率生成出来的数据对模型进行评估）来进一步改进模型。 不过也许Edward最大的亮点，其实是：它是基于tensorflow的。用Edward团队自己的话来说： 说了这么多理论，我们这里通过WebPPL来展示几个非常简单的例子。 这是模拟扔1000次硬币。显然，正负的概率是相等的（这定义于flip函数中）。 这是模拟3枚硬币扔10次后，共有多少正面的。显然，因为扔的次数太少，完全不符合二项式分布。 现在扔10000次，看起来好多了。 现在我们来干点有用的。 假定我们来了一位病人，他的症状是咳嗽。我们希望诊断看看他到底是感冒（cold）了还是因为肺病（lungDisease）。这位病人看上去有很大概率（比如80%）抽烟（有烟味）。根据医学数据，吸烟的人当中10%患有肺病。而一般这个地区这个时段感冒的概率则是2%。其它症状，比如发烧（fever）或者胸疼（chestPain）并没有观测。 所以我们现在运行程序来进行诊断： 果然，还是肺病的可能性大一点啊。大家还是少吸烟为妙：） 当然，这里的应用还是很粗浅的，但是这个领域从理论到具体的实现到基础工具都取得了比较大的突破，所以我们非常看好它的前景，尤其是在现在深度学习有所欠缺的知识建模和推理方面取得重大的突破。 本回答来自Emotibot机器学习科学家马永宁。