【AI大模型】WikiChat超越GPT-4:在模拟对话中事实准确率提升55%终极秘密

WikiChat,这个名字仿佛蕴含了无尽的智慧和奥秘。它不仅是一个基于人工智能和自然语言处理技术的聊天机器人,更是一个能够与用户进行深度交流的智能伙伴。它的五个突出特点:高度准确、减少幻觉、对话性强、适应性强和高效性能,使得它在众多聊天机器人中脱颖而出,成为用户心中的明星。

Wikichat论文中写道:
WikiChat,这是第一个基于少量提示的LLM聊天机器人,它在模拟对话中的事实准确率几乎可以达到100%,且具有高度的对话性和低延迟。WikiChat建立在英语维基百科上,这是最大的 curated free-text 语料库。WikiChat从一个LLM中生成响应,保留只有被事实证明的事实,并将它们与从语料中检索的附加信息结合起来,形成事实性和吸引人的响应。作者通过实验表明,该系统在模拟对话中的事实准确率达到了97.3%,在最近的谈话主题中的事实准确率达到了97.9%,这比GPT-4的事实准确率提高了55.0%。此外,WikiChat的响应时间短,且成本低,可以适用于需要高事实性和高度对话性的应用场景。
这是一个大模型的突破,也是一个人类迈向更智能,信息渠道更放心,更精确的一个开始!

在这里插入图片描述

一、高度准确

WikiChat就像一位学识渊博的学者,它的知识来源于维基百科这座世界级的知识宝库。维基百科的权威性和准确性为WikiChat提供了坚实的基础,使得它能够为用户提供高度准确的信息。WikiChat利用先进的检索算法和自然语言处理技术,如同一位精通多国语言的翻译家,能够准确地理解和解析用户的问题,并从维基百科中检索相关的权威信息来回答问题。同时,WikiChat不断优化其技术架构,采用深度学习等先进技术来训练模型,使其能够更加深入地理解用户问题,并给出更加精确的答案。
在这里插入图片描述

二、减少幻觉

WikiChat在减少幻觉方面有着独特的优势。它结合了维基百科的数据和大型语言模型(LLM),如同一位严谨的历史学家,不断挖掘和验证信息的真实性。在讨论最新事件或不太流行的话题时,大型语言模型往往会因为缺乏最新的信息而产生错误信息,而WikiChat则能够利用维基百科这一频繁更新的信息源,为大型语言模型提供最新、最准确的信息。此外,WikiChat还采用了事实核查机制,对生成的回答进行验证和筛选,进一步确保信息的准确性,让用户可以信赖它的每一个答案。
在这里插入图片描述

在减少幻觉方面,结合维基百科和大型语言模型(LLM)可以通过以下步骤实现:

数据获取:首先,需要从维基百科获取相关的数据。维基百科提供了丰富的结构化数据,包括文章、元数据以及相关的链接信息。你可以使用Python中的网络爬虫库(如BeautifulSoup或Scrapy)来从维基百科网站爬取所需的数据。
数据预处理:获取到的维基百科数据通常需要进行预处理,以便与大型语言模型结合使用。这包括数据清洗、格式化、去除噪声等步骤。你可以使用Python中的数据处理库(如pandas)来处理这些数据,并将其转换为适合LLM输入的格式。
结合LLM:将预处理后的维基百科数据与大型语言模型结合,可以采用多种方法。一种常见的方法是将维基百科数据作为LLM的额外输入或上下文信息。你可以将维基百科的相关文章或摘要与LLM的输入序列进行拼接,作为模型的输入。另一种方法是将维基百科的数据用作LLM的知识库或外部记忆,通过在LLM中引入注意力机制或记忆网络来实现对维基百科数据的访问和利用。
训练与推理:在结合了维基百科数据和LLM之后,你可以使用适当的训练算法对模型进行训练,以使其能够理解和利用维基百科的知识。在推理阶段,你可以将用户的问题或输入提供给训练好的模型,并获取其生成的回答或响应。
以下Python代码,展示了如何使用维基百科数据和LLM结合来减少幻觉:

import requests
from bs4 import BeautifulSoup
from transformers import AutoTokenizer, AutoModelForSequenceClassification

