背景
现实世界,人跟人的沟通相当一部分是语音沟通,比如打电话,聊天中发送语音消息。
而在程序的世界,大部分以处理字符串为主。
所以,把语音转换成文字就成为了编程世界非常普遍的需求。
Whisper 是由 OpenAI 开发的一种高效的语音识别(ASR)技术,旨在将人类的语音转换成文本。
该模型通过大量的语音数据训练而成,能够识别并转写多种语言和方言中的语音。
以下是 Whisper 的一些主要使用场景和它能解决的问题:
使用场景
自动字幕生成:对于视频内容制作者而言,Whisper 可以自动生成字幕,加速视频制作过程,提高内容的可访问性和理解度。 会议记录:在商务和学术会议中自动记录和转写发言,节省人工记录的时间,确保信息的准确性和完整性。 教育应用:教师可以利用 Whisper 来转写课程内容,为学生提供书面材料,帮助学习和复习。 语音助手和聊天机器人:提升语音助手的理解能力,使其能更准确地理解用户的指令,提供相关服务或答案。 无障碍技术:帮助听力受损的人士通过文本实现对话理解,提高他们的沟通能力和生活质量。 内容分析:自动转写的文本可以用于内容分析,比如情绪分析、关键词提取或主题识别,进而提供内容推荐、概要生成等服务。我当前从事的领域为全球客服,应用场景主要是:
内容分析:
客服管理人员快捷查看语言转成的文本内容,把数据喂给AI,进行服务质量评估和概要提取,方便对客服人员客观评价,方便管理。
语音助手和聊天机器人:
主流需求是小客户希望提供AI机器人+少量真人客服,即聊天机器人服务。
解决的问题
多语言和方言的识别:Whisper 能够处理多种语言和方言的转写,这是传统语音识别系统难以达到的。 嘈杂环境下的语音识别:在噪声背景下准确识别语音是一个挑战,Whisper 在这方面表现优异,能够在各种嘈杂环境下准确转写语音。 提高无障碍通讯的可行性:通过为听力受损者提供实时的语音转文本服务,Whisper 提高了他们的沟通能力和社会参与度。 节省时间和成本:自动语音转写技术可以替代人工转写,大幅度节省时间和成本,尤其是在需要处理大量语音数据的场景中。通过这些使用场景和解决的问题可以看出,Whisper 作为一个先进的语音识别技术,能够在多个领域带来实质性的改进和便利。
全球客服业务场景下要解决的问题主要有:
多语言和方言的识别:
我们提供了多语种的客服,每个语种其实也有方言的差别,比如英语分美式英语和中式英语,还有各种俚语。
嘈杂环境下的语音识别:
客服客人的语音沟通可能在弱网环境或者噪音环境,需要提高准确度。
节省时间和成本:
如何评估客服的工作质量,提高管理水平,提高甲方的满意度,以前是靠抽查录音,现在是借助转文本+AI检查和概要提取,节约了大量的时间。
目标
假设你在做一个全球客服平台,解决客服服务过程中的问题,提高他们的效率和智能化。那么语音转文本的能力也是标配的。
概括一下,我们期望使用语音转文本达成哪些业务目标。
内部管理角度:提高科学评估客服服务质量的效率。
客服角度:提高客服的服务质量,通过积累的语音转换的文字,识别客人的意图,情绪,提供辅助。
新业务形态支持:AI语音客服+少量真人客服,是现在小微客户的普遍诉求。
whisper介绍
对比选型
在选定whisper之前,我也对比了开源和商用的各种解决方案。
以下是对比维度的表格概览:
然后要提到的要点就是,转文服务需要GPU, 在云计算厂商购买含有GPU的服务器,最便宜一个月都要4000一个月起。
我们有分公司在海外,比如美国,有自建机房,可以自行购买高配置显卡,搭建服务器,
这块费用相比于云厂商来说有优势。就是程序的安装,维护,对接需要时间去设计,开发,调试。
简要介绍
项目中现在落地实践的是whisper, 一个语音转文本的组件。
whisper 音译: 耳语
定位: 基于大规模弱监督的鲁棒语音识别
鲁棒解释一下: 在IT行业中,“鲁棒性”(Robustness)通常指的是一个系统、网络、软件或硬件在面对错误输入、异常条件或某些意外状况下仍能保持其功能和性能的能力。
鲁棒性强的系统能够处理错误、适应环境的变化,并在面对意外挑战时仍维持运行,而不会崩溃或者产生不可预测的行为。
它是github上是openai公司开源的一个项目。 开发语言是python .
地址:github的主域名 + openai/whisper
官方的文档使用场景描述: Whisper是一个通用的语音识别模型。
它经过大量多样化音频数据的训练,并且还是一个多任务模型,可以进行多语言语音识别、语音翻译和语言识别。
处理流程或者模型图如下:
图中是whipser的处理过程。我标了4个小点,简单对齐一下:
1 训练数据
whisper采用多任务的训练的数据,对噪音或者背景音乐做了特化处理,支持各种语言,时长68万个小时。2 log-Mei
log-Mei Spectrogram 介绍:log-Mel Spectrogram
是一种在语音处理中常用的特征表示方法,特别是在语音识别与分析任务中。它是Mel频谱(Mel Spectrogram)的对数版本,通常能更好地匹配人类的听觉感知特性,因为Mel刻度是对频率进行非线性变换,以模拟人耳对不同频率的响应。
解释
Mel频谱:是通过将FFT(快速傅里叶变换)得到的频谱映射到一个以Mel刻度为单位的频率尺度上得到的。这个尺度基于人耳对不同频率声音的感知能力,低频下更加敏感,而高频的感知能力递减。 对数操作:对Mel频谱应用对数操作(logarithm)进一步改进。这是因为人类的听觉是对声强的对数变化敏感的,即分贝(dB)尺度。因此,应用对数变换后,Spectrogram能更准确地表示声音的感知特征。结合场景
在使用OpenAI的Whisper项目进行语音转文本任务时,log-Mel Spectrogram
可能作为语音信号的输入前处理步骤。Whisper 的模型在训练前会将语音信号转换成这种格式,因为它可以有效地捕捉到对于语音识别至关重要的特征,并降低环境噪音和其他不相关变量的影响。
Whisper的使用
在Whisper模型中,如果你想要处理音频文件进行语音识别,流程可能如下:
预处理:音频信号首先会被转换成log-Mel Spectrogram
。这包括采样、窗函数应用、FFT、Mel滤波器组应用,最后获取对数Mel能量。
模型输入:得到的log-Mel Spectrogram
会被提供给模型作为输入特征。
模型预测:Whisper模型会根据输入的Spectrogram进行编码、解码等操作,最后输出文本。
后处理:输出的文本可能会经过一些后处理步骤以提高可读性或准确性,比如标点符号的添加,去除语言模型的偏差等。
核心要点归纳
log-Mel Spectrogram
提供了一种与人类听觉相匹配的特征表示。
适用于语音识别等任务,因为能够有效捕获语音关键特征。
Whisper等模型使用这种表示作为输入特征进行训练和预测。
在实际应用中,需要对音频文件进行相应的预处理来得到log-Mel Spectrogram
。
3 多任务训练
"tokens in multitask training format" 在使用像 Whisper 这样的模型时,
引用的是如何在训练阶段以一种格式化的方式组织和表示数据,使得模型能同时学习多个任务。
多任务训练(Multitask Training)是机器学习中的一种技术,
旨在通过同时训练一个模型来执行多个相关任务,以达到提高总体性能和效率的目的。
在 Whisper 项目的背景下,这意味着模型不仅被训练用以转换语音到文本,
还可能包括其他任务,比如语言识别、情感分析等。
如何利用 Tokens 进行多任务训练
在多任务训练中,一个关键的挑战是如何在模型内部表示不同的任务,
以及如何向模型指示当前的输入数据对应于哪个特定任务。
这是通过使用特定的“tokens”来实现的,这些 tokens 作为数据输入的一部分,
用来指示模型当前处理的是哪种任务。
以 Whisper 为例,如果它被设计为处理多种任务(例如,同时进行语音识别和语言检测),
那么训练数据可能被格式化为包含特殊 tokens 的序列,
这些 tokens 明确指出每个数据样本的任务。
例如:
对于语音识别任务,输入数据可能以[语音识别]
开头的 token 作为提示,
紧接着是转换成 log-Mel Spectrogram 的原始语音数据。
对于语言识别任务,数据可能以[语言识别]
开头,后跟相同的语音数据表示。
Whisper 项目中的实际应用
虽然 Whisper 主要聚焦于将语音转换为文本,
但是将它想象成一个多任务学习的框架不难。
在这种情况下,训练数据将需要按照上述方式进行组织,
使得模型能够区分不同任务的数据并相应地调整其内部表示和输出。
多任务训练的好处包括:
知识共享:模型的不同部分可以学习到在多个任务中通用的表示和特征,从而提高整体性能。
效率提高:通过同时训练多个任务,可以节约时间和计算资源,相比单独训练每个任务。
虽然此说明提供了一个理论框架,目前 Whisper 主要专注于语音到文本的转换,
但未来的版本或者其他类似项目可能会探索多任务学习的潜力,
从而扩展其应用范围和提高效率。
一个Transformer序列到序列模型被训练用于各种语音处理任务,
包括多语言语音识别、语音翻译、口语识别和声活动检测。
这些任务被联合表示为一系列由解码器预测的标记,
使得单个模型能够替代传统语音处理流程中的许多阶段。
多任务训练格式使用一组特殊的标记作为任务指示符或分类目标。
4 多任务训练格式拆解
想象一下,你在一个厨房里,你需要同时煮面条、煎鸡蛋和煮咖啡。
如果你一次只做一件事,那么要完成所有工作可能需要很长时间。
但是,如果你能学会同时处理这三件事,你就可以在更短的时间内做完。这就是所谓的“多任务处理”。
在Whisper项目中,这个比喻类似于我们让计算机学习如何同时处理多种语音相关的任务。
Whisper是一个被设计用来听懂人说的话并把它们写下来的程序。
现在,假设我们不仅想要它写下话,还想要它识别说话的人使用的是哪种语言,
甚至可能想要它能理解说话的人的感情状态。
为了让Whisper学会这些技能,我们需要采用一种特殊的训练方式,
即“多任务训练”。就像你需要知道何时该煮面条、煎鸡蛋、煮咖啡一样,
Whisper也需要知道它是在把语音转换成文本,还是在识别语言或感情。
我们是通过添加一些特别的标记或者符号(也就是“tokens”)来告诉它的。
这些标记好比是一个信号,告诉Whisper现在应该用它的哪一部分技能。
这样的训练方式可以让Whisper更加聪明,它不仅可以更好地完成每一项任务,
还可以学习到一些在所有任务中都有用的东西。
最终,它能更快更好地帮助我们处理语音,
就像一个经验丰富的厨师能够轻松地同时处理多道菜一样。
安装步骤
好的,让我们来梳理一下上面提供的安装说明,并假设你是一名开发人员。以下是你需要按照顺序执行的步骤,以确保Whisper能够正确安装在你的系统上。
安装环境准备
确认Python版本:确保你的系统中安装了 Python 3.9.9。
确认PyTorch版本:你需要安装或者确认已安装 PyTorch 1.10.1 或其最新版本。你可以访问 PyTorch 官网来获取安装指南。
*安装rust : *
如果在安装过程中遇到tiktoken
的问题,可能需要安装 Rust。
可以根据 Rust 官方的开始页面进行安装,并且可能需要将 Rust 的路径添加到系统的 PATH 环境变量中,例如:
export PATH="$HOME/.cargo/bin:$PATH"
如果你发现了类似“No module named 'setuptools_rust'”的安装错误,你需要安装 setuptools_rust
:
pip install setuptools-rust
4.安装FFmpeg 。这是对不同操作系统的安装说明:
Ubuntu或Debian:sudo apt update && sudo apt install ffmpeg
Arch Linux:
sudo pacman -S ffmpeg
5 .安装 Whisper
安装Whisper:通过pip安装Whisper的最新版本,使用以下命令:pip install -U openai-whisper
或者,如果你想直接从GitHub安装最新的代码库,可以使用以下命令:
pip install git+https://github.com/openai/whisper.git
如果你需要更新Whisper,可以使用:
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
安装小结
概括来说,安装Whisper需要你确保 Python 和 PyTorch 环境的正确设置,
使用pip命令安装Whisper本身,确保系统中安装了 FFmpeg(用于处理音频文件),
以及可能需要的 Rust(对于一些底层编译处理)。
在安装过程中,遇到任何问题可以参考官方文档或者搜索相应的错误信息来找到解决方案。
支持的模型和语言
有五种模型,其中四种提供了英文版本,英文版本的模型提供了速度和准确性的权衡。
下面是可用模型的名称及其相对于大型模型的大致显存需求和推理速度;
实际速度可能取决于许多因素,包括可用的硬件。
纯英语应用程序的.en模型往往表现得更好,尤其是对于小型应用程序。
在模型。我们观察到,小的模型显存差异变得不那么显著。
在模型选择上的表现也因语言有差异。
下面是对比表格:
Whisper支持多达100多种语言的语音识别,在 tokenizer.py 文件中列举出来了所有支持的语言 ,其中包括但不限于以下语言:
英语(English) 汉语(Mandarin Chinese) 西班牙语(Spanish) 法语(French) 德语(German) 阿拉伯语(Arabic) 俄语(Russian) 葡萄牙语(Portuguese) 印度语(Hindi) 日语(Japanese) 土耳其语(Turkish) 意大利语(Italian) 韩语(Korean) 荷兰语(Dutch) 瑞典语(Swedish) 芬兰语(Finnish) 丹麦语(Danish) 波兰语(Polish) 匈牙利语(Hungarian) 希腊语(Greek) 诺尔斯克(Norwegian) 泰语(Thai) 等等名词定义:
WER: 单词错误率
CER: 字符错误率
Common Voice 15和Fleurs数据集是两个语音及语言数据集,它们是用来训练和评估语音识别技术如Whisper等模型的工具
下图显示了按语言划分的large-v3和large-v2模型的性能分解,使用了在Common Voice 15和Fleurs数据集上评估的WER(单词错误率)或CER(字符错误率)
这个图说明对主流语言的错误率比较低。 后面随着版本是升级这个错误率会进一步降低。
命令行使用
假设我是一名开发人员,基于Whisper的官方文档,
以下是如何使用命令行来操作Whisper模型进行语音转录和翻译的概括:
语音转录
选择模型:可以通过--model
参数来指定使用哪个预训练模型。
例如,--model medium
会选择中等大小的模型进行转录。
如果不指定模型,Whisper默认会使用小模型,这在转录英语时通常效果不错。
whisper audio.flac --model medium
指定语言:
若要转录非英语的音频,可以使用--language
参数指定语言代码。
例如,--language Japanese
指令会让模型知道输入文件是日语。
whisper japanese.wav --language Japanese
转录与翻译:
如果你需要将非英语的语音内容转录并翻译成英语,可以通过添加--task translate
参数来实现。
whisper japanese.wav --language Japanese --task translate
支持的文件格式:
Whisper支持多种音频文件格式,包括.flac
、.mp3
和.wav
等。
在命令行中,直接指定文件名和格式即可。
whisper audio.flac
whisper audio.mp3
whisper audio.wav --model medium
获取帮助:
若需要查看Whisper支持的所有参数选项,可以使用whisper --help
命令。
whisper --help
通过上述概括,
可以理解Whisper提供了灵活的命令行界面来转录和翻译语音文件。
作为开发人员,可以根据实际需要选择合适的模型、指定语言,甚至执行翻译任务,
以适应不同的应用场景和需求。
此外,通过查阅帮助文档可以更加深入地了解不同的命令行选项,从而充分利用Whisper模型的功能。
python使用方式
简单使用:
import whisper
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])
精细化使用:
import whisper
model = whisper.load_model("base")
# load audio and pad/trim it to fit 30 seconds
audio = whisper.load_audio("audio.mp3")
audio = whisper.pad_or_trim(audio)
# make log-Mel spectrogram and move to the same device as the model
mel = whisper.log_mel_spectrogram(audio).to(model.device)
# detect the spoken language
_, probs = model.detect_language(mel)
print(f"Detected language: {max(probs, key=probs.get)}")
# decode the audio
options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)
# print the recognized text
print(result.text)
使用python有优势,就是它的主框架是python写的,
部分场景可以直接调整python代码,修改主框架。
更多使用的例子
可以在 https://github.com/openai/whisper/discussions/categories/show-and-tell 页面找到,
开源世界非常神奇 ,例如web演示,与其他工具的集成,不同平台的端口等。
Whisper的代码和模型权重在MIT许可下发布。详见LICENSE。
whisper跟业务结合实践
体系结构
电话录音转换为文本对话信息。
whisper接口封装
处理脚本:
#!/bin/bash
# 目录路径
input_dir="/sftp/openai/inwav"
output_dir="/sftp/openai/outjson"
log_file="/sftp/openai/logs/log.txt"
# 并发度
concurrency=1
# HTTP请求的URL
request_url="https://xx-qa.cn/api/phone/crm6/trans/callback?fileName="
request_url2="https://xx.cn/api/phone/crm6/trans/callback?fileName="
# 处理单个文件的函数
process_file() {
file_path="$1"
file_name=$(basename -- "$file_path")
output_file="${output_dir}/${file_name%.*}.json"
echo "$file_path , $file_name , $output_file"
# 如果输出文件已存在,则跳过处理
if [ -f "$output_file" ]; then
echo "Output for $file_name already exists, skipping..." | tee -a "$log_file"
rm "$file_path"
# 将处理结果通过HTTP GET请求发送
response=$(curl -s "$request_url$file_name")
echo "Server $request_url$file_name: response: $response" | tee -a "$log_file"
response2=$(curl -s "$request_url2$file_name")
echo "Server $request_url2$file_name response: $response2" | tee -a "$log_file"
return
fi
file_size=$(stat -c%s "$file_path")
model="small"
# 记录开始时间
start_time=$(date +%s)
# 执行whisper命令
whisper "$file_path" --model "$model" --output_format json --output_dir "$output_dir"
# 记录结束时间
end_time=$(date +%s)
# 计算耗时
duration=$((end_time - start_time))
log_message="Processed $file_name using $model model in $duration seconds."
echo "$log_message" | tee -a "$log_file"
echo "---------------------------------------" | tee -a "$log_file"
# 将处理结果通过HTTP GET请求发送
response=$(curl -s "$request_url$file_name")
echo "Server $request_url$file_name: response: $response" | tee -a "$log_file"
response2=$(curl -s "$request_url2$file_name")
echo "Server $request_url2$file_name response: $response2" | tee -a "$log_file"
# 删除原wav文件
rm "$file_path"
# 日志分隔符
echo "---------------------------------------" | tee -a "$log_file"
}
export -f process_file
export input_dir
export output_dir
export log_file
export request_url
export request_url2
while true; do
# 查找所有wav文件
files=($(find "$input_dir" -name "*.wav"))
# 如果目录下没有wav文件,则休眠30秒
if [ ${#files[@]} -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - No wav files to process. Sleeping for 30 seconds..." >> "$log_file"
sleep 30
else
# 顺序处理文件
for next_file in "${files[@]}"; do
process_file "$next_file"
done
fi
done
目前输入是通过sftp的方式上传到whisperx服务器,通道可能不太稳定。
后面按照体系结构设计的流程去调整;即监听redis消息,可以把语言带过来,进一步提高效率。
然后,结果的输出,暂时没有对接S3, 也是通过SFTP返回结果的;
数据模型设计
要设计一个电话记录转换文本的数据表模型,我们需要考虑几个关键要素:
录音文件信息:保存录音文件的基本信息,如文件名、文件路径、录音时长等。
转录状态:追踪录音到文本转换的状态(例如:待转录、进行中、已完成、失败)。
转录结果:保存转录文本的结果以及可能的错误信息。
通知状态:记录是否已经通知Java程序以及接口调用的相关信息。
时间戳:记录每个步骤的时间,如创建时间、转录开始时间、转录结束时间、通知时间。
基于以上要素,我们可以设计一个简单的数据表模型:
CREATE TABLE call_transtxt (
id INT AUTO_INCREMENT PRIMARY KEY,
audio_filename VARCHAR(255) NOT NULL,
audio_file_path VARCHAR(255) NOT NULL,
audio_duration INT DEFAULT NULL, -- 可以存储录音时长(单位:秒)
transcript_status ENUM('pending', 'in_progress', 'completed', 'failed') NOT NULL DEFAULT 'pending',
transcript_text TEXT, -- 存储转录结果
error_message VARCHAR(255), -- 存储转录失败的错误信息
notify_status ENUM('not_notified', 'notifying', 'notified', 'notification_failed') NOT NULL DEFAULT 'not_notified',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
transcription_started_at DATETIME,
transcription_completed_at DATETIME,
notified_at DATETIME,
INDEX idx_audio_filename (audio_filename),
INDEX idx_transcript_status (transcript_status),
INDEX idx_notify_status (notify_status)
);
在这个表中:
id
是主键,用于唯一标识每条记录。
audio_filename
和 audio_file_path
存储了录音文件的名称和路径。
audio_duration
是可选的,如果你有录音时长的具体信息,可以存储在这个字段中。
transcript_status
标记转录的状态,这对于追踪进度很有帮助。
transcript_text
存储实际的转录文本。
error_message
用于记录转录失败时的错误信息。
notify_status
用于跟踪是否已经向Java程序发出通知。
时间戳字段 created_at
、transcription_started_at
、transcription_completed_at
和 notified_at
分别用于记录不同阶段的时间点。
有了这张表,Java程序可以轮询数据库或通过其他机制(如数据库触发器等)来获取转录状态的更新,以及一旦转录完成或失败时的通知。
转录完成后,Java程序可以从 transcript_text
字段获取结果并记录到对应的表中。
如果需要处理更多的业务逻辑,比如用户信息、权限验证等,
可能还需要设计额外的表格来满足这些需求。
其它个业务关联的,需要在业务代码中进行。但是存储的信息已经够了。
业务集成效果
处理电话录音文件:
转换文本效果:
上图概要是跟AI结合之后的效果。
AI质检效果:
小结
一句话小结:AI时代结合Whisper可以低成本灵活的实现语音转文本。
通过业务场景问题引入了对语音转文本的需求,然后基于市面上的语音转文本产品做了选型,选定了之后做了详细的了解,并结合业务项目进行了实践。
AIGC思考
要做到实时的语音转文本,代价目前还是比较高的,看了各种云计算厂商的价格都比较高。
跑语音转文本需要GPU,即显存。目前在aws上售价大概 4000美金。
自建从长期来看是节约成本的。
AI发展的展望点
实时多语言转录与翻译整合: 在全球化不断加深的今天,未来的语音转文本技术将可能实现即时多语言转录和翻译, 不仅能够即时将话语转为文字,还能跨越语言障碍,实现实时翻译。这将大大促进国际交流与合作。 应用方向:国际会议实时转录、多语言媒体内容的自动生成等。 情绪与语境识别增强: 语音转文本技术未来可能会更加智能化,能够识别说话人的情绪和语境 转录结果将不仅包含文字,还能包含情感倾向、口吻强度等信息。这将使得转录文本更加丰富和准确。 应用方向:心理健康分析、客服情绪评估、自动化营销反馈分析等。 语音合成和虚拟个性化代表(VPA)的融合: 语音转文本技术与语音合成技术的结合将使虚拟个性化代表(如虚拟助手、角色)更加真实和个性化。用户可以创建具有特定声音和个性的VPAs来自动回应电话、邮件或其他通信形式。 应用方向:个性化的虚拟助手、角色扮演游戏、教育等。全球客服领域的发展设想
智能客服语音助手: 利用语音转文本技术,未来的客服系统将能够提供24/7的服务,通过智能语音助手即时响应客户的咨询,不仅能够理解自然语言,还能够根据语境提供个性化的建议和解决方案。 进一步发展:结合人工智能学习客户的历史交互数据,使服务更加个性化和高效。 多语言无缝服务体验: 随着语音转文本和翻译技术的进步,客服将能够无障碍地为全球客户提供服务,即便客户和客服人员使用不同的语言。这将大幅度提高全球客户满意度和品牌的国际形象。 进一步发展:客服系统能够自动判断客户的语言偏好,并提供相应语言的服务。 语音分析与情感智能: 未来的客服系统可能会应用更先进的语音分析技术,通过语音理解客户的情感状态,并据此调整回应策略。这种情感智能可以帮助企业更好地理解客户需求,提高解决问题的能力。 进一步发展:结合大数据分析,系统可以在全局层面上预测和回应客户需求趋势,实现主动服务。这些技术的发展将大幅提高客户体验,降低企业运营成本,并提升解决问题的效率,最终推动全球客服行业的转型和升级。
原创不易,关注诚可贵,转发价更高!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。