2

は現在、私は60万レコードのデータベースを構成されている以下のように見える彼らのカテゴリ情報と商品を表します名前を付けてアイテムのカテゴリを予測する方法は?

{'title': 'Canon camera', 'category': 'Camera'}, 
{'title': 'Panasonic regrigerator', 'category': 'Refrigerator'}, 
{'title': 'Logo', 'category': 'Toys'}, 
.... 

しかし、カテゴリ情報なしmerchandisesがあります。

{'title': 'Iphone6', 'category': ''}, 

だから私は私がカテゴリが商品があるべきかを予測するのに役立つscikit-learnを使用して、私のアイテムの名前に基づいてテキスト分類器を訓練することが可能であるかどうかを考えています。私はマルチクラスのテキスト分類としてこの問題を形成していますが、多分deep learning/Kerasも使うことができるので、それぞれのアイテムに1〜複数の絵がありますか?

私はこの問題を解決する最良の方法がわからないので、提案や助言を歓迎します。これを読んでいただきありがとうございます。

P.S.実際のテキストは日本語です

+0

iphone6のタイトルは何回表示されていますか?それが唯一のエントリーであれば、外部トレーニングソースに頼らざるを得ません。 –

+0

@yosemite_k返事をありがとう。私はアイテムに2つの同一のタイトルが表示される可能性は低いと考えていますが、複数のアイテムのタイトルに再表示される用語があります。後ほど詳しい情報を提供します。 – LeeMeng

答えて

1

2文字/ 3文字モデルを作成し、値を計算することができます。どのくらいの頻度で3グラムの「pho」がカテゴリ「カメラ」に表示されますか。

trigrams = {} 
for record in records: # only the ones with categories 
    title = record['title'] 
    cat = record['category'] 
    for trigram in zip(title, title[1:], title[2:]) 
     if trigram not in trigrams: 
      trigrams[trigram] = {} 
      for category in categories: 
       trigrams[trigram] = 0 
     trigrams[trigram][cat] += 1 

今、あなたはスコアを計算するためにトライグラムのタイトルを使用することができます:P(クラス|トライグラム):

scores = [] 
for trigram in zip(title, title[1:], title[2:]): 
    score = [] 
    for cat in categories: 
     score.append(trigrams[trigram][cat]) 
    # Normalize 
    sum_ = float(sum(score)) 
    score = [s/sum_ for s in score] 
    scores.append(score) 

は今、スコアすべてのトライグラムの確率分布が含まれています。いくつかのクラスがもっと一般的であることは考慮されていません(以前はベイズ定理を参照)。私は現在、いくつかのタイトルがちょうど本当に長くてトライグラムがたくさんあるかもしれないという問題に対して何かをしなければならないかどうかはまだよく分かりません。私は前もってそれをしていると思います。

トリグラムが数多くないことが判明した場合は、バイグラムに切り替えることができます。または単にラプラス平滑化を行います。

編集:私はちょうどテキストが日本語であることを見ました。私はそこではn-gramのアプローチが役に立たないかもしれないと思う。あなたはその名前を翻訳することができます。しかし、この情報の他の情報源(例:wikipedia/amazon/ebay)を取るほうが簡単かもしれません。

関連する問題