首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ChatGPT开发实战|实现英文字幕翻译为中文双语的小工具

ChatGPT开发实战|实现英文字幕翻译为中文双语的小工具

作者头像
技术人生黄勇
发布于 2024-07-19 10:26:57
发布于 2024-07-19 10:26:57
32604
代码可运行
举报
文章被收录于专栏:技术人生黄勇技术人生黄勇
运行总次数:4
代码可运行

介绍如何使用ChatGPT开发一个小工具,它能够将英文字幕翻译为中英双语。我们将详细介绍开发过程中的每个步骤,并提供实用的代码示例,帮助您快速掌握如何使用ChatGPT进行自然语言处理

01

缘起

在完成《教程|使用免费GPU 资源搭建专属知识库 ChatGLM2-6B + LangChain》后,我开始研究这个业界热门的开源框架:LangChain。

LangChain 是一个框架,目的是简化使用大型语言模型(LLMs)创建应用程序的过程。作为一种大语言模型集成框架,LangChain 的用例与语言模型的用例大致重叠,包括文档分析和摘要、聊天机器人代码分析

简单来说,LangChain 可以帮助开发人员更快地构建基于语言模型的应用程序,并提供了许多现成的工具和组件来简化开发过程。

当我开始学习吴恩达和LangChain创始人联合发布的课程《》后,发现是英文的,还没字幕,啃起来有点吃力。‍‍

于是把课程视频都下载了下来,用剪映的功能,从视频里识别出英文字幕,导出成字幕文件,再提交给ChatGPT翻译。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

但是这样,就有点费事,想能不能试试用ChatGPT的API功能,把英文字幕变成中英双语。正好实践一下ChatGPT开发。

打开谷歌的Colab,Colab(Colaboratory)是Google提供免费的在线 Jupyter 笔记本环境。

可以直接在浏览器中编写和执行Python代码,无需安装任何软件或配置环境。而且提供了免费的GPU和TPU资源,可以加速深度学习任务的运算。‍‍‍‍‍‍‍‍‍

访问地址:‍‍‍‍‍

https://colab.research.google.com/

剪映导出的字幕文件实际上是一个文本文件,打开后,它类似如下格式的四行文本,按顺序为:序号、字幕开始时间-结束、字幕、空行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1
00:00:06,200 --> 00:00:07,733
in order to create an application

开发思路:逐行读入文本,从第三行开始,每四行的内容,送给 ChatGPT 去翻译,取回翻译的结果,再写到新文件中。

新字幕文件按顺序为:序号、字幕开始-结束、英文字幕、中文字幕、空行。‍‍‍‍‍‍‍‍‍‍‍‍‍

先检验一下调用 API 翻译是否可行,只发送一、两行字幕。开头很顺利,返回了“in order to create an application” 这句字幕翻译后的中文:“为了创建一个应用程序”。‍‍‍

然后我就把代码改成根据文件逐行循环的代码。不出意外,出了意外:ChatGPT 返回了错误提示,大意是你是免费的 ChatGPT-3.5 的API用户,调用有次数限制,显示是 3次/每分钟。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

我看了一下字幕文本,序号最大182,每分钟只能调用3次,玩啥。如果翻译长一点字幕,还不等到人花儿都谢了。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

官方建议的解决方案: 批量提交Prompt。‍‍‍‍‍‍

也就是说,在下面这个调用ChatGPT函数中,prompt 赋值为一个字符串数组,而不是之前的一行字符串。‍‍‍‍‍‍‍

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_response(prompt):
    completions = openai.Completion.create (
        engine=COMPLETION_MODEL,
        prompt=prompt,
        max_tokens=512,
        n=1,
        stop=None,
        temperature=0,
    )
    message = completions
    return message

吭哧吭哧,一顿改代码。把要翻译的182行英文,都塞到prompt数组里,然后提交给ChatGPT API。‍‍

不出意外,果然报了另外一个错:一次只能处理 4096 个 tokens 的上下文。数组里这么多文本,早就超过了4096 个 token。‍‍‍‍‍‍‍‍‍‍

