自然语言到数据可视化聊天机器人 ——在与数据交互中的探索

Streamlit 应用链接:https://lebretou-vis-chatbot-vis-chatbot-3kconi.streamlit.app/

Github链接:https://github.com/lebretou/vis_chatbot

ChatGPT和类似的大型语言模型(LLMs)已经在很大程度上影响了人们对人工智能的感知,常常与这一术语等同。这些模型可以提供一系列创新应用,从分析PDF到生成图像。

作为具有数据可视化背景的人,我一直在考虑一个令人兴奋的可能性:开发一种类似于漫威电影中的贾维斯的工具。想象一下,可以通过自然语言交流与数据集互动,使用自然语言获取特定的数据洞察力。例如,你可以提问:

在美国的种族分布是什么?

并通过直观的增强现实可视化获得。这个交互式工具将允许您与人工智能进行对话,以获得更深入的洞察,使用手势来操作数据,如缩放或旋转,甚至可以通过将其移入您的手中与数据元素进行物理交互。

Javis from Iron Man

原创作品

保持HTML结构,将以下英文文本翻译为简体中文: Paula Maddigan和Teo Susnjak推出了Chat2VIS,这是一款利用现有大型语言模型(LLMs)的API的工具。这个工具托管在Streamlit上,并经历了一系列的步骤:

  1. 接收用户的提示。
  2. 将提示融入到预定义的模板中。
  3. 为LLMs提供了一个基本的代码模板。
  4. 执行Python代码以生成最终的可视化输出。
  5. Paula and Teo Chat2VIS: Figure 2

尽管创作者主要集中于比较当前LLMs的性能并与先前的发展进行基准测试,我旨在突出该工具的交互性。我对自然语言到可视化和自然语言界面的文献进行的研究揭示了先前的NL2VIS研究引入了值得注意的功能来增强用户的互动性。

  • 对话界面作为聊天机器人功能,具备交互式对话和以往对话历史记录(与Chat2VIS当前实现相比缺少该功能)。
  • 界面分析数据集,并提供提示,指导用户更高效地浏览和理解数据。
  • 后期可视化时,该模型解释了其过程,澄清了选择,例如选择 x/y 轴或使用的图表类型。
  • 它提供了一个叙述,描述了生成的情节,并以产生它的代码为基础。

在下面的部分中,我将展示我实现上述功能的过程,建立在Paula和Teo现有工作的基础之上。

对话界面

由于Chat2VIS是建立在Streamlit上的,这是一个非常棒的平台,可以用来开发自己的LLM聊天机器人。我进一步利用Streamlit并将Chat2VIS移植到了一个基于聊天的界面上。

Conversational Interface

或许实现这个功能的一个技术难点是在聊天历史界面中显示绘图图像。幸运的是,Streamlit允许我们将存储在缓冲区中的图像附加到当前会话状态中。这使我们能够在聊天历史中保留所有生成的绘图。

if "image" in msg:
st.chat_message("assistant").image(msg["image"],
caption=msg["prompt"])

探索

一个显著的使用ChatGPT和其他大型语言模型(LLM)的方法是生成文章写作或头脑风暴等任务的起点。虽然这些模型可能无法提供最细致、复杂的见解,但为建立一个基础结构而言非常宝贵。我们可以利用这个功能。

Paula and Teo Chat2VIS: Figure 4

在Paula和Teo的初始Chat2VIS版本中,他们创建了一个基本算法来描述正在分析的数据集,详细列出了列名称和数据类型(数值,分类等)。在此基础上,我增强了提示模板,并集成了ChatGPT以提供示例提示。用户可以使用自然语言进一步完善他们的查询,使用类似的提示请求详细信息:

“我想更多了解衣服。”

或寻求更广泛的指导,例如:

帮助我探索这个数据集。

作为回应,ChatGPT提供定制的示例提示来引导用户的探索。

Exploration examples (general vs. specific)

用户可以使用这些建议的提示作为数据集探索的起点。

自述

将英文文本翻译为简体中文,保持HTML结构: 在NL2VIS文献中备受赞誉的一个特性是自我说明的概念。用户的查询通常是抽象和高层次的,比如询问变量x和y之间的相关性,这可能对应多个图表类型。为了解决这个问题,我进一步完善了提示模板,使ChatGPT能够阐述选择特定图表的理由。这种推理过程存储在代码中的全局变量中。通过使用Python的内置函数,

exec(code, globals())

我们可以自由访问执行的代码中的全局变量。在下面的例子中,读取了一个有关美国大学的数据集,并输入提示“入学率和SAT平均分之间的相关性是多少?”

Self-explanation

编码描述

我希望通过利用源代码来生成情节,进一步增强聊天机器人的解释性输出。通过将代码重新输入ChatGPT API,系统可以从代码本身中提取并提供更详细的信息。

Code Description

为了实现这一点,我修改了代码,将用于创建最新图表的脚本保存在Streamlit的会话状态中。因此,当用户在文本框中输入“描述它”时,系统会将关联的代码转发给ChatGPT,促使其根据源代码提供全面的解释。

未来发展方向:

  1. 用户界面的增强:用户界面和应用程序流程可以通过几种改进获益。例如,目前用户需要通过特定前缀(如“探索”,“显示”或“描述”)来启动与聊天机器人的交互。引入切换按钮可以简化这个过程,使聊天机器人在不同的操作模式之间无缝切换。
  2. 持续探索的提示建议:在生成绘图后,聊天机器人应提供额外的提示,以指导用户在数据探索过程中。例如,在显示各大学平均SAT分数的绘图之后,聊天机器人可以提出一个后续提示,如:“显示SAT平均分数的地区差异。”
  3. 引入额外的模式:未来版本可以包括语音输入功能,为用户简化交互过程。此外,以增强现实(AR)或虚拟现实(VR)方式显示输出,可以提供更具沉浸感和引人入胜的视觉体验。

谢谢您的关注!😁

2024-01-20 04:50:52 AI中文站翻译自原文