ホーム > mixiニュース > IT・インターネット > IT総合 > Deep LearningがECサイトの商品分類でどう活用されたのか

Deep LearningがECサイトの商品分類でどう活用されたのか

0

2019年06月18日 14:12  @IT

  • チェックする
  • つぶやく
  • 日記を書く

@IT

写真表現学習で得られる特徴
表現学習で得られる特徴

 ECサイト運営の業務効率化のために、商品説明を読んで掲載カテゴリーを提案してくれる人工知能を作成した。ディープラーニング実践の参考事例として、筆者の会社がどう取り組んでいったのかを紹介する。



【その他の画像】



●はじめに



 人工知能という言葉に話題性があることと、企業には大量の文書が蓄積されていることから、手元にある文書をとりあえず人工知能に与えれば何か知見が得られるだろうと相談されることがある。しかし残念ながら、人工知能や、その要素技術の機械学習やディープラーニングは、ただ文書を与えただけでは期待した結果をもたらしてくれないことの方が多い。



 成果が出ない理由の一つとして、データの質が挙げられる。ディープラーニングの登場によって、量の拡大が質を補うといわれることもあるが、それを実現するためには想像以上のデータ量が必要となる。



 データが足りないとなると、結局はデータの質を上げる必要が出てくるので、辞書の定義や文書の構造化といった作業に取り組むことになる。ここでディープラーニングに失望されることがある。



 では、「ディープラーニングには手を出すな」ということかというと、そうではない。ディープラーニングにも得手不得手があり、それを理解した上でうまく付き合っていってほしいという思いから本稿を書いた。



 したがって、本稿では、ディープラーニングで現実的にできることは何かを説明しつつ、弊社(NCS&A)のお客様の事例に沿って、ディープラーニングとどう向き合っていったかを紹介していく。



●お客様が抱える課題



 ECサイトの運営では、商品カテゴリーのメンテナンスは重要な業務の一つだ。このカテゴリーは、商品の種類や商品の用途など、ユーザーのニーズに合わせて作っていかなければならない。



 弊社のお客様であるアズワン様では、中期経営計画で、ECサイトの取り扱い点数を増やし、顧客のニーズに応えることを目標としていた。それに合わせて、商品カテゴリーもさまざまな切り口で作られた。



 現在では、商品数が300万件、カテゴリーは3000種類にもなる。



 新商品が入ると、人がその商品の名称や仕様、特徴などを読んで、商品カテゴリーを判断している。数もさることながら、取り扱う商品は専門的なものが多く、一つ一つの判断が難しい。そのため、カテゴリーの特定には、商品に対する深い知識が必要であり、誰もができる作業というわけではない。



 また、人が決めたカテゴリーはコンピュータに登録しなければならず、大量の商品を振り分けるとなると、かなりの時間がかかってしまう。もし、人がその作業をしているのであれば、商品カテゴリーの判断自体よりも、コンピュータへの入力操作の方が煩わしいと感じていることだろう。



 なんとか、知恵が必要とされないような単純入力の作業は、人からコンピュータに移して自動化していきたい。そのために、コンピュータには、商品カテゴリーを判断できるようになって、その結果を記録できるようになってほしい。そうすることで、人から手間のかかる作業を大きく取り除けると考えた。



●ディープラーニングの活用



 ということで、コンピュータ自身に商品カテゴリーを推定させることが課題となった。



 目的とするカテゴリーの数が多いことや、今後、取り扱う商品や顧客のニーズによってカテゴリーの構成が変わることも十分に考えられることから、if-thenのようなルールベースでの実装は難しいと想像できる。そこで、機械学習、とりわけディープラーニングの活用を検討した。



 ディープラーニングには、表現学習という特徴があり、コンピュータ自身がデータから特徴を見つけ出すことができる。古典的な機械学習は、「特徴量設計が難しい」といわれているが、その点をディープラーニングが解決してくれれば、将来、カテゴリーの構成や、商品説明の書き方が変わっても、ある程度対応できると考えた。



 実際の商品を例に表現学習を説明すると、コンピュータ自身が、文書から「過昇温防止」や「タイマー」「乾燥器」という具体的な特徴や、それよりも抽象的な「過昇温防止機能付き乾燥器」という特徴を自動的に獲得することを表現学習という。こうして獲得した特徴に、「オーブン」というラベルを付ければ、「過昇温防止機能付き乾燥器」という特徴を持つ文書は「オーブン」について書かれていると、コンピュータが判断できるようになる。



 このように、抽象的な特徴とラベルを対応させることが、モデルの頑健性を高めることにつながる。



