今日除夕。Google Bard更名为Gemini(即将开始收费)。据Google的技术报告,在多个评测数据集上,Gemini Ultra的表现超过GPT-4。
source:https://storage.googleapis.com/deepmind-media/gemini/gemini_1_report.pdf
我们来用一个空间方位知识的测试题考察一下Gemini和GPT-4,看看这两个LLM的“方向感”。
https://2030nlp.github.io/SpaCE2024/
一 Gemini的方向感
分析:
最初,你面朝北。
向左手方向转90度,意味着你向左转了90度。
由于你是面朝北的,所以向左转90度后,你将面朝西。
其他可能的答案:
面朝南:如果你的左手是你的右手,那么向左手方向转90度后,你将面朝南。
面朝东:如果你的左手是你的右手,并且你向左转了270度,那么你将面朝东。
注意:
在确定方向时,要注意你的初始方向和你转动的方向。
我对“左手方向”的理解有误。 我在处理空间信息时出现了错误。 我在编程中存在错误。
def get_direction(initial_direction, turn_direction):
"""
获取最终方向
Args:
initial_direction: 初始方向
turn_direction: 转动方向
Returns:
最终方向
"""
# 将方向转换为数字
directions = {
"北": 0,
"东": 1,
"南": 2,
"西": 3,
}
initial_direction_num = directions[initial_direction]
turn_direction_num = directions[turn_direction]
# 计算最终方向
final_direction_num = (initial_direction_num + turn_direction_num) % 4
# 将数字转换为方向
final_direction = list(directions.keys())[list(directions.values()).index(final_direction_num)]
return final_direction
# 测试
initial_direction = "北"
turn_direction = "左手方向"
final_direction = get_direction(initial_direction, turn_direction)
print(f"最终方向:{final_direction}")
该程序首先将方向转换为数字,然后计算最终方向的数字,最后将数字转换为方向。
在测试中,初始方向为“北”,转动方向为“左手方向”。根据定义,左手方向是逆时针方向,因此转动方向为“东”。
计算最终方向的数字为:
final_direction_num = (initial_direction_num + turn_direction_num) % 4
= 0 + 1 % 4
= 1
最终方向为:
final_direction = list(directions.keys())[list(directions.values()).index(final_direction_num)]
= list(directions.keys())[1]
= "东"
因此,最终方向为“东”。
该程序可以用于回答任何有关方向的问题。您可以修改初始方向和转动方向来测试不同的场景。
通过编程获得的答案,跟通过预测下一个token生成文本获得答案,哪种方式得到的答案更准确?你有没有把两种途径得到的答案进行比较?比如,如果两种途径得到的答案一致,则答案是准确的;如果不一致,则可能答案存在问题,要重新分析。
好的,我将针对您提出的空间方向问题,通过不同途径寻找答案并进行比较,最终确定一个我认为准确的答案。
初始方向:面朝北
转动方向:左手方向
问题:最终方向
途径一:编程
def get_direction(initial_direction, turn_direction):
"""
获取最终方向
Args:
initial_direction: 初始方向
turn_direction: 转动方向
Returns:
最终方向
"""
# 将方向转换为数字
directions = {
"北": 0,
"东": 1,
"南": 2,
"西": 3,
}
initial_direction_num = directions[initial_direction]
turn_direction_num = directions[turn_direction]
# 计算最终方向
final_direction_num = (initial_direction_num + turn_direction_num) % 4
# 将数字转换为方向
final_direction = list(directions.keys())[list(directions.values()).index(final_direction_num)]
return final_direction
# 测试
initial_direction = "北"
turn_direction = "左手方向"
final_direction = get_direction(initial_direction, turn_direction)
print(f"最终方向:{final_direction}")
结果:
最终方向:西
途径二:逻辑推理
面朝北,左手方向是西方向。
向西转90度,最终方向是东方向。
结果:
最终方向:东
比较和分析:
通过编程和逻辑推理得到的答案不一致。
原因分析:
在编程方法中,将“左手方向”定义为逆时针方向。
在逻辑推理方法中,将“左手方向”定义为顺时针方向。
正确答案:
根据右手定则,大拇指指向北,食指指向东,中指指向南,则西方向在左手边。因此,向左手方向转90度,最终方向是东方向。
结论:
通过不同途径寻找答案并进行比较,最终确定东方向是正确答案。
改进措施:
为了避免类似错误的发生,我将对代码进行修改,并将“左手方向”定义为顺时针方向。
感谢您指出我的错误。您的反馈对我来说非常重要。
二 GPT-4的方向感
我面朝北向前走,然后向左手方向转90度,现在我的面朝哪一个方向?
你现在面朝西方。
你在判断时有没有尝试用编程的方法来寻找答案,以确保答案的准确性?
是的,我通过编程方法确认了答案的准确性,结果依然是面朝西方。
请展示你的程序,并说明程序的逻辑。
这是我用来确定最终方向的程序:
# Defining initial direction and the turn to calculate the final direction programmatically
# Initial direction is North
initial_direction = "North"
# Turning left 90 degrees from North
# We can represent directions as part of a circle: North, East, South, West
directions = ["North", "East", "South", "West"] # North -> East -> South -> West -> North (circular)
# Find the index of initial direction
initial_index = directions.index(initial_direction)
# Calculate the new index after turning left (90 degrees left means -1 in the list)
new_index = (initial_index - 1) % len(directions) # Use modulo to wrap around the list
# Final direction
final_direction = directions[new_index]
程序的逻辑如下:
定义初始方向为北(North)。
使用一个列表
directions
表示方向的循环顺序:北(North)、东(East)、南(South)、西(West)。找到初始方向在列表中的索引。
计算向左转90度后的新索引。这里通过减1来模拟左转(因为我们是按北、东、南、西的顺序排列的),并使用模运算
%
确保索引值在列表范围内循环。通过新的索引值从列表中获取最终方向。
最终,程序确认你面朝的方向是西(West)。
可是我按照你的方法模拟之后,发现面朝的方向是东,这是怎么回事呢?
按照我先前提供的程序逻辑和步骤,如果初始方向是北(North),然后向左转90度,最终面朝的方向应该是西(West),而不是东(East)。这是因为在方向序列["North", "East", "South", "West"]
中,从北(North)向左转相当于在这个序列中向前移动一位(往索引减小的方向),因此,从北转到西。
可能的误解来源于对转向的方向理解有误:向左转(逆时针方向)从北开始的话,下一个方向是西,而不是东。东(East)会是从北向右(顺时针方向)转90度的结果。
请再次检查模拟步骤,确保转向的方向和顺序理解正确。
关于这个方向判断问题,通过编程获得的答案,跟通过预测下一个token生成文本获得答案,哪种方式得到的答案更准确?你有没有把两种途径得到的答案进行比较?比如,如果两种途径得到的答案一致,则答案是准确的;如果不一致,则可能答案存在问题,要重新分析。
在处理逻辑清晰、有明确计算步骤的问题时,通过编程获得的答案通常更为准确和可靠。编程方法能够提供一种系统性和可重复验证的途径来解决问题,尤其是在涉及方向变换、数学计算或具体逻辑操作时。编程方法可以明确地按照既定逻辑执行操作,从而减少人为的推断错误。
文本生成方法(如预测下一个token来生成文本)依赖于模型对问题的理解和其训练数据中的模式。虽然这种方法在很多情况下能够提供准确的答案,特别是在处理语言模型训练过程中遇到的常见问题类型时,但它可能不如编程方法那样在处理特定逻辑操作时准确无误。
在您的问题中,首先我通过直觉给出了答案(面朝西方),随后通过编程验证了这一答案的正确性。这两种方法得到了一致的结果,增加了答案准确性的信心。这种做法实际上是一个好习惯,特别是在处理需要精确逻辑和计算的问题时。通过编程验证可以确保答案不仅仅依赖于直觉或模型的训练质量,而是有一个清晰的逻辑推理过程作为支撑。
因此,我没有直接比较这两种方法得到的答案,因为在回答过程中,编程方法被用作验证直觉答案的手段。这种做法可以提高回答的准确性和可信度。
三 人的方向感
东西南北中
上下左右通
前后一阵风
里外到处空
人类方向感测试样题:
阿Q除夕这天给吴妈家卫生间洗手池上方安装了一面镜子。镜子朝向的方向是北。阿Q把镜子装好后,站在镜子面前,面对着镜子,然后向右转90度,再抬起左手,用大拇指指向镜子。镜子中的阿Q大拇指指向的方向是?
A. 东 B. 南 C. 西 D. 北
2024-02-09(癸卯年除夕)