人工智能训练线上算力实验环境

 

语音识别,转文字。

1
2
3
4
5
6
7
8
9
10
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
 
inference_pipeline = pipeline(
    task=Tasks.auto_speech_recognition,
    model='iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch',
    model_revision="v2.0.4")
 
rec_result = inference_pipeline('https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_vad_punc_example.wav')
print(rec_result)

  ModelScope 提供的语音识别模型。

  • modelscope.pipelines.pipeline:这是 ModelScope 提供的一个接口,用于加载和运行预训练模型的推理管道(pipeline)。它简化了模型加载、预处理、推理和后处理的步骤。
  • modelscope.utils.constant.Tasks:这是一个包含各种任务类型的枚举类,用于指定当前任务的类型。在这里,任务类型是语音识别(auto_speech_recognition)。
  • pipeline:创建一个推理管道实例。
    • task:指定任务类型为语音识别(auto_speech_recognition)。
    • model:指定使用的模型。这里使用的是 iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch,这是一个针对中文语音识别的预训练模型,支持语音活动检测(VAD)、标点预测等功能。
    • model_revision:指定模型的版本号,这里是 v2.0.4
  • inference_pipeline:调用推理管道实例,传入音频文件的 URL。
  • rec_result:存储推理结果,即语音识别的结果。

代码的功能

这段代码的功能是通过 ModelScope 提供的语音识别模型,将指定 URL 中的音频文件进行语音识别,并输出识别结果。

关于链接解析问题

你提到的链接解析问题可能是由于以下原因之一导致的:
  1. 链接格式问题:代码中的 URL 格式可能存在问题。例如,URL 中包含了多余的 HTML 标签(如 <url>),这可能导致解析失败。
  2. 网络问题:可能是网络连接不稳定或无法访问指定的服务器。
  3. 资源不可用:指定的音频文件可能不存在或服务器无法提供该资源。

解决建议

  1. 检查链接格式:确保 URL 是一个有效的音频文件链接,例如:
  1. 去掉多余的 HTML 标签,直接传入音频文件的 URL。
  2. 检查网络连接:确保你的网络可以正常访问上述链接,可以尝试在浏览器中直接打开该链接,看是否能成功下载音频文件。
  3. 检查资源可用性:确认音频文件在服务器上是可用的。如果链接无效或文件不存在,需要更换一个有效的音频文件链接。
  4. 重试:如果上述步骤都确认无误,但仍然无法解析,可以尝试重新运行代码。

 

[{'key': 'asr_vad_punc_example', 'text': '正是因为存在绝对正义,所以我们接受现实的相对正义。
但是不要因为现实的相对正义,我们就认为这个世界没有正义。因为如果当你认为这个世界没有正义。',
'timestamp': [[430, 670], [670, 810], [810, 1030], [1030, 1130],
[1130, 1330], [1330, 1510], [1510, 1670], [1670, 1810], [1810, 1970],
[1970, 2210], [2250, 2390], [2390, 2490], [2490, 2570], [2570, 2710],
[2710, 2950], [2970, 3210], [3310, 3550], [3570, 3730], [3730, 3830],
[3830, 3970], [3970, 4150], [4150, 4270], [4270, 4535], [5290, 5470],
[5470, 5610], [5610, 5710], [5710, 5910], [5910, 6070], [6070, 6230],
[6230, 6470], [6470, 6650], [6650, 6750], [6750, 6950], [6950, 7130],
[7130, 7250], [7250, 7490], [7490, 7590], [7590, 7710], [7710, 7910],
[7910, 8070], [8070, 8290], [8290, 8430], [8430, 8550], [8550, 8710],
[8710, 8950], [9050, 9290], [9370, 9550], [9550, 9790], [9790, 9965],
[10600, 10760], [10760, 10900], [10900, 11120], [11120, 11300], [11300, 11400],
[11400, 11580], [11580, 11700], [11700, 11800], [11800, 11920], [11920, 12020],
[12020, 12160], [12160, 12320], [12320, 12440], [12440, 12560], [12560, 12740], [12740, 12915]]}]
 
 

