V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hutng
V2EX  ›  OpenAI

为什么 gpt 不能正确识别汉字的个数?

  •  
  •   hutng · 158 天前 · 1561 次点击
    这是一个创建于 158 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚试了一下 claude 好像也不太行。

    19 条回复    2024-06-26 18:56:13 +08:00
    bankroft
        1
    bankroft  
       158 天前
    因为它不会思考,你把他当成高级搜索引擎就行了
    cmdOptionKana
        2
    cmdOptionKana  
       158 天前
    为什么你会以为 gpt 能识别汉字个数?
    Cooky
        3
    Cooky  
       158 天前
    MelodYi
        4
    MelodYi  
       158 天前
    我觉得他对“前一句话”、“这一句话”的描述不太理解,你可以试下把要数数字的句子用引号框起来,然后再问他这句话有多少字。
    Cooky
        5
    Cooky  
       158 天前
    十九八七六五四三二,前面这句话有几个汉字几个字符
    mxT52CRuqR6o5
        6
    mxT52CRuqR6o5  
       158 天前
    现在的大语言模型因为 token 压缩的原因很难做这个事情吧
    maolon
        7
    maolon  
       158 天前 via Android
    模型的位置编码实现方式造成的问题,之前的位置编码没有考虑 token 与上下文之间的位置关系而是基于整段内容的位置进行编码,所以模型不能准确的完成计数任务,现在提出了一个新位置编码 CoPE 能解决这个问题,但是需要模型重新训练才能解决,显然这很费时间,所以短期内这些模型还是无法进行准确计数
    fulajickhz
        8
    fulajickhz  
       158 天前
    @Cooky 我打不开 404
    EvaDan
        9
    EvaDan  
       158 天前
    这个涉及倒 GPT 技术底层的一些实现问题,主要是 tokenizer 。也就是把一个词/char 字符转成对应整型的数(并不一定就是一个)来表示。tokenizer 的实现有很多种,目前主流的是 BPE ,你可以去搜搜看。简单来说 字符串里的一个单元 经过 tokenizer 处理后,并不一定就是生成一个 token ,可能是多个,也可能是需要合并其他单元才生成一个。也就说你理解的字数 和最后输入到 GPT 的 token 数不一定不相等。
    对应到你这个任务,如果 GPT 需要完成,它首先得对准确的截断出,你想要计算个数的的 token 再进行 decoder (反编码),然后再去计算个数,目前纯粹的数值计算并不是 GPT 的强项,所以效果不好。
    不知道巴拉清楚没,哈哈
    guoz
        10
    guoz  
       158 天前 via Android
    可能一个是 token 的原因,gpt 思考汉语的语句单元不是单个汉字。英文的话每个单词是先会分开再映射 token 的,估计问题不大。
    而且这类问题本身比较像算数,llm 天然好像不擅长。
    zictos
        11
    zictos  
       158 天前
    @MelodYi #4
    我:
    下面的引号中有几个汉字:
    “安全性被认为是很重要的”

    ChatGPT:
    这个引号中有 7 个汉字。
    Cooky
        12
    Cooky  
       158 天前
    @fulajickhz 删了,gpt 发挥不稳定,试了好几次都正常,结果蹦出来一个算错的
    whileFalse
        13
    whileFalse  
       158 天前
    @EvaDan @guoz 那么如果问他这段文字有多少个 token 它能准确回答吗
    我很怀疑,因为 gpt 本质是个高级鹦鹉
    guoz
        14
    guoz  
       158 天前 via Android
    @whileFalse token 根据 tokenizer 不同分法是不一样的,所以没有准确答案。
    如果说是问某个模型他本身用的 tokenizer 针对某句话的 token 数,可以试试用 tiktokenizer 交叉验证
    titokenizer.vercel.ap
    fulajickhz
        15
    fulajickhz  
       158 天前
    @Cooky 现在 AI 都这样,词语接龙

    我之前传个 xls 文件,让他们统计下个数,每个 AI 给的都不一样
    hutng
        16
    hutng  
    OP
       158 天前
    @maolon
    @EvaDan
    @guoz
    差不多大概明白了,感谢
    TimePPT
        17
    TimePPT  
       158 天前   ❤️ 1
    prompt 加点小 trick 就 ok 了

    以下为 GPT -4o 测试结果:
    User
    要求不使用代码解析器,推断如下结果:
    有一个字符串,str="十九八七六五四三二",请问 len(str)的返回值是多少

    ChatGPT
    字符串 str="十九八七六五四三二" 包含了中文数字字符。计算字符串长度时,每个字符都算作一个单位。虽然这些字符在视觉上占用的空间可能与字母或数字不同,但在 Python 中,每个字符无论是什么字符都是一个长度单位。

    因此,计算 str 的长度时,每个字符都算作一个字符单位。这个字符串包含 9 个字符:










    所以 len(str) 的返回值是 9 。

    User
    那 str="安全性通常被认为是重要的"呢

    ChatGPT
    字符串 str="安全性通常被认为是重要的" 包含中文字符和汉字。计算字符串长度时,每个字符都算作一个单位。这个字符串包含 11 个字符:













    所以 len(str) 的返回值是 12 。
    TimePPT
        18
    TimePPT  
       158 天前
    @TimePPT 当然,中间步骤有瑕疵哈哈哈。

    不过,如 LS 诸位所说,GenAI 的问题就是 predict next token ,所以他没法直接去做 count ,必须加必要的中间过程辅助拆解任务
    shinsekai
        19
    shinsekai  
       158 天前
    应该设计一种 Mathematica 与 GPT 混合的模型
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   919 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:46 · PVG 04:46 · LAX 12:46 · JFK 15:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.