更新日:2015/09/15

はじめに

単語や固有表現に対する言語処理において,データスパースネスの問題を回避するために,それらのクラスタリンング結果を用いることがよく行われます.これは,食材や調理動作に対応するレシピ固有表現(以下,「レシピ用語」と呼ぶ)においても有用であると考えられます.同じ処理を各所で行うような重複を避け,食メディアの研究が効率的に推進されることを願って,頻出のレシピ用語の自動クラスタリングを行いました.このページでは,手法を説明し,その結果を提供いたします.提供する結果は,約43万件のレシピ手順文書に対してレシピ用語認識を行った結果を入力として,レシピ用語ごとに自動クラスタリングしたものです.
レシピ手順文書に対してレシピ用語認識を行う方法については,レシピ言語処理マニュアルをご覧ください.
入力例と出力例を以下に示します.
  • 入力例
    いちご/F を 塩/Ac ふ,ふる っ て ざっと 洗,洗う/Ac う 。 水気/F を 切,切る/Ac っ た,た ら へた/F を と,とる/Ac る 。
    わかめ/F の 茎/F を こまか,こまかい く 刻,刻む/Ac み ま,ます す 。
    ...
  • 出力例(Fタグを対象に自動クラスタリングした結果)
    分類     単語            出現数
    00000   部分/F          19579
    00001   煮汁/F          14402
    00010   シソ=ジュース/F  8
    000110  ボディ/F        8
    ...
  • 上記出力例から生成されるツリーの例
    出力例から生成されるツリーの例

注意事項

  • 以下の処理は,すべて文字コードUTF-8で行います.
  • Pythonが入っていない場合はインストールしてください(サンプルプログラムを利用する際に必要)(Python2とPython3に互換性はありませんが,それぞれに対応したサンプルプログラムを用意しています)
  • サンプルプログラムは,入力されるファイルの改行コードがLF("\n")であることを前提として作られています.
    (必要に応じてサンプルプログラムを変更してください.)

データセット

レシピ数 手順数 単語種類数 単語のべ数
429,691件 2,072,198行 350,969種類 51,065,683語

実行内容

  • レシピ言語処理マニュアルの手順をすべて実行します.
  • 手順1から得られた結果に対して,以下のように不要な情報を除去します.
    • 除去前の例
      糸,名詞,名詞-普通名詞-一般+,し,NA=蒟蒻,名詞,名詞-普通名詞-一般+,こんにゃく,NA/F を,助詞,助詞-格助詞+,を,NA 下茹で,名詞,名詞-普通名詞-サ変可能+,したゆで,NA/Ac し,動詞,動詞-非自立可能+サ行変格,し,する ま,助動詞,助動詞+助動詞-マス,ま,ます す,語尾,語尾+助動詞-マス,す,NA 。,補助記号,補助記号-句点+,。,NA
    • 除去後の例
      糸=蒟蒻/F を 下茹で/Ac し,する ま,ます す 。
    サンプルプログラム(Python 2)展開する.
    サンプルプログラム(Python 3)展開する.
  • データセットの単語種類数が非常に多く,このままだとクラスタリングに非常に時間がかかるため,以下のように,出現回数がk以下の単語を"UNK"に置換します.
    • 置換前の例
      糸=蒟蒻/F を 下茹で/Ac し,する ま,ます す 。
    • 置換後の例(「下茹で/Ac」の出現回数がk以下の場合)
      糸=蒟蒻/F を UNK し,する ま,ます す 。
    サンプルプログラム(Python 2)展開する.
    サンプルプログラム(Python 3)展開する.
  • クラスタリングの対象とする,特定のレシピ用語(NE)タグが付いた単語の一覧を,以下のように,出力します.
    • Fタグの一覧を出力した例
      にんじん/F
      大根/F
      なす/F
      ...
    • Acタグの一覧を出力した例
      切,切る/Ac
      割,割る/Ac
      加え,加える/Ac
      ...

    cat [手順3で出力されたファイルパス] | tr " " "\n" | grep "/[レシピ用語タグ]$" | sort | uniq > [出力先のパス]
                      
    cat ./step3.txt | tr " " "\n" | grep "/Ac$" | sort | uniq > ./step4.txt
                      
  • 自動クラスタリングプログラムをこちら(C++ implementation of the Brown word clustering algorithm)からダウンロードし,コンパイルします.
  • 以下のようにして,クラスタリングを実行します.
    [手順5でコンパイルした実行ファイル(wcluster)] --text [手順3で出力されたファイルパス] --c `wc -l [手順4で出力されたファイルパス]` --threads [実行時のスレッド数] --restrict [手順4で出力されたファイルパス]
                      
    ./wcluster --text ./step3.txt --c `wc -l ./step4.txt` --threads 6 --restrict ./step4.txt
                      
    プログラムを実行すると新たなディレクトリが生成されます.そのディレクトリ内に生成される"paths"ファイルが,クラスタリング結果です.

実行結果

上記のデータセットに対して,出現頻度7以下の単語を"UNK"に置換した上で(すなわち,実行内容 手順3のkの値は,"7"),クラスタリングした結果を以下に示します.
なお,クラスタリング処理を行ったCPUは,「AMD Opteron(tm) Processor 4334」です.
対象NEタグ NEの種類数 スレッド数 処理時間 使用メモリサイズ
F 15,493 6 36h 15m 05s 1,402 MB
T 2,328 2 09m 55s 124 MB
D 2,317 2 08m 16s 123 MB
Q 1,539 2 02m 38s 54 MB
Ac 8,288 6 06h 48m 17s 1,574 MB
Af 1,721 2 03m 58s 68 MB
Sf 6,849 4 04h 18m 37s 1,075 MB
St 362 2 17s 3 MB
クラスタリング結果はこちらからダウンロードできます.

参考文献

連絡先

  • 森 信介 (forest [at] i.kyoto-u.ac.jp)
  • 山肩 洋子 (yamakata [at] dl.kuis.kyoto-u.ac.jp)
  • 門脇 拓也 (kadowaki [at] dl.kuis.kyoto-u.ac.jp)
※[at]を@に置き換えてください.
※サンプルプログラムやリンク切れ,記載内容の不備に関するお問い合わせは,門脇までお願い致します.

更新履歴

  • 2015/09/15(最新の更新)
    • 目次ハイライト機能の導入
更新履歴をすべて展開