文字列を解析するための機械学習技術?


30

私はたくさんのアドレス文字列を持っています:

1600 Pennsylvania Ave, Washington, DC 20500 USA

それらをコンポーネントに解析したい:

street: 1600 Pennsylvania Ave
city: Washington
province: DC
postcode: 20500
country: USA

しかし、もちろんデータは汚れています。さまざまな方法で書かれたさまざまな言語の多くの国から来たもので、つづりの間違い、欠品、余分なジャンクなどが含まれています。

現時点では、ファジーガゼッターマッチングと組み合わせたルールを使用するのがアプローチですが、機械学習の手法を探求したいと考えています。教師あり学習用のトレーニングデータにラベルを付けました。問題は、これはどのような機械学習の問題ですか?クラスタリング、分類、回帰のようには見えません。

私が思いつく最も近い方法は、各トークンを分類することですが、実際には、それらをすべて同時に分類し、「最大で1つの国が存在する必要があります」などの制約を満たします。本当に文字列をトークン化する方法はたくさんあり、それぞれを試して最高のものを選択したいのですが...統計解析と呼ばれるものがあることは知っていますが、それについては何も知りません。

それで、アドレスを解析するためにどんな機械学習技術を探求できますか?


私はあなたの答えを投稿する高レベルの問題の専門家ではありませんが、機械学習の最初のステップは有益な機能を構築し、その構造に合った方法を選択することだと思います。多くの構造があります。alnum対非alnum文字、数値対アルファトークン、 '、'スプリット間のトークンカウント、数値トークン長。たとえば、 '、'で分割し、各分割でトークンの数をカウントします(番地と市/州と地域固有の情報)。数値トークンの計算strlen(番地と郵便番号)。これらは、クラスター化できる機能を提供します。
-muratoa


2
またを見固有表現の認識、および、より一般的なタスク情報抽出
のYuval F

@YuvalFこれを答えにすることをお勧めします。少し詳しく説明していただけますか。ML手法を使用した例の論文でしょうか。
ステフェン

私はこの特定の問題にも非常に興味を持っています-それは、構成要素に住所を構成しています。Googleなどのリバースジオコーディングサービスへの接続を前提とせずに、モバイルデバイスでこれを実行しようとしています。市、州、国、郵便番号に関連するリンクされたデータのオンボードソースがあると想定しても構いません。どんな助けでも-ポインター-またはこの問題でクレイジーなスタートアップチームと関わりたいと思うなら、心からオープンに歓迎します。

回答:


10

これは、一連のトークンがあり、各トークンに分類を与えたいシーケンスラベル付け問題として見ることができます。隠れマルコフモデル(HMM)または条件付きランダムフィールド(CRF)を使用して問題を解決できます。Malletと呼ばれるオープンソースパッケージには、HMMとCRFの適切な実装があります。

例では、入力を以下の形式に変換する必要があります。さらに、追加機能を生成する必要があります。

1600 STREET
Pennsylvania STREET
Ave STREET
, OUT
Washington CITY
, OUT
DC PROVINCE
20500 POSTCODE
USA COUNTRY

1
このような状況では、標準のシーケンスタガー(CRFのHMMなど)が非常に良い結果を生むとは思いません。これは、タググループが連続しており、各タグがシーケンスごとに1回しか発生しないという制限によるものです。任意の距離の過去/将来のタグに依存しているため、検索を簡単に変更してこの情報を組み込むことはできないと思います(ただし、これについては間違っている可能性があります)。
アルト

@alto CRFは近隣の状況を考慮に入れていると思います。HMMは過去の状態を見ることができません。あなたは、それがおそらくうまく機能しないことは間違いありません。
JT

1

住所が有効か無効かを検証するには、非常によく似た問題を解決する必要がありました。

通常、住所の構造は「1600 Pennsylvania Ave、Washington DC、20500」です

などの文字列

「2000歩下がって、ワシントンDCのペンシルベニア通りに着きました。」

有効なアドレスではありません。

これは、SVM、ニューラルネットワークなどの分類手法によって解決できます。

アイデアは、主要な機能セットを識別することです。これらのいくつかは次のとおりです。

1)通りの名前は有効なブロック番号で始まりますか。ほとんどの米国のブロック番号は、数字(1200など)、または1文字が続く数字(120A)、または1文字が続く数字(S200など)のいずれかです。

2)住所が適切にフォーマットされている場合、通りの名前は、大通りのAve、ドライブのDr、大通りのBlvdのようなサフィックスで終わります。USPSサイトから米国のストリートサフィックスリストを取得することができます。

3)番地フィールドの単語数も興味深い特徴です。単語が多すぎる場合は、おそらく有効なアドレスではありません。たとえば、上記の例を参照してください。

4)住所フィールドのブロック番号と通りの接尾辞の間にいくつの単語がありますか?

これらを使用して学習アルゴリズムをトレーニングし、結果のモデルを使用して、指定されたアドレスが有効かどうかを検証できます。


1

これは、独自のソリューションである逆ジオコーディングを必要としないちょっとしたハックです。これにより、よりクリーンなデータが提供されるか、実際にすべての作業が実行されます。

たとえば、geocode3Googleを使用するSSCのStataコードを次に示します。これはFuzzy Gazetteerに似ていると思います。最初のアドレスはかなり複雑で、2番目のアドレスはクリーンで、3番目のアドレスは外部です。他のソフトウェアでもこれを処理できます。

clear
set obs 3
gen address =""
replace address = "Big Foot Museum in Felton CA" in 1
replace address = "1600 Pennsylvania Ave, Washington, DC 20500 USA" in 2 
replace address = "ул. Ильинка, д. 23 103132, Москва, Россия" in 3
geocode3, address(address)
gen coord = string(g_lat) + "," + string(g_lon)
geocode3, reverse coord(coord)

これはかなりうまく機能します:

. list r_addr , clean noobs

                                                                             r_addr  
                                      121 San Lorenzo Avenue, Felton, CA 95018, USA  
    1600 Pennsylvania Avenue Northwest, President's Park, Washington, DC 20500, USA  
                                         ulitsa Ilyinka, 23, Moscow, Russia, 101000  

クレムリンの形式はかなり異なります。


0

これは、双方向LSTM分類で解決される問題のように聞こえます。たとえば、サンプルの各文字を1つのカテゴリとしてタグ付けします

通り:1都市:2州:3郵便番号:4国:5

1600 Pennsylvania Ave, Washington, DC 20500 USA
111111111111111111111, 2222222222, 33 44444 555

次に、これらのラベルに基づいて分類器をトレーニングします。ブーム!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.