结果结构解析

JSON复制
[
    {
        "key": "asr_vad_punc_example",
        "text": "正是因为存在绝对正义,所以我们接受现实的相对正义。但是不要因为现实的相对正义,我们就认为这个世界没有正义。因为如果当你认为这个世界没有正义。",
        "timestamp": [
            [430, 670], [670, 810], [810, 1030], [1030, 1130], [1130, 1330], [1330, 1510], [1510, 1670], [1670, 1810], [1810, 1970], [1970, 2210], [2250, 2390], [2390, 2490], [2490, 2570], [2570, 2710], [2710, 2950], [2970, 3210], [3310, 3550], [3570, 3730], [3730, 3830], [3830, 3970], [3970, 4150], [4150, 4270], [4270, 4535], [5290, 5470], [5470, 5610], [5610, 5710], [5710, 5910], [5910, 6070], [6070, 6230], [6230, 6470], [6470, 6650], [6650, 6750], [6750, 6950], [6950, 7130], [7130, 7250], [7250, 7490], [7490, 7590], [7590, 7710], [7710, 7910], [7910, 8070], [8070, 8290], [8290, 8430], [8430, 8550], [8550, 8710], [8710, 8950], [9050, 9290], [9370, 9550], [9550, 9790], [9790, 9965], [10600, 10760], [10760, 10900], [10900, 11120], [11120, 11300], [11300, 11400], [11400, 11580], [11580, 11700], [11700, 11800], [11800, 11920], [11920, 12020], [12020, 12160], [12160, 12320], [12320, 12440], [12440, 12560], [12560, 12740], [12740, 12915]
        ]
    }
]

字段解释

  1. key
    • 含义:标识音频文件的名称或唯一标识符。
    • 值:asr_vad_punc_example,表示这是一个示例音频文件。
  2. text
    • 含义:语音识别的结果,即音频文件中语音内容的文字转录。
    • 值:正是因为存在绝对正义,所以我们接受现实的相对正义。但是不要因为现实的相对正义,我们就认为这个世界没有正义。因为如果当你认为这个世界没有正义。,这是识别出的文字内容。
  3. timestamp
    • 含义:语音识别结果的时间戳,表示每个识别片段的起始时间和结束时间(单位:毫秒)。
    • 值:一个二维列表,每个子列表包含两个值,分别表示一个语音片段的起始时间和结束时间。例如:
      • [430, 670] 表示从 430 毫秒到 670 毫秒的语音片段。
      • [670, 810] 表示从 670 毫秒到 810 毫秒的语音片段。
      • 以此类推。

如何理解这些数据

  1. text 字段
    • 这是语音识别的主要结果,表示音频文件中的语音内容被转录成文字。你可以直接使用这个字段来获取音频的文本内容。
  2. timestamp 字段
    • 这个字段提供了更详细的信息,即每个识别出的文字片段对应的时间范围。这对于以下场景非常有用:
      • 字幕生成:可以根据时间戳为视频生成字幕。
      • 语音分析:可以分析特定时间段内的语音内容。
      • 交互式应用:例如,用户可以点击某个文字片段,直接跳转到音频的对应位置。
 
