SenseVoice-Small ONNX实际作品:政务12345热线录音→诉求分类+关键词云图

张开发
2026/4/16 17:56:12 15 分钟阅读

分享文章

SenseVoice-Small ONNX实际作品:政务12345热线录音→诉求分类+关键词云图
SenseVoice-Small ONNX实际作品政务12345热线录音→诉求分类关键词云图1. 项目背景与痛点你有没有想过每天成千上万通打给政务热线的电话背后都藏着什么信息是市民对交通拥堵的抱怨是对老旧小区改造的期盼还是对窗口服务态度的投诉这些海量的语音数据如果只靠人工去听、去记、去分类不仅效率低下还容易遗漏关键信息。传统的政务热线数据分析往往面临几个头疼的问题信息处理慢录音转文字依赖人工或昂贵的商用服务周期长成本高。诉求归类难面对五花八门的市民诉求人工分类标准不一难以形成统一的分析视角。洞察挖掘浅文字记录堆积如山但哪些是高频问题哪些是新出现的痛点很难快速、直观地把握。今天我们就用一个实际项目来展示如何用轻量化的AI工具自动化地解决这些问题。我们将利用SenseVoice-Small ONNX这个本地语音识别工具把政务热线录音变成结构化的文本再通过简单的文本分析自动生成诉求分类和可视化关键词云图让海量语音数据背后的民意“一目了然”。2. 工具核心SenseVoice-Small ONNX 语音识别工欲善其事必先利其器。整个项目的起点是将录音转化为准确、可读的文本。我们选择了SenseVoice-Small ONNX作为核心识别引擎主要是看中了它的几个独特优势完美匹配政务场景的需求。2.1 为什么选择它政务数据处理尤其是语音数据对工具的要求非常特殊数据安全与隐私市民通话录音包含敏感信息必须本地处理杜绝数据外传风险。硬件友好性政务部门的IT设备配置往往不高需要工具能在普通电脑上流畅运行。处理准确性识别结果要带标点、数字要规范比如“一百二十”要转成“120”方便后续分析。操作简便业务人员可能不具备深度学习背景工具需要足够“傻瓜式”。SenseVoice-Small ONNX 正是为此而生纯本地运行所有模型主识别模型和标点模型最终都运行在你的电脑上录音数据不出门。轻量化设计采用了Int8量化技术将模型“瘦身”使得内存和显存占用大幅降低相比原版可减少约75%在只有CPU的办公电脑上也能快速完成识别。智能文本处理内置自动语种识别能处理中文、英文甚至方言混合、逆文本正则化自动转换数字、单位和标点恢复功能出来的文本直接就是规整的句子省去大量后期整理工作。开箱即用我们为其搭配了一个基于Streamlit的网页界面你只需要上传音频文件点击按钮结果就出来了无需接触任何代码。2.2 快速上手体验它的使用简单到不可思议启动工具后打开浏览器访问本地网址。在网页上点击上传按钮选择你的热线录音文件支持mp3, wav, m4a等多种格式。点击“开始识别”按钮。等待片刻完整的带标点识别文本就会显示在页面上可以直接复制。这个过程完全在本地完成第一次使用时标点模型需要从国内镜像站下载缓存之后离线也能用。这为我们在内网环境或保密要求高的场景下部署提供了可能。3. 实战项目从录音到洞察的全流程现在我们假设手头有一批某市“12345政务服务便民热线”某一天的通话录音目标是快速分析出当天的热点诉求。下面是完整的操作流程。3.1 第一步语音转文本批量处理单条录音我们可以用上面的网页工具手动处理。但对于批量数据我们需要写一个简单的Python脚本来自动化。核心就是调用我们已经封装好的识别函数。import os from pathlib import Path # 假设识别核心函数已封装在 sensevoice_recognizer 模块中 from sensevoice_recognizer import transcribe_audio # 设置热线录音文件夹路径 audio_dir Path(./data/12345_recordings/) # 设置输出文本保存路径 output_dir Path(./output/transcripts/) output_dir.mkdir(parentsTrue, exist_okTrue) # 获取所有音频文件 audio_files list(audio_dir.glob(*.mp3)) list(audio_dir.glob(*.wav)) transcripts [] for audio_path in audio_files: print(f正在处理: {audio_path.name}) try: # 调用本地识别函数 text_result transcribe_audio(str(audio_path)) # 保存到文件 output_file output_dir / f{audio_path.stem}.txt with open(output_file, w, encodingutf-8) as f: f.write(text_result) transcripts.append({file: audio_path.name, text: text_result}) print(f 完成已保存至 {output_file}) except Exception as e: print(f 处理失败: {e}) print(f批量处理完成共处理 {len(transcripts)} 个文件。)运行这个脚本output/transcripts/文件夹里就会得到一堆.txt文件每个文件内容都是一段规整的、带标点的通话文字记录。3.2 第二步诉求关键信息提取与分类拿到文本只是第一步。接下来我们要从这些文字中提取出市民的“核心诉求”。这里我们可以用一个轻量级但有效的组合方法关键词提取 规则分类。我们使用jieba库进行分词和关键词提取然后根据预设的关键词规则库将每条记录分到不同的诉求类别中。import jieba.analyse import pandas as pd # 定义一个简单的诉求分类规则库可根据实际数据扩充 complaint_categories { 市容环境: [垃圾, 清扫, 污水, 噪音, 违章建筑, 占道经营], 交通管理: [堵车, 停车位, 红绿灯, 违章, 公交, 地铁], 住房保障: [物业, 漏水, 房产证, 老旧小区改造, 租房], 教育文体: [学区, 入学, 学校, 补习班, 体育馆, 图书馆], 医疗卫生: [医院, 挂号, 医保, 疫苗, 医生, 药店], 劳动社保: [工资, 拖欠, 社保, 公积金, 劳动合同, 退休], } def categorize_complaint(text): 根据文本内容匹配到最可能的诉求类别。 # 提取文本中的关键词Top 10 keywords jieba.analyse.extract_tags(text, topK10, withWeightFalse) category_scores {} for category, key_phrases in complaint_categories.items(): score 0 for phrase in key_phrases: if phrase in text: # 简单使用文本包含匹配 score 2 for kw in keywords: if phrase in kw or kw in phrase: score 1 if score 0: category_scores[category] score # 返回得分最高的类别如果都没有则归为“其他” if category_scores: return max(category_scores, keycategory_scores.get) else: return 其他 # 对之前识别出的所有文本进行分类 classified_data [] for item in transcripts: text item[text] category categorize_complaint(text) classified_data.append({ 文件: item[file], 识别文本: text[:100] ..., # 预览前100字 诉求分类: category }) # 转换为DataFrame方便查看和分析 df_classified pd.DataFrame(classified_data) print(df_classified.head()) print(f\n诉求分类统计) print(df_classified[诉求分类].value_counts())运行后我们会得到一个表格里面每条录音都有了明确的分类标签比如“市容环境”、“交通管理”等并且能看到每个类别有多少条记录。3.3 第三步生成关键词云图分类让我们知道了问题的类型分布但还不够直观。我们还想知道在每个类别里市民具体都在说什么哪些词被提得最多这时候词云图Word Cloud就派上用场了。我们使用wordcloud和matplotlib库来为每个诉求类别生成专属的词云。from wordcloud import WordCloud import matplotlib.pyplot as plt from collections import defaultdict # 准备每个类别的全部文本 category_texts defaultdict(str) for item in transcripts: text item[text] category categorize_complaint(text) category_texts[category] text # 为每个类别生成词云 for category, full_text in category_texts.items(): if len(full_text.strip()) 10: # 文本太少的类别跳过 continue print(f正在生成 {category} 类别的词云...) # 创建词云对象设置字体确保系统有中文字体如‘SimHei.ttf’ wc WordCloud( font_pathSimHei.ttf, # 请替换为你的中文字体路径 width800, height600, background_colorwhite, max_words50 ) # 生成词云 wordcloud wc.generate(full_text) # 绘制并保存 plt.figure(figsize(10, 8)) plt.imshow(wordcloud, interpolationbilinear) plt.axis(off) plt.title(f诉求类别{category} - 高频关键词云图) # 保存图片 plt.savefig(f./output/wordcloud_{category}.png, dpi300, bbox_inchestight) plt.close() print(所有词云图已生成至 ./output/ 目录。)运行这段代码你会在输出文件夹里得到一系列PNG图片文件名类似wordcloud_交通管理.png。打开一看每个图里字号最大的词就是该类别下市民反映最频繁的问题。4. 成果展示与价值解读经过以上三步我们从一堆原始的录音文件得到了结构化的、可视化的分析成果。成果一结构化数据表我们得到了一个包含“文件名”、“识别文本摘要”、“诉求分类”的表格。这个表格可以直接导入到Excel或数据库进行更深入的统计分析比如计算各类诉求的占比、变化趋势等。成果二分类统计脚本运行时会直接输出类似下面的统计结果诉求分类统计 交通管理 45 市容环境 38 住房保障 22 教育文体 15 劳动社保 12 医疗卫生 8 其他 10一目了然当天市民最关心的是“交通管理”和“市容环境”问题。成果三可视化关键词云图这是最直观的成果。例如“交通管理”的词云里“停车难”、“堵车”、“红绿灯损坏”等词汇会非常突出“市容环境”的词云里“垃圾堆积”、“噪音扰民”、“污水外溢”等可能是高频词。这些成果的价值在哪里效率提升将数小时甚至数天的人工听录、归纳工作缩短到几分钟的自动化处理。洞察精准通过关键词云决策者能瞬间抓住当前最突出、最集中的民生痛点而不是被淹没在零散的报告里。响应前置通过对历史数据的持续分析可以预测某些问题的爆发趋势比如雨季前的积水投诉增多从而提前部署资源实现从“被动接诉”到“主动治理”的转变。流程优化清晰的分类和关键词统计可以帮助热线管理部门优化知识库、培训话务员提升首次问题解决率。5. 总结这个项目展示了一条清晰的技术路径利用SenseVoice-Small ONNX这样的轻量化、本地化AI工具将非结构化的语音数据低成本、高效率、安全地转化为结构化的文本数据。再结合经典的文本分析方法和可视化技术就能从海量语音中快速提炼出有价值的业务洞察。整个过程无需昂贵的云计算服务无需复杂的大数据平台在普通的办公电脑上就能跑起来。它降低了政务部门利用AI技术的门槛为热线数据的深度利用、智慧政务的建设提供了一个切实可行的“轻起点”方案。技术的意义在于解决实际问题。希望这个从“录音”到“云图”的完整案例能给你带来启发。无论是政务热线还是客户服务录音、会议纪要分析、课堂录音整理这套“轻量化识别自动化分析”的思路都有着广泛的应用空间。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章