2013-11-04 12 views
13

私は、さまざまな仕入先の製品の価格を比較する簡単なプログラムを作成しようとしています。 異なるサプライヤは同じ製品を異なるものと呼ぶことがあります。 異なる店舗/仕入先の商品名の比較と一致

  • A2牛乳のフルクリーム2L
  • A2フル・クリームミルク2L
  • 2リットル

    • A2フル・クリームミルクボトル:

      たとえば、以下の3つの文字列は、同じ製品を参照してください。

      または次の2つの文字列は同じ製品です:

      • Ambi PurエアーフレッシュカーCar Voyage 8mL。フレッシュバニラフラワーフレグランス。 - 1各
      • アンビピュール空気清浄航海プライマリ8ミリリットル

      さらに - いくつかの製品が同じではなく、(例えば、フルクリーム2Lミルクは、種々の同様の製品を包含することができる。)

      類似しています私が各製品に持っている情報の唯一のビットは、タイトルと価格です。

      このような製品文字列を照合するために現在推奨されている方法は何ですか?私のグーグルや他のSOスレッドを読んでから、

      は、私が見つかりました:

      • 一部の人々は、ベイジアンフィルタリング技術を使用することをお勧めします。
      • 一部の人は、すべての製品文字列に対して特徴抽出を行うことをおすすめします。だから、製品からブランド(例えば "A2")、製品( "ミルク")、容量( "2L")を抽出し、製品間の距離ベクトルを作成し、バイナリ分類器のようなものを使用して製品言及された)。しかし、私はルールや正規表現のすべての束なしでこれを達成する方法についてはわからないのですか?私はおそらく、この問題を攻撃するよりスマートな教師なし学習方法があると仮定していますか?価格はおそらく、距離ベクトルを計算するために使用できる別の「機能」でもあります。
      • ニューラルネットワークのアプローチを使用することを推奨している人もいますが、ここでは具体的なコードや例はほとんど見つかりませんでした。
      • 他にも、Levenshtein距離やJaro-Winkler距離などの文字列類似性アルゴリズムを使用することをお勧めします。

      上記の手法のいずれかを使用するか、別の手法を使用しますか?

      また、誰かがこの種の問題のサンプルコードやライブラリを知っていますか?私は何かを見つけることができなかった。

      (たとえば、大規模なデータセットでJaro-Winklerの距離を計算するとパフォーマンスに問題が発生する人がいることがわかりましたが、Mahoutなどでアルゴリズムの分散実装が行われることを期待していましたが、

    +0

    いくつの商品(ボールパークの見積もり)を管理する必要がありますか? – Blacksad

    +0

    それはスーパーマーケットなので、かなりたくさんの商品があります - 私は数万人に見積もりますか? – victorhooi

    +0

    すべての提案は良いですが、監督されています。そして何万人もの授業の監督下での学習は、地獄になるだろう...私は監督されていないアプローチは考えていない。 – Blacksad

    答えて

    5

    上記のテクニックのいずれかを使用するか、別のテクニックを使用しますか?

    私が本物でこれをやっていたら、機械学習はあまり使わないでしょう。ほとんどの大企業にはブランド名や製品名のデータベースがあり、それを使って物事をかなり簡単に一致させることができます。データの衛生上の問題があるかもしれませんが、MLの問題はあまりありません。

    もしあなたがそのデータベースを持っていなければ、私は簡単に言います。すべてを特徴ベクトルに変換し、最近傍探索を行う。これを使用して、データベースの作成に役立つツールを作成します。 IE:最初の「A2 Whole Milk 2L」を自分で「ミルク」とマークし、次に最も近い隣人がミルクかどうかを確認します。すばやく「はい」と「レビューが必要」と印を付けたり、同様のオプションを付けることができます。

    あなたが提案したような単純なデータの場合、90%の時間がかかる場所では、簡単にデータを取得できます。私は1日に数千のドキュメントにラベルを付けるために同様の作業を行った。

    独自のデータベースを作成したら、これを解決するのは簡単です。 「目に見えない」データを処理するためにコードを再利用してデータベースを作成することができます。

    関連する問題