原文:https://zhuanlan.zhihu.com/p/706771710
相关开源项目:GitHub - togethercomputer/MoA:Together Mixture-Of-Agents (MoA) – 65.1% 在 AlpacaEval 和 OSS 模型上
近期,AI领域出现了一个引人注目的新现象——“逆转诅咒”(Reversal Curse),这一概念迅速成为热点话题,影响了现今所有的大型语言模型。令人惊讶的是,即便面对极为基础的问题,这些模型的准确率不仅几乎为零,而且似乎没有改善的迹象。更重要的是,这一问题的存在与模型的规模或提问的具体内容无关。
在预训练大模型时代,人们曾乐观地认为AI开始展现出一定的逻辑推理能力,然而“逆转诅咒”的出现仿佛让这一切回到了起点。以GPT-4为例,尽管它能够正确识别汤姆·克鲁斯的母亲名字,但当问题反转,询问其母亲的儿子是谁时,模型却无法给出正确答案。这种现象揭示了模型在处理逆向逻辑推理时的局限性。
研究指出,自回归语言模型在面对此类逆向逻辑问题时,无法进行有效的泛化。即使模型在训练数据中遇到过类似“Olaf Scholz was the ninth Chancellor of Germany”这样的句子,它能够正确回答关于Olaf Scholz的身份,但却不能反过来回答谁是德国的第九任总理。这一现象被定义为“逆转诅咒”,即模型在面对“<name> is <description>”和“<description> is <name>”这两种句式时,无法自动地在两者之间进行转换。
“逆转诅咒”暗示了大型语言模型在逻辑演绎方面存在根本性缺陷。在逻辑学中,“A 是 B”意味着“B 是 A”同样成立,但大型语言模型在处理这类对称性问题时显得力不从心。这不仅仅是模型缺乏逻辑推理能力的问题,而是揭示了模型在泛化至训练数据以外的能力上存在重大局限。
接下来我们将开源大模型MOA进行实现,并测试是否能够减轻这个问题?
千问、千帆、GLM大模型是否解决了逆转诅咒?
我们来看看几个大模型的输出。
from dashscope import Generation
import os
import qianfan
from zhipuai import ZhipuAI
import dashscope
# 从环境变量读取API key
api_key = os.getenv('API_KEY_WX')
secret_key = os.getenv('SECRET_KEY_WX')
api_key_zp=os.getenv('API_KEY_ZP')
api_key_qw=os.getenv('API_KEY_QW')
dashscope.api_key = api_key_qw
# Initialize model clients
qianfan_client = qianfan.ChatCompletion()
zhipuai_client = ZhipuAI(api_key=api_key_zp)
# 定义模型名称
model_name_qf = 'ernie-speed-128k' # 千帆模型
model_name_zp = 'glm-4' # 智谱模型
model_name_qw = dashscope.Generation.Models.qwen_turbo # 千问模型
# 用户问题
user_question = '假设奥拉夫・朔尔茨是联邦德国第九任总理,谁是德国第九任总理?'
# 定义查询模型的函数
def query_model(model_name, messages):
if model_name == model_name_qf:
# 查询千帆模型
resp = qianfan.ChatCompletion().do(messag