‍‍

也就是说,即使是批量提交,总的token长度也是有限制的。

02

再战

目前的限制:每分钟内限制了3次请求,每次请求限制了4096长的token。

开始思考:能不能把字幕合并后,按token上限长度提交给ChatGPT。但是这样做,返回的中文,无法对应上英文。程序不清楚应该在哪里短句,分行。简单翻译可以,但是没办法逐行对应上英文,写回字幕文件中。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

按以前调用函数的开发思路,我想:能不能英文用分割词拼接起来,然后希望得到分割词拼接起来的中文。

先在ChatGPT的聊天界面试试,把多行英文字幕,用三个竖线“|||”拼在一起,然后让GPT给我翻译,期望它能按分割的竖线返回翻译的中文。

但是ChatGPT还是比较智能,直接忽略英文里的竖线分隔符,翻译成没有分隔符的中文。这个方案失败了。‍‍‍‍‍‍‍‍‍‍‍‍‍‍

苦思冥想了比较久,也没有好的办法。

后来一想,咱是干啥开发的,有现成的人工智能,我为啥不试试告诉它,逐行翻译呢?‍‍‍‍

于是,我设计了这么一段提示词:“你是一名出色的中英文同声传译员。我会一行一行地给你提供英文,你会一行行地把它翻译成中文。中文和英文的行数相同。你明白吗?”‍‍‍

又因为ChatGPT对英文提示词比较智能,具体可以见这篇文章:《为什么你在用 ChatGPT 的提示词 Prompt 似乎效果不如人意?》‍‍‍‍

我把这段提示词变为英文给了ChatGPT:“You are an excellent simultaneous translator in both Chinese and English. I will provide you with English line by line, and you will translate it into Chinese line by line. The number of lines in both Chinese and English is the same. Do you understand?”‍‍‍‍

果然,哈,这个方法奏效了。

第一版提示词‍

最终版英文提示词‍

开始翻译‍

03

成功‍‍

提示词的方案奏效,那就来解决频次和token长度的限制。

首先因为ChatGPT这样的大模型是没有记忆功能的,也就是常说的上下文。

我们之所以有“模型有记忆”这种错觉,因为OpenAI公司开放给用户的ChatGPT聊天页面后面做了很多工程化的工作,其中就包括让模型有记忆的功能:简单来说,就是每次把之前的聊天对话都发给模型,模型就知道接着该说什么。‍‍‍‍‍‍‍

我一开始也犯了这个错误,调用接口发送提示词过去后,再发送英文字幕,仍然还是完整的中文,而不是刚才验证成功的逐行中文。‍‍‍‍‍‍‍‍‍‍‍

为了解决这个问题,写了一个和ChatGPT对话的类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Conversation:
    def __init__(self, prompt, num_of_round):
        self.prompt = prompt
        self.num_of_round = num_of_round
        self.messages = []
        self.messages.append({"role": "system", "content": self.prompt})

    def ask(self, question):
        try:
            self.messages.append({"role": "user", "content": question})
            response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=self.messages,
                temperature=0.1,
                max_tokens=2048,
                top_p=1,
            )
        except Exception as e:
            print(e)
            return e

        message = response["choices"][0]["message"]["content"]
        num_of_tokens = response['usage']['total_tokens']
        self.messages.append({"role": "assistant", "content": message})

        if len(self.messages) > 3:
            del self.messages[1: len(self.messages) - 2] #Remove the first round conversation left.
        return message, num_of_tokens

每次对话会把之前的对话和模型的回答,都拼接在提示词prompt变量中,同时为了防止超过token限制,对话超过3次后,会把后面几次对话记录删除。保留最开始起作用的提示词。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

再写一个计算token的方法,使用ChatGTP 提供的计算token接口。‍

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
COMPLETION_MODEL = "text-davinci-003"

def num_tokens_from_string(string: str, encoding_name: str) -> int:
    """Returns the number of tokens in a text string."""
    encoding = tiktoken.get_encoding(encoding_name)
    num_tokens = len(encoding.encode(string))
    return num_tokens

