使用 HuggingFace 和 LangChain ,进行文本总结并转换为语言

暑期实习基本结束了,校招即将开启。

不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。提前准备才是完全之策。

最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。

总结链接如下:

喜欢本文记得收藏、关注、点赞。更多实战和面试交流,文末加入我们群


总结文本并将其转换为语音在自然语言处理中有很多实用用途。

理解如何集成这些特性可以为你打开无限可能。例如,将冗长的报告简化为可以随时随地收听的音频摘要。
在这里插入图片描述

在这篇文章中,我们将探讨如何使用 Transformers 和 Hugging Face 实现这一目标。

1. 导入必要的库

导入所有必要的库,并解释为什么需要导入它们:

  • 数据处理和加载

    • datasets(来自Hugging Face):这个库有助于加载和处理机器学习任务的数据集。
    • soundfile:用于读取和写入音频文件。我们需要操作文本并将其转换为音频格式。
  • 文本处理

    • langchain.text_splitter:LangChain提供了用于处理语言模型的工具。CharacterTextSplitter用于将大段文本分割为较小的部分,这对于具有输入长度限制的模型非常重要。
    • langchain.docstore.documentDocument类表示LangChain中的文本块,便于管理和处理各个文本段落。
  • 摘要和链管理

    • langchain.chains.summarize:这个LangChain组件提供了预构建的摘要链,使用语言模型将大段文本缩减为简短摘要。
    • langchain.chains:LangChain链条对于协调包含多个组件(如模型、提示和输出解析器)的大型工作流非常有用。
  • 提示工程和语言模型

    • langchain.PromptTemplate:这个类为语言模型创建结构化提示。精心设计的提示有助于模型生成所需类型的答案。
    • langchain.llms:包含与各种语言模型(LLM)交互的接口。CTransformers高效地在CPU上运行语言模型。
  • 回调管理

    • langchain.callbacks.manager:LangChain中的回调管理器允许你控制和监控语言模型链的行为,并在过程的各个点实施自定义操作。
    • langchain.callbacks.streaming_stdout:这个独特的回调允许你在生成时实时将语言模型的输出反馈到控制台。
  • 语音转换

    • SpeechT5Processor:为SpeechT5模型准备音频数据。
    • SpeechT5ForTextToSpeech:主要用于文本到语音转换的模型,从文本生成音频。
    • SpeechT5HifiGan:一种高质量的声码器,提高合成语音的自然度。
from datasets import load_dataset
import torch
import soundfile as sf
from langchain.text_splitter import CharacterTextSplitter
from langchain.docstore.document import Document
from langchain.chains.summarize import load_summarize_chain
from langchain import PromptTemplate
from langchain.llms import CTransformers
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from transformers import SpeechT5Processor, SpeechT5ForTextToSpeech, SpeechT5HifiGan

2. 分割文本并创建文档

为了将输入文本分割成可管理的部分,并将每个部分格式化为一个文档,我们构建了一个函数。

def chunks_and_document(txt):
    text_splitter = CharacterTextSplitter()
    texts = text_splitter.split_text(txt)
    docs = [Document(page_content=t) for t in texts]
    return docs

该函数使用CharacterTextSplitter将文本分割为小块,然后将每个小块包装在一个Document对象中。在管理超过LLM令牌限制的长文本时,这一步是必要的。

3. 加载语言模型

然后,我们定义一个函数来加载语言模型(LLM),并为回调设置一个流式stdout处理程序。

def load_llm():
    callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])  
    llm = CTransformers(
        model=r"llama-2-7b-chat.ggmlv3.q2_K.bin",
        model_type="llama",
        max_new_tokens=1000,
        temperature=0.5
    )
    return llm

在这里,我们加载llama-2-7b-chat模型并设置其配置,例如max_new_tokenstemperature。回调管理器管理流式输出,使我们可以实时访问模型的响应。

4. 创建摘要链并获取响应

接下来,使用加载的LLM,我们编写一个方法从文档部分创建摘要。

def chains_and_response(docs):
    llm = load_llm()
    chain = load_summarize_chain(llm, chain_type='map_reduce')
    return chain.run(docs)

该函数使用load_summarize_chain函数构建摘要链,并将其应用于文档块。map_reduce链类型能够有效地处理大文本摘要,分别处理每个块,然后结合结果。

5. 输入文本并生成摘要

这里我们输入文本并处理以获得摘要。

txt_input = """ Why AI Agents
I have to say that all the talk about AI agents has been in the background for me, so far. First of all, because I have this idea that I want to do things only with Open-Source models; and secondly because I was looking for small but accurate models to move into the AI Agents world. Remember that I don’t have a GPU, so for me, the choice and the size of the model is always a priority.

But… what the hell are these agents?
I am a Process Control Industrial Automation engineer, so it comes easy to me to explain what Agents are in this way: agents are the driving force behind decision-making processes. They are

computer programs or systems designed to interact with their environment, make choices, and reach specific objectives.
not directly controlled by humans: these autonomous entities operate independently, enabling flexible problem-solving capabilities.
Agents can be categorized based on their distinct characteristics, such as their responsiveness (reactive) or proactive nature, the stability of their environment (fixed or dynamic), and their involvement in multi-agent systems.

Reactive agents react promptly to environmental stimuli and take actions based on these inputs
Proactive agents proactively plan and act to achieve their goals.
When multiple agents collaborate, they form a multi-agent system, each contributing to a common objective. To ensure effective coordination and communication, these agents must synchronize their actions and interact with one another.

"""

result = []
docs = chunks_and_document(txt_input)
response = chains_and_response(docs)
result.append(response)

在这个例子中,文本被分割成部分,进行摘要,结果添加到结果列表中。这一步确保了对长文本的有效摘要。

在这里插入图片描述

6. 准备文本到语音转换

加载TTS模型。

processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_tts")
model = SpeechT5ForTextToSpeech.from_pretrained("microsoft/speecht5_tts")
vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan")

7. 使用文本生成语音

准备文本输入以供文本到语音模型使用。

inputs = processor(text=result, return_tensors="pt")

8. 加载说话人嵌入

加载具有说话人嵌入的数据集,并选择一个特定的嵌入。

embeddings_dataset = load_dataset("Matthijs/cmu-arctic-xvectors", split="validation")
speaker_embeddings = torch.tensor(embeddings_dataset[7306]["xvector"]).unsqueeze(0)

9. 生成语音

使用说话人嵌入和文本输入生成语音。

speech = model.generate_speech(inputs["input_ids"], speaker_embeddings, vocoder=vocoder)

在这里插入图片描述

在这里,我们得到了语音向量,可以将其转换为.wav格式以收听音频。

10. 保存语音输出

最后,将生成的语音保存为WAV文件。

sf.write("speech.wav", speech.numpy(), samplerate=16000)

在这里插入图片描述

这完成了使用 transformers 将文本摘要转换为语音的过程。你可以收听生成的音频文件,了解给定文本的概述。

我鼓励大家在继续探索NLP和机器学习时,尝试使用这篇文中介绍的代码和工具。随意更改和定制,以适应你自己的需求和用例。

技术交流&资料

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

成立了算法面试和技术交流群,相关资料、技术交流&答疑,均可加我们的交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2040,备注:来自CSDN + 技术交流

通俗易懂讲解大模型系列

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值