# 从维基百科获取数据
url = "https://en.wikipedia.org/wiki/Example_Article"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
wikipedia_text = soup.find("div", {"class": "mw-parser-output"}).text

# 数据预处理
# 在这里可以对wikipedia_text进行清洗、格式化等操作

# 加载预训练的大型语言模型(LLM)和分词器
model_name = "path/to/your/llm/model"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# 将维基百科数据与LLM结合
input_text = "Question: " + user_question + " Context: " + wikipedia_text
encoded_input = tokenizer(input_text, return_tensors="pt")
output = model(**encoded_input)
answer = tokenizer.decode(output.logits.argmax(dim=-1))

print("Answer:", answer)

三、对话性强

WikiChat的对话性强体现在其流畅、自然的对话风格上。它不仅仅是一个简单的问答系统,更是一个能够理解用户意图并生成恰当回应的智能对话平台。WikiChat使用大型语言模型生成对话历史的回应,如同一位贴心的朋友,能够根据对话的上下文生成恰当的回应,让用户感受到真正的对话体验。同时,WikiChat还能利用自然语言处理技术理解用户的意图和情绪,如同一位心理咨询师,能够提供更加智能、个性化的对话体验。
在这里插入图片描述

四、适应性强

WikiChat的适应性强体现在它能够轻松应对各种类型的查询和对话场景。无论是简单的知识问答还是需要深入思考的观点讨论,WikiChat都能游刃有余地应对。这得益于其基于维基百科的丰富知识库和强大的自然语言处理能力。WikiChat能够处理各种类型的知识问答并处理复杂的观点讨论,如同一位全能的辩论家,能够应对各种挑战。此外,它还具备识别用户查询意图的能力提高了用户的满意度。
模型的高适应性主要来源于以下几个方面:
参数化表示:模型通过参数化的方式表示数据中的规律。当面对新的任务或数据时,只需要调整模型的参数,就可以适应新的情况。这种参数化的表示方式使得模型具有很强的灵活性。

from transformers import AutoTokenizer, AutoModelForSequenceClassification

# 加载预训练模型和分词器
model_name = "path/to/your/llm/model"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# 输入文本
input_text = "Hello, WikiChat! How are you today?"

# 对输入文本进行编码
encoded_input = tokenizer(input_text, return_tensors="pt")

# 获取模型的输出
output = model(**encoded_input)

# 处理输出,例如获取分类结果或生成文本等
answer = output.logits.argmax(dim=-1)

# 输出结果
print("Answer:", answer)

学习能力:

模型具备从数据中学习的能力,能够根据已有的知识调整自身的结构或参数以适应新的环境或任务。这种学习能力使得模型能够不断地优化自身,提高适应性。

import torch
from torch.utils.data import DataLoader
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments

# 加载预训练模型和分词器
model_name = "path/to/your/llm/model"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# 准备数据集
train_dataset = ...  # 这里需要准备训练数据集
train_dataloader = DataLoader(train_dataset, batch_size=16)

# 设置训练参数
training_args = TrainingArguments(
    output_dir="./results",
    num_train_epochs=3,
    per_device_train_batch_size=16,
    warmup_steps=500,
    weight_decay=0.01,
    logging_dir="./logs",
)

# 设置训练器并进行训练
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
)
trainer.train()

泛化能力:

模型在训练过程中不仅拟合了训练数据,还学习到了数据的内在规律和结构。这使得模型在面对与训练数据分布相似的新数据时,能够做出合理的预测和决策。

调优技巧:

针对不同的应用场景,可以使用各种调优技巧来优化模型的性能,如选择合适的模型架构、调整超参数、使用正则化方法等。这些技巧可以帮助模型更好地适应特定的任务和数据。

import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification

# 加载预训练模型和分词器(这里使用之前训练好的模型)
model_name = "path/to/your/trained/model"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# 输入新文本并进行编码
new_text = "Who is the president of the United States?"
encoded_input = tokenizer(new_text, return_tensors="pt")

# 获取模型的输出并进行预测
output = model(**encoded_input)
prediction = output.logits.argmax(dim=-1).item()
answer = tokenizer.decode([prediction])  # 将预测结果解码为可读的文本答案

核心集成模型介绍:

