LLM能进行苏格拉底式的聊天吗?兼论大模型下知识图谱何去何从?

一、什么是启发式问答?

苏格拉底和别人聊天并不是刻意的教导别人,而是采取启发式的教育方式,通过讨论问答,逐步引导学生自己得到正确答案,启发式问答是一种教学方法,旨在通过引导学生思考、探索和发现知识,以促进他们的学习和理解。它基于启发式的原则和规则,通过向学生提问,帮助学生来激发思考和构建知识。

在启发式问答中,教师可以运用一系列问题和提示,引导学生思考问题的不同方面、观点和解决方法。这些问题可以启发学生思考问题的本质、相关概念、实际应用以及可能的解决方案。通过提出启发性的问题,教师激发学生主动思考和参与,培养他们的批判性思维、问题解决能力和创新思维。

二、启发式问答有什么作用?

  1.  激发学生的主动学习:通过提问和引导,学生被鼓励主动思考和探索知识,而不仅仅是被动地接受信息。这有助于提高学生的学习主动性和积极性。
  2. 培养批判性思维:启发式问答鼓励学生审视问题的不同方面和观点,从多个角度思考,并评估各种解决方案的优缺点。这有助于培养学生的批判性思维和分析能力。
  3. 促进知识的深入理解:通过提出深入和引人思考的问题,学生被迫思考问题的本质、原理和相关概念。这有助于学生深入理解知识,并将其应用于实际情境中。
  4. 培养解决问题的能力:启发式问答鼓励学生主动寻找问题的解决方法,并在解决问题的过程中培养他们的解决问题的能力和创新思维。

三、ChatGPT能进行启发式问答吗?

笔者以C程序设计课程中的内容做了一些测试。

1.首先,向ChatGPT提供了一个初始的prompt。

Person:你是一个专业的C程序设计课程教师,你在给学生解答问题的时候,通常还会根据此问题的相关知识向学生提问,以帮助他们更好的理解问题。

 2.随后,向ChatGPT提出了与所需知识相关的问题,并获取了相应的回答。

Person:您好,老师,指针这一章,我老是学不好。

ChatGPT:嗨!不用担心,指针的概念对很多学生来说都是比较抽象和难以理解的。我会尽力帮助你更好地理解指针。
首先,让我们回顾一下指针的基本概念。指针是一个变量,其存储的是内存地址,而不是实际的值。通过指针,我们可以直接访问和修改内存中的数据。这使得指针在一些特定的编程任务中非常有用,比如动态内存分配、数组操作和函数参数传递等。
以下是一些帮助你理解指针的建议:
1.理解指针的语法:学习指针的语法是理解指针的第一步。了解如何声明指针变量、如何使用取地址运算符(&)获取变量的地址,以及如何使用解引用运算符(*)访问指针所指向的值。
2.实际示例和演示:使用一些简单的代码示例和演示来说明指针的工作原理。通过在代码中
使用指针来交换变量的值、访问数组元素、动态分配内存等,可以帮助你更好地理解指针的实际应用。
3.练习和实践:理论知识只是基础,要真正掌握指针,需要进行大量的练习和实践。编写一些小的程序,涉及指针的各种操作,例如指针的传递、指针与数组的关系等。通过反复练习,你会逐渐熟悉指针的使用。
4.与其他概念联系起来:将指针与其他概念联系起来,例如数组和函数。指针和数组有着密
切的关系,可以通过指针进行数组元素的访问和操作。指针还在函数参数传递中起到重要的作用,可以通过指针在函数之间传递数据。
5.寻求帮助:如果你在理解指针的过程中遇到困难,不要犹豫寻求帮助。可以向你的教师、同学或者在学习平台上的论坛提问。他们会愿意帮助你解决问题并提供指导。
记住,学习编程需要时间和实践。不要灰心,坚持下去,相信你会逐渐掌握指针的概念和使用技巧。如果你有具体的问题或需要进一步的解释,请随时向我提问。祝你学习愉快!

3.然而,这些回答似乎并没有达到我们期望的启发式问答的效果。因此,我决定进一步引导ChatGPT。

Person:回答的不错,只不过你是一个喜欢根据学生的问题再向学生提问的老师,你是不是忘了根据学生的指针问题,向学生提问了
ChatGPT:非常抱歉,我犯了一个错误。你是对的,我忘记了根据你的具体指针问题向你提问。如果你遇到了困惑,请告诉我你遇到的具体问题,我将根据你的问题提出相关的问题来帮助你更好地理解。请告诉我你对指针的具体疑惑,我将尽力为你提供帮助。

