【发布时间】:2017-09-04 01:55:44
【问题描述】:
我正在开发一个聊天机器人程序来练习一般的 python 和一些 sklearn 机器学习算法。
现在我只是给聊天机器人随机句子并告诉它句子是否正确。每个单词都为其自身、其类型(语法)和语气(积极、消极、中性、粗俗等)分配了关键。
在给定的每个输入之后,句子被保存到一个 csv 文件中。 每个句子都有三个特征:key、key_type、key_mood 和一个标签:0(不正确)和 1(正确)。
起初,对于每个键,我都有一个每个单词对应键的列表。我认为这是一个好主意,因为它会跟踪单词的插入顺序。
不幸的是,当保存到 csv 时,列表被转换为包含列表的字符串,我不知道如何从字符串中提取列表(即使我知道如何,我也不知道你是否可以提供一个模型的列表数组,我的猜测可能不是)。
所以我想出了这个:我可以有一个代表这个数字列表的数字,而不是一个功能列表:
for word in self.words:
for key in word.word_dict():
sentence_dict[key] += int(float(word.word_dict()[key]))* 10 **(3*n)
n+=1
例如,“你好吗”的“key”键是 8007006,8 是“How”的单词键,7 个“are”和 6 个“you”。 同样,这句话的“key_type”为12002001,“疑问词”为12,“动词”为2,“代词”为1
这很好用,模型实际上可以读取特征和 cross_validate。 不幸的是,由于这些键的制作方式,我最终在同一个数据集中得到了大量的数字和相当小的数字,我认为它会抛出模型。
我尝试使用 np.sigmoid 进行标准化,但这只是为我的大多数键输出 1(它们太大了)。
所以我的问题是:有没有办法以不破坏其目的的方式规范这些键?如果没有,您是否对如何将这些键提供给模型而不丢失添加单个单词键的顺序有更好的想法?
还是需要神经网络的一种或几种情况?
【问题讨论】:
标签: python machine-learning normalization