需要有关RNN模型的建议来格式化字符串

时间:2017-07-17 09:33:40

标签: python machine-learning tensorflow deep-learning rnn

情况

我正在学习Tensorflow并进行第一次尝试(在完成MINST教程之后)我想创建一个模型(可能是RNN)来做一些基本的字符串格式化:

我知道在下面的案例中我可能不需要像深度学习这样复杂的东西,但这仅仅是为了训练自己。

我有一组假设的“干净地址”字符串,我想在其中提取实际的干净地址。

她是我想要的转型:

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

我需要更多示例:这里是指向spreadsheet的链接,包含200个元素(计划将其扩展为1000 - 5000个元素)

正如您所看到的,有很多可识别的模式:

  • 请勿使用BP字和
  • 之后的2位或4位数字
  • 请勿ZIZAZone d'activiter ...
  • 地址通常类似于00 (Rue|Voie|Avenue|...) nameOfStreet
  • 等...

我认为如何继续

我正在尝试获取输入字符串,它是输入字符串的一部分。它应根据上述模式删除单词。

我认为我会使用RNN类型的图形,因为它应该检测诸如“有一个”BP“所以我没有接受这个词,如果下一个输入是2或4位字符串我“我也没带那些”,我认为应该有某种记忆。

这完全取决于我想输入数据的方式。我想我有两三种方法可以做到这一点:

  • 输入单个单词(按空格分割)
  • 输入整个字符串(整个地址)
  • 输入一个字符串,然后将其拆分到更深的层上?

事情是:

  • 如果我输入单个单词,我该如何标记字符串分隔?

  • 如果我输入整个字符串,那么看起来有点像丢失了 系统只会取出或删除单个单词。

  • 第三个选项(混合两个)是否有意义?

是否可以批量培训并使用“批处理部件”输入多个单词,每批代表和地址。

另外,我想知道在我的系统中,节点的权重是全部为0还是1(因为它应该只能取或删除单个单词),或者它是否是中间值,如保持字。

回顾过程

  1. 创建所有单词的词典
  2. 将我的琴弦打到相同的长度?
  3. 将我的所有字符串(或字?)转换为1D数组
  4. 定义图表
  5. 按小批量输入字符串(或字?)
  6. 测试和显示精度(输出字符串是预期输出的精确匹配还是预期输出和输出之间的差异百分比更有意思?)
  7. 保存图表
  8. 用它来格式化我的字符串
  9. 非常感谢您阅读所有内容,感谢任何帮助。

    特别是关于我正在前进的总体方向,以及将我的数据输入图表的方式。

1 个答案:

答案 0 :(得分:2)

有两种方法可以立即解决这个问题:

  • 序列标记 - 使用1或0标记输入中的每个单词,指示是否应保留该单词。
  • seq2seq model - 让RNN读取整个输入,然后逐字或逐字逐句地产生输出。

如果您刚刚开始,我会推荐序列标记模型。如果你想这样做,我将遵循的步骤是:

  1. 将输入表示为一热矢量序列(每个维度代表一个单词)
  2. 将标签表示为1和0的序列(表示是否应保留每个单词)
  3. 使用rnn读取每个序列
  4. 使用双节点图层为每个单词
  5. 输出1级和0级的分数
  6. 使用优化程序最小化预测标签与实际标签之间的差异
  7. 有关如何在张量流中进行序列标记的示例,请查看: https://github.com/guillaumegenthial/sequence_tagging