大まかには、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件を候補として示唆するような仕組みを作ることにした。
およそ半分の商品については人間の手から離れ、残り半分はコンピュータが人間をサポートすることができる。全体的な作業ボリュームを減らしながら、経験の浅い人間でもコンピュータのサポートによって効率的に作業できる環境を作ることができた。
引き続き、単語やフレーズの抽象化に取り組んでいきたい。抽象化によって、コンピュータ自身が商品の本質を捉えられるようになれば、コンピュータが商品知識を獲得したと言えるだろう。そうすれば、人間のように商品分類以外の課題もこなせるはずだ。
会社のさまざまな課題に適用できる、知識の基盤を作っていきたい。
ディープラーニングは翻訳やフィルタリング、文書検索などで使われており、学習済みモデルを簡単に利用できるものもある。このような学習済みモデルは、専門知識に乏しく、特に、企業の中にある専門的な課題にはうまく適用できないことがある。そのような課題を解決するためには、現時点では自分たちでモデルを作っていくしかない。
もし、人工知能を作る機会があれば、新入社員を育てると思って、根気強く付き合っていってほしい。そうして育てた人工知能は、きっと私たちを手助けしてくれるはずだ。
Copyright© Digital Advantage Corp. All Rights Reserved.