AppBrew Tech Blog

AppBrewのエンジニアチームの日々です

100万件のLIPS投稿から効率よくコスメ用語辞書を作る方法

f:id:whiteblues1017:20190902130354p:plain

こんにちは、AppBrewで学生アルバイトをしている星野です。普段は特許を対象とした類似文書検索について研究しているコスメ好きの大学院生です。今回は、LIPSの検索機能に使う辞書を効率よく整備したことについてお話します1

ここでいう辞書とは、一般的な国語辞書のような単語とその意味・用法・内容を含んだものではなく、単純に単語が並んだものを指します。 もし辞書がないと、コンピュータは文を単語にうまく分けられません。 例えば「创建具有用户可重复性和可重复性的产品。」をどう単語に分けられるでしょう2? これは中国語の文ですが、言語を理解していないと文を単語に分けるのは意外に難しいことと思います。

LIPSには多くのコスメや美容に関するクチコミ投稿文が多数あります。 この投稿文中には新語やくだけた表現だけでなく、コスメ用語が多く使われています。 具体的にコスメ独特な用語とは「クッションファンデーション」や「スクールメイク」などの複数の名詞が組み合わさった複合名詞を指します。

このコスメ用語は、一般語の辞書に登録されていないものが多いです。 LIPSの全文検索エンジンとして使用されるElasticsearchの辞書は一般語の辞書しか組み込まれていないため、コスメ用語の単語の切れ目を正しく認識することができません3。例えば「スクールメイク」で検索したとき、この単語を Elasticsearch は知らないので、「スクール」と「メイク」が並んでいると勘違いし、「スクール」のみを含む投稿と「メイク」のみを含む投稿の両方がヒットしてしまいます。 従って、コスメ用語の辞書を整備することで検索結果の改善が期待されます。

この記事では、コスメのクチコミから辞書の見出し語の候補を抽出し、その候補から辞書の見出し語を選んだ方法を説明します。

見出し語の候補を抽出する

この章では、LIPSで投稿されたクチコミから辞書の見出し語の候補を抽出する方法を説明します。

今回抽出したい見出し語の多くは名詞であることを確認しました。したがって、コスメのクチコミから見出し語を抽出するには形態素解析器を使いました。

形態素解析器を使った名詞抽出

形態素解析器に使われている辞書には当然ながらコスメ用語はほぼ登録されていません。 よって、はじめからコスメ用語のみを抽出することは難しいため、まずは投稿文中から全ての名詞を抽出します。

名詞の抽出には以下の理由から形態素解析器としてmecab-ipadic-NEologdを使用しました。

  • 通常のipadicでは、顔文字や一部の記号が名詞として認識されるためノイズとなる
  • 主要なブランド名や一部の見出し語(日焼け止め、リップクリームなど)はmecab-ipadic-NEologdで抽出できる

「日焼け止め」「リップクリーム」などのコスメに関する文脈以外でも比較的よく使用される単語は、Neologdに登録されていることがあります。 しかし、「ピンクメイク」や「フェイスパウダー」などの、コスメの文脈以外で使用されづらい単語は、形態素解析時に次のように分割されてしまいます。

f:id:whiteblues1017:20190901204647p:plain
辞書に登録されていない複合名詞の形態素解析結果

そこで、次の節では見出し語をどのように抽出したかを説明します。

見出し語候補の抽出方法

見出し語候補は単名詞だけでなく、単名詞が2回以上連続する複合名詞も含みます。 形態素解析の結果には各単語に品詞タグがつけられるため、複合名詞は名詞タグが2つ以上連続している場合に1つの単語としてみなせます。

見出し語候補の抽出具体例を以下の図に示します。

f:id:whiteblues1017:20190902005834p:plain
見出し語候補の抽出例

単純に「単名詞が2回以上連続したもの」を複合名詞としているので、「まつ毛美容液」だけでなく「今回紹介」が同時に抽出される問題と、コスメ用語でない「最高」も同時に抽出される問題を抱えています。次の章でその対処方法を紹介します。

見出し語候補抽出処理

