当前位置: 首页 > news >正文

使用智谱AI大模型翻译视频字幕

不久前,国内的头部大模型厂商智谱 AI ,刚刚推出了 glm-4-0520 模型,该模型被认为是当前平台最先进的模型,具备 128k 的上下文长度,并且相较于前一代模型,指令遵从能力大幅提升 18.6%。可以看出,智谱AI对于该模型寄予厚望。

为了验证这个大模型的性能,我们尝试用它来实现【视频字幕翻译】功能。目前很多视频网站(如B站)上面,大量优质内容都是英文的,并且也没有配备中文的字幕翻译,这对于很多人来说,大大降低了观看体验。因此,我们决定利用大模型,将视频的字幕翻译成中文,这样就可以快速理解视频的大致内容,大幅提升工作与学习效率。

下面,我们以 B站 上的视频为例,来实现这个功能。视频链接:https://www.bilibili.com/video/BV1g84y1R7oE/?vd_source=2fd71d56662056b97691b4d7bdf39151

在这里插入图片描述
话不多说,开始写代码。

现在很多视频网站都提供了 OpenAPI,支持获取视频和字幕等相关信息。为了方便开发,我们直接采用 LangChain 封装好的 BiliBiliLoader 来实现视频字幕的加载功能:

首先,我们需要在浏览器登录B站,并且浏览器的开发者工具,获取SESSDATA、JCT 和 BUVID3信息,并保存到环境变量中:

# B站相关配置
BiliBili_SESSDATA=xxx
BiliBili_JCT=xxx
BiliBili_BUVID3=xxx

接下来,我们通过 BiliBiliLoader 工具,加载该视频对应的字幕文本:

import osimport dotenv
from langchain_community.document_loaders import BiliBiliLoader# 加载环境变量
dotenv.load_dotenv()# 创建B站字幕文档加载器
loader = BiliBiliLoader(video_urls=["https://www.bilibili.com/video/BV1g84y1R7oE/"],sessdata=os.getenv("BiliBili_SESSDATA"),bili_jct=os.getenv("BiliBili_JCT"),buvid3=os.getenv("BiliBili_BUVID3"),
)# 加载完整字幕
full_caption = loader.load()
print(f"完整字幕: {full_caption[0].page_content[:1000]}")

部分字幕内容如下:

完整字幕: Video Title: Let’s Learn English on a Hike! 🍂🚶🏼🎒 【英文字幕】, description: Have you ever learned English in nature? In this English lesson I take you to a hiking trail near me and teach you all of the words and phrases you’ll need to know to have a conversation about hiking.

In this free English class you’ll learn words and phrases like: trail, path, treacherous, view, sign, observation deck, gear, hiking boots, dangerous animals, racoon, skunk, and more.

为了便于后面的翻译,我们将完整的字幕长文本进行切割,拆分成多个字幕块:

# 创建文档分割器,将原始字幕文本分割成更小的片段
splitter = RecursiveCharacterTextSplitter(chunk_size=200,chunk_overlap=10)caption_chunks = splitter.split_documents(full_caption)
print(f"切割后的分块大小: {len(caption_chunks)}")

我们指定了每个文档分块大小为200,块之间的重叠为10,这样将原始的字幕分割成了46个文档片段。

下面,我们就可以利用智谱AI的 glm-4-0520 大模型,将原版的英文字幕翻译成中文:

# 构造Chain,将原版的英文字幕翻译成中文
llm = ChatZhipuAI(model="glm-4-0520", temperature=0)  # 使用智谱AIglm-4-0520大模型
chain = ({"content": lambda x: x.page_content}| ChatPromptTemplate.from_template("你是一个翻译专家,请将输入的英文翻译成中文: {content}")| llm| StrOutputParser()
)
chinese_captions = chain.batch(caption_chunks, config={"max_concurrency": 1})full_english_caption = "\n".join([caption.page_content for caption in caption_chunks])
full_chinese_caption = "\n".join(chinese_captions)
print(f"原版英文字幕: \n{full_english_caption}")
print(f"翻译后的中文字幕: \n{full_chinese_caption}")

