0

状況

私は現在 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

もっと例が必要です : 200 個の要素を含むスプレッドシートへのリンクを次に示します (1000 ~ 5000 個の要素に拡張する予定です)。

ご覧のとおり、多くの認識可能なパターンがあります。

  • BP単語とそれに続く 2 桁または 4 桁の数字を取らないでください
  • 服用しないZIZAまたはZone d'activiter...
  • 住所は通常次のようになります00 (Rue|Voie|Avenue|...) nameOfStreet
  • 等...

私が考える進め方

入力文字列の一部である出力文字列を取得しようとしています。上記のパターンに基づいて単語を削除します。

RNN タイプのグラフを使用すると思います。「「BP」があるなどのことを検出する必要があるため、この単語を使用しません。次の入力が 2 桁または 4 桁の文字列である場合は、そうではありません。どちらかを取って」、何らかの記憶があるはずだと思います。

それはすべて、データを入力する方法によって異なります。私はそれを行う2つまたは3つの方法があると思います:

  • 単語を入力 (スペースで区切る)
  • 文字列全体を入力(アドレス全体)
  • 文字列を入力して、それをより深いレイヤーに分割しますか?

問題は次のとおりです。

  • 単一の単語を入力する場合、文字列の区切りをどのようにマークしますか?


  • 文字列全体を入力すると、システムが単一の単語のみを取得または削除するため、少し失われたように見えます.

  • 3 番目のオプション (2 つを混在させる) は理にかなっていますか?

バッチでトレーニングし、「バッチ部分」を使用して複数の単語を入力し、すべてのバッチの表現とアドレスを入力することは可能ですか?

また、私のシステムでは、ノードの重みがすべて 0 と 1 になるのでしょうか (単一の単語しか取得または削除できないため)、それとも単語を保持する確率のような中間値になるのでしょうか。

プロセスの要約

  1. すべての単語の辞書を作成する
  2. 文字列を同じ長さにパディングしますか?
  3. すべての文字列 (または単語?) を 1D 配列に変換します
  4. グラフを定義する
  5. 小さなバッチで文字列 (または単語?) を入力する
  6. テストと表示の精度 (出力文字列は、期待される出力と完全に一致するか、または期待される出力と出力の間の差の % であるか?)
  7. グラフを保存する
  8. それを使用して文字列をフォーマットします

すべてを読んでいただきありがとうございます。

特に、私が向かっている一般的な方向性と、データをグラフに入力する方法に関して。

4

1 に答える 1

2

すぐに頭に浮かぶ問題に取り組むには、次の 2 つの方法があります。

  • シーケンスのタグ付け - 入力内の各単語に、保持する必要があるかどうかを示す 1 または 0 のラベルを付けます。
  • seq2seq モデル - RNN に入力全体を読み取らせ、単語ごとまたは文字ごとに出力を生成させます。

始めたばかりの場合は、シーケンスのタグ付けモデルをお勧めします。これを行いたい場合、私が従う手順は次のとおりです。

  1. 入力を one-hot ベクトルのシーケンスとして表します (各次元は単語を表します)
  2. ラベルを 1 と 0 のシーケンスとして表します (各単語を保持するかどうかを示します)
  3. rnn を使用して各シーケンスを読み取ります
  4. 2 ノード レイヤーを使用して、単語ごとにクラス 1 とクラス 0 のスコアを出力する
  5. オプティマイザーを使用して、予測されたラベルと実際のラベルの差を最小限に抑えます

テンソルフローでシーケンスのタグ付けを行う方法の例については、 https ://github.com/guillaumegenthial/sequence_tagging をご覧ください。

于 2017-07-17T13:26:40.100 に答える