4.我再次提供了更具针对性的提示,并希望这次能够获得更符合要求的启发式问答结果。

Person:什么是空指针?定义空指针有什么用?
ChatGPT:空指针是一个不指向任何有效内存地址的指针。在C语言中,空指针可以用NULL宏来表示,NULL宏的值通常为0或者(void*)0。定义空指针的主要作用是在程序中避免指针出现野指针(也称为悬垂指针)错误。野指针是指指针变量指向了一个未知或无法访问的内存地址,使用野指针进行访问或修改会导致程序崩溃或出现其他错误。而定义一个空指针,可以在程序中对指针变量进行初始化,避免出现野指针错误。

Person:说好的提问呢?
ChatGPT:非常抱歉,我忘记使用提问来促进您的学习了。以下是一些问题,希望能够帮助您更好地理解空指针的概念和作用:
1.什么是空指针?它与野指针有什么区别?
2.如何定义和初始化一个空指针?如何判断一个指针是否为NULL?3.空指针有什么作用?它可以避免什么样的错误?
4.在使用空指针时需要注意什么?如何避免出现空指针错误?

可以观察到ChatGPT仍然依据我提出的“空指针”问题来询问,而没有提出更具启发性的问题。这显示出ChatGPT在启发式问答方面的能力受限。ChatGPT在语料学习和上下文微调方面主要以回答或陈述的方式进行。

然而,我们可以探索如何使ChatGPT具备启发式问答的能力。

为了给大模型提供启发,我们需要提供互相关联的启发信息。这时,利用知识图谱为大模型提供启发的方法成为一个自然的选择。以下是一种模拟的方法,以验证这种方法的可行性。

 四、结合知识图谱能提升ChatGPT的启发式问答效果吗?

还是先以C程序设计课程中的知识做测试。

1.首先,将一个知识图谱的路径输入给ChatGPT。

Person:我现在给你一条C程序设计知识图谱中的路径,这条路径中,实体有指针、地址、内存,关系为前驱关系,指针与地址通过前驱关系进行链接,地址与内存通过前驱关系进行链接,关系指向为指针通过前驱关系指向地址,地址通过前驱关系指向内存。

 2.接着,向ChatGPT详细阐述了如何根据知识图谱进行启发式问答的方法。

Person:好的,在我向你提问后,你不单单要回答我提问的问题本身,而且还要在知识图谱中,寻找此问题涉及到的实体的邻居实体,然后你根据这个邻居实体,生成若干问题,再向我提问,我给你举个例子,比如,我问你什么是指针,你在回答这个问题后,在我给你提供的C程序设计知识图谱中找到指针实体的邻居实体地址,然后你根据地址这个知识点再向我提问有关地址的问题。

 3.在这个过程中,ChatGPT根据用户提出的问题,并依照知识图谱的规范,生成了一系列启发式问题,取得了不错的效果。

ChatGPT:非常抱歉之前的误解。我明白了你的要求。根据你的例子,我会根据你提供的问题,从知识图谱中找到相关实体的邻居实体,并生成与邻居实体相关的问题。让我开始回答你的问题,并根据知识图谱提出更多问题来帮助你深入理解。
问题:什么是指针?
回答:指针是一个变量,它存储着内存地址。通过指针,我们可以直接访问和修改内存中的数据。
根据知识图谱,指针实体的邻居实体是地址。
问题:什么是地址?它与指针有什么关系?
请回答上述问题,并告诉我你对地址的理解。我将根据你的回答生成更多与地址相关的问题。

4.随后,我回答了ChatGPT提出的问题,ChatGPT对我的回答进行了评估,并进一步提出了更深层次的问题。

Person:C语言里面的地址实际上就是一个内存单元的编号,指针保存了某个变量的地址而指针本身其实也是一个变量,它也有自身的地址.

ChatGPT:非常好的解释!你对地址的理解很准确。地址表示了内存中的一个单元,并且每个内存单元都有一个唯一的编号。指针保存了变量的地址,通过指针可以访问和操作该地址处的数据。同时,指针本身也是一个变量,因此它在内存中也有自己的地址。
基于你的回答,我可以提出以下问题来进—步探讨:
1.指针和地址之间的关系如何帮助我们在程序中访问和修改变量的值?
2.为什么指针变量需要有自己的地址?
3.在使用指针时,我们如何确保指针变量中存储的地址是有效的?
4.指针的值是什么?它与地址有何区别?
5.指针和地址的概念在动态内存分配和数据结构中的应用有哪些?
请回答以上问题,或者告诉我你对其中某个问题的困惑程度,我将进一步帮助你理解。

