検索
連載

Deep LearningがECサイトの商品分類でどう活用されたのか機械学習の参考事例(1/2 ページ)

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

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「機械学習の参考事例」のインデックス

連載目次

はじめに

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

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

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

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

 したがって、本稿では、ディープラーニングで現実的にできることは何かを説明しつつ、弊社(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可視化の例
Attention可視化の例

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

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

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

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

単語と概念の関係
単語と概念の関係

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

word2vecで概念を補うこととその難しさ
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

正しく分類できなかった商品のAttention
正しく分類できなかった商品のAttention

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

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

Copyright© Digital Advantage Corp. All Rights Reserved.

       | 次のページへ
[an error occurred while processing this directive]
ページトップに戻る