我找不到任何有用的文献来使用深度学习来解决这个特定问题。大多数方法似乎都依赖于非机器学习方法,例如字符串相似度和列文斯坦距离。一个合理的基于深度学习的解决这个问题的方法是递归神经网络。LSTM(长期短期记忆)或 GRU(门控循环单元)将是理想的。这个想法是让 RNN 具有内部状态并尊重输入的输入顺序。
与文本分类、情感分析或序列生成不同,此处文本的首选编码将是字符级别而不是单词级别。
例如
Christian Douglas,Chris,1
Jhon Stevens,Charlie,0
会成为
[C,h,r,i,s,t,i,a,n, ,D,o,u,g,l,a,s, ,C,h,r,i,s] --> [1]
[J,h,o,n, ,S,t,e,v,e,n,s, ,C,h,a,r,l,i,e] --> [0]
要匹配的两个字符串连接成一个序列。这里的直觉是,RNN 将逐个字符地处理序列并学习(读取更新权重)末尾的字符与它之前在同一序列中看到的具有相似的模式,以推断它应该是 1 而不是0。
[1/0] 的向量是目标变量。
标准的 RNN 预处理步骤照常适用——我们将在开头填充序列,使它们的长度都相同(比如 50),字符将被编码为数字而不是字符串等。
由于这里的字典很小(26 个字母 + 空格 + 填充),网络架构可以是一个相当简单的架构。单个嵌入层 + 循环层就足够了。
以这种方式构建问题允许我们使用普通 RNN 或开箱即用的 LSTM/GRU,而不是创建一个自定义架构,该架构将两个单独的字符串作为每个数据点的输入并抛出一个数字。
您可以试一试这种方法,看看是否能够令人满意地击败基线模型。
字符级 RNN 的好读物是Andrej Karpathy 的博客和代码。他试图解决的问题是不同的,代码是纯 numpy 的,但它仍然很好地捕捉到了这个想法。