接口比较简单,需要注意 COMPLETION_MODEL 模型和 encoding_name 编码对应上。‍‍‍‍‍‍

整个代码思路就从开始的方案改为:

读入全部文本到字符串数组;

  • 对数组逐行循环,从第三行开始,每四行的内容-英文字幕,放到prompt变量中,检查再拼接一行是否超过 token 限制;
  • 如果未超过,继续拼接;‍
  • 否则调用聊天类去翻译;
  • 取回的翻译结果,写到中文字符串数组中;‍‍‍‍‍‍‍‍
  • 循环写中英文字幕。

‍‍‍‍‍‍‍‍‍‍‍‍

这次顺利的返回了正确结果,182行字幕分成6次,逐行翻译,中英文一一对应。‍‍‍‍‍‍

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
in order to create an application
where you can chat with your data
you first have to load your data
into a format where it can be worked with
that's where Ling Jane document loaders come into play
we have over 80 different types of document loaders
and in this lesson
we'll cover a few of the most important ones
and get you comfortable with the concept in general
let's jump in
document loaders deal with the specifics of accessing
and converting data
from a variety of different
formats and sources into a standardized format
there can be
different places that we want to load data from
like websites different databases YouTube
and these documents can come in different data types
like Pdfs HTML JSON
and so the whole purpose of document loaders is to take
this variety of data sources and load them
into a standard document object
which consists of content and then associated metadata
there are a lot of different type of document loaders
in link chain
and we won't have time to cover them all
but here is a rough categorization of the 80
that we have
there are a lot that deal with loading
unstructured data

为了创建一个应用程序
可以与您的数据进行聊天
您首先需要加载您的数据
到一个可以处理的格式中
这就是Ling Jane文档加载器发挥作用的地方
我们有超过80种不同类型的文档加载器
在这节课中
我们将涵盖一些最重要的加载器
并让您对这个概念感到舒适
让我们开始吧
文档加载器处理访问和转换数据的具体细节
从各种不同的格式和来源中
加载数据到标准化格式中
我们可能希望从不同的地方加载数据
比如网站、不同的数据库、YouTube
这些文档可以是不同的数据类型
比如Pdf、HTMLJSON
因此,文档加载器的整个目的是将
这种多样化的数据源加载到一个标准的文档对象中
该对象由内容和相关元数据组成
在链环中有很多不同类型的文档加载器
我们没有时间来涵盖所有的加载器
但是这里是我们拥有的80个加载器的大致分类
有很多处理加载非结构化数据的加载器

至此,这个小工具就此完成。‍‍‍

最后放上吴大佬和LangChain创始人Nemo Yang的Langchain学习课程地址,有兴趣的朋友可以开始学习。‍‍‍‍

https://learn.deeplearning.ai/langchain/lesson/1/introduction

‍‍‍‍‍

参考资料:

OpenAI Document

https://platform.openai.com/docs/guides/rate-limits/overview

阅读推荐:

ChatGPT 官方安卓版正式发布!两种下载安装详细教程

ChatGLM 更新:LongBench—评测长文本理解能力的数据集,支持 32k 上下文的 ChatGLM2-6B-32K

教程|使用免费GPU 资源搭建专属知识库 ChatGLM2-6B + LangChain

Claude 2 解读 ChatGPT 4 的技术秘密:细节:参数数量、架构、基础设施、训练数据集、成本

