需要关于 RNN 模型的建议来格式化字符串
Need advice on RNN model to format Strings
情况
我目前正在学习 Tensorflow 并且第一次尝试(在 following/trying MINST 教程之后)我想创建一个模型(可能是 RNN)来进行一些基本的字符串格式化:
我知道对于下面的案例我可能不需要像深度学习那么复杂的东西,但它只是为了训练我自己。
我有一组假定的 "clean address" 字符串,我想在其中提取实际的干净地址。
她就是我想要得到的那种转变:
RUE DE MADAGASCAR --> RUE DE MADAGASCAR
ZI DE LA PLAINE
55 RUE DU 1ER SEPTEMBRE 1944 --> 55 RUE DU 1ER SEPTEMBRE 1944
ZONE INDUSTRIELLE RUE DE LA VALLEE B.P. 8 --> RUE DE LA VALLEE
BP 62 AVENUE BECQUEREL --> AVENUE BECQUEREL
291 VOIE ATLAS --> 291 VOIE ATLAS
12 RUE ARMAND BUSQUET ZONE INDUSTRIELLE --> 12 RUE ARMAND BUSQUET
DOSSIER MLOC 5 RUE AMABLE LOZAI --> 5 RUE AMABLE LOZAI
ZI CAEN CANAL -->
RUE DE L'EUROPE ZI PORTUAIRE --> RUE DE L'EUROPE
BP 5229 BOULEVARD HENRY BECQUEREL CAMPUS JULES HOROWITZ --> BOULEVARD HENRY BECQUEREL
GIE MONSIEUR GAUTIER BOULEVARD H. BECQUEREL BP 5027 --> BOULEVARD H. BECQUEREL
21 PLACE DE LA REPUBLIQUE --> 21 PLACE DE LA REPUBLIQUE
18 RUE DE LA GIRAFE --> 18 RUE DE LA GIRAFE
21 RUE DES GOUDRIERS --> 21 RUE DES GOUDRIERS
AVENUE STRASSBURGER --> AVENUE STRASSBURGER
7 RUE DE L'EGLISE --> 7 RUE DE L'EGLISE
1060 RUE LEON FOUCAULT ZI DE LA SPHERE --> 1060 RUE LEON FOUCAULT
我需要更多示例:这里是 link 到 spreadsheet 有 200 个元素(计划将其扩展到 1000 - 5000 个元素)
如您所见,有很多可识别的模式:
- 不要带
BP
个单词和后面的 2 或 4 个数字
- 不要选择
ZI
,ZA
或 Zone d'activiter
...
- 地址通常看起来像
00 (Rue|Voie|Avenue|...) nameOfStreet
- 等...
我想如何进行
我正在尝试获取作为输入字符串一部分的输出字符串。它将根据上述模式删除单词。
我想我会继续使用 RNN 类型的图表,因为它应该检测诸如 "there is a "BP" 这样的东西,所以我不接受这个词,如果下一个输入是 2 位或 4 位数字字符串我也不带”,我想应该有某种记忆吧。
这完全取决于我想要输入数据的方式。我想我有两种或三种方法可以做到这一点:
- 输入单个单词(被space分割)
- 输入整个字符串(整个地址)
- 输入一个字符串,然后在更深的层上拆分它?
事情是:
如果输入单个单词,如何标记字符串分隔?
如果我输入整个字符串,似乎有点像输了
系统只会采用或删除单个单词。
第三个选项(混合两个)是否有意义?
是否可以批量训练并使用"batch part"输入多个单词,每批代表和地址。
此外,我想知道在我的系统中节点的权重是否将全部为 0 和 1(因为它应该只能接受或删除单个单词)或者它是否将成为中间值,例如概率遵守诺言。
过程回顾
- 创建所有单词的字典
- 将我的字符串填充到相同的长度?
- 将我所有的字符串(或单词?)转换为一维数组
- 定义图形
- 小批量输入字符串(或单词?)
- 测试和显示准确性(输出字符串应该与预期输出完全匹配还是预期输出与输出之间的差异百分比更有趣?)
- 保存图形
- 用它来格式化我的字符串
非常感谢您通读所有内容,如有任何帮助,我们将不胜感激。
特别是关于我前进的总体方向,以及将我的数据输入图表的方式。
有两种方法可以立即浮现在脑海中:
- 序列标记 - 用 1 或 0 标记输入中的每个单词,指示是否应保留它。
- seq2seq 模型 - 让 RNN 读取整个输入,然后逐字或逐字符产生输出。
如果您刚开始,我会推荐序列标记模型。如果你想这样做,我会遵循的步骤是:
- 将输入表示为单热向量序列(每个维度代表一个词)
- 将标签表示为 1 和 0 的序列(表示是否应保留每个单词)
- 使用rnn读取每个序列
- 使用 2 节点层为每个单词输出 class 1 和 class 0 的分数
- 使用优化器来最小化预测标签和实际标签之间的差异
有关如何在 tensorflow 中进行序列标记的示例,请查看:
https://github.com/guillaumegenthial/sequence_tagging
情况
我目前正在学习 Tensorflow 并且第一次尝试(在 following/trying MINST 教程之后)我想创建一个模型(可能是 RNN)来进行一些基本的字符串格式化:
我知道对于下面的案例我可能不需要像深度学习那么复杂的东西,但它只是为了训练我自己。
我有一组假定的 "clean address" 字符串,我想在其中提取实际的干净地址。
她就是我想要得到的那种转变:
RUE DE MADAGASCAR --> RUE DE MADAGASCAR
ZI DE LA PLAINE
55 RUE DU 1ER SEPTEMBRE 1944 --> 55 RUE DU 1ER SEPTEMBRE 1944
ZONE INDUSTRIELLE RUE DE LA VALLEE B.P. 8 --> RUE DE LA VALLEE
BP 62 AVENUE BECQUEREL --> AVENUE BECQUEREL
291 VOIE ATLAS --> 291 VOIE ATLAS
12 RUE ARMAND BUSQUET ZONE INDUSTRIELLE --> 12 RUE ARMAND BUSQUET
DOSSIER MLOC 5 RUE AMABLE LOZAI --> 5 RUE AMABLE LOZAI
ZI CAEN CANAL -->
RUE DE L'EUROPE ZI PORTUAIRE --> RUE DE L'EUROPE
BP 5229 BOULEVARD HENRY BECQUEREL CAMPUS JULES HOROWITZ --> BOULEVARD HENRY BECQUEREL
GIE MONSIEUR GAUTIER BOULEVARD H. BECQUEREL BP 5027 --> BOULEVARD H. BECQUEREL
21 PLACE DE LA REPUBLIQUE --> 21 PLACE DE LA REPUBLIQUE
18 RUE DE LA GIRAFE --> 18 RUE DE LA GIRAFE
21 RUE DES GOUDRIERS --> 21 RUE DES GOUDRIERS
AVENUE STRASSBURGER --> AVENUE STRASSBURGER
7 RUE DE L'EGLISE --> 7 RUE DE L'EGLISE
1060 RUE LEON FOUCAULT ZI DE LA SPHERE --> 1060 RUE LEON FOUCAULT
我需要更多示例:这里是 link 到 spreadsheet 有 200 个元素(计划将其扩展到 1000 - 5000 个元素)
如您所见,有很多可识别的模式:
- 不要带
BP
个单词和后面的 2 或 4 个数字 - 不要选择
ZI
,ZA
或Zone d'activiter
... - 地址通常看起来像
00 (Rue|Voie|Avenue|...) nameOfStreet
- 等...
我想如何进行
我正在尝试获取作为输入字符串一部分的输出字符串。它将根据上述模式删除单词。
我想我会继续使用 RNN 类型的图表,因为它应该检测诸如 "there is a "BP" 这样的东西,所以我不接受这个词,如果下一个输入是 2 位或 4 位数字字符串我也不带”,我想应该有某种记忆吧。
这完全取决于我想要输入数据的方式。我想我有两种或三种方法可以做到这一点:
- 输入单个单词(被space分割)
- 输入整个字符串(整个地址)
- 输入一个字符串,然后在更深的层上拆分它?
事情是:
如果输入单个单词,如何标记字符串分隔?
如果我输入整个字符串,似乎有点像输了
系统只会采用或删除单个单词。第三个选项(混合两个)是否有意义?
是否可以批量训练并使用"batch part"输入多个单词,每批代表和地址。
此外,我想知道在我的系统中节点的权重是否将全部为 0 和 1(因为它应该只能接受或删除单个单词)或者它是否将成为中间值,例如概率遵守诺言。
过程回顾
- 创建所有单词的字典
- 将我的字符串填充到相同的长度?
- 将我所有的字符串(或单词?)转换为一维数组
- 定义图形
- 小批量输入字符串(或单词?)
- 测试和显示准确性(输出字符串应该与预期输出完全匹配还是预期输出与输出之间的差异百分比更有趣?)
- 保存图形
- 用它来格式化我的字符串
非常感谢您通读所有内容,如有任何帮助,我们将不胜感激。
特别是关于我前进的总体方向,以及将我的数据输入图表的方式。
有两种方法可以立即浮现在脑海中:
- 序列标记 - 用 1 或 0 标记输入中的每个单词,指示是否应保留它。
- seq2seq 模型 - 让 RNN 读取整个输入,然后逐字或逐字符产生输出。
如果您刚开始,我会推荐序列标记模型。如果你想这样做,我会遵循的步骤是:
- 将输入表示为单热向量序列(每个维度代表一个词)
- 将标签表示为 1 和 0 的序列(表示是否应保留每个单词)
- 使用rnn读取每个序列
- 使用 2 节点层为每个单词输出 class 1 和 class 0 的分数
- 使用优化器来最小化预测标签和实际标签之间的差异
有关如何在 tensorflow 中进行序列标记的示例,请查看: https://github.com/guillaumegenthial/sequence_tagging