动物园数字 提供端到端的本地化和媒体服务,使原创电视和电影内容适应不同的语言、地区和文化。它使世界上最好的内容创作者更容易全球化。 ZOO Digital 深受娱乐界知名人士的信赖,可大规模提供高质量的本地化和媒体服务,包括配音、字幕、脚本编写和合规性。
典型的定位工作流程需要手动对说话者进行分类,其中根据说话者的身份对音频流进行分段。这个耗时的过程必须先完成,然后才能将内容配音成另一种语言。如果采用手动方法,30 分钟的片段可能需要 1-3 小时才能定位。通过自动化,ZOO Digital 的目标是在 30 分钟内实现本地化。
在这篇文章中,我们讨论部署可扩展的机器学习 (ML) 模型,以使用以下方法对媒体内容进行分类 亚马逊SageMaker,重点关注 耳语X 模型。
背景
ZOO Digital 的愿景是提供更快的本地化内容周转。这一目标的瓶颈在于该工作的手动密集型性质,以及能够手动本地化内容的技术人员数量较少。 ZOO Digital 与超过 11,000 名自由职业者合作,仅 600 年就本地化了超过 2022 亿个单词。然而,由于对内容的需求不断增长,技术人员的供应已经供不应求,因此需要自动化来协助本地化工作流程。
为了通过机器学习加速内容工作流程的本地化,ZOO Digital 参与了 AWS Prototyping,这是 AWS 的一项投资计划,旨在与客户共同构建工作负载。此次合作的重点是为本地化流程提供功能性解决方案,同时为 ZOO Digital 开发人员提供有关 SageMaker 的实践培训, 亚马逊转录及 亚马逊翻译.
客户挑战
转录标题(电影或电视剧集)后,必须将发言者分配给每个语音片段,以便将他们正确分配给扮演角色的配音艺术家。这个过程称为说话者二值化。 ZOO Digital 面临着在经济上可行的同时大规模日记化内容的挑战。
解决方案概述
在这个原型中,我们将原始媒体文件存储在指定的 亚马逊简单存储服务 (亚马逊 S3)存储桶。此 S3 存储桶配置为在其中检测到新文件时发出事件,从而触发 AWS Lambda 功能。有关配置此触发器的说明,请参阅教程 使用 Amazon S3 触发器调用 Lambda 函数。随后,Lambda 函数使用以下命令调用 SageMaker 端点进行推理: Boto3 SageMaker 运行时客户端.
耳语X 模型,基于 OpenAI 的耳语,对媒体资产进行转录和分类。它建立在 更快的耳语 重新实现,与 Whisper 相比,转录速度提高了四倍,并改进了字级时间戳对齐。此外,它还引入了说话者二值化,这在原始 Whisper 模型中是不存在的。 WhisperX 利用 Whisper 模型进行转录, Wav2Vec2 增强时间戳对齐的模型(确保转录文本与音频时间戳的同步),以及 皮亚诺特 分类模型。 FFmpeg的 用于从源媒体加载音频,支持各种 媒体格式。 透明的模块化模型架构具有灵活性,因为模型的每个组件都可以根据未来的需要进行更换。但需要注意的是,WhisperX 缺乏完整的管理功能,并且不是企业级产品。如果没有维护和支持,可能不适合生产部署。
在这次合作中,我们使用 SageMaker 在 SageMaker 上部署和评估了 WhisperX 异步推理端点 托管模型。 SageMaker 异步端点支持高达 1 GB 的上传大小,并包含自动扩展功能,可有效缓解流量高峰并在非高峰时段节省成本。异步端点特别适合处理大文件,例如我们的用例中的电影和电视剧。
下图说明了我们在这次合作中进行的实验的核心要素。
在以下部分中,我们将深入研究在 SageMaker 上部署 WhisperX 模型的细节,并评估二值化性能。
下载模型及其组件
WhisperX 是一个包含多个转录、强制对齐和二值化模型的系统。为了使 SageMaker 操作顺利,无需在推理过程中获取模型工件,必须预先下载所有模型工件。然后,这些工件会在启动期间加载到 SageMaker 服务容器中。由于这些模型无法直接访问,因此我们提供来自 WhisperX 源的描述和示例代码,并提供有关下载模型及其组件的说明。
WhisperX 使用六种模型:
大多数这些模型可以从 拥抱脸 使用 Huggingface_hub 库。我们使用以下 download_hf_model()
函数来检索这些模型工件。需要 Hugging Face 的访问令牌,该令牌是在接受以下 pyannote 模型的用户协议后生成的:
import huggingface_hub
import yaml
import torchaudio
import urllib.request
import os CONTAINER_MODEL_DIR = "/opt/ml/model"
WHISPERX_MODEL = "guillaumekln/faster-whisper-large-v2"
VAD_MODEL_URL = "https://whisperx.s3.eu-west-2.amazonaws.com/model_weights/segmentation/0b5b3216d60a2d32fc086b47ea8c67589aaeb26b7e07fcbe620d6d0b83e209ea/pytorch_model.bin"
WAV2VEC2_MODEL = "WAV2VEC2_ASR_BASE_960H"
DIARIZATION_MODEL = "pyannote/speaker-diarization" def download_hf_model(model_name: str, hf_token: str, local_model_dir: str) -> str: """ Fetches the provided model from HuggingFace and returns the subdirectory it is downloaded to :param model_name: HuggingFace model name (and an optional version, appended with @[version]) :param hf_token: HuggingFace access token authorized to access the requested model :param local_model_dir: The local directory to download the model to :return: The subdirectory within local_modeL_dir that the model is downloaded to """ model_subdir = model_name.split('@')[0] huggingface_hub.snapshot_download(model_subdir, token=hf_token, local_dir=f"{local_model_dir}/{model_subdir}", local_dir_use_symlinks=False) return model_subdir
VAD 模型从 Amazon S3 获取,Wav2Vec2 模型从 torchaudio.pipelines 模块检索。基于以下代码,我们可以检索所有模型的工件,包括来自 Hugging Face 的工件,并将它们保存到指定的本地模型目录中:
def fetch_models(hf_token: str, local_model_dir="./models"): """ Fetches all required models to run WhisperX locally without downloading models every time :param hf_token: A huggingface access token to download the models :param local_model_dir: The directory to download the models to """ # Fetch Faster Whisper's Large V2 model from HuggingFace download_hf_model(model_name=WHISPERX_MODEL, hf_token=hf_token, local_model_dir=local_model_dir) # Fetch WhisperX's VAD Segmentation model from S3 vad_model_dir = "whisperx/vad" if not os.path.exists(f"{local_model_dir}/{vad_model_dir}"): os.makedirs(f"{local_model_dir}/{vad_model_dir}") urllib.request.urlretrieve(VAD_MODEL_URL, f"{local_model_dir}/{vad_model_dir}/pytorch_model.bin") # Fetch the Wav2Vec2 alignment model torchaudio.pipelines.__dict__[WAV2VEC2_MODEL].get_model(dl_kwargs={"model_dir": f"{local_model_dir}/wav2vec2/"}) # Fetch pyannote's Speaker Diarization model from HuggingFace download_hf_model(model_name=DIARIZATION_MODEL, hf_token=hf_token, local_model_dir=local_model_dir) # Read in the Speaker Diarization model config to fetch models and update with their local paths with open(f"{local_model_dir}/{DIARIZATION_MODEL}/config.yaml", 'r') as file: diarization_config = yaml.safe_load(file) embedding_model = diarization_config['pipeline']['params']['embedding'] embedding_model_dir = download_hf_model(model_name=embedding_model, hf_token=hf_token, local_model_dir=local_model_dir) diarization_config['pipeline']['params']['embedding'] = f"{CONTAINER_MODEL_DIR}/{embedding_model_dir}" segmentation_model = diarization_config['pipeline']['params']['segmentation'] segmentation_model_dir = download_hf_model(model_name=segmentation_model, hf_token=hf_token, local_model_dir=local_model_dir) diarization_config['pipeline']['params']['segmentation'] = f"{CONTAINER_MODEL_DIR}/{segmentation_model_dir}/pytorch_model.bin" with open(f"{local_model_dir}/{DIARIZATION_MODEL}/config.yaml", 'w') as file: yaml.safe_dump(diarization_config, file) # Read in the Speaker Embedding model config to update it with its local path speechbrain_hyperparams_path = f"{local_model_dir}/{embedding_model_dir}/hyperparams.yaml" with open(speechbrain_hyperparams_path, 'r') as file: speechbrain_hyperparams = file.read() speechbrain_hyperparams = speechbrain_hyperparams.replace(embedding_model_dir, f"{CONTAINER_MODEL_DIR}/{embedding_model_dir}") with open(speechbrain_hyperparams_path, 'w') as file: file.write(speechbrain_hyperparams)
选择适当的 AWS 深度学习容器来为模型提供服务
使用上述示例代码保存模型工件后,您可以选择预构建 AWS深度学习容器 (DLC)来自以下 GitHub回购。选择 Docker 镜像时,请考虑以下设置:框架(Hugging Face)、任务(推理)、Python 版本和硬件(例如 GPU)。我们建议使用以下图片: 763104351884.dkr.ecr.[REGION].amazonaws.com/huggingface-pytorch-inference:2.0.0-transformers4.28.1-gpu-py310-cu118-ubuntu20.04
该映像预装了所有必需的系统软件包,例如 ffmpeg。请记住将 [REGION] 替换为您正在使用的 AWS 区域。
对于其他所需的 Python 包,创建一个 requirements.txt
包含软件包及其版本列表的文件。这些软件包将在构建 AWS DLC 时安装。以下是在 SageMaker 上托管 WhisperX 模型所需的附加包:
创建推理脚本来加载模型并运行推理
接下来,我们创建一个自定义的 inference.py
脚本来概述如何将 WhisperX 模型及其组件加载到容器中以及应如何运行推理过程。该脚本包含两个函数: model_fn
和 transform_fn
。 该 model_fn
调用函数从各自的位置加载模型。随后,这些模型被传递到 transform_fn
推理期间的功能,其中执行转录、比对和二值化过程。以下是一个代码示例 inference.py
:
import io
import json
import logging
import tempfile
import time import torch
import whisperx DEVICE = 'cuda' if torch.cuda.is_available() else 'cpu' def model_fn(model_dir: str) -> dict: """ Deserialize and return the models """ logging.info("Loading WhisperX model") model = whisperx.load_model(whisper_arch=f"{model_dir}/guillaumekln/faster-whisper-large-v2", device=DEVICE, language="en", compute_type="float16", vad_options={'model_fp': f"{model_dir}/whisperx/vad/pytorch_model.bin"}) logging.info("Loading alignment model") align_model, metadata = whisperx.load_align_model(language_code="en", device=DEVICE, model_name="WAV2VEC2_ASR_BASE_960H", model_dir=f"{model_dir}/wav2vec2") logging.info("Loading diarization model") diarization_model = whisperx.DiarizationPipeline(model_name=f"{model_dir}/pyannote/speaker-diarization/config.yaml", device=DEVICE) return { 'model': model, 'align_model': align_model, 'metadata': metadata, 'diarization_model': diarization_model } def transform_fn(model: dict, request_body: bytes, request_content_type: str, response_content_type="application/json") -> (str, str): """ Load in audio from the request, transcribe and diarize, and return JSON output """ # Start a timer so that we can log how long inference takes start_time = time.time() # Unpack the models whisperx_model = model['model'] align_model = model['align_model'] metadata = model['metadata'] diarization_model = model['diarization_model'] # Load the media file (the request_body as bytes) into a temporary file, then use WhisperX to load the audio from it logging.info("Loading audio") with io.BytesIO(request_body) as file: tfile = tempfile.NamedTemporaryFile(delete=False) tfile.write(file.read()) audio = whisperx.load_audio(tfile.name) # Run transcription logging.info("Transcribing audio") result = whisperx_model.transcribe(audio, batch_size=16) # Align the outputs for better timings logging.info("Aligning outputs") result = whisperx.align(result["segments"], align_model, metadata, audio, DEVICE, return_char_alignments=False) # Run diarization logging.info("Running diarization") diarize_segments = diarization_model(audio) result = whisperx.assign_word_speakers(diarize_segments, result) # Calculate the time it took to perform the transcription and diarization end_time = time.time() elapsed_time = end_time - start_time logging.info(f"Transcription and Diarization took {int(elapsed_time)} seconds") # Return the results to be stored in S3 return json.dumps(result), response_content_type
在模型的目录中,除了 requirements.txt
文件,确保存在 inference.py
在代码子目录中。这 models
目录应类似于以下内容:
创建模型的 tarball
创建模型和代码目录后,您可以使用以下命令行将模型压缩为 tarball(.tar.gz 文件)并将其上传到 Amazon S3。在撰写本文时,使用更快的 Whisper Large V2 模型,代表 SageMaker 模型的生成 tarball 大小为 3 GB。欲了解更多信息,请参阅 Amazon SageMaker 中的模型托管模式,第 2 部分:开始在 SageMaker 上部署实时模型.
创建 SageMaker 模型并使用异步预测器部署端点
现在您可以使用以下命令创建 SageMaker 模型、端点配置和异步端点 异步预测器 使用上一步中创建的模型 tarball。有关说明,请参阅 创建异步推理端点.
评估二值化性能
为了评估 WhisperX 模型在各种场景下的二化性能,我们从两个英文标题中各选择了三集:一个由 30 分钟剧集组成的戏剧标题,和一个由 45 分钟剧集组成的纪录片标题。我们利用了 pyannote 的指标工具包, pyannote.metrics,计算 二值化错误率 (DER)。在评估中,ZOO 提供的手动转录和日记记录作为基本事实。
我们将 DER 定义如下:
合计 是真实视频的长度。 FA (误报)是在预测中被视为语音但在地面实况中不被视为语音的片段的长度。 错过 是在真实情况中被视为语音但在预测中不被视为语音的片段的长度。 误差,也被称为 混乱,是在预测和地面实况中分配给不同说话人的片段的长度。所有单位均以秒为单位。 DER 的典型值可能会有所不同,具体取决于具体应用、数据集和二值化系统的质量。请注意,DER 可以大于 1.0。 DER 越低越好。
为了能够计算一段媒体的 DER,需要进行地面实况二值化以及 WhisperX 转录和二值化输出。必须对这些进行解析并生成元组列表,其中包含媒体中每个语音片段的说话者标签、语音片段开始时间和语音片段结束时间。说话者标签不需要在 WhisperX 和地面真实分类之间匹配。结果主要基于片段的时间。 pyannote.metrics 采用这些真实值二值化和输出二值化的元组(在 pyannote.metrics 文档中称为 参考 和 假说)来计算 DER。下表总结了我们的结果。
影片类型 | DER | 正确: | 错过 | 误差 | 错误警报 |
戏剧 | 0.738 | 44.80% | 21.80% | 33.30% | 18.70% |
纪录片 | 1.29 | 94.50% | 5.30% | 0.20% | 123.40% |
一般 | 0.901 | 71.40% | 13.50% | 15.10% | 61.50% |
这些结果揭示了戏剧和纪录片之间的显着性能差异,与纪录片相比,该模型在戏剧剧集中取得了明显更好的结果(使用 DER 作为聚合指标)。对标题的更仔细分析可以深入了解导致这种绩效差距的潜在因素。一个关键因素可能是纪录片标题中频繁出现的背景音乐与演讲重叠。尽管通过预处理媒体来提高二值化的准确性(例如消除背景噪声以隔离语音)超出了该原型的范围,但它为未来可能提高 WhisperX 性能的工作开辟了道路。
结论
在这篇文章中,我们探讨了 AWS 和 ZOO Digital 之间的合作伙伴关系,利用 SageMaker 和 WhisperX 模型的机器学习技术来增强二值化工作流程。 AWS 团队在协助 ZOO 制作原型、评估和理解专门为分类而设计的自定义 ML 模型的有效部署方面发挥了关键作用。这包括使用 SageMaker 合并自动缩放以实现可扩展性。
利用人工智能进行分类将在为 ZOO 生成本地化内容时节省大量成本和时间。通过帮助转录人员快速、准确地创建和识别说话者,该技术解决了传统上耗时且容易出错的任务。传统的过程通常涉及多次通过视频和额外的质量控制步骤,以最大限度地减少错误。采用人工智能进行分类可以实现更有针对性和更高效的方法,从而在更短的时间内提高生产力。
我们概述了在 SageMaker 异步端点上部署 WhisperX 模型的关键步骤,并鼓励您使用提供的代码自行尝试。如需进一步了解 ZOO Digital 的服务和技术,请访问 ZOO Digital 官方网站。有关在 SageMaker 上部署 OpenAI Whisper 模型和各种推理选项的详细信息,请参阅 在 Amazon SageMaker 上托管 Whisper 模型:探索推理选项。请随意在评论中分享您的想法。
作者简介
侯颖 博士是 AWS 的机器学习原型架构师。她的主要兴趣领域包括深度学习,重点是 GenAI、计算机视觉、NLP 和时间序列数据预测。在业余时间,她喜欢与家人共度美好时光,沉浸在小说中,并在英国国家公园徒步旅行。
伊森·坎伯兰 是 ZOO Digital 的人工智能研究工程师,他致力于使用人工智能和机器学习作为辅助技术来改进语音、语言和本地化的工作流程。他拥有安全和警务领域的软件工程和研究背景,专注于从网络中提取结构化信息,并利用开源机器学习模型来分析和丰富收集到的数据。
高拉夫·凯拉 领导英国和爱尔兰的 AWS 原型团队。他的团队与不同行业的客户合作,构思并共同开发关键业务工作负载,以加速 AWS 服务的采用。
- :具有
- :是
- :不是
- :在哪里
- $UP
- 000
- 1
- 10
- 100
- 11
- 140
- 2022
- 220
- 28
- 30
- 350
- 600
- 7
- 8
- a
- Able
- 加快
- 接受
- ACCESS
- 无障碍
- 实现
- 横过
- 适应
- 额外
- 另外
- 地址
- 采用
- 后
- 骨料
- 协议
- AI
- 研究
- 瞄准
- 目标
- 报警
- 对齐
- 对齐
- 对准
- 所有类型
- 允许
- 单
- 靠
- 还
- 尽管
- Amazon
- 亚马逊SageMaker
- 亚马逊网络服务
- an
- 分析
- 分析
- 和
- 另一个
- 应用领域
- 的途径
- 适当
- 架构
- 保健
- 地区
- 艺术家
- AS
- 评估
- 办公室文员:
- 分配
- 协助
- 协助
- At
- 音频
- 授权
- 汽车
- 自动化和干细胞工程
- 大道
- AWS
- 背景
- 基于
- BE
- 因为
- 很
- before
- 作为
- 最佳
- 更好
- 之间
- 超越
- 最大
- BIN
- 都
- 建
- 商业
- 但是
- by
- 计算
- 被称为
- CAN
- 案件
- 挑战
- 字符
- 接近
- 码
- 合作
- 共同
- 注释
- 相比
- 完成
- 符合
- 元件
- 组件
- 复合
- 一台
- 计算机视觉
- 进行
- 配置
- 配置
- 考虑
- 考虑
- 组成
- 容器
- 包含
- 内容
- 内容创作者
- 贡献
- 控制
- 常规
- 核心
- 正确地
- 价格
- 成本
- 可以
- 创建信息图
- 创建
- 创造
- 创作者
- 危急
- 文化
- 习俗
- 合作伙伴
- data
- 深
- 深入学习
- 定义
- 交付
- 提供
- 钻研
- 需求
- 根据
- 部署
- 部署
- 部署
- 部署
- 设计
- 详情
- 检测
- 开发
- 设备
- 图表
- 信息通信技术部
- 差异
- 不同
- 数字
- 七段
- 直接
- 目录
- 目录
- 讨论
- 不同
- 码头工人
- 记录
- 文件
- 域
- 别
- 下载
- 下载
- 戏剧
- 配音
- ,我们将参加
- 每
- 更容易
- 有效
- 高效
- 有效
- 分子
- 其他
- 嵌入
- 雇用
- 使
- 环绕
- 鼓励
- 结束
- 端至端
- 端点
- 从事
- 订婚
- 工程师
- 工程师
- 英语
- 提高
- 充实
- 确保
- 保证
- 企业级
- 娱乐
- 插曲
- 错误
- 故障
- 必要
- 评估
- 评估
- 评估
- 评估
- 活动
- 所有的
- 例子
- 锻炼
- 实验
- 探讨
- 探索
- 面部彩妆
- 面孔
- 因素
- 因素
- false
- 家庭
- 快
- 特征
- 感觉
- 已取得
- 文件
- 档
- 高度灵活
- 专注焦点
- 重点
- 聚焦
- 以下
- 如下
- 针对
- 强迫
- 四
- 骨架
- Free
- 频繁
- 止
- ,
- 功能
- 实用
- 功能
- 进一步
- 未来
- 差距
- Genai
- 产生
- 发电
- 越来越
- GitHub上
- 全球化路线
- 目标
- GPU
- 陆运
- 动手
- 硬件
- he
- 这里
- 高品质
- 他的
- 主持人
- 托管
- HOURS
- 创新中心
- 但是
- HTML
- HTTP
- HTTPS
- 拥抱脸
- 确定
- 身分
- if
- 说明
- 图片
- 进口
- 改善
- 改善
- in
- 包括
- 包括
- 包含
- 合并
- 结合
- 增加
- 行业
- 信息
- 引发
- 可行的洞见
- 安装
- 说明
- 兴趣
- 成
- 推出
- 投资
- 调用
- 涉及
- 爱尔兰
- IT
- 它的
- JPG
- JSON
- 键
- 关键因素
- 标签
- 标签
- 语言
- 语言
- 大
- 大
- 铅
- 信息
- 学习
- 长度
- 借力
- 自学资料库
- 线
- 清单
- 书单
- 加载
- 装载
- 本地
- 本地化
- 当地
- 地点
- 日志
- 记录
- 长
- 降低
- 机
- 机器学习
- 保养
- 制作
- 颠覆性技术
- 要求
- 手册
- 手动
- 匹配
- 可能..
- 媒体
- 元数据
- 方法
- 公
- 指标
- 百万
- 大幅减低
- 分钟
- 减轻
- ML
- 模型
- 模型
- 模块化
- 模块
- 美好瞬间
- 更多
- 大多
- 电影
- 电影
- 多
- 音乐
- 必须
- 姓名
- 名称
- National
- 自然
- 必要
- 需求
- 打印车票
- 全新
- NLP
- 噪声
- 特别是
- 注意
- 获得
- of
- 提供
- 提供
- 官方
- 经常
- on
- 一
- 开放源码
- OpenAI
- 打开
- 操作
- 附加选项
- or
- 原版的
- OS
- 其他名称
- 我们的
- 输出
- 轮廓
- 概述
- 产量
- 输出
- 超过
- 包
- 部分
- 尤其
- 合作伙伴
- 通过
- 通行证
- 径
- 路径
- 模式
- 员工
- 演出
- 性能
- 执行
- 施行
- 片
- 管道
- 关键的
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 播放
- 播放
- 治安
- 帖子
- 潜力
- 可能
- 前
- 恰恰
- 预测
- 预测
- 存在
- 当下
- 以前
- 小学
- 过程
- 过程
- 处理
- 产品
- 生产
- 生产率
- 曲目
- 原型
- 原型
- 提供
- 提供
- 提供
- 优
- 蟒蛇
- 质量
- R
- 率
- 阅读
- 真实
- 实时的
- 建议
- 参考
- 简称
- 地区
- 地区
- 纪念
- 删除
- 更换
- 代表
- 请求
- 要求
- 必须
- 岗位要求
- 研究
- 那些
- 导致
- 导致
- 成果
- 回报
- 回报
- 揭示
- 角色
- 运行
- 运行
- 运行
- s
- sagemaker
- 样品
- 保存
- 保存
- 储
- 可扩展性
- 可扩展性
- 鳞片
- 缩放
- 情景
- 范围
- 脚本
- 秒
- 部分
- 保安
- 段
- 分割
- 中模板
- 选
- 选择
- 系列
- 已服务
- 特色服务
- 服务
- 设置
- Share
- 她
- 应该
- 显著
- 简易
- SIX
- 尺寸
- 尺寸
- 技能的
- 小
- 光滑
- So
- 软件
- 软件工程
- 方案,
- 来源
- 喇叭
- 音箱
- 具体的
- 特别是
- 指定
- 言语
- 花费
- 钉鞋
- 开始
- 开始
- 步
- 步骤
- 存储
- 存储
- 故事
- 流
- 精简
- 结构化
- 后来
- 大量
- 这样
- 合适的
- 供应
- SUPPORT
- 支持
- 换
- 如飞
- 同步
- 系统
- 表
- 采取
- 需要
- 针对
- 任务
- 团队
- 技术
- 技术
- 专业技术
- 临时
- 文本
- 比
- 这
- 未来
- 英国
- 其
- 他们
- 然后
- 从而
- 博曼
- 他们
- Free Introduction
- 那些
- 三
- 通过
- 次
- 时间序列
- 耗时的
- 时间表
- 时
- 时间戳
- 计时
- 标题
- 标题
- 至
- 象征
- 了
- 工具箱
- 火炬
- 传统
- 交通
- 产品培训
- 透明
- 触发
- 触发
- 信任
- 真相
- 尝试
- 教程
- tv
- 二
- 普遍
- Uk
- 下
- 在30岁以下
- 理解
- 单位
- 更新
- 上
- 使用
- 用例
- 用过的
- 用户
- 使用
- 运用
- 利用
- 利用
- 价值观
- 各个
- 变化
- 版本
- 版本
- 可行
- 视频
- 愿景
- 参观
- 音色
- W
- 是
- we
- 卷筒纸
- Web服务
- 井
- ,尤其是
- 而
- 耳语
- 将
- 中
- 也完全不需要
- 话
- 工作
- 工作流程
- 工作流程
- 劳动力
- 合作
- 世界
- 写作
- 雅姆
- 完全
- 您一站式解决方案
- 你自己
- 和风网
- 动物园