没有硬件资源?免费使用Colab搭建你自己的Stable Diffiusion在线模型!保姆级教程

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术人生黄勇 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Yolo11实战改进:一文读懂Yolo11到实战
Yolo11是Ultralytics推出的新一代计算机视觉模型,为YOLO家族树立了新的里程碑。它在对象检测、实例分割、图像分类、姿势估计、定向物体检测和对象跟踪等计算机视觉任务上展现了卓越的性能和准确性,相较于YOLOv8有了显著提升。
AI浩
2024/11/18
3.3K0
Yolo11实战改进:一文读懂Yolo11到实战
基于YOLO11的工件缺陷检测系统(Python源码+数据集+Pyside6界面)
💡💡💡本文摘要:基于YOLO11的工件表面缺陷智能检测系统,阐述了整个数据制作和训练可视化过程
AI小怪兽
2024/12/25
8510
基于YOLO11的风力涡轮机检测系统(Python源码+数据集+Pyside6界面)
💡💡💡本文摘要:基于YOLO11的风力涡轮机检测,阐述了整个数据制作和训练可视化过程
AI小怪兽
2025/03/14
1520
基于YOLO11的水果检测系统(Python源码+数据集+Pyside6界面)
💡💡💡本文摘要:基于YOLO11的水果检测,阐述了整个数据制作和训练可视化过程
AI小怪兽
2025/03/22
3820
基于YOLO11的矿井下移动目标检测系统(Python源码+数据集+Pyside6界面)
💡💡💡本文摘要:基于YOLO11的矿井下移动目标检测,阐述了整个数据制作和训练可视化过程
AI小怪兽
2025/01/09
2890
YOLO11实战:GC10-DET缺陷检测 | 新一代高效可形变卷积DCNv4结合SPPF二次创新
💡💡💡本文独家改进:DCNv4更快收敛、更高速度、更高性能,完美和YOLO11结合,助力涨点
AI小怪兽
2024/12/26
4012
YOLO11实战:GC10-DET缺陷检测 | DCNv4二次创新11Detetct,效果秒杀DCNv3、DCNv2
💡💡💡本文独家改进:DCNv4更快收敛、更高速度、更高性能,完美和YOLO11结合,助力涨点
AI小怪兽
2024/12/28
2290
基于YOLO11的水下物体检测系统(Python源码+数据集+Pyside6界面)
💡💡💡本文摘要:基于YOLO11的水下物体检测,阐述了整个数据制作和训练可视化过程
AI小怪兽
2025/03/28
2690
基于YOLO11的番茄检测系统(Python源码+数据集+Pyside6界面)
💡💡💡本文摘要:基于YOLO11的番茄检测,阐述了整个数据制作和训练可视化过程
AI小怪兽
2025/03/26
3750
基于YOLO11的作物与杂草检测系统(Python源码+数据集+Pyside6界面)
💡💡💡本文摘要:基于YOLO11的作物与杂草检测,阐述了整个数据制作和训练可视化过程
AI小怪兽
2025/04/01
1990
YOLO11实战:GC10-DET缺陷检测 |多级特征融合金字塔(HS-FPN),助力缺陷检测(2)
💡💡💡本文独家改进:高层筛选特征金字塔网络(HS-FPN),能够刷选出大小目标,增强模型表达不同尺度特征的能力,助力小目标检测
AI小怪兽
2024/12/27
4830
YOLO11实战:GC10-DET缺陷检测 | DCNv4结合SPPF+11Detect创新性结合,创新十足
💡💡💡本文独家改进:DCNv4更快收敛、更高速度、更高性能,完美和YOLO11结合,助力涨点
AI小怪兽
2024/12/29
3290
基于YOLO11的交通标志(traffic-sign)检测系统(Python源码+数据集+Pyside6界面)
💡💡💡本文摘要:基于YOLO11的交通标志检测,阐述了整个数据制作和训练可视化过程
AI小怪兽
2025/03/15
2950
YOLO11教程:如何训练 | 验证 | 测试 自己的数据集源码分享
Ultralytics YOLO11是一款尖端的、最先进的模型,它在之前YOLO版本成功的基础上进行了构建,并引入了新功能和改进,以进一步提升性能和灵活性。YOLO11设计快速、准确且易于使用,使其成为各种物体检测和跟踪、实例分割、图像分类以及姿态估计任务的绝佳选择。
AI小怪兽
2024/10/30
5.6K0
基于yolov11的手语检测 | 附数据集+代码
YOLO11是Ultralytics YOLO系列实时目标检测器的最新迭代,它重新定义了尖端精度、速度和效率的可能性。在以往YOLO版本的令人印象深刻的进步基础上,YOLO11在架构和训练方法上引入了重大改进,使其成为广泛计算机视觉任务的多功能选择。
小白学视觉
2024/12/09
8970
基于yolov11的手语检测 | 附数据集+代码
来了,使用YOLOv11目标检测教程
YOLO11 在 2024 年 9 月 27 日的 YOLO Vision 2024 活动中宣布:https://www.youtube.com/watch?v=rfI5vOo3-_A。
小白学视觉
2024/10/10
2.5K0
来了,使用YOLOv11目标检测教程
基于YOLO11的木材表面缺陷检测系统(Python源码+数据集+Pyside6界面)
💡💡💡本文摘要:基于YOLO11的木材表面缺陷检测,阐述了整个数据制作和训练可视化过程
AI小怪兽
2025/03/13
1740
基于YOLO11的铁路轨道缺陷检测系统(Python源码+数据集+Pyside6界面)
💡💡💡本文摘要:基于YOLO11的铁路轨道缺陷检测,阐述了整个数据制作和训练可视化过程
AI小怪兽
2025/03/21
1841
YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
YOLOv11的模型配置文件在ultralytics/cfg/models/11中,里面包含目标检测、实例分割、图像分类、关键点/姿态估计以及旋转目标检测,本文以目标检测模型文件为例(其他文件完全一致),详细介绍一下YOLOv11模型文件中各参数的含义。
Limiiiing
2025/03/11
3.2K0
YOLO11多个点组合创新:GC10-DET缺陷检测 | DCNv4结合SPPF+DCNv4结合11Detect+双注意力块(DAB)​​​​​​​创新性结合
1)DCNv4优势:(1) 去除空间聚合中的softmax归一化,以增强其动态性和表达能力;(2) 优化存储器访问以最小化冗余操作以加速。这些改进显著加快了收敛速度,并大幅提高了处理速度,DCNv 4实现了三倍以上的前向速度。
AI小怪兽
2025/01/16
5534
推荐阅读
Yolo11实战改进:一文读懂Yolo11到实战
3.3K0
基于YOLO11的工件缺陷检测系统(Python源码+数据集+Pyside6界面)
8510
基于YOLO11的风力涡轮机检测系统(Python源码+数据集+Pyside6界面)
1520
基于YOLO11的水果检测系统(Python源码+数据集+Pyside6界面)
3820
基于YOLO11的矿井下移动目标检测系统(Python源码+数据集+Pyside6界面)
2890
YOLO11实战:GC10-DET缺陷检测 | 新一代高效可形变卷积DCNv4结合SPPF二次创新
4012
YOLO11实战:GC10-DET缺陷检测 | DCNv4二次创新11Detetct,效果秒杀DCNv3、DCNv2
2290
基于YOLO11的水下物体检测系统(Python源码+数据集+Pyside6界面)
2690
基于YOLO11的番茄检测系统(Python源码+数据集+Pyside6界面)
3750
基于YOLO11的作物与杂草检测系统(Python源码+数据集+Pyside6界面)
1990
YOLO11实战:GC10-DET缺陷检测 |多级特征融合金字塔(HS-FPN),助力缺陷检测(2)
4830
YOLO11实战:GC10-DET缺陷检测 | DCNv4结合SPPF+11Detect创新性结合,创新十足
3290
基于YOLO11的交通标志(traffic-sign)检测系统(Python源码+数据集+Pyside6界面)
2950
YOLO11教程:如何训练 | 验证 | 测试 自己的数据集源码分享
5.6K0
基于yolov11的手语检测 | 附数据集+代码
8970
来了,使用YOLOv11目标检测教程
2.5K0
基于YOLO11的木材表面缺陷检测系统(Python源码+数据集+Pyside6界面)
1740
基于YOLO11的铁路轨道缺陷检测系统(Python源码+数据集+Pyside6界面)
1841
YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
3.2K0
YOLO11多个点组合创新:GC10-DET缺陷检测 | DCNv4结合SPPF+DCNv4结合11Detect+双注意力块(DAB)​​​​​​​创新性结合
5534
相关推荐
Yolo11实战改进:一文读懂Yolo11到实战
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验