在AIML中如何实现类似KUKI AI的用户重复词汇检测功能
聊天机器人实现类KUKI重复词汇检测的方案
1 文本预处理步骤
- 先对用户输入做标准化:全角字符转半角、去除多余空格/换行/无意义特殊符号,避免格式问题干扰检测
- 分词处理:中文场景用jieba分词,英文场景用NLTK分词工具,把连续文本拆为独立词汇单元,同时过滤掉“的、了、啊、哦”这类无实际语义的停用词,避免误判
2 核心检测规则
- 连续重复词汇检测:遍历分词后的词汇列表,设置连续重复阈值(默认≥2次),如果相邻的多个词汇完全一致,直接判定为重复。适用于用户输入“我我我”“哈哈哈哈”这类连续重复的场景
- 非连续高频词汇检测:统计所有非停用词的出现频次,设置频次阈值(默认≥3次),单个词汇累计出现次数达到阈值就判定为重复。适用于用户输入“今天吃饭今天逛街今天看电影”这类非连续重复的场景
- 句式重复检测:长文本场景下可以新增n-gram匹配规则,判断是否有连续3-5个词的序列重复出现,覆盖用户重复发送同一句话的场景
3 简易代码实现(Python)
import jieba from collections import Counter # 自定义停用词库,可根据业务场景扩充 STOP_WORDS = {"的", "了", "啊", "哦", "嗯", "吧", "呀", "呢"} # 连续重复触发阈值:连续出现2次相同词汇就触发检测 CONTINUOUS_REPEAT_THRESHOLD = 2 # 高频重复触发阈值:单个词汇累计出现3次就触发检测 FREQ_REPEAT_THRESHOLD = 3 def detect_repeat_words(user_input: str) -> tuple[bool, str]: # 步骤1:清洗输入文本 cleaned_input = "".join([c for c in user_input.strip() if c.isalnum() or c.isalpha()]) # 步骤2:分词并过滤停用词 word_list = [word for word in jieba.lcut(cleaned_input) if word not in STOP_WORDS] # 步骤3:检测连续重复 for i in range(len(word_list) - CONTINUOUS_REPEAT_THRESHOLD + 1): if len(set(word_list[i:i+CONTINUOUS_REPEAT_THRESHOLD])) == 1: return True, f"检测到重复词汇:{word_list[i]}" # 步骤4:检测非连续高频重复 word_counter = Counter(word_list) for word, count in word_counter.items(): if count >= FREQ_REPEAT_THRESHOLD: return True, f"检测到重复词汇:{word}" return False, "未检测到重复词汇"
4 交互响应配置
触发重复检测后,可以参考KUKI的交互风格配置对应回复,不需要过于生硬:
- 轻度重复(重复2-3次):回复类似“怎么一直在说同一个词呀,换个话题呗”
- 重度重复(重复≥4次):回复类似“别复读啦,再说一样的内容我可要不理你了哦”
内容的提问来源于stack exchange,提问作者Paulo Evan
相关产品推荐
相关产品推荐

