衣類用語辞書の構築 | サイバーエージェント 公式エンジニアブログ
皆さん、初めまして。2009年新卒入社の遠山と申します。
広告効果検証システムCAMPのシステムを担当しております。
今回のエントリーでは、「衣類用語辞書の構築」についてお話したいと思います。

弊社では、アメーバブログのNGワードの検知にアダルトキーワードを登録した辞書を用いたり、流行語や著名人ブログ情報の検索サイトのアメーバ辞書(携帯のみ対応)では、人名を登録した辞書を用いたりしています。
独自の辞書を用いてブログ記事を解析することで、何の話題についてその記事が書かれているかを知る指標を得ることができます。

今回は、個人的にファッションが好きなので、2MBのコーパス(流行のファッションについて書かれたレポートのテキスト)から「ライダースジャケット」や「Tシャツワンピース」(※Tシャツとワンピースではないです。)といった衣類名を抽出し、ファッションの分野に特化した衣類用語辞書を作成した話を紹介させていただきます。

まずはじめに、作成した衣類用語辞書に登録されてある用語をサジェストするデモをご覧ください。

衣類用語サジェストデモ(デモの公開は終了しました)
サイバーエージェント 公式エンジニアブログ

コーパスから衣類用語辞書に登録する候補のキーワードを抽出するのに形態素解析エンジンのMeCabとIPA 辞書(ipadic-2.7.0)を用いました。

このIPA辞書ですが、「Tシャツ」や「ワンピース」といった一般的な衣類名は登録されていますが、「ライダースジャケット」や「Tシャツワンピース」といった、ファッション特有の衣類名や「Tシャツ+ワンピース」のように名詞を連結した複合語は登録されていません。
そのため、MeCabでファッション特有の衣類名を解析すると、未知語(辞書に未登録の用語)として扱われたり、複数の名詞に分割されてしまします。


$ mecab -x "UnknownWord"
ライダースジャケットとTシャツワンピースが好き
ライダースジャケット UnknownWord
と 助詞,並立助詞,*,*,*,*,と,ト,ト
Tシャツ 名詞,一般,*,*,*,*,Tシャツ,ティーシャツ,ティーシャツ
ワンピース 名詞,一般,*,*,*,*,ワンピース,ワンピース,ワンピース
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
好き 名詞,形容動詞語幹,*,*,*,*,好き,スキ,スキ
EOS

※  -x "UnknownWord" の引数オプションを指定することで辞書に未登録の語句を"UnknownWord"と表示します。

「ライダースジャケット」や「Tシャツワンピース」を一つの名詞として認識するには独自の辞書を作成する必要があります。
ファッション分野に特化した衣類用語辞書を用いるメリットは以下の2点があります。

■衣類用語辞書の構築のメリット
1. IPA辞書に登録されていない衣類用語を認識できる。
2. 複数の名詞として分割されてしまう複合語を一つの衣類用語として認識できる。


■コーパスからの衣類用語辞書へ登録する候補キーワードの抽出
コーパスからの衣類用語を抽出する手法は2つあります。

1つ目は、連続する名詞を連結して複合語とする手法です。
この手法により、メリット2の複合語の認識は、連続する名詞を結合し、複合名詞として辞書に登録すれば解決できます。
しかし、メリット1の複合語でもない未知語の抽出はできません。

2つ目の手法は統計情報を用いた下記の手法があります。

「出現頻度と連接頻度に基づく専門用語抽出」(湯本[2003])

複合名詞とその要素である単名詞(少数の基本的かつこれ以上分割不可能な名詞)の関係に着目し、単名詞の連接統計情報に基づいて名詞をスコアリングし、専門用語を抽出する手法です。

今回は、2つ目の手法の実装である「専門用語(キーワード)自動抽出用Perlモジュール"TermExtract" 」を用いて衣類名の抽出を行いました。

今回行った衣類用語辞書の構築手順は以下のとおりです。

■衣類用語辞書の構築手順
1. MeCabでコーパスを形態素解析し、出力結果をTermExtractのモジュールで解析する。
2. 1の出力結果から衣類名の単名詞で構成されている語句を抽出。
3. 2の抽出結果をMeCabで再解析し、辞書に未登録の未知語を出力し、辞書ファイルの元データclothing.csvを作成。


まず、はじめにMeCabでコーパスを形態素解析し、出力結果をTermExtractのモジュールで解析します。
TermExtractのモジュールで解析した結果の上位は以下のようになりました。専門用語として、 11227個の語句が重要度のスコアと共に出力されました。


ワンピース 558947.65
右 536659.74
スカート 522533.56
パンツ 512175.10
人気 465303.60
柄 409919.64
スタイル 334274.62
丈 311178.07
コート 255109.17
左 246359.19
シャツ 245855.14
ジャケット 242158.27
風 221371.84
黒 207750.93
色 195152.08
ショートパンツ 188068.33
ニット 186925.40
デニム 164545.20
プリント 140377.99
ショート丈 113208.87
白 109760.29
チェック柄 96821.54
ブーツ 96372.94
カラー 90680.39
ギャル 82203.64
花柄 80207.77
アイテム 70654.93
ヤング 65087.47
ウエスト 64344.66
素材 59013.61
コーディネート 56382.62
ジーンズ 47468.67
ボーダー柄 47039.66
ロング丈 46126.47
シャツワンピース 45508.37
シルエット 42500.27
アウター 42326.25
チェック 41936.23
...


