人机对话
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’