あいまいな名前とニックネームの一致


8

次の構造のデータセットがあります。

full_name,nickname,match Christian Douglas,Chris,1, Jhon Stevens,Charlie,0, David Jr Simpson,Junior,1 Anastasia Williams,Stacie,1 Lara Williams,Ana,0 John Williams,Willy,1

ここで、各予測子行は、フルネーム、ニックネーム、およびターゲット変数のペアの一致です。これは、ニックネームがその名前の人物に対応する場合は1、それ以外の場合は0です。ご覧のとおり、フルネームからニックネームを取得する方法は、特定のパターンに従っていません。

フルネーム、ニックネームのペアを指定して、一致の確率を予測するMLアルゴリズムをトレーニングします。

私のベースラインは、一致するキャラクターの数とそのような機能を確認しようとしています。ただし、ディープラーニングを使用したNLPアプローチについて考えています。私の質問は、この問題に固有のニューラルネットワークアーキテクチャがあるかどうかです。


1
トレーニングのためにどのように男性のサンプルがありますか?
Shamit Verma

100k前後、ただし17%のみが一致= 0
David Masip

これは、リンクを共有できるオープンなデータセットですか?
Adarsh Chavakula

たとえば、「アナスタシアウィリアムズ|ステイシー」などの名前がない場合に、名前とニックネームの関係を見つける方法。この作業を行うには、さらに機能が必要だと思います。
iamklaus

回答:


3

前回の仕事でも同様の問題がありました。私の解決策は、(変換(複数可)+比較)*多くのコンボを介して機能を構築し、モデルにフィードしてから、集約してモデル化すること、つまり2層モデルです。重要なのは、特徴としてのエンコーディングと類似性スコアです。

変換:母音の削除(特定の語根に最適)、末尾の母音の削除、二重文字の削除、表音文字列(IPA、soundex、https: //pypi.org/project/Fuzzy/ )への変換、類似した音を持つ文字、または類似した文字の置換他の言語でのさまざまな音(東ヨーロッパではは米国ではように聞こえ、はなどのように聞こえます)...人の名前の多くの奇妙さ/不規則性を処理する戦略です。JYCK,D T,TTH

比較(類似性と差異):[文字レベル、ブロック/ルート/ [pre / suf]固定レベル、単語レベル(あなたには当てはまらない場合があります)]類似性と差異のスコアを試してください。Diceの係数、Levenshtein、Needleman–Wunsch、最長共通(非)連続部分文字列、文字ヒストグラムの類似性、#文字の一致、一致しない(それぞれ左右)などを試してください。RNN/ LSTMを使用して、類似性を学習させることができます。各変換用。トレーニング済みモデルの出力を別の機能として使用します。

上記のさまざまな組み合わせを試して、価値があると思われるものをいくつか選択します。単純にすべてのスコアを取得してロジスティック回帰(またはニューラルネット)に合わせるか、統計モデルを構築して、小規模なトレーニングセットに基づいてパーセントランクを出力し、正規化します。生のスコアを前処理する別の方法は、ロジスティック関数を介してキャリブレーションエンコーディングを使用することです。次に、正規化されたスコアからの要約統計を追加の機能として追加します。これらすべてを最終的なモデルにプッシュします。

アラビア語、スペイン語、フランス語などの名前から派生した名前を処理しますか?これは単なる追加ですが、社会保障と米国国勢調査の名前統計データをダウンロードして、より多くの名前のバリエーションでプロジェクトを強化することを検討してください。方法はあなたにお任せしますが、可能性について知るのに役立ちます。リーベンシュタインを単に使用するだけでは、William-> Bill、Dianne-> Di、Larry-> Lawrence、Mohammed-> Muhamed and Hamed、Danielle-> Daniela、Thomas-> Tom、およびJimmy-> Jamesではうまく機能しないことに注意してください。 。私が述べた戦略は、すべてのバリエーションであなたを助けるはずです。

探索する追加リソース:https : //github.com/jamesturk/jellyfish https://nameberry.com/list/276/If-You-Like-Danielle-You-Might-Love https://pypi.org/project /音声学/


2

この特定の問題にディープラーニングを使用するための有用な文献は見つかりませんでした。ほとんどの方法は、文字列の類似性やレベンシュタイン距離などの非機械学習方法に依存しているようです。この問題に対する合理的なディープラーニングベースのアプローチは、リカレントニューラルネットワークです。LSTM(Long short term memory)またはGRU(Gated Recurrent Unit)が理想的です。アイデアは、内部状態を持ち、入力が供給される順序を尊重する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]

一致する2つの文字列は、単一のシーケンスに連結されます。ここでの直感は、RNNがシーケンスを文字ごとに処理し、最後の文字が同じシーケンスで前に見たものと同様のパターンを持っていることを学習(更新の重みを読み取る)して、代わりに1である必要があると推定することです。 0。

[1/0]のベクトルはターゲット変数です。

標準のRNN前処理手順が通常どおりに適用されます。シーケンスがすべて同じ長さ(たとえば50)になるように最初にシーケンスをパディングし、文字は文字列ではなく数値としてエンコードされます。

ここの辞書はかなり小さい(26アルファベット+スペース+パッド)ので、ネットワークアーキテクチャはかなり単純なものになります。単一の埋め込みレイヤー+繰り返しレイヤーで十分です。

この方法で問題をフレーミングすると、各データポイントの入力として2つの個別の文字列を受け取り、数値をスローするカスタムアーキテクチャを作成する代わりに、標準のRNNまたは標準のLSTM / GRUを使用できます。

このアプローチを試して、がベースラインモデルを十分に上回ることができるかどうかを確認できます。

キャラクターレベルのRNNには、Andrej Karpathyのブログコードが役立ちます。彼が解決しようとしている問題は異なり、コードは純粋に乱暴ですが、それでもアイデアをかなりうまく捉えています。


1

次のような前処理として、いくつかの正規化を使用します。

  • Jrに変換されJuniorます。
  • ldmtwoが言ったように名前をSoundexに変換します

そして、Zアルゴリズム、KMPアルゴリズム、レーベンシュタイン距離など、MLではなく文字列アルゴリズムを使用し、スコアにしきい値を使用します。

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