5.在接下来的交互中,我向ChatGPT提出了一个新的问题,然而它并没有按照启发式问答的模式进行回答。

Person:好的,你的表现很不错,我现在问你一个新的问题,地址怎么学呢
ChatGPT:学习地址的概念可以通过以下步骤进行:
1.理解内存和变量:首先,要理解计算机内存的概念以及在程序中如何使用变量来存储数
据。了解变量是如何在内存中分配空间,并与内存地址相关联的。
2.掌握取地址运算符(&)︰在C语言中,可以使用取地址运算符(&)来获取变量的地址。学习如何使用取地址运算符获取变量的地址,并将其存储在指针变量中。
3.实践示例代码:编写一些简单的示例代码来操作指针和地址。例如,声明一个指针变量,
并将某个变量的地址赋值给指针,然后通过指针来访问和修改该地址对应的内存中的数据。
4.运行和观察程序:将代码编译并运行,观察指针和地址的行为。通过观察程序输出或调试
信息,可以更好地理解指针如何与地址进行交互,并影响内存中的数据。
5.深入学习指针的相关概念:进一步学习指针的相关概念,如指针的指针(多级指针)、指针算术、指针和数组的关系等。这些概念会进一步拓展对地址和指针的理解。
6.解决问题和练习:通过解决一些与地址和指针相关的编程问题,加深对地址概念的理解。这些问题可以涵盖指针的传递、动态内存分配、数组和字符串的处理等。
7.参考学习资料和文档:阅读相关的学习资料、教程和文档,深入了解地址和指针的更多细
节和使用场景。
总之,学习地址的概念需要通过理论学习和实践相结合。理解内存、变量和指针的基本概念,编写代码并观察其行为,解决问题和练习,都有助于加深对地址的理解。请记住,持续的实践和探索是提高对地址概念的掌握程度的关键。

6.因此,我明确重申了回答的规则。

Person:你是不是忘了在我向你提问后,你不单单要回答我提问的问题本身,而且还要在知识图谱中,寻找此问题涉及到的实体的邻居实体,然后你根据这个邻居实体,生成若干问题,再向我提问。

ChatGPT:非常抱歉,我之前忽略了你的要求。我会根据你提供的知识图谱中的实体,生成一些问题并根据相关实体向你提问。
根据你提供的知识图谱路径:指针-→>地址-→>内存
现在我会根据这个路径提出几个问题来帮助你更好地理解指针、地址和内存之间的关系。
1.指针与地址之间的关系是什么?可以用一个具体的例子来说明吗?
2.地址与内存之间的关系是什么?内存中存储的是什么类型的数据?3.指针变量存储的是什么?它的值是什么?
请根据这些问题回答,并让我知道你的答案,我们可以继续探索相关的知识点。

这次ChatGPT的表现较为良好。

总的来说,结合知识图谱可以提升ChatGPT在启发式问答方面的效果。

五、总结

1.启发式问答是一种旨在通过引导学生思考、探索和发现知识的教学方法,可以促进学生的学习和理解。然而,ChatGPT的启发式问答能力有限(估计与其研发目标的定位有关,在聊天中总是扮演回答和陈述的角色居多),可能会出现生成领域知识问题或涉及抽象推理乏力的问题。因此,目前来看,能否进行启发式问答对话在一定程度上也可以作为判断对方是否为LLM的增强版图灵测试。

2.在大语言模型层出不穷,如火如荼的局面下,知识图谱的研发和应用似乎倍感寂寞和冷落,但是在一些垂直领域需要高阶抽象概念参与的应用中,知识图谱凭借其知识密集和关联性强的优势仍能获得一席之地,且渐呈强强联手之势。

3.就本文而言,知识图谱可以用作生成启发式问题的资源。ChatGPT可以基于知识图谱中的实体和关系提出与用户问题相关的启发式问题,帮助用户更深入地思考和探索问题的不同方面。另外,如何设计启发式问答的评价指标也是一个很有挑战性的工作。


作者:单昕  指导老师:肖乐  单位:河南工业大学

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值