人机对话
- 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'
来源: http://www.jianshu.com/p/d6d36a016b6f