我有成对的套装,例如
A = { L, M, N, P } = { <"Lll", 47, 0.004>, <"Mm", 60, 0.95>, <"Nnnn", 33, 0.2892>, <"P", 47, 0.0125> }
B = { l, m, n, o } = { <"l", 46, 0.004>, <"m", 0, 0.95>, <"nn", 33, 0.2892>, <"oOo", 33, 0.5773> }
...并且我想根据已知良好数据自动训练算法,以了解如何将集合成员链接为
{ <L, l>, <M, m>, <N, n>, <?, o>, <P, ?> }
...最多为任一集合的每个元素匹配一次。这些集合不必具有相同的大小并且不能保证它们的重叠 - 可能没有匹配,可能所有匹配,可能混合匹配和不匹配。但在许多情况下,预计会有人类可识别的匹配,计算机应该对其进行近似。
到目前为止尝试过
H(a, b, w1, w2, w3)
<a1, a2, a3>
对来自A
和<b1, b2, b3>
来自B
的一对元组进行评分,f1(a1, b1) * w1 + f2(a2, b2) * w2 + f3(a3, b3) * w3
其中f1
、f2
和f3
是手工制作的w1
,w2
、 和w3
是参数化权重。我按分数对所有对进行排序A × B
,并取两个成员都没有被更高分数对表示的对。我使用粗略的爬山来训练权重,以便生成的对映射为训练数据的预期。完美的加权配置具有一个阈值,该阈值将正确的t
配对分数与不正确的配对分数划定S_ab
。对于我大约 800 的训练数据,该算法通常会在数百或数千次迭代后找到完美的配置(A, B)
设置总计 2500 对 8-uples(而不是图示的 3-uples)。我还没有给它一个验证数据集来找出这种方法过度拟合的严重程度。
我对问题的集合方面的硬编码处理不满意。我只能想象用于评分对的机器学习技术,但随后的映射是手工制作的,可能不如将集合映射作为一个整体考虑的理想解决方案那么聪明。因为机器学习部分没有考虑整个集合,所以在我看来,它似乎错过了一些可以用来做出更好决策的信息。
我认为我上面的插图可以重构为首先将所有对评分A × B
为S_ab = < f1(a1, b1), f2(a2, b2), ..., fn(an, bn) >
(对于 n 元组),然后使用[n, ?, 1]
神经网络对每个 S_ab 的匹配和非匹配进行训练。这考虑了一对并输出匹配/不匹配,并且不考虑整个集合。
我的理解是神经网络不处理可变大小的输入,尽管也许我可以选择一个上限||A||
并||B||
找到一些中性编码来填充未使用的节点。并且输出可以是沿着轴索引A
沿着侧面和B
沿着底部的元素的匹配矩阵,比如说。但是,网络仍然会对元素的顺序敏感,不是吗?
所以 ...
有没有一种机器学习技术可以以这种方式可靠地将集合映射到集合?它以明显的方式与记录链接有关。这是一个约束满足问题,因为每个元素最多可以匹配一次。如果可以将人工对结果的校正作为反馈纳入改进的未来结果,那将是理想的。如果您有办法,请为我拼写出来,因为我不精通机器学习概念。