小明与企业客服升级的故事
1 场景背景:让客户满意的挑战
小明近期在一家电商企业实习,发现公司常接到顾客各种各样的问题:
- “你们的最新产品有什么功能?”
- “能否介绍一下优惠活动?”
- “是否支持7天无理由退换?”
- “我怎么查物流?”
人工客服应接不暇,于是小明提出打造一款 “自动客服机器人” 的想法,专门回答常见问题或提供产品介绍。除此之外,市场部门也希望能自动生成一段营销文案来吸引顾客。小明决定用深度学习中的RNN文本生成来为企业客服带来更多“创意回复”的可能性。
2 目标与原理:RNN帮助“写文案、答问题”
-
目标
- 降低客服压力:自动回复部分重复性问题;
- 生成简易文案:基于用户关键字自动组成一句或几句介绍文本。
-
为什么使用RNN来做文本生成
- 序列数据处理:客服对话、产品描述都是自然语言文本;
- 灵活回答:既能在已有数据基础上“学习”企业话术,又能在生成阶段适当拼接新词汇,提供多样化回复;
- 融入对话场景:后续也可扩展为更高级的Seq2Seq或Transformer结构。
3 从数据到部署:完整代码示例
下面以两个脚本 train.py
和 app.py
来演示:
train.py
:包含极简示例数据、数据处理、RNN 模型构建与训练,并保存为 H5 格式(Keras 3 兼容)。app.py
:使用 Flask 加载已训练的 H5 模型,实现一个简易的网页界面,让用户输入开头文字,系统自动继续生成文本。
提示:以下示例仅作演示用,数据量非常少,生成效果可能“驴唇不对马嘴”。在商业场景需准备更多语料、做更强大模型或使用检索式问答等。
3.1 项目目录结构
在名为 rnn_text_generation_demo
的文件夹中放置以下文件:
rnn_text_generation_demo/
├── train.py # 训练脚本
├── app.py # Flask 部署脚本
└── saved_model/ # 保存模型用,脚本运行后自动生成
3.2 训练脚本:train.py
请将下面代码复制到 train.py
文件里。它会执行以下步骤:
- 准备一小段原始文本数据(客服与产品描述示例)。
- 清洗、分词,构建词典。
- 组织 (input, target) 序列进行训练。
- 构建并训练一个简单的 LSTM 模型。
- 以 H5 格式 保存模型 + 词典信息(为 Keras 3 兼容重点)。
"""
train.py
示例:使用 tf.keras + RNN(LSTM) 做简单的文本生成训练,并以H5方式保存模型,兼容Keras 3。
"""
import tensorflow as tf
import re
import os
# ============= 1. 示例数据(极简) =============
raw_text_corpus = [
"我们的新款手机屏幕是6.5英寸,拥有1080P高清分辨率。",
"这款耳机支持降噪功能,续航时间可达24小时。",
"满500减50的活动正在进行中,抓紧抢购哦!",
"这款运动鞋防水、防滑,适合户外运动。",
"物流信息可通过订单号在官网查询。",
"我们的客服团队将竭诚为您服务。",
"欢迎咨询产品详情或优惠活动。"
]
# ============= 2. 数据清洗与分词 =============
def simple_clean_text(text):
# 仅作基本示例:去除特殊字符,只保留中英文、数字和常见标点
text = re.sub(r"[^a-zA-Z0-9\u4e00-\u9fa5。,!?:,\.\!\?\:]", "", text)
return text
def simple_tokenize(text):
"""
极简分词示例:把中文当作逐字拆分,英文数字以字符拆分。
真实项目请使用jieba或更成熟分词工具。
"""
text = text.strip()
tokens = []
for char in text:
if char.strip():
tokens.append(char)
return tokens
cleaned_sentences = []
for line in raw_text_corpus:
line = simple_clean_text(line)
tokens = simple_tokenize(line)
cleaned_sentences.append(tokens)
# ============= 3. 建立词典 =============
all_tokens = []
for tokens in cleaned_sentences: