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

似乎没有办法阻止 chatGPT 合并句子

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

    我在尝试用 chatGPT ( gpt-3.5-turbo )来翻译字幕的时候,想让 chatGPT 一次翻译多句返回,但似乎 chatGPT 非常难控制保留原来的格式:

    你将担任一名台词翻译家,我将以数组的形式提供给你需要翻译的内容。
    
    翻译规则:目标语言是中文,请记住每个数组元素是作为一个独立句子翻译,请分别翻译它们,不要试图合并数组元素内容来翻译,即便为了语句通顺也不要这样做,翻译后的数组元素个数必须和输入的数组元素个数严格完全一致。
    
    输出规则: 以数组的形式返回翻译结果,不要携带原文或者其他信息。
    
    我要翻译的数组内容是:
    
    [
    "I am a UI designer named Dashuang who has worked in the internet industry for eight years.",
    "Well, let me briefly introduce myself to everyone.",
    "Uh, the reason why I chose to be a UI designer back then",
    "was mainly to enter the internet industry,",
    "because at that time, the internet",
    "was extremely popular.",
    "Whether to realize my own dreams",
    "or to give full play to my skills and abilities and realize my own value,",
    "everyone wanted to enter the internet industry.",
    "I also wanted to."
    ]
    
    

    输出(上面英语 10 行,翻译结果 9 行):

    [
    "我是一名名叫大双的 UI 设计师,在互联网行业工作了八年。",
    "好的,让我向大家简要介绍一下自己。",
    "嗯,我当初选择成为 UI 设计师的原因",
    "主要是为了进入互联网行业,",
    "因为当时互联网非常流行。",
    "不管是实现自己的梦想",
    "还是发挥自己的技能和能力,实现自己的价值,",
    "每个人都想进入互联网行业。",
    "我也一样。"
    ]
    

    也尝试过用标签 br 等的形式来隔离,但也没什么用。

    GPT4 的则好很多,但是目前 GPT4 接口不好弄,而且调用成本和限制都很多。

    [
    "我是一名叫大双的 UI 设计师,已经在互联网行业工作了八年。",
    "好吧,让我简短地向大家介绍一下自己。",
    "嗯,当时我选择成为一名 UI 设计师的原因",
    "主要是为了进入互联网行业,",
    "因为那时候,互联网",
    "非常火爆。",
    "无论是为了实现自己的梦想",
    "还是为了充分发挥自己的技能和能力,实现自己的价值,",
    "每个人都想进入互联网行业。",
    "我也想要。"
    ]
    

    在这里集思广益一下,如果有朋友能解决 gpt-3.5 的这个 bug ,我愿意付费购买这个 prompt 。

    mail: eWVkYXhpYUBmb3htYWlsLmNvbQ==

    26 条回复    2023-06-13 19:18:48 +08:00
    superares
        1
    superares  
       310 天前 via iPhone
    给它举个栗子,它就懂了
    liantian
        2
    liantian  
       310 天前
    写那么多废话...似乎不如下面这简短的 prompt

    **请结合上下文逐行翻译下面的语句**

    "I am a UI designer named Dashuang who has worked in the internet industry for eight years."
    "Well, let me briefly introduce myself to everyone."
    "Uh, the reason why I chose to be a UI designer back then"
    "was mainly to enter the internet industry,"
    "because at that time, the internet"
    "was extremely popular."
    "Whether to realize my own dreams"
    "or to give full play to my skills and abilities and realize my own value,"
    "everyone wanted to enter the internet industry."
    "I also wanted to."


    "I am a UI designer named Dashuang who has worked in the internet industry for eight years."

    我是一个叫大双的 UI 设计师,已经在互联网行业工作了八年。

    "Well, let me briefly introduce myself to everyone."

    好的,让我简单地向大家介绍一下自己。

    "Uh, the reason why I chose to be a UI designer back then"

    嗯,当时我选择成为 UI 设计师的原因

    "was mainly to enter the internet industry,"

    主要是为了进入互联网行业,

    "because at that time, the internet"

    因为那个时候,互联网

    "was extremely popular."

    非常流行。

    "Whether to realize my own dreams"

    无论是为了实现自己的梦想,

    "or to give full play to my skills and abilities and realize my own value,"

    还是为了充分发挥我的技能和能力并实现自己的价值,

    "everyone wanted to enter the internet industry."

    每个人都想进入互联网行业。

    "I also wanted to."

    我也想这样做。
    superares
        3
    superares  
       310 天前 via iPhone
    @liantian op 想要直接的数组结果,这样还得手动拼接,量大的话不好弄
    musi
        4
    musi  
       310 天前
    可以先试用#2 的方法获得逐句翻译的结果,再把结果喂给 gpt 让它返回数据
    yedaxia
        5
    yedaxia  
    OP
       310 天前
    @liantian

    请结合上下文逐行翻译下面的语句,目标语言是英文,只返回译文。

    "我是在互联网行业工作了八年的 u i 设计师大双"
    "嗯,跟大家简单介绍一下我自己"
    "呃,我当年之所以选择做 u i 设计师"
    "主要是想进入互联网这个行业"
    "因为在当时互联网"
    "非常的热门"
    "实现自己的梦想也好"
    "去发挥自己的"
    "能力特长,实现自己的价值也好"
    "都想进入互联网这个行业"
    "我呢也想"
    "去互联网行业淘金"
    "我毕业于一个不怎么样的三本院校"
    "为什么说互联网当时有机会呢?"
    "就是因为像我这样的三本院校出来的学生"
    "也可以在这个行业里面找到工作"
    "就当时大家对学历还不是特别的看重"
    "所以我就通过了一段时间的自学之后入行了"
    "我分别在几家小型的创业公司工作了三年之后,很快就"
    "遇到了瓶颈"
    "当时对我来说,u i 设计已经没有太大的挑战了"
    "一七年的时候,我所在公司的一位高管,因为斗争失败"
    "他选择"
    "自己出来创业"
    "那我就跟着他一起出去了"
    "那算是"
    "我职业生涯的一个"
    "分水岭从这次之后,我就彻底告别了"
    "所谓的大厂梦"
    "我就不再想着要去大厂继续做设计"
    "虽然我自称是 ui 设计师,但其实跟设计有关的"
    "呃,工作我基本上都做过",
    "那一些主流的设计软件,我也都多多少少有一些接触,甚至我们"
    "项目做到后期已经开始"
    "转去做游戏了,所以游戏的 u i 我也是做过"

    多找些句子测试的话,也会遇到合并的情况。
    liantian
        6
    liantian  
       310 天前
    @superares @yedaxia 那我想劝 OP 放弃...哈哈

    2 周前我刚尝试用 gpt api 翻译了大量游戏文本。

    gpt 模型是偏向对话的,往往是针对一段内容调节好了。下一次换个内容,相同 prompt 又不行了。

    经常会偶发性加入加载一些前置词,比如:翻译如下:

    还有时会加入一些无用的解释说明。



    举个例子

    https://github.com/liantian-cn/eso-guides/blob/main/guide/1000_Asylum_Sanctorium.md
    第 89 行那种无用的说明..
    第 61 行那种前置词...
    aikdong
        7
    aikdong  
       310 天前
    试了一下,发现越弱的模型这个合并现象越严重,本地跑的一个模型给合并成 7 行了,所以估计这个跟模型的能力有关。看能否加个数量校验,先用 gpt-3.5 的跑,结果数量对不上的时候再用 gpt-4
    yedaxia
        8
    yedaxia  
    OP
       310 天前
    @liantian 确实非常不稳定,至少对于 3.5 来说。
    sss15
        9
    sss15  
       310 天前
    @superares 很棒的建议,我刚才也去试了一下,当 gpt 说了 9 句话的返回后,我告诉他,你应该返回十句话,像这样一样,[
    "我是一名叫大双的 UI 设计师,已经在互联网行业工作了八年。",
    "好吧,让我简短地向大家介绍一下自己。",
    "嗯,当时我选择成为一名 UI 设计师的原因",
    "主要是为了进入互联网行业,",
    "因为那时候,互联网",
    "非常火爆。",
    "无论是为了实现自己的梦想",
    "还是为了充分发挥自己的技能和能力,实现自己的价值,",
    "每个人都想进入互联网行业。",
    "我也想要。"
    ]
    yedaxia
        10
    yedaxia  
    OP
       310 天前
    @aikdong 这看起来是个折中的方案,我们尝试 3.5 出问题的概率还是挺高的,最终结果可能会大部分都需要调用 gpt4 。
    jifengg
        11
    jifengg  
       310 天前
    用 3.5 ,试了一些英文字幕,这个提问方式能保证返回的条数。
    不过要浪费一些 token ,因为你不让他返回 ori 的话,他就合并了。
    有个现象,有时候有一些 ori 他会合并到一个 tra 里,后面几行就空的,但是这个可以兼容一下。
    至于翻译效果,有时候没有一整句来的精准。

    ====prompt ======

    结合上下文,将 ori 内容翻译成中文填入到 tra 字段中,保留 json 格式
    [
    {"ori":"xxxx","tra":""},
    {"ori":"xxxx","tra":""},
    ....
    ]
    lmw2616
        12
    lmw2616  
       310 天前
    @superares 让它翻译的时候把结果转为数组不就行了
    yinmin
        13
    yinmin  
       310 天前 via iPhone
    你用 chatgpt next web 这个项目,建立一个面具,写 3 条,第一个是 system 类型,就是你的 prompt ,第二条是 user ,你写一个示例提问,第三条是 assisant ,你写一个示例答案。然后你用这个面具就 OK 了
    missdeer
        14
    missdeer  
       310 天前
    试试用不同格式提交呢,比如 csv ,你的原文在第 1 列,翻译到第 2 列,并要求它保持行数一致
    另外可以尝试用英文写 prompt ,因为据说其他语言的 prompt 它也是先翻译成英文再理解的
    missdeer
        15
    missdeer  
       310 天前
    还有就是我试下来,把 prompt 前面的部分拆到 system role ,后面的待翻译部分放到 user role ,似乎效果稍微好一点
    yedaxia
        16
    yedaxia  
    OP
       310 天前
    @jifengg 测试了一下,这个方式也无法非常完美的工作,依然会出现合并翻译和有些句子不翻译等问题。

    {"ori":"他选择","tra":"After that, I completely gave up on the so-called dream of working for a big company."},
    {"ori":"自己出来创业","tra":"Although I call myself a UI designer, I have basically done all kinds of design-related work."},
    {"ori":"那我就跟着他一起出去了","tra":"I have more or less had some experience with mainstream design software, and even our project has shifted to game design in the later stages, so I have also done UI design for games."},
    {"ori":"那算是","tra":""},
    {"ori":"我职业生涯的一个","tra":""},
    {"ori":"分水岭从这次之后,我就彻底告别了","tra":""},
    {"ori":"所谓的大厂梦","tra":""},
    {"ori":"我就不再想着要去大厂继续做设计","tra":""},
    {"ori":"虽然我自称是 ui 设计师,但其实跟设计有关的","tra":"Although I call myself a UI designer, I have basically done all kinds of design-related work."},
    {"ori":"呃,工作我基本上都做过,","tra":"I have more or less had some experience with mainstream design software, and even our project has shifted to game design in the later stages, so I have also done UI design for games."},
    {"ori":"那一些主流的设计软件,我也都多多少少有一些接触,甚至我们","tra":""},
    {"ori":"项目做到后期已经开始","tra":""},
    {"ori":"转去做游戏了,所以游戏的 u i 我也是做过","tra":""}
    ]
    yinmin
        17
    yinmin  
       310 天前 via iPhone
    “打不过他,就加入他”
    换一个思路:你翻译的时候,加一个时间戳字段,2 句翻译被合并成 1 句,别人看字幕更舒服啊,合并就合并了,翻译输出只要时间戳不出问题就 OK
    Puteulanus
        18
    Puteulanus  
       310 天前
    https://twitter.com/dotey/status/1665476562219573249
    之前刷推看到一个人说类似的,没有验证过
    lrjia
        19
    lrjia  
       310 天前
    尝试加入序号,以及保留原文,尝试了几次没有出现合并。

    prompt:

    你将担任一名台词翻译家,我将以字典的形式提供给你需要翻译的内容。

    翻译规则:目标语言是英文,请记住每个句子作为一个独立句子翻译,请分别翻译它们,不要试图合并句子内容来翻译,即便为了语句通顺也不要这样做,翻译后的句子个数必须和输入的句子个数严格完全一致。

    输出规则: 以字典的形式返回翻译结果,并携带原文。

    输入输出示例如下:

    输入示例:
    1. 需要翻译的句子

    输出示例:
    {
    "1": {
    "chinese": "需要翻译的句子",
    "english": "Sentences that need to be translated"
    }
    }

    下面请翻译如下句子:
    1. "我是在互联网行业工作了八年的 u i 设计师大双"
    2. "嗯,跟大家简单介绍一下我自己"
    3. "呃,我当年之所以选择做 u i 设计师"
    4. "主要是想进入互联网这个行业"
    5. "因为在当时互联网"
    6. "非常的热门"
    7. "实现自己的梦想也好"
    taotaodaddy
        20
    taotaodaddy  
       310 天前
    ------------------------------预处理---------------------------
    [
    "I am a UI designer named Dashuang who has worked in the internet industry for eight years.",
    "Well, let me briefly introduce myself to everyone.",
    "Uh, the reason why I chose to be a UI designer back then",
    "was mainly to enter the internet industry,",
    "because at that time, the internet",
    "was extremely popular.",
    "Whether to realize my own dreams",
    "or to give full play to my skills and abilities and realize my own value,",
    "everyone wanted to enter the internet industry.",
    "I also wanted to."
    ]这个这个数组改成每一个元素为 dict,第一个 kv 是 id:时间戳,第二个 Kv 是 msg:字符串

    ----------------------------开始整活分隔符--------------------------------

    你将担任一名台词翻译家,我将以数组的形式提供给你需要翻译的内容。

    翻译规则:目标语言是中文,请记住每个数组元素中 msg 作为一个独立句子翻译,请分别翻译它们,不要试图合并数组元素内容来翻译,即便为了语句通顺也不要这样做,翻译后的数组元素个数必须和输入的数组元素个数严格完全一致。保留时间戳,包括原有时间戳和 msg 的对应关系.

    输出规则: 以数组的形式返回翻译结果,不要携带原文或者其他信息。

    我要翻译的数组内容是:

    [
    {
    "Id": 1652515200,
    "msg": "I am a UI designer named Dashuang who has worked in the internet industry for eight years."
    },
    {
    "Id": 1652515201,
    "msg": "Well, let me briefly introduce myself to everyone."
    },
    {
    "Id": 1652515202,
    "msg": "Uh, the reason why I chose to be a UI designer back then"
    },
    {
    "Id": 1652515203,
    "msg": "was mainly to enter the internet industry,"
    },
    {
    "Id": 1652515204,
    "msg": "because at that time, the internet"
    },
    {
    "Id": 1652515205,
    "msg": "was extremely popular."
    },
    {
    "Id": 1652515206,
    "msg": "Whether to realize my own dreams"
    },
    {
    "Id": 1652515207,
    "msg": "or to give full play to my skills and abilities and realize my own value,"
    },
    {
    "Id": 1652515208,
    "msg": "everyone wanted to enter the internet industry."
    },
    {
    "Id": 1652515209,
    "msg": "I also wanted to."
    }
    ]
    ---------------------------输出--------------------------------

    [
    {
    "Id": 1652515200,
    "msg": "我是一名名叫大爽的 UI 设计师,已在互联网行业工作八年。"
    },
    {
    "Id": 1652515201,
    "msg": "好的,让我向大家简单介绍一下自己。"
    },
    {
    "Id": 1652515202,
    "msg": "嗯,当时我选择成为 UI 设计师的原因"
    },
    {
    "Id": 1652515203,
    "msg": "主要是为了进入互联网行业,"
    },
    {
    "Id": 1652515204,
    "msg": "因为在那个时候,互联网"
    },
    {
    "Id": 1652515205,
    "msg": "非常受欢迎。"
    },
    {
    "Id": 1652515206,
    "msg": "无论是实现自己的梦想"
    },
    {
    "Id": 1652515207,
    "msg": "还是充分发挥自己的技能和能力,实现自己的价值,"
    },
    {
    "Id": 1652515208,
    "msg": "每个人都想进入互联网行业。"
    },
    {
    "Id": 1652515209,
    "msg": "我也想。"
    }
    ]


    以上在 poe.com 中使用 chatGPT3.5
    muzuiget
        21
    muzuiget  
       310 天前
    建议放弃,你的需求就是要一个确定性结果,而大语言模型就是计算概率,就是产生非确定性结果,就像天气预报。

    只不过 GPT 大部分情况下会蒙对,质量能够接受,让你产生了错觉。一个参数微小的变动,都可能让输出结果不一致。比如 OpenAI 更新它们的显卡驱动,哪怕你的输入和以前完全一样,都可能会产生不同的结果。
    GeorgeGalway
        22
    GeorgeGalway  
       310 天前
    其实我觉得还是用 gpt4 比较好一些,我这里有个平台在内测,目前还比较稳定
    yedaxia
        23
    yedaxia  
    OP
       310 天前
    @muzuiget 嗯,看来 gpt 目前还不是很合适处理这类任务。
    codehz
        24
    codehz  
       310 天前
    @muzuiget gpt 显然是可以输出确定性结果的,只是默认参数设置了让它有一定的随机性(
    但温度设置为 0 之后结果质量也会有很大下降,而且也没办法通过重复来获得更好的结果)
    BeautifulSoap
        25
    BeautifulSoap  
       310 天前 via Android
    看了这贴和下面调教 ai 的对话,更加理解了什么叫 ai 是个黑盒了
    yedaxia
        26
    yedaxia  
    OP
       310 天前
    @Puteulanus 这个似乎也是不行的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   964 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 20:52 · PVG 04:52 · LAX 13:52 · JFK 16:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.