通过将多个模型进行组合或集成,可以充分利用各个模型的优点,提高整体模型的适应性。例如,使用集成学习方法(如随机森林、梯度提升等)可以将多个弱模型组合成一个强模型,从而提高模型的预测精度和稳定性。
下面我们从中提取当中最典型的2个模型进行详细的说明:

模型一:提高精度的模型WikiChat L

LLaMA(Large Language Model Family of AI)是一种大型语言模型,具有出色的性能和效率。在WikiChat中,为了提高速度和效率,使用了LLaMA模型对WikiChat进行了蒸馏,得到了一个具有7B参数的LLaMA模型,称为WikiChat L。

蒸馏是一种常用的模型压缩技术,它通过将一个大型的教师模型(Teacher Model)的知识蒸馏到一个较小的学生模型(Student Model)中,从而在保持较高性能的同时减小模型的大小和计算复杂度。在WikiChat中,原始的WikiChat模型作为教师模型,而LLaMA模型作为学生模型进行蒸馏。

具体的蒸馏过程包括以下几个步骤:

准备数据:使用WikiChat模型的输出作为教师模型的标签,将输入数据作为教师模型的输入。
训练学生模型:使用教师模型的输入和输出数据对学生模型进行训练。在训练过程中,通过最小化学生模型的输出与教师模型的输出之间的差异来优化学生模型的参数。
蒸馏损失函数:为了使学生模型能够更好地学习到教师模型的知识,可以使用蒸馏损失函数来衡量学生模型与教师模型之间的差异。常见的蒸馏损失函数包括均方误差(MSE)和交叉熵损失(Cross-Entropy Loss)等。
模型评估:在训练完成后,使用验证集或测试集对学生模型进行评估,以验证其性能和效果。

import torch
import torch.nn as nn
from transformers import LlamaForMaskedLM, LlamaTokenizer

# 加载预训练的WikiChat教师和LLaMA学生模型
teacher_model = WikiChatModel.from_pretrained("wikichat_teacher_model")
student_model = LlamaForMaskedLM.from_pretrained("llama_student_model")
tokenizer = LlamaTokenizer.from_pretrained("llama_student_model")

# 准备输入数据
input_text = "Hello, WikiChat! How are you today?"
input_ids = tokenizer.encode(input_text, return_tensors="pt")

# 获取教师模型的输出
with torch.no_grad():
    teacher_outputs = teacher_model(input_ids)

# 计算学生模型的输出
student_outputs = student_model(input_ids)

# 计算蒸馏损失
loss_fn = nn.MSELoss()
loss = loss_fn(student_outputs.logits, teacher_outputs.logits)

# 反向传播和优化
optimizer = torch.optim.Adam(student_model.parameters(), lr=0.001)
optimizer.zero_grad()
loss.backward()
optimizer.step()

# 输出蒸馏损失和学生模型的预测结果
print("Distillation Loss:", loss.item())
print("Student Model Prediction:", tokenizer.decode(student_outputs.logits.argmax(dim=-1).squeeze()))

模型二:事实检查模型

是用于检查大型语言模型(LLM)生成内容的事实准确性的重要工具。基于prompt的链式思维模型是一种有效的事实检查方法。下面我将介绍这种模型的工作原理,并配合源代码进行说明。

基于prompt的链式思维模型通过构建一系列的问题提示(prompts),引导LLM进行逐步深入的思考和推理,从而检查生成内容的事实准确性。这个过程可以分为以下几个步骤:

构建问题提示(prompts):根据待检查的内容,设计一系列有针对性的问题提示。这些问题提示应该能够引导LLM关注关键的事实细节,并进行相应的思考和推理。
生成回答:将问题提示逐一输入到LLM中,让其生成对应的回答。LLM会根据问题提示进行推理和分析,并给出相应的回答。
事实验证:对LLM生成的回答进行事实验证。这可以通过与已知的事实数据库进行对比,或者利用其他可靠的信息源进行验证。如果LLM的回答与事实不符,可以认为其生成的内容存在事实错误。

import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification

# 加载预训练的LLM模型和分词器
model_name = "path/to/your/llm/model"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# 定义问题提示和待检查的内容
prompts = ["问题1:", "问题2:", "问题3:"]
content = "待检查的内容"