1
2
3
4
5
6
7
8
9
[
    {
        "key": "asr_vad_punc_example",
        "text": "正是因为存在绝对正义,所以我们接受现实的相对正义。但是不要因为现实的相对正义,我们就认为这个世界没有正义。因为如果当你认为这个世界没有正义。",
        "timestamp": [
            [430, 670], [670, 810], [810, 1030], [1030, 1130], [1130, 1330], [1330, 1510], [1510, 1670], [1670, 1810], [1810, 1970], [1970, 2210], [2250, 2390], [2390, 2490], [2490, 2570], [2570, 2710], [2710, 2950], [2970, 3210], [3310, 3550], [3570, 3730], [3730, 3830], [3830, 3970], [3970, 4150], [4150, 4270], [4270, 4535], [5290, 5470], [5470, 5610], [5610, 5710], [5710, 5910], [5910, 6070], [6070, 6230], [6230, 6470], [6470, 6650], [6650, 6750], [6750, 6950], [6950, 7130], [7130, 7250], [7250, 7490], [7490, 7590], [7590, 7710], [7710, 7910], [7910, 8070], [8070, 8290], [8290, 8430], [8430, 8550], [8550, 8710], [8710, 8950], [9050, 9290], [9370, 9550], [9550, 9790], [9790, 9965], [10600, 10760], [10760, 10900], [10900, 11120], [11120, 11300], [11300, 11400], [11400, 11580], [11580, 11700], [11700, 11800], [11800, 11920], [11920, 12020], [12020, 12160], [12160, 12320], [12320, 12440], [12440, 12560], [12560, 12740], [12740, 12915]
        ]
    }
]

 

1
2
3
4
5
6
7
8
00:00:00.430 --> 00:00:00.670
正是因为存在绝对正义,
 
00:00:00.670 --> 00:00:00.810
所以我们接受现实的相对正义。
 
00:00:00.810 --> 00:00:01.030
但是不要因为现实的相对正义,

  

 

 

 ModelScope 提供的 AutoModelForCausalLMAutoTokenizer 来加载一个预训练的因果语言模型(Causal Language Model,CLM),并生成文本。

 

代码解析

导入必要的模块

Python复制
from modelscope import AutoModelForCausalLM, AutoTokenizer
  • AutoModelForCausalLM:用于加载预训练的因果语言模型。
  • AutoTokenizer:用于加载与模型对应的分词器(Tokenizer),用于将文本转换为模型可以理解的输入格式。

指定模型名称

Python复制
model_name = "Qwen/Qwen2.5-0.5B-Instruct"
  • model_name:指定要加载的预训练模型的名称。这里使用的是 Qwen/Qwen2.5-0.5B-Instruct,这是一个由阿里巴巴云开发的大型语言模型,专门用于指令跟随任务。

加载模型和分词器

Python复制
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
  • AutoModelForCausalLM.from_pretrained:加载预训练的因果语言模型。
    • model_name:指定模型名称。
    • torch_dtype="auto":自动选择合适的张量数据类型(如 float16float32)。
    • device_map="auto":自动将模型分配到可用的设备(如 GPU 或 CPU)。
  • AutoTokenizer.from_pretrained:加载与模型对应的分词器。

准备输入文本

Python复制
prompt = "Give me a short introduction to large language model."
messages = [
    {"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},
    {"role": "user", "content": prompt}
]
  • prompt:用户提供的输入文本,即需要模型生成回答的问题。
  • messages:一个包含系统和用户角色的对话列表。
    • role:角色类型,可以是 "system""user"
    • content:角色的内容,系统角色通常用于设置模型的行为,用户角色则是实际的输入问题。

使用分词器处理输入

Python复制
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
  • tokenizer.apply_chat_template:将对话列表转换为模型可以处理的文本格式。
    • messages:对话列表。
    • tokenize=False:不进行分词操作,直接返回处理后的文本。
    • add_generation_prompt=True:在文本末尾添加生成提示符,以便模型知道何时开始生成回答。

将文本转换为模型输入

Python复制
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
  • tokenizer([text], return_tensors="pt"):将文本转换为模型可以理解的输入张量。
    • [text]:将文本放入列表中,因为分词器通常处理批量数据。
    • return_tensors="pt":返回 PyTorch 张量。
  • .to(model.device):将输入张量移动到模型所在的设备(如 GPU)。

生成文本

Python复制
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=512
)
  • model.generate:使用模型生成文本。
    • **model_inputs:将输入张量传递给模型。
    • max_new_tokens=512:指定生成的最大新标记数。

提取生成的文本

Python复制
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
  • 这一步是为了从生成的完整文本中提取模型生成的部分。
    • output_ids[len(input_ids):]:从生成的文本中去掉输入部分,只保留生成的部分。

