1.认识陪聊机器人项目
陪聊机器人:人工智能典型应用之一。最早:1965年 ELIZA
分类:
■ 任务型聊天机器人
■ 闲聊型聊天机器人
方法:
■ 基于模板匹配的方法
■基于搜索的方法(如下图)
![](https://img-blog.csdnimg.cn/15fbdd47efff477989da3b486767ba89.png)
2. 中文分词及文本表示
jieba分词的三种模式
■精确模式:
result=jieba.cut('下雨天留客天留我不留',cut_all=False)
下雨天 留客 天留 我 不留
■全模式:
result= jieba.cut('下雨天留客天留我不留',cut_all=True)
下雨 下雨天 雨天 留客 天留 我 不留
■搜索引擎模式:
result=jieba.cut_for_search('下雨天留客天留我不留')
下雨 雨天 下雨天 留客 天留 我 不留
3.文本相似度计算
文本相似度:计算不同文本之间的距离
数学上的距离:欧式距离、 曼哈顿距离
文本距离:余弦相似度
4. 项目实现
准备工作:
获取语料库 -- 分词存储 -- 获取文本向量机相似度model
处理流程:
接受输入 -- 加载和解析模板文件 -- 寻找最大相似度的回答
5.实验代码
import jieba
import json
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
# 分词并保存结果到文件
def segment_and_save(input_file, output_file):
with open(input_file, 'r', encoding='utf-8') as f:
content = f.read()
words = list(jieba.cut(content))
with open(output_file, 'w', encoding='utf-8') as f:
f.write(' '.join(words))
# 训练Word2Vec模型
def train_word2vec(input_file):
model = Word2Vec(LineSentence(input_file), size=100, window=5, min_count=1, workers=4)
model.save("word2Vec.model")
return model
# 加载模板文件
def load_templates(template_file):
with open(template_file, 'r', encoding='utf-8') as f:
templates = json.load(f)
return templates
# 计算文本相似度
def calculate_similarity(text1, text2):
words1 = set(jieba.cut(text1))
words2 = set(jieba.cut(text2))
common_words = words1.intersection(words2)
return len(common_words) / (len(words1) * len(words2)) ** 0.5
# 聊天机器人模型输出
def chatbot(input_text, template_file):
# 分词并保存结果到文件
segment_and_save("corpus.txt", "fenci_result.txt")
# 训练Word2Vec模型
word2vec_model = train_word2vec("fenci_result.txt")
# 加载模板文件
templates = load_templates(template_file)
# 计算输入文本和模板文件中的“title”的相似度
max_similarity = -1
best_template = None
for template in templates:
title_similarity = calculate_similarity(input_text, template["title"])
if title_similarity > max_similarity:
max_similarity = title_similarity
best_template = template
# 根据相似度输出结果
if max_similarity > 0.5:
print(best_template["reply"])
else:
print("无法回答")
while True:
input_text = input("请输入文本(输入q退出):")
if input_text == 'q':
print("再见!")
break
template_file = "templet.txt"
chatbot(input_text, template_file)
6.实验结果
7.实验总结
本实验采用了jieba分词库、gensim库训练模型,重点是要计算输入的文本与模板文件templet.txt中的相似度,与文件中“title”相似度高的会有输出,回答是文件中的“reply”,反之则无法回答。简单实现聊天机器人的功能。