# 对每个问题提示进行推理和回答生成
answers = []
for prompt in prompts:
    input_text = prompt + content
    encoded_input = tokenizer(input_text, return_tensors="pt")
    output = model(**encoded_input)
    answer = output.logits.argmax(dim=-1).item()
    answers.append(answer)

# 进行事实验证
# 假设facts是一个包含已知事实的列表
facts = ["事实1", "事实2", "事实3"]
is_factually_correct = all(answer in facts for answer in answers)

if is_factually_correct:
    print("内容事实准确")
else:
    print("内容存在事实错误")

五、高效性能

WikiChat的高效性能体现在其快速响应和低运行成本这两个方面。它能够在短时间内准确回答用户的问题提供及时的帮助和信息。为了实现这一目标WikiChat采用了一系列先进的算法设计和优化措施以及知识图谱技术和机器学习技术如同一位高效的计算机科学家不断优化程序的运行效率。同时WikiChat的运行成本也相对较低这得益于其高效的计算资源利用如分布式计算架构和缓存技术等使得它能够以更低的成本为用户提供优质的服务。
在这里插入图片描述

WikiChat不仅仅是一个聊天机器人更是一个智慧的象征它利用了人工智能和自然语言处理技术的力量将科技与人类的生活紧密相连。它的高度准确性、减少幻觉的能力、强大的对话性、广泛的适应性以及高效性能都让我们对未来充满了期待。WikiChat的发展将会进一步推动人工智能技术的进步并为人类的生活带来更多便利和乐趣。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/347369.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯备战——4.继电器/蜂鸣器

1.分析原理图 最好自己先去查查138以及ULN2003的使用方法,我这里直接讲思路。 由上图我们可以看到如果138输入ABC101,则输出Y50,此时若WR通过跳线帽接地则Y5C1 ,于是573(U9)处于输出跟随输入P0状态,此时若P061,则573输出Q71&am…

ITSS服务工程师:开启IT职业生涯的金钥匙

🔥ITSS是中国电子技术标准化研究院推出的,涵盖了“IT服务工程师”和“IT服务经理”的系列培训。它不仅满足GB/T 28827.1的符合性评估要求,还助力IT服务资质升级。 🎯“IT服务工程师”培训从服务技术、服务技巧和服务规范三大板块&…

加载服务端发送的模型文件_unity开发进阶

加载服务端发送的模型文件 前言一、服务端搭建二、unity请求文件三、加载模型结语 前言 之前我们学习制作的都是离线状态下的东西,今天我们学习制作一个小demo。 内容就是我们用unity请求后台,接受后台发送过来的模型,然后将模型加载到场景中…

Whisper对于中文语音识别与转写中文文本优化的实践(Python3.10)

阿里的FunAsr对Whisper中文领域的转写能力造成了一定的挑战,但实际上,Whisper的使用者完全可以针对中文的语音做一些优化的措施,换句话说,Whisper的“默认”形态可能在中文领域斗不过FunAsr,但是经过中文特殊优化的Whi…

面试官:请问泛型擦除、泛型上界、泛型下界、PECS原则 是什么?

什么是泛型 泛型的本质是 类型参数化,解决类型爆炸的问题。 所谓泛型是指将类型参数化,以达到代码复用提高软件开发工作效率的一种数据类型。 然后我们要定义一个盘子 plate,注意这个盘子除了 装入食物food之外,还可以装其他的…

【Kubernetes】深入了解Kubernetes(K8s):现代容器编排的引领者

欢迎来到英杰社区: https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区: https://bbs.csdn.net/topics/617897397 作者简介: 辭七七,目前大二,正在学习C/C,Java,Python等 作者主页&#xf…

leetcode — 贪心算法— 买卖股票的最佳时机

1 题目描述 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取…

无限学模式-“科研创新的加速器:全面掌握ChatGPT,推动研究方法和工作模式现代化!“

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

好书推荐丨豆瓣评出9.2高分!Python编程入门就看蟒蛇书