解码生成的文本

Python复制
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
  • tokenizer.batch_decode:将生成的标记 ID 转换回文本。
    • generated_ids:生成的标记 ID 列表。
    • skip_special_tokens=True:跳过特殊标记(如 [CLS][SEP] 等)。
  • [0]:提取第一个结果(因为 batch_decode 返回的是一个列表)。

代码的功能

这段代码的功能是加载一个预训练的因果语言模型(Qwen2.5-0.5B-Instruct),并根据用户提供的提示(prompt)生成回答。它通过以下步骤实现:
  1. 加载模型和分词器。
  2. 准备输入文本(包括系统和用户角色的对话)。
  3. 将输入文本转换为模型可以处理的格式。
  4. 使用模型生成回答。
  5. 提取并解码生成的文本。

输出结果

最终,response 包含了模型生成的回答,即对输入提示的文本回答。

示例输出

假设输入提示是:
Python复制
prompt = "Give me a short introduction to large language model."
模型生成的回答可能类似于:

A large language model is a type of artificial intelligence that is trained on vast amounts of text data to generate human-like text. These models can be used for a variety of tasks, including writing, translation, and answering questions.

总结

这段代码展示了如何使用 ModelScope 的 AutoModelForCausalLMAutoTokenizer 来加载预训练的因果语言模型,并根据用户输入生成回答。它涵盖了从模型加载、输入处理到文本生成和解码的完整流程。
 
 

 

 cpu运行程序,等待结果可能需要 3-5分钟  更长。

 运行中

 

完成。

 

 

 

 

 图片推理

1
2
3
4
5
6
7
8
9
10
11
12
13
from diffusers import AutoPipelineForText2Image
import torch
from modelscope import snapshot_download
 
model_dir = snapshot_download("AI-ModelScope/sdxl-turbo")
 
pipe = AutoPipelineForText2Image.from_pretrained(model_dir, torch_dtype=torch.float16, variant="fp16")
pipe.to("cuda")
 
prompt = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."
 
image = pipe(prompt=prompt, num_inference_steps=1, guidance_scale=0.0).images[0]
image.save("image.png")

  从ModelScope上下载模型,然后通过其他的主流库实现模型推理,以SDXL-Turbo模型为例,完整的模型推理运行示例如下:

 

使用 ModelScope 和 Diffusers 库来加载一个预训练的文本到图像(Text-to-Image)生成模型,并根据给定的文本提示生成图像。

导入必要的模块

Python复制
from diffusers import AutoPipelineForText2Image
import torch
from modelscope import snapshot_download
  • diffusers:一个用于生成模型的库,提供了丰富的接口来加载和使用预训练的生成模型。
  • torch:PyTorch 是一个流行的深度学习框架,用于构建和训练模型。
  • modelscope:ModelScope 是一个模型库,提供了多种预训练模型的管理和下载功能。

下载模型

Python复制
model_dir = snapshot_download("AI-ModelScope/sdxl-turbo")
  • snapshot_download:从 ModelScope 下载指定的预训练模型,并返回模型的本地存储路径。
    • "AI-ModelScope/sdxl-turbo":指定要下载的模型名称。sdxl-turbo 是一个高效的文本到图像生成模型。

加载模型

Python复制
pipe = AutoPipelineForText2Image.from_pretrained(model_dir, torch_dtype=torch.float16, variant="fp16")
  • AutoPipelineForText2Image.from_pretrained:加载预训练的文本到图像生成模型。
    • model_dir:模型的本地存储路径。
    • torch_dtype=torch.float16:指定模型使用的数据类型为半精度浮点数(float16),这可以加速计算并减少内存占用。
    • variant="fp16":指定模型的变体为半精度浮点数版本。

将模型移动到 GPU

Python复制
pipe.to("cuda")
  • pipe.to("cuda"):将模型移动到 GPU 上,以便利用 GPU 加速计算。如果你的机器没有 GPU,可以将其改为 "cpu"