■ディープラーニングの手法



 さて、ディープラーニングを使った自然言語処理といえばLSTMがまず思い浮かぶ。他にも、Attentionを取り入れたモデルが考えられる。Attentionは2014年ごろから注目されており、機械翻訳において高い精度を発揮した。Attentionはその後も“A Structured Self-attentive Sentence Embedding”(2017)や“Attention Is All You Need”(2017)、“BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”(2018)といった話題の論文でも取り入れられている。



 Attentionとは、データのどの部分に着目するかを決定する仕組みである。これを自然言語に適用すると、コンピュータがどの単語に着目したかを可視化できる。



 ディープラーニングは、「なぜそう判断したのか分からないから信用できない」といわれることもある。ところが、Attentionを活用すれば、判断に至る根拠を見ることができるのだ。このような面白い仕組みをモデルの精度向上に生かせないかと考えた。その理由を納得してもらうために、まずは、自然言語処理が抱える問題から説明していきたい。



■自然言語を扱うことの難しさ



 コンピュータで自然言語を扱うことの難しさの一つとして、シンボルグラウディング問題というものがある。



 例えば、「ウマ」と「クルマ」という単語をそれぞれ「動物」と「機械」であると学習したモデルでは、「シマウマ」という単語がどちらに属するかを判断できない。このような問題が起きるのは、「ウマ」や「シマウマ」などの単語が、現実世界と結び付いていないことが原因であり、これをシンボルグラウディング問題という。



 word2vecという手法で事前学習することも考えたが、今回のタスクは専門用語が多く、それらをうまく捉えられるだけのデータをそろえることが困難だった。



 そこで、人が単語とそれを抽象化した単語を書き起こし、それをコンピュータに教えることを検討した。



 「ウマやシマウマを『動物』と理解する」というルールがあることで、コンピュータは「ウマ」と「シマウマ」が似ていると判断できる。



 しかし、どこまで抽象化すればいいのかの判断が難しい。抽象化の度合いが浅いと、汎用性が乏しくなり、そもそもの問題が解決できない。反対に「ウマ」を「生物」まで抽象化してしまうと、「生物」には「植物」や「菌類」なども含まれるので、「動物」だけの特徴ではなくなってしまう。「ウマ」の「界」を判断したいとしたら、「生物」は良い特徴とはいえない。タスクを解決する上で必要十分な深さにしなければならない。



 さらに、抽象化の候補となる単語は無数に存在する。無作為に抽象化していては、効果が測りにくく、終わりのない作業となってしまう。



 そこで、抽象化の指針としてAttentionを活用することにした。繰り返しになるが、Attentionはコンピュータがどの単語に着目するかを決定する仕組みである。コンピュータが着目した単語に対して優先的に取り組めば、効率よくモデルを改善できるはずだ。



■ディープラーニングの評価



 Attentionを取り入れたモデルとして、“A Structured Self-attentive Sentence Embedding”(2017)で提案された手法を参考に組み立てた。また比較対象として、単純なLSTMとMLP(多層パーセプトロン)のモデルも用意した。



評価に利用したデータ



 評価には実際に運用されている、約160万件の商品データを使った。このデータはすでに分類済みである。しかし、必ず1商品1カテゴリーというわけではなく、複数のカテゴリーに属する商品も多く、これらを1カテゴリーに寄せる作業に苦労した。



 また、1カテゴリーごとのデータ数は1〜5万件と、大きな偏りがあった。このままでは、少数派カテゴリーの精度が悪くなる可能性がある。このようなカテゴリーでも分類可能かを確認するために、1カテゴリーのデータ数が全て500件となるようにサンプリングしたデータセットも用意した。



 これらをそれぞれ、60%はトレーニングデータ、20%はバリデーションデータ、20%はテストデータに分けて、モデルを評価した。