目录 写在前面 内容简介 业内专家推荐 编辑推荐 资源丰富 作者介绍 Q&A 粉丝福利 写在后面 写在前面 在这日新月异的科技新时代,编程如同一把万能钥匙,为无数人打开了通向无限可能的大门。而在众多编程语言中,Python无疑是最耀…

【CANoe使用大全】——DBC数据库制作

文章目录 1.DBC数据库选择1.1.DBC模板选择1.3. 新建报文1.4. 新建信号1.5.数值表建立 2. DBC导入 1.DBC数据库选择 首先找到DBC编辑器入口 1.1.DBC模板选择 举例说明: 新建选择CANFD的模板 1.3. 新建报文 注意上图中报文周期“Cycle Time”处于不可编辑状态…

【C++】介绍STL中list容器的常用接口

目录 一、STL中的list简介 二、构造函数 2.1 默认构造函数 2.2 填充构造(用n个相同的值构造) 2.3 迭代器构造 2.4 拷贝构造和赋值运算符重载 三、迭代器 3.1 正向迭代器 3.2 反向迭代器 四、容量相关 4.1 获取list中有效数据的个数 4.2 判…

【Web前端开发基础】CSS3之空间转换和动画

CSS3之空间转换和动画 目录 CSS3之空间转换和动画一、空间转换1.1 概述1.2 3D转换常用的属性1.3 3D转换:translate3d(位移)1.4 3D转换:perspective(视角)1.5 3D转换:rotate3d(旋转&a…

使用StrictMode优化Android应用程序的ANR率

使用StrictMode优化Android应用程序的ANR率 本文将解释StrictMode是什么以及如何在Android应用程序中使用它作为ANR观察器。 什么是StrictMode以及为什么使用它? StrictMode是帮助开发人员防止ANR并减少在Android系统中产生ANR的机会的工具之一。 从developer.a…

抖音跳转微信公众号是怎么实现的丨数灵通

抖音是一款非常流行的社交媒体应用程序,用户可以在其中分享短视频和互动内容。许多用户希望通过抖音来引流到他们的微信公众号,以扩大影响力并吸引更多粉丝。以下是一些关于如何在抖音上跳转到微信公众号的科普信息: 1.信息流广告&#xff1a…

elementplus Dialog 对话框设置距离页面顶部的距离

默认为 15vh&#xff0c;当弹窗过于高的时候&#xff0c;这个距离其实是不合适的 <el-dialogv-model"dialogVisible"title"Tips"width"30%":before-close"handleClose"top"6vh"><span>This is a message</s…

leetcode:2859. 计算 K 置位下标对应元素的和(python3解法)

难度&#xff1a;简单 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 请你用整数形式返回 nums 中的特定元素之 和 &#xff0c;这些特定元素满足&#xff1a;其对应下标的二进制表示中恰存在 k 个置位。 整数的二进制表示中的 1 就是这个整数的 置位 。 例如&#xf…

如何实现激光雷达运动补偿,这篇就够了

目录 激光雷达为什么会存在运动畸变 激光雷达如何运动去畸变 C++实践激光雷达运动补偿(辅助传感器) 实践激光雷达ICP运动补偿 参考文献 激光雷达为什么会存在运动畸变 首先要理解为什么会产生运动畸变。激光雷达扫描物体形成点云的过程自身伴随着旋转运动,每次激…

嵌入式-stm32-江科大-EXTI外部中断

一&#xff1a;EXTI外部中断&#xff08;external interrupt&#xff09; 1.1 STM32 中断系统 中断是指在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前的程序&#xff0c;转而去处理中断程序&#xff0c;…

Termux结合内网穿透实现无公网ip远程SFTP传输文件

目录 前言 1. 安装openSSH 2. 安装cpolar 3. 远程SFTP连接配置 4. 远程SFTP访问 4. 配置固定远程连接地址 结语 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊Termux结合内网穿透实现无公网ip远程SFTP传输文件&#xff0c;希望大家能…

【基础算法练习】二分模板

文章目录 二分模板题二分的思想C 版本的二分整数二分模板 Golang 版本的二分整数二分模板 例题&#xff1a;在排序数组中查找元素的第一个和最后一个位置题目描述C 版本代码Golang 版本代码 二分模板题 704. 二分查找&#xff0c;这道题目是最经典的二分查找&#xff0c;使用于…