翻译后的中文字幕如下:

视频标题:让我们在徒步中学习英语吧!🍂🚶🏼🎒【英文字幕】

描述:你有没有在自然环境中学习过英语?在这个英语课程中,我将带你到我附近的一条徒步小径,教你所有的……(此处原文未给出完整内容,因此翻译也无法完整)

你需要知道的单词和短语,以便进行关于徒步旅行的对话。

在这个免费的英语课程中,你将学习到如下单词和短语:小径、路径、危险重重、景观、标志、观景台、装备、徒步靴、危险动物、浣熊、臭鼬等等。

大功告成!现在我们已经拿到了翻译后的中文字幕。大致看来,语义和文法还算比较通顺。但是这只是我们直观上的感受,有没有什么量化的方式,可以评估翻译的效果呢?还是有的,我们可以利用大模型的 Embedding 能力,计算下原版的英文字幕和翻译后的中文字幕在语言上的相似性,如果二者的相似度很高,则大概率可以说明翻译基本复现了原始的内容。当然还有更准确的评估方式,我们这里暂时不做展开了。

最后,我们可以利用智谱AI刚刚推出的 embedding-3 这个 Embedding 模型,计算下两个字幕的语义相似度:

# 计算原版英文字幕和翻译后的中文字幕在语义上的相似度
embeddings = ZhipuAIEmbeddings(model="embedding-3")
english_embedding = embeddings.embed_documents([full_english_caption])chinese_embedding = embeddings.embed_documents([full_chinese_caption])similarity = cosine_similarity(X=english_embedding,Y=chinese_embedding)[0]print(f"两个字幕的语义相似度: {similarity}")

两个字幕的语义相似度: [0.73141426]

可以看出,最终两个字幕 Embedding 的余弦相似度超过了0.7,说明大模型的翻译效果还是不错的。

综上所述:针对语料的翻译工作,glm-4-0520 应该是一个不错的选择。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 干货 | NXP NCF3321 卡保护应用阈值修改讲解
  • 【团队建设】前端编码规范
  • 示波器常识概述及简介
  • Logrus IT的质量评估门户如何提高游戏本地化质量:案例研究
  • 华为OD机试 - 根据IP查找城市(Java 2024 E卷 100分)
  • 前端远端SDK组件加载方案
  • Java 入门指南:Map 接口
  • 航空制造领域中三维工艺技术的应用
  • 更换 CentOS 7 YUM 源至国内镜像:简易教程与操作指南
  • SAP与生产制造MPM系统集成案例
  • 位图
  • VS2022 QT环境显示中文乱码问题
  • 一种低成本RS485光耦脉宽补偿电路
  • Qt是不是经常写个QWidget输入参数?
  • 2024年第十五届蓝桥杯图形化省赛真题分享包含答案
  • CSS魔法堂:Absolute Positioning就这个样
  • Date型的使用
  • docker python 配置
  • E-HPC支持多队列管理和自动伸缩
  • go语言学习初探(一)
  • IOS评论框不贴底(ios12新bug)
  • JAVA之继承和多态
  • Joomla 2.x, 3.x useful code cheatsheet
  • Linux Process Manage
  • NSTimer学习笔记
  • windows下mongoDB的环境配置
  • 多线程事务回滚
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 如何胜任知名企业的商业数据分析师?
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 详解NodeJs流之一
  • 由插件封装引出的一丢丢思考
  • 怎样选择前端框架
  • HanLP分词命名实体提取详解
  • !!java web学习笔记(一到五)
  • # 达梦数据库知识点
  • #AngularJS#$sce.trustAsResourceUrl
  • #if #elif #endif
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #微信小程序:微信小程序常见的配置传旨
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • ${ }的特别功能
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (力扣)1314.矩阵区域和
  • (利用IDEA+Maven)定制属于自己的jar包
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (算法)区间调度问题
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .Net 6.0--通用帮助类--FileHelper