■モデルの評価



 モデルの評価結果は以下の通りだ。



 精度はいずれも90%ほどで、あまり差はなかった。単語の並びは商品分類において意味がないのかもしれない。実際、人が商品を分類するとき、商品名だけで判断できることが多い。他に考えられる判断材料には、素材や用途なども考えられるが、いずれも単語を見れば十分判断できそうだ。



 学習時間にいたっては、LSTMを導入したモデルよりも、LSTMを導入していないモデルの方が30倍も速くなった。



 このように、LSTMを導入するメリットがあまりないことと、今後、モデルの精度向上へ取り組んでいくことを考えれば、AttentionとMLPで組み立てたモデルをベースに、検証を進める方がよいと結論付けた。



 余談だが、これらの検証はAWSでp2.xlargeのEC2を借りて行った。東京リージョンのp2.xlargeは1時間あたり170円(執筆当時)ほどで、1日あたり約4000円となる。毎日使うとそれなりの価格になるため、学習時間が短くなることは費用的にも嬉しい。



■結果を疑う



 さて、これだけ精度がよいと、本当にいいのか疑いたくなる。そこで、トレーニングデータやテストデータの分割方法を変えてモデルを評価してみた。



 すると、精度の悪化が確認できた。おそらく、商品の種類が増えたり、新しいメーカーが増えたり、あるいは商品説明を書く人の違いであったりとさまざまな要因で、商品説明の表現が少しずつ変わっているのだろうと考えられる。例えば、ある時期までは「オートクレーブ」と書かれていた単語が、ある時期から「オートクレイブ」という表現に変わっていた。



 他に精度を下げた原因として、表現が具体的すぎたためにカテゴリーの識別に役立っていない単語があった。Attentionを使って可視化すると、それがよく分かる。



 いずれも目的のカテゴリーは「シェルフ」である。灰色の文字は商品説明の原文で、その中から記号やカテゴリーの判別に必要なさそうな単語を除いたものを黒い文字で書いている。さらにその中から、コンピュータが注目したところが濃い赤で表現されている。



 正しく分類できた商品は、シェルフを表す単語に注目が集まっていることが確認できる。反対に、正しく分類できなかった商品は、シェルフを含むズバリな単語があるにも関わらず、それらにはあまり注目していないことがわかる。



●精度向上への取り組み



 大まかには、Attentionされた単語を、同義語やストップワードに設定したり、表現を抽象化したりして精度を向上させた。その中から、今回の取り組みの中心である抽象化について詳しく説明していきたい。



■単語の抽象化



 単語の抽象化は、形態素解析器のユーザー辞書に登録していくことで実現した。例えば、「エレメンツシェルフ」や「キャニオンシェルフ」など「シェルフ」を表す具体的な単語があったなら、それら全て、原形が「シェルフ」となるように定義した。



 これにより、「エレメンツシェルフ」や「キャニオンシェルフ」などは「シェルフ」という概念に抽象化される。このユーザー辞書を適用したモデルで商品説明をAttentionすると、「シェルフ」を表す単語に注目が集まった。



 上が正しく分類できた商品説明で、下が正しく分類できなかった商品説明である。正しく分類できた方が「シェルフ」を表す単語に注目が集まっていることは当然として、正しく分類できなかった商品説明も、「シェルフ」を表す単語に注目が集まっていることが分かる。



 正しく分類できなかった商品も、「シェルフ」に注目することはできているので、それ以外に注目している単語に悪影響を及ぼしているものがあると考えられる。例えば、「分解」「均等」などは、おそらくどのカテゴリーの特徴にもなり得ないような単語なので、ストップワードとして除外していく必要がある。



■フレーズの抽象化



 単語だけでは特徴が捉えられない商品も存在した。例えば、「ハンディタイプ」のpH計とそうでないpH計を分類したいとき、商品に「ハンディタイプ」と書いていてくれれば実に簡単だが、実際には「持ち運びに便利」とだけ書いてある商品もあった。人であれば、これも「ハンディタイプ」だと判断することができるだろう。



 これを単語のように抽象化しようとすると、「持ち運びに便利」だけでなく「持ち運びが便利」「持ち運ぶのに便利」など活用形や助詞の変化も踏まえて辞書を定義していかなければならい。そうなると、定義が冗長になってしまい、メンテナンスに苦労することが想像できる。



 そこで、IBM Watson Explorerというツールを使ってフレーズを正規化することにした。Watson Explorerの分析機能を使うと、単語の活用形や係り受けを丸めることができる。具体的には、「持ち運びに便利」や「持ち運びが便利」は「持ち運び……便利」というような表現に統一できる。これを抽象化すれば、辞書を簡潔に定義できるというわけだ。