定义文本提示

Python复制
prompt = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."
  • prompt:文本提示,描述你希望生成的图像内容。这里描述的是一只小浣熊穿着复杂的意大利牧师长袍的电影风格镜头。

生成图像

Python复制
image = pipe(prompt=prompt, num_inference_steps=1, guidance_scale=0.0).images[0]
  • pipe:调用加载的模型管道。
    • prompt=prompt:将文本提示传递给模型。
    • num_inference_steps=1:指定生成图像的推理步骤数。这里设置为 1,表示只进行一步推理(通常用于快速生成,但可能影响质量)。
    • guidance_scale=0.0:引导尺度,用于控制生成图像与文本提示的匹配程度。这里设置为 0.0,表示不使用引导。
    • .images[0]:获取生成的图像列表中的第一张图像。

保存生成的图像

Python复制
image.save("image.png")
  • image.save("image.png"):将生成的图像保存为文件,文件名为 image.png

程序的功能

这段代码的功能是:
  1. 下载模型:从 ModelScope 下载指定的文本到图像生成模型。
  2. 加载模型:将下载的模型加载到内存中,并将其移动到 GPU 上(如果可用)。
  3. 生成图像:根据给定的文本提示生成图像。
  4. 保存图像:将生成的图像保存为本地文件。

运行结果

运行这段代码后,你将在当前目录下得到一个名为 image.png 的文件,该文件包含根据文本提示生成的图像。例如,根据提示 "A cinematic shot of a baby racoon wearing an intricate italian priest robe.",生成的图像可能是一个小浣熊穿着复杂意大利牧师长袍的电影风格镜头。

注意事项

  1. GPU 要求:代码中使用了 GPU 加速(pipe.to("cuda"))。如果你的机器没有 GPU,可以将其改为 pipe.to("cpu")
  2. 模型性能:num_inference_steps=1guidance_scale=0.0 设置会导致生成图像的速度较快,但可能影响图像质量和与文本提示的匹配度。可以根据需要调整这些参数。
  3. 模型大小:下载的模型可能较大,确保有足够的磁盘空间。

 

 

改成  cpu

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from diffusers import AutoPipelineForText2Image
import torch
from modelscope import snapshot_download
 
model_dir = snapshot_download("AI-ModelScope/sdxl-turbo")
 
# pipe = AutoPipelineForText2Image.from_pretrained(model_dir, torch_dtype=torch.float16, variant="fp16")
# pipe.to("cuda")
 
pipe = AutoPipelineForText2Image.from_pretrained(model_dir, variant="fp16")
pipe.to("cpu"# 如果没有 GPU,可以将模型移动到 CPU
 
prompt = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."
 
image = pipe(prompt=prompt, num_inference_steps=1, guidance_scale=0.0).images[0]
image.save("image.png")

  

1
2
pipe = AutoPipelineForText2Image.from_pretrained(model_dir, variant="fp16")
pipe.to("cpu"# 如果没有 GPU,可以将模型移动到 CPU

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from diffusers import AutoPipelineForText2Image
import torch
from modelscope import snapshot_download
 
model_dir = snapshot_download("AI-ModelScope/sdxl-turbo")
 
# pipe = AutoPipelineForText2Image.from_pretrained(model_dir, torch_dtype=torch.float16, variant="fp16")
# pipe.to("cuda")
 
pipe = AutoPipelineForText2Image.from_pretrained(model_dir, variant="fp16")
pipe.to("cpu"# 如果没有 GPU,可以将模型移动到 CPU
 
prompt1 = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."
prompt = "A girls shot of a baby racoon wearing  ."
 
image = pipe(prompt=prompt, num_inference_steps=1, guidance_scale=0.0).images[0]
image.save("image.png")

  

 

 

 

 

 

 
   

 

 <table style="height: 280px; width: 750px;" border="0">

 

posted @   aiplus  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
悬浮按钮示例
点击右上角即可分享
微信分享提示