把平常说的话变成一种逻辑语言(比如一阶逻辑,FOL)是自然语言处理(NLP)里的一个基本难题。这个难题在自动推理、追踪错误信息和验证知识方面有很多用处。
在这篇文章里,我们介绍了一个叫“自然语言到一阶逻辑”(NL2FOL)的新框架:这是一个用大型语言模型(LLM)一步步把平常说的话自动变成 FOL 的框架。
我们的方法解决了这个翻译过程中的一些关键问题,比如怎么把那些没说出来的背景上下文知识加进去。
通过用 NL2FOL 生成的结构化表示,我们用一种叫“可满足性模理论”(SMT)的求解器来推理平常说的话在逻辑上是不是有效的。
我们用逻辑谬误检测作为例子,来评估 NL2FOL 的效果。作为神经符号方法,我们的方法还能让推理过程变得更容易理解,而且不需要调整模型或者用标记好的训练数据,表现也很稳定。
我们的框架在多个数据集上都表现得很好。在 LOGIC 数据集上,NL2FOL 的 F1 分数达到了 78%,同时在 LOGICCLIMATE 数据集上也能很好地推广,F1 分数达到了 80%。
网友1:
用平常的话写出来的东西是可以解释的。有很多种逻辑语句可以用来解释一段平常的话。但我们能确定哪种逻辑表示是正确的吗?哪种是最有用的呢?
答案显然都是“不”。
没有所谓的最终解释。如果有的话,平常的话就不会那么模糊了!
那我们是不是注定会永远误解对方的意思呢?
不是。
我们人类一直都在用平常的话交流,通常也能搞清楚对方到底想说什么!
我们是怎么做到的?难道我们都是猜谜高手吗?
不,我们有更好的东西:背景上下文。
- 平常的话里和话外都有上下文。
- 上下文决定了我们用哪种意思来解释这段话。
- 如果我们不知道哪种上下文合适,话里可能会有一些线索帮我们构建出有用或正确的上下文。
我一直在研究一种语言处理方法,把文本解释成逻辑形式(随便哪种意思)。我把它们叫做“故事”。故事是对文本的任意解释。故事永远不会是最终的:相反,它被用来作为解释下一段文本的任意上下文背景。我把这个过程叫做“背景故事”。
我们甚至可以反过来做,用和之前解释的故事一样的语言/风格/语气“写”一个任意的逻辑形式。
只要有足够多的“故事”例子,我们应该就能通过明确的共享上下文来互相读懂和写出东西。我把这个过程叫做“共情”。我把我的想法叫做“故事共情器”。
网友2:
平常说的话的意思比我们这篇文章里简单翻译成一阶逻辑(FOL)公式能解释的要复杂得多。从严格的形式化角度来看,理解平常说的话的意思有一种常见的方法叫“蒙塔古语义”(Montague 语义)。
- https://en.wikipedia.org/wiki/Montague_grammar
- https://plato.stanford.edu/entries/montague-semantics/
你只要稍微看一眼这些参考资料(比如维基百科和斯坦福哲学百科),就能明白这里面有多复杂。
简单来说,人们通常得同时用好几种“模态modalities”,每种模态都会引入自己的抽象“可能世界”概念(比如代表某个人的信念集合),以及这些“世界”之间是怎么联系的。更复杂的情况通常会变成某种“游戏语义”,也就是把平常说的话的使用看成一种“游戏”(从抽象的策略和博弈论的角度来看),这种游戏有自己的一套可能很随意的“规则”。
哲学家路德维希·维特根斯坦对这两种方法(一种是很幼稚的直接翻译成抽象逻辑,另一种是基于策略和游戏概念的更丰富的方法)做了很好的描述,他在广泛的哲学研究中探讨了如何“形式formal”理解平常说的话。
不过,我不确定这篇论文的结果在实际中有多大用处。
网友3:
如果两个哲学家之间发生了争议,他们不需要争吵,就像两个做计算的人不需要争吵一样。因为他们只需要拿起铅笔,坐在算盘前,然后对对方说(如果他们愿意,也可以对叫来帮忙的朋友说):“我们来算一算吧。”这样就够了。
网友4:
道德是通过大家商量出来的吗?绝对不是!这种想法叫“文化相对主义”,说白了,这其实是个死循环:如果没有一种事先就有的对“善”的感觉,我们怎么可能商量出共识呢?
唯一能站得住脚的客观“善”的基础,是事物的本质,以及什么能让事物实现它本质决定的潜力,从而完成它的本性。道德,只有那些能理解自己行为选择(靠智力)并且能根据这种理解自由选择(靠意志)的东西才有可能实现。所以,道德问题其实就是看一个行为是帮助还是阻碍了事物实现它的本性。
比如,我无缘无故地砍掉自己的手臂,这是不道德的,因为拥有手臂是我的天性。但如果我的手臂得了坏疽,威胁到我的生命,那么切除坏疽并承担失去手臂的副作用在道德上是合理的,尽管失去手臂本身并不是好事。
再比如,谋杀一个人是极其不道德的,因为它直接违背了我作为社会人的本性,而且有深刻的自我毁灭性。但是,为了保护自己或他人的生命而杀死一个潜在的杀人犯,在道德上是非常好的行为;它符合我的社会本性,甚至可以说在某些方面更充分地实现了我的社会本性。
话说回来,光靠计算是不够的,因为这种计算是形式化的:它明确排除了命题的概念内容。但概念是理解事物的“载体”。
我们也可以分析概念:
现在,我们可以说,我们可以根据形式规则计算出形式推论,但我们不能计算出概念或它们的分析结果。这是从具体事物中抽象出来的产物。
形式系统把这些抽象掉了。它们故意忽略了概念内容。
用形式系统得出结论后,我们还得解释结果,也就是说,我们得把概念重新分配给代表它们的符号。
所以形式系统是有用的工具,但它们只是工具。
网友5:
一阶逻辑只能发现形式逻辑上的错误,比如推理过程中的漏洞。但是像人身攻击、稻草人谬误(歪曲对方观点)、转移话题这些非形式逻辑错误,是通过语言表达的。这些东西没办法用数学公式来定义和解决。
要让模型能处理这些非形式错误,得用一些例子和反驳来训练它。即使这样,模型也没法在所有情况下都发现这些错误,但至少它能学到一些关于这些错误的知识,以及怎么回应它们。这些知识还可以通过情境上下文学习和其他及时的工程策略进一步改进。
网友6:
我们需要能够检测逻辑谬误以及价值体系不一致的系统。
为此我喜欢使用如下大模型的提示:
--- |
网友7:
也许最终能够打破胡说八道的不对称定律,即布兰多里尼定律:“驳斥胡说八道所需的能量比制造胡说八道所需的能量大一个数量级。”
如果大模型(LLM) 能够像揭穿谎言一样轻松地揭穿谎言,世界将立即变得更加美好。
听起来不错的坏主意却是一切罪恶的根源。
网友8:
我相信这是伊曼纽尔·康德在 18 世纪尝试做的事情
网友9:
Claude 3.7 Sonnet这个模型看起来已经能很好地做到这一点了,而且它还能解释为什么它能做到。
- > “有时流感疫苗不起作用;因此疫苗是无用的。”——草率的概括
- > “每次我洗车,天都会下雨。我洗车对天气有一定影响。”——事后诸葛亮
- > “每个人都应该喜欢咖啡:95% 的老师都喜欢!”——诉诸大众,草率概括(这是在用“大家都这样”来证明自己是对的,还草率地概括了所有人的喜好。)
- > “我不想放弃我的车,所以我认为我不能支持应对气候变化。”——虚假困境