精度向上作業を単純化・標準化



 抽象化と評価を繰り返し行う中で、狙い通りにAttentionすることができれば、モデルの精度も上がることが確認できている。



 そこで、モデル全体の精度向上はいったん忘れて、適切にAttentionされるモデル作りを目指すことにした。それによって、どうやってモデルの精度を上げていけばいいか分からない状態から、Attentionによって示された単語を辞書に起こしていくという、単純な課題に置き換えることができた。



 抽象化にかかる時間は、1カテゴリー当たり1時間ほどだった。3000カテゴリー全てに対応していてはかなりの時間がかかるので、精度の悪いカテゴリーや、商品数の多いカテゴリーなど、インパクトの大きいカテゴリーから順に進めていくなどの工夫が大切である。



■データ拡張



 抽象化の他には、データ拡張にも取り組んだ。簡単にいうと、あるルールに従って情報を落とした商品説明を作って学習したのだが、それが精度に良い影響を与えたので紹介する。



 商品説明は、書いた人や時期によって、同等品だったとしても表現が変わることがある。例えば、「●ノーパッキン(中栓無し)で、液モレしにくいです。●蒸気殺菌及びオートクレーブが可能です。」と「●ノーパッキン(中栓無し)ですが、水モレしません。●中栓を取り外すわずらわしい作業から解放され、時間の省力化にもなります。」という商品説明があり、後者だけオートクレーブに関することが省略されていた。なので、今後作られる商品説明から、ノーパッキンに関することが削除されることも考えられる。



 そこで、商品説明をフレーズ単位で組み替えて、それを新しい商品説明とした。上記の例から作るなら、「●ノーパッキン(中栓無し)で、液モレしにくいです。」や「●蒸気殺菌及びオートクレーブが可能です。」といった商品説明ができる。



 情報を落とすということで、イメージとしてはDropout(ディープラーニングのテクニックの一つ)に近いが、それより良い精度となることが確認できた。もしかしたら、フレーズ単位で組み替えるということが、人が新しく商品説明を書くこと(既存品から部分的にコピー&ペースト)と近いのかもしれない。



●モデルの活用方法を考える



 これらの取り組みによって、精度は少しずつよくなっている。しかし、運用できる精度に達成するまでにはまだ時間がかかる。そこで、現在のモデルでも活用できる方法はないかと考え、モデルの評価方法を変えて探ることにした。



 まずは、モデルが予測した結果のうち、スコアが高い上位5カテゴリーに注目して、その中に正解が含まれているかどうかを評価した。すると、1位のカテゴリーだけを評価したときよりも、精度が15ポイント改善された。ただし、最終的には人間が商品説明と候補のカテゴリーを見て、1つのカテゴリーに絞り込む必要がある。



 次に、スコアが0.9以上となった結果にのみ注目して、1位のカテゴリーを評価すると、精度は15ポイント改善され、目標としていた精度に達することができた。また、スコアが0.9以上だった商品は、全体のだいたい半分で、インパクトも大きいことが分かった。



 これらの結果を踏まえて、スコアが高い予測結果はそのまま採用し、スコアが低い予測結果は上位5件を候補として示唆するような仕組みを作ることにした。



 およそ半分の商品については人間の手から離れ、残り半分はコンピュータが人間をサポートすることができる。全体的な作業ボリュームを減らしながら、経験の浅い人間でもコンピュータのサポートによって効率的に作業できる環境を作ることができた。



●今後の方針



 引き続き、単語やフレーズの抽象化に取り組んでいきたい。抽象化によって、コンピュータ自身が商品の本質を捉えられるようになれば、コンピュータが商品知識を獲得したと言えるだろう。そうすれば、人間のように商品分類以外の課題もこなせるはずだ。



 会社のさまざまな課題に適用できる、知識の基盤を作っていきたい。



●最後に



 ディープラーニングは翻訳やフィルタリング、文書検索などで使われており、学習済みモデルを簡単に利用できるものもある。このような学習済みモデルは、専門知識に乏しく、特に、企業の中にある専門的な課題にはうまく適用できないことがある。そのような課題を解決するためには、現時点では自分たちでモデルを作っていくしかない。



 もし、人工知能を作る機会があれば、新入社員を育てると思って、根気強く付き合っていってほしい。そうして育てた人工知能は、きっと私たちを手助けしてくれるはずだ。


    あなたにおすすめ

    ランキングIT・インターネット

    前日のランキングへ

    ニュース設定