chatgpt/bingchat 这些大语言模型在进行文字回应的时候都是几个字几个字的往外蹦,这背后的原因是啥?

2023-10-13 00:07:50 +08:00
 MajestySolor
4445 次点击
所在节点    机器学习
53 条回复
4BVL25L90W260T9U
2023-10-13 08:37:25 +08:00
没想到在 V 站上,这么简单的问题也能鸡同鸭讲,有人说原理,有人说具体实现,而且还互相打起来……

从原理上来说,ChatGPT 用的模型是自回归的,也就是说,确确实实模型是需要一个字(token)一个字往外吐的。

从实现上来说,可以等模型完全生成再返回给你,也就是上面有人提到的 `stream=False`。但是这样的用户体验反而不好,还不如把这个过程暴露给用户。但是考虑到网络传输,也不可能真的一个包只包含一个字符,那样传输的 overhead 和 latency 都太大了,所以你如果真的看返回的包的话,一个包里包含一段话。也就是说,其实传输上是完全缓存和完全 stream 的一个折中。

再从商业上说,所谓充值可以一下返回,无非是优先级更高,返回更快,不可能改变模型自回归的根本属性……
Seanfuck
2023-10-13 08:48:24 +08:00
生成确实是一个个字吐,传输的话,chatgpt 也是一个个字吐,百度则是一段段吐。
估计跟带宽有关,老外网络好,一个个吐没影响(不会变慢也不在乎流量)。
cheng6563
2023-10-13 09:26:46 +08:00
因为语言模型就是输入一段聊天记录,模型生成回复中的下一个字。
MEIerer
2023-10-13 09:26:58 +08:00
因为爱情
ztmqg
2023-10-13 09:27:48 +08:00
Google Bard 是一次性返回
swulling
2023-10-13 09:29:34 +08:00
@Seanfuck 一段段是为了加内容过滤。按句过滤,这是因为上面要求必须先过滤后输出。
obeyatonce
2023-10-13 09:33:26 +08:00
因为它并不像人类一样,是想好了一句话再说出来,而是根据模型计算后面要说的词是什么
Takizawa
2023-10-13 09:44:18 +08:00
难道没人用过 google Bard 吗?很明显 Bard 就不是一个字一个字地崩,而是直接给你结果,在给出结果之前有一个等待期。
woooooOOOO
2023-10-13 10:15:56 +08:00
transformer 模型就是一个字一个字的往外蹦,他们机器好速度应该是很快的,架不住用户多。
我个人认为他们是给你分配一段时间来运行,一次出了很多字,一个一个给你,然后进程就切换了,轮到别人了,过一会再轮到你。
一次性返回是等结果都出来再一次性返回。
dnfQzjPBXtWmML
2023-10-13 11:54:33 +08:00
@geelaw 还网络延迟呢😅
dnfQzjPBXtWmML
2023-10-13 11:55:50 +08:00
@Takizawa 很明显 bard 用的人不多,每个人分到了更多的算力
geelaw
2023-10-13 12:37:13 +08:00
@dnfQzjPBXtWmML #30 这很奇怪吗?如果服务器快速产生事件,延迟很小但带宽也很小,那么客户端每次网络 IO 只能看到一部份事件;如果服务器慢速产生事件,延迟很大且带宽很大,那么客户端第一次网络 IO 很可能会看到累积的好多事件。每次 IO 之后操作了 DOM ,并且下次进入 IO 等待的时候浏览器会渲染,因此会看到动画效果。
locoz
2023-10-13 12:41:58 +08:00
@geelaw #5 主要还是可用算力资源的问题,公共免费服务的资源有限,如果不出一个词就输出一次显示会导致感受上等待了很久,用户体验差;而付费 API 可用资源多,可以在短时间内连续输出多个词,所以完全可以做到攒一批再发送,实现看起来的一次一大段回复甚至短暂等待后直接得到完整回复。
maxxfire
2023-10-13 12:47:26 +08:00
很多印度人在后面敲,显然人手不足,所以回复的比较慢
tsja
2023-10-13 13:08:38 +08:00
@airyland 这个网站好棒
eae29qvc
2023-10-13 15:03:45 +08:00
@swulling 意思就是从你提交请求到客户端收到第一个字前,结果已经出来了,当然出结果需要一定时间,一个字一个字返回就是为了限流,充钱多优先级就高,秒回的意思是只要结果出了就直接全部返回,这是 azure 技术人员说的
moonbeama
2023-10-13 15:16:26 +08:00
流式响应,可以看看 uni-ai 的官网的文档,之前接入玩过,目的就是减少响应时间吧(虽然并没有),但至少用户在界面上不会什么都看不到
dnfQzjPBXtWmML
2023-10-13 16:09:09 +08:00
@geelaw “但或许这个问题并不重要,token 生成、网络传输的延迟、客户端异步读取收到的数据,这些结合在一起自动导致了客户端动画。”:每次对话几十秒,token 生成占多少时间,网络延迟占多少时间?我不认为这个场景下所谓“通信复杂度上升到 Theta(n^2)”是什么值得真正工作过的程序员震惊甚至关注到的东西。
swulling
2023-10-13 16:26:43 +08:00
@eae29qvc 那你就是听错了或者对方不专业。
geelaw
2023-10-13 17:09:15 +08:00
@dnfQzjPBXtWmML #38 不是很确定你的数据来自什么环境,同款和类似的对话我这边是几秒钟。我比较好奇你认为每个数值分别应该是多少。

此外,你似乎没有理解我的意思,我是说 OpenAI 的 API 到底是类似第一种还是第二种实现(只要一次累积的 tokens 数量没有太大),最终网页上显示的效果没有区别。

考虑 2000 tokens 且每 token 有 4 个字符的情况,若每次传输到目前为止的总文本,最终会传送至少 7.6 MB ;若每次只传输增量,这一数值可以降低到 7.8 KB 。我只能说希望现在的软件工程师不要把性能进步都吃掉,恢复一点上个世纪的人的美好品质。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/981501

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX