Не так давно отечественный производитель крупномасштабных головных моделей Zhipu AI , только что запустил glm-4-0520
модель, которая считается самой продвинутой моделью на нынешней платформе и имеет 128k длина контекста и по сравнению с моделью предыдущего поколения значительно улучшена возможность соответствия командам. 18,6%. Видно, что Zhipu AI возлагает большие надежды на эту модель.
Чтобы проверить производительность этой большой модели, мы попытались использовать ее для реализации функции [Перевод субтитров видео]. В настоящее время на многих видеосайтах (например, Station B) большое количество высококачественного контента представлено на английском языке и не снабжено переводом субтитров на китайский язык. Это значительно снижает удобство просмотра для многих людей. Поэтому мы решили использовать большую модель для перевода субтитров видео на китайский язык, чтобы мы могли быстро понять общее содержание видео и значительно повысить эффективность работы и обучения.
Ниже в качестве примера реализации этой функции мы возьмем видео на сайте Б. Ссылка на видео: https://www.bilibili.com/video/BV1g84y1R7oE/?vd_source=2fd71d56662056b97691b4d7bdf39151
Без лишних слов, приступим к написанию кода.
Многие видеосайты теперь предоставляют OpenAPI для поддержки получения соответствующей информации, такой как видео и субтитры. Чтобы облегчить разработку, мы напрямую используем BiliBiliLoader, инкапсулированный LangChain, для реализации функции загрузки видеосубтитров:
Во-первых, нам нужно войти на сайт B в браузере и использовать инструменты разработчика браузера для получения информации SESSDATA, JCT и BUVID3 и сохранить ее в переменных среды:
# Станция Сопутствующие конфигурации
BiliBili_SESSDATA=xxx
BiliBili_JCT=xxx
BiliBili_BUVID3=xxx
Далее мы используем инструмент BiliBiliLoader для загрузки текста субтитров, соответствующего видео:
import os
import dotenv
from langchain_community.document_loaders import BiliBiliLoader
# Загрузить переменные среды
dotenv.load_dotenv()
# 创建Станция Загрузчик документов субтитров
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]}")
Некоторые из субтитров следующие:
Название: Название видео: Давайте учить английский в походе! 🍂🚶🏼🎒 [английские субтитры], описание: Вы когда-нибудь изучали английский на природе? На этом уроке английского я отведу вас на пешеходную тропу рядом со мной и научу всем словам и фразам, которые вам нужно знать, чтобы поговорить о походах.
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 фрагментов документа.
Далее мы можем использовать искусственный интеллект Zhipu. glm-4-0520
Большая модель с переводом оригинальных английских субтитров на китайский:
# Постройте цепочку, чтобы конвертировать оригинальные английские субтитры перевести на китайский
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}")
Китайские субтитры после печати(f"перевести: \n{full_chinese_caption}")
Переведенные китайские субтитры следующие:
Название видео: Давайте учить английский во время похода! 🍂🚶🏼🎒【Английские субтитры】
Описание: Вы когда-нибудь изучали английский язык в естественной среде? В этом курсе английского я отведу вас на пешеходную тропу рядом со мной и научу вас всему… (Оригинальный текст приведен не полностью, поэтому перевод не может быть полным)
Слова и фразы, которые вам нужно знать, чтобы вести разговор о походах.
На этом бесплатном курсе английского языка вы выучите такие слова и фразы, как: тропа, тропа, опасность, пейзаж, знак, вид, снаряжение, походные ботинки, опасное животное, енот, скунс и многое другое.
…
Все готово! Теперь у нас есть переведенные китайские субтитры. Вообще говоря, семантика и грамматика относительно гладкие. Но это всего лишь наше интуитивное ощущение. Есть ли какой-нибудь количественный способ оценить эффект перевода? Некоторые из них еще есть. Мы можем использовать возможности встраивания большой модели для расчета лингвистического сходства между оригинальными английскими субтитрами и переведенными китайскими субтитрами. Если сходство между ними очень велико, существует высокая вероятность того, что перевод сможет. быть в основном воспроизведено оригинальное содержание. Конечно, существуют более точные методы оценки, о которых мы пока не будем здесь говорить.
Наконец, мы можем воспользоваться тем, что только что запустил Zhipu 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]
Видно, что итоговое косинусное сходство двух вложений субтитров превышает 0,7, что указывает на то, что эффект перевода большой модели по-прежнему хорош.
Подведем итоги: перевести работу над корпусом,glm-4-0520
Должно быть хороший выбор.