複合名詞だけでなく、「リップ」、「チーク」などの単名詞もコスメ用語として抽出する必要があるため、通常の形態素解析で単名詞も併せて抽出します。

約104万件のLIPSの投稿文に対して見出し語候補抽出処理を行ったところ、約191万件の用語を抽出できました。

見出し語を決定する

上で抽出した191万件の用語の一部を見てみると、次のようなノイズが多く存在することがわかりました。

  • 形態素解析の誤りにより、本当は名詞ではない形態素を名詞と判定することがある
  • 見出し語候補の中には見出し語でないものが入っている

191万件の用語全てを目視で確認するのは厳しいため、ある程度はこのようなノイズはルール化して除去しました。

見出し語候補の長さを利用する

f:id:whiteblues1017:20190821143809p:plain
1-2文字の単語を削除する前後の出現回数上位20件

用語抽出処理後の出現回数上位20件(図の左)を見ると、形態素解析誤りである「の」や「や」、名詞が辞書に入れるべきではない助動詞語幹「よう」や代名詞「これ」が存在することが分かります。 「香り」「肌」「唇」「発色」なども一見登録しても良さそうに見えますが、今回解決したい課題は「単語が誤って分割されてしまうことを防ぐこと」であるため、これらを辞書に登録しても特に効果はないと考えられます。

よって、2文字以下の用語は漢字・カタカナ・ひらがな問わず消しても良さそうだと考えることができます。 しかし、3文字以上の用語には分割される恐れのある用語が存在するので残す必要があります。例えば、「ちふれ」、「よーじや」4mecab-ipadicで形態素解析した場合、「ち/ふれ」、「よー/じ/や」と分割されてしまいます。

2文字以下の用語を除いた結果が図の右です。 除去前と比較するとコスメに関する用語が増え、見出し語候補の数は約191万件から約187万件に減りました。

出現回数を利用する

前節では、単語の長さを利用して候補を減らしましたが、まだ候補は約187万件もあり、別のやり方でさらに候補を減らす必要があります。 そこで今回は、出現回数が高い見出し語ほど、辞書に登録する優先度が高いことに注目しました。 まずは、見出し語候補とその出現回数の一覧を元に、次のグラフを作りました。

f:id:whiteblues1017:20190902005128p:plain

このグラフを見れば、n回以上現れた見出し語候補をチェックすると、全見出し語候補出現回数の何%をチェックできるかがわかります。 例えば、全見出し語候補のうち75回以上現れたものだけを目視チェックすれば、全見出し語候補をチェックした場合と比べて、見出し語が投稿に現れた回数のうち95%をチェックしたことになることがわかりました。

こうして、作業時間と辞書の品質のトレードオフが見積もれるようになりました。 実際は、頻度65までの単語を目視で確認し、見出し語候補を全部確認する場合と比べて146倍効率よく辞書を作れました。

おわりに

作成した辞書を使ってローカルのElasticsearchで「今回紹介するまつ毛美容液は最高です!」を形態素解析した結果がこちらです。 「今回紹介」は辞書登録しなかったので分割され、「最高」はただの名詞として扱われ、「まつ毛美容液」は辞書登録したので分割されず、ひとつの単語として扱われます。

f:id:whiteblues1017:20190902005913p:plain
辞書登録後の形態素解析結果

まとめると、今回は以下の二つのことを行いました。

  1. 見出し語の候補を抽出する
  2. 見出し語を決定する

AppBrewでは定量・定性に真摯に向き合ってプロダクトを開発したいメンバーを募集しています! ご興味がある方は転職ドラフトやWantedlyよりぜひご応募ください!

www.wantedly.com

job-draft.jp


  1. 辞書を作ることはできましたが、弊社で使用しているAWS Elasticsearchではユーザー辞書の登録ができなかったのでLIPSに入れることはできませんでした。残念…

  2. AppBrewのチームとしてのミッションの「ユーザーが熱狂するプロダクトを再現性をもって創造する」という意味です

  3. Elasticsearchに関する基礎的な話は以前こちらの記事でもお話しました

  4. コスメのブランド名のことです