这是开始一个办法:
- 清洁您的输入文本(除去特殊标记等)
- 使用正克为特征(可以只是1克开始)。
- 将用户的反馈视为“优先与否”作为二进制标签。
- 学习二元分类器(无论哪种模型都很好,朴素贝叶斯,逻辑回归)。
1)关键字识别。逆向频率分析似乎是这里的一种方式。确定与其他所有人相比,在给定文本中经常按比例出现的单词。这虽然有一些缺点,但例如很常见的关键字可能会被忽略。
您可以在您制作的第一个模型中跳过此部分。把这个句子当作一堆单词(n-grams)来简化第一个工作模型。如果你愿意,你可以稍后添加它作为特征权重。
2)如何准备数据集为数字。我可以将关键字映射到输入神经元,然后根据它们的相对频率调整值,但这限制了模型,并且很难添加新的关键字。如果我们想扩展到超过几十个关键词
您可以只使用一个字典映射正克整数ID也会很快成为竞争力的价格昂贵。每个训练例如,特征是稀疏的,因此有一个像下面的训练例子:
34, 68, 79293, 23232 -> 0 (negative label)
340, 608, 3, 232 -> 1 (positive label)
Imagine you have a dictionary (or vocabulary) mapping:
3: foo
34: movie
68: in-stock
232: bar
340: barz
...
使用神经网络,你将需要有一个嵌入层通过聚合把稀疏特征成致密的特点(例如,平均)所有特征的嵌入向量。 使用上面同样的例子,假设我们只需要使用4维嵌入:
34 -> [0.1, 0.2, -0.3, 0]
68 -> [0, 0.1, -0.1, 0.2]
79293 -> [0.3, 0.0, 0.12, 0]
23232 -> [0.4, 0.0, 0.0, 0]
------------------------------- sum
sum -> [0.8, 0.3, -0.28, 0.2]
------------------------------- L1-normalize
l1 -> [0.8, 0.3, -0.28, 0.2] ./ (0.8 + 0.3 + 0.28 + 0.2)
-> [0.51,0.19,-0.18,0.13]
在预测时间,你将需要使用字典和特征提取(清理/ n元生成同样的方式/将n-gram映射到ID),以便您的模型了解输入。
关于单词的优选组合,您是否考虑过使用HMM的变体?我在这个话题上的经验表明,由于组合的性质,这是您的案例。如果你有兴趣让我知道,虽然网络搜索将产生丰富的资源,用于与HMMs解决语言相关的任务 – rpd