人机对话系统(2)
2019-07-21 本文已影响12人
zidea
人机对话
labels = []
docs_x = []
docs_y = []
for intent in data["intents"]:
for pattern in intent["patterns"]:
wrds = nltk.word_tokenize(pattern)
words.extend(wrds)
docs_x.append(wrds)
# print(docs_x)
docs_y.append(intent["tag"])
# print(docs_y)
if intent["tag"] not in labels:
labels.append(intent["tag"])
从输出来看我们构建两个集合分别 docs_x 用于存放每一句话,而 docs_y 用于按照相同顺序存放每一句话所对应的标签。
['Hi', 'How are you', 'Is anyone there?', 'Hello', 'Good day', 'Whats up', 'cya', 'see you later', 'Goodbye', 'I am Leaving', 'Have a Good day', 'how old', 'how old is tim', 'Goodbye', 'what is your age', 'age?', 'what is your name', 'what should I call you ', 'whats your name?', 'Id like to buy something', 'whats on the menu', 'what do you recommed?', 'could i get someting']
['greeting', 'greeting', 'greeting', 'greeting', 'greeting', 'greeting', 'goodbye', 'goodbye', 'goodbye', 'goodbye', 'goodbye', 'age', 'age', 'age', 'age', 'age', 'name', 'name', 'name', 'shop', 'shop', 'shop', 'shop']
words = [stemmer.stem(w.lower()) for w in words]
words = sorted(list(set(words)))
labels = sorted(labels)
- 首先 lower 将单词转换为小写,然后 stem 抽查单词的词干缺掉时态的复数形式获取单词的词干
- 然后就是 set 来去重复的单词
处理数据
要用 docs_x 来训练模型,现在数据格式还不符合要求,我们需要将字母转换为神经网络可以识别的序列数字。
[1,0,1,0,0,2]
将我们数据(单词)对应到上面集合,每一个单词对应以位置上数据,1 表示存在该单词,如果大于 1,数字表示单词出现次数,这里 2 表示出现 2 次。
out_empty = [0 for _ in range(len(labels))]
这里只是简单定义,我们的输出为标签也就是识别出类别,通常应该为数组
[1,0,0,0,0]
1 在这表示对应 tag 为 greeting ,也就是输出结果为 greeting 。
可以通过打印明确 docs_x 与 docs_y 一一对应该系,也就是一句话(输入)对应一个 tag(标签)输出,例如 'Is anyone there?' 对应着 ‘greeting'