上記の出力結果の中には、「ボーダー柄」や「アウター」といった衣類名でない用語も含まれています。
今回は、衣類名のみの辞書を構築するため、上記の出力結果から衣類名の単名詞(例:スカート、ジャケット)で構成されている語句の抽出を行います。
衣類名の単名詞として下記のような衣類単名詞リストを用意します。

衣類単名詞リスト

Tシャツ
デニム
ワンピース
パンツ
ドレス
レース
ブラウス
レギンス
ショーツ
...


そして、TermExtractの出力結果の語句と突合せ、語句の終端に衣類単名詞リストに含まれる語句だけを出力し、衣類用語リストを作成します。

最後にMeCab用のユーザー辞書clothing.dicを作成します。
TermExtractの出力結果と衣類単名詞リストを付き合わせた衣類用語リストの用語をMeCabで解析し、辞書に未登録の未知語のみを出力し、辞書ファイルの元データclothing.csvを作成。

clothing.csv

ショートパンツ,1285,1285,-7408,名詞,一般,*,*,*,*,ショートパンツ,ショートパンツ,ショートパンツ
ロングTシャツ,1285,1285,-7408,名詞,一般,*,*,*,*,ロングTシャツ,ロングティーシャツ,ロングティーシャツ
Tシャツワンピース,1285,1285,-10800,名詞,一般,*,*,*,*,Tシャツワンピース,ティーシャツワンピース,ティーシャツワンピース
プリントTシャツ,1285,1285,-9050,名詞,一般,*,*,*,*,プリントTシャツ,プリントティーシャツ,プリントティーシャツ
ショート丈Tシャツ,1285,1285,-10800,名詞,一般,*,*,*,*,ショート丈Tシャツ,ショートタケティーシャツ,ショートタケティーシャツ
ショート丈フォトプリントTシャツ,1285,1285,-25600,名詞,一般,*,*,*,*,ショート丈フォトプリントTシャツ,ショートタケフォトプリントティーシャツ,ショートタケフォトプリントティーシャツ
ロングスカート,1285,1285,-7408,名詞,一般,*,*,*,*,ロングスカート,ロングスカート,ロングスカート
チェック柄ブラウス,1285,1285,-10800,名詞,一般,*,*,*,*,チェック柄ブラウス,チェックガラブラウス,チェックガラブラウス
ロング丈ドレス,1285,1285,-7408,名詞,一般,*,*,*,*,ロング丈ドレス,ロングタケドレス,ロングタケドレス
オーバーTシャツ,1285,1285,-9050,名詞,一般,*,*,*,*,オーバーTシャツ,オーバーティーシャツ,オーバーティーシャツ
コットンパンツ,1285,1285,-7408,名詞,一般,*,*,*,*,コットンパンツ,コットンパンツ,コットンパンツ
...


1番目のカラムは、衣類用語リストの用語です。
2、3番目のカラムの左文脈IDと右文脈IDは、MeCabの辞書設定ファイルleft-id.defとright-id.defの中の「名詞,一般」のエントリーのID「1285」を指定します。

{MeCab_HOME}/dic/ipadic/left-id.def, right-id.def

1285 名詞,一般,*,*,*,*,*


4番目のカラムのコストは「MeCab の辞書構造と汎用テキスト変換ツールとしての利用」で紹介されている算出式に従い、長いキーワードが優先されるコスト計算式で算出します。


cost = (int)max(-36000, -400 * (length^1.5))


11番目の基本形、12番目の読み、13番目の発音のカラムは、複合語(1番目のカラム)を構成する単名詞をMeCabで解析したときの結果を連結した文字列をそれぞれのカラムに設定しました。

clothing.csvの辞書ファイルへコンパイルします。
「MeCab: 単語の追加方法」の手順に従い、上記のclothing.csvをコンパイルし、辞書ファイルclothing.dicを作成します。


{MECAB_HOME}/bin/mecab-dict-index.exe -dMECAB_HOME/dic/ipadic -u clothing.dic -f utf8 -t utf8 clothing.csv

※ IPA辞書はutf8でコンパイルされているとします。

そして、MeCabからユーザー辞書として読み込むようにmecabrcを設定します。
{MECAB_HOME}/etc/mecabrc に下記を追記。


userdic = {PATH_TO_CLOTING_DIC}/clothing.dic


これで、衣類用語辞書のユーザー辞書への登録が完了しました。

MeCabで先ほどの文章を解析してみます。


$ mecab -x "UnknownWord"
ライダースジャケットとTシャツワンピースが好き
ライダースジャケット 名詞,一般,*,*,*,*,ライダースジャケット,ライダースジャケット,ライダースジャケット
と 助詞,並立助詞,*,*,*,*,と,ト,ト
Tシャツワンピース 名詞,一般,*,*,*,*,Tシャツワンピース,ティーシャツワンピース,ティーシャツワンピース
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
好き 名詞,形容動詞語幹,*,*,*,*,好き,スキ,スキ
EOS


clothing.csvに登録した衣類用語が名詞として認識された解析結果が得られました。
衣類用語辞書のキーワードサジェストのデモ(デモの公開は終了しました)でどんな衣類用語が抽出されたかをご覧ください。
「ワンピース」一つとっても様々なワンピースがあるのがわかって面白いです。

今回のエントリーでは、MeCabとIPA辞書と専門用語抽出モジュールのTermExtract を用いた、衣類用語辞書の構築について紹介しました。
独自辞書の作成時の参考になれば、幸いです。

参考資料
専門用語抽出装置、方法及びプログラム
情報大航海プロジェクト分冊2(前編) (pdf/6.75MB): オモロ検索(page 177 - )