33

これがパズルです...

同じ50000以上の電子製品のデータベースが2つあり、一方のデータベースの製品をもう一方のデータベースの製品と照合したいと思います。ただし、製品名は必ずしも同一ではありません。文字列の類似性を測定するためにレーベンシュタイン距離を使用してみましたが、これは機能しませんでした。例えば、

-LG 42CS560 42-Inch 1080p 60Hz LCD HDTV
-LG 42 Inch 1080p LCD HDTV

これらのアイテムは同じですが、製品名はかなり異なります。

一方で...

-LG 42 Inch 1080p LCD HDTV
-LG 50 Inch 1080p LCD HDTV

これらは、製品名が非常に似ているさまざまな製品です。

この問題にどのように取り組むべきですか?

4

3 に答える 3

17

私の最初の考えは、名前を機能の説明(会社LG、サイズ42 Inch、解像度1080p、タイプLCD HDTV)に解析することです。次に、互換性のためにこれらの説明を相互に照合できます。商品番号を省略してもかまいませんが、サイズを変えても問題ありません。単純なare-the-common-attributes-compatibleで十分な場合もあれば、異なる属性の違いを許可するルールなどを記述/学習する必要がある場合もあります。

使用している製品の種類やリストされている名前の違いによっては、実際には属性のセットを手動で定義し、場合によってはそれらに一致する特定の単語や正規表現を追加して、解析されていないものを繰り返し確認することから始めることもあります。これまでのところ、そのためのルールを追加しています。1つの語彙項目が複数の属性に属している可能性があるという点で、あいまいさはあまりないと思いますが、データベースが表示されていないとわかりません。

それが実現可能でない場合、この抽出は、半教師ありの品詞タグ付けに似ています。ただし、語彙が通常の構文解析よりもはるかに制限されていること、および製品名のスペースがより階層的であるという点で、多少異なります。resolutionタグは特定の種類の製品にのみ適用されます。私はその文献にあまり精通していません。あなたが使うことができるいくつかのアイデアがあるかもしれません。

于 2012-08-16T03:20:26.580 に答える
14

トレーニング例の大規模なセットを使用します。この例のセットで可能なペアごとに、次のようになります。

  1. そのコンポーネントの文字列を解析します。company、size_desc、display_type、makeなど。
  2. ペアの2つのストリング間の同じコンポーネント間の距離を見つけます。
  3. コンポーネント間の距離を表す数字のタプルを作成します。
  4. トレーニングセットの一部としてペアの文字列に基づいて、タプルに同一/非同一のラベルを付けます。
  5. タプルにフィードし、バイナリ分類器(SVM)をトレーニングします。

ここで、同じかどうかを判断する文字列のペアを取得したら、トレーニングセットで行ったように特徴を抽出し、文字列のさまざまなコンポーネント間の距離の数値のタプルを作成します。タプルをトレーニング済みのSVMにフィードし、それらが同じかどうかを分類します。

このような学習アプローチを使用する利点は、ルールを何度も変更し続ける必要がないことです。また、システムは、同じ製品と異なる製品の大きなペアの違いを学習します。

これを行うには、WEKAのLibSVMパッケージを使用できます。

于 2012-08-22T06:52:00.280 に答える
1

機械学習についてはあまり知りませんが、レーベンシュタイン距離がこの種の問題に対する最善のアプローチではないことは知っています。

私は現在、非常に類似した問題に取り組んでおり、最大連続サブシーケンス(https://www.geeksforgeeks.org/longest-consecutive-subsequence)を使用してはるかに正確な一致を見つけました。

また、最長の共通部分文字列も役立つ場合があります(https://www.geeksforgeeks.org/longest-common-substring-dp-29/)。

...または、両方の組み合わせでさえあるかもしれません!

レーベンシュタインは、余分な文字を含む同様の文字列を簡単に割り引くことができる置換を可能にするため、優れていません。たとえば、「He​​llo AAAAAA」、「Hello」、「BBBBB」などです。

「Hello」と「BBBBB」はレーベンシュタイン距離だけ近くにありますが、「Hello」を「HelloAAAAAA」と一致させたいと思うかもしれません。

LCSとLSSは置換を許可しないため、これらの方法の両方で、「Hello」は「HelloAAAAAA」と一致します。

于 2019-07-25T21:04:31.387 に答える