Word Mover's Distance(4)トリプレット(triplets)
藤田昭人
本稿から数回に分けて トリプレット(triplets) について紹介します。
トリプレット(triplets) は fastWMD 論文の評価実験に登場します。 対話システムのコーパスとして 既存の書籍の文面を活用しようとしている僕には これ、非常に興味深い評価実験で 使用しているデータセットなど さらに深掘りしようと考えています。
fastWMD論文の2つの評価実験
一般に、 機械学習の研究では「データを学習」することが前提なので、 提案されているアルゴリズムのロジックを追うだけでは 妥当性の確認は難しいような気がしています。通常 「このデータにはこのアルゴリズムが有効」 といったようにデータとアルゴリズムがセットで提案されます。 それ故、この種の研究論文ではアルゴリズムのロジックの記述だけでなく 評価実験にはデータセットの詳細が記されています。
くだんの fastWMD 論文を再掲します。
この論文では高速化WMDの評価として次の2つの実験結果を示しています。
Document classification via k-NN(K近傍法による文書分類)
この
K近傍法
による文書分類の評価は
WMDのオリジナルである
kusner論文
の実験を踏襲しています。
DATASET | WCD | WMD | RWMD(S) | RWMD(L) | REL-RWMD(L) |
---|---|---|---|---|---|
20NEWS | 1.87 | 6,244 | 842 | 68.0 | 13.4 |
AMAZON | 0.30 | 351 | 71.7 | 22.1 | 4.47 |
BBCSPORT | 0.01 | 21 | 3.72 | 1.38 | 0.27 |
CLASSIC | 0.24 | 213 | 45.6 | 10.8 | 2.26 |
OHSUMED | 0.47 | 1,002 | 158 | 25.1 | 5.20 |
RECIPE | 0.09 | 106 | 27.6 | 2.13 | 0.55 |
REUTERS | 0.27 | 181 | 47.7 | 10.9 | 1.67 |
0.04 | 3.32 | 1.23 | 0.43 | 0.18 |
実験ではkusner論文と全く同じデータセットを使用して、 同じようにエラーレートを評価していますが、 さらに各データセット毎にアルゴリズムを変えた実行時間の計測を追加しています。
Identifying related documents(関連文書の識別)
もうひとつの評価実験では Dai論文 の評価方法を踏襲しています。Dai論文は Paragraph Vector、すなわち 文書の分散表現 を評価した研究論文で、次の Wikipedia と arXiv の2つの文書類似性データセットを評価実験に用いています。
http://cs.stanford.edu/~quocle/triplets-data.tar.gz
Dai論文では Paragraph Vector を生成するアルゴリズムとして Le と Mikolovの論文、 いわゆる doc2vec を想定していたようですが、 そのライバルと目される WMD を使って Dai論文と同様の評価を行なったのが fastWMD 論文ということなのでしょう。
トリプレットとは?
前述の「文書類似性データセット」のデータをダウンロードします。 このアーカイブには3種類の トリプレット と README が収録されています。
$ tar tvzf triplets-data.tar.gz -rw-r----- 0 adai eng 938 7 11 2015 README -rw-r----- 0 adai eng 535 7 11 2015 LICENSE -rw-r----- 0 adai eng 2024923 6 24 2015 arxiv_2014_09_27_examples.txt -rw-r----- 0 adai eng 2971663 6 24 2015 wikipedia_2014_09_27_examples.txt -rw-r----- 0 adai eng 22746 6 24 2015 wikipedia-hand-triplets-release.txt $
README を覗いてみると、 次のような トリプレット(triplets) に関する簡潔な説明が確認できます。
This is a dataset for evaluating document similarity models. In each file, each line consists of a triplet of URLs, either all from Wikipedia or all from arXiv.org. The triplets in the file 'wikipedia-hand-triplets-release.txt' were hand generated whereas the other two files were generated automatically be examining Wikipedia and arXiv.org document categories. The content of URLs one and two should be more similar than the content of URLs two and three.
これはドキュメントの類似性モデルを評価するためのデータセットです。 各ファイルでは、各行は3つのURLで構成されており、すべてWikipediaからのURLか、すべてarXiv.orgからのURLです。 ファイル 'wikipedia-hand-triplets-release.txt' の トリプレット は手動で生成されましたが、 他の2つのファイルは、WikipediaとarXiv.orgのドキュメントカテゴリを調べて自動的に生成されました。 URL1 と URL2 の内容は、URL2 と URL3 の内容よりも類似している必要があります。
補足すると…
例えば 'wikipedia-hand-triplets-release.txt'の(1行目はコメントなので) 2行目は(スペースで区切られて)次の3つのURLが定義されています。
- URL1:http://en.wikipedia.org/wiki/Deep_learning|
- URL2:http://en.wikipedia.org/wiki/Machine_learning|
- URL3:http://en.wikipedia.org/wiki/Computer_network|
各 URL は Wikipedia 英語版のページですが、 'Deep learning' と 'Machine learning' の関係の方が 'Deep learning' と 'Computer network' の関係よりも意味的に類似していますよね? このように「URLで指定される3つの文書の意味的な関係の定義」を Dai論文では トリプレット と呼んでいるようです。
fastWMD用の Wikipedia データセット
fastWMD では Dai 論文の「文書類似性データセット」から 4種類のデータファイルを生成して*1入力データとして使います。 もっとも、生成されたデータファイルは 以下の Dropbox のサイトからダウンロードが可能です。
Wikipedia のデータセットは 'wikipedia.tar.gz' です。 その tarball の中身は次のとおり。
$ tar tvzf wikipedia.tar.gz -rw-rw-r-- 0 mwerner_local mwerner_local 337304 9 25 2019 wikipedia-triplets.txt -rw-rw-r-- 0 mwerner_local mwerner_local 6195900 9 25 2019 wikipedia-tokens.txt -rw-rw-r-- 0 mwerner_local mwerner_local 303509985 9 25 2019 wikipedia-papers.txt -rw-rw-r-- 0 mwerner_local mwerner_local 2609813322 9 25 2019 wikipedia-embeddings.txt $
この4つのデータファイルがあれば、 前回 生成した triplets コマンドが実行できます。
triplets コマンドの実行
fastWMD用の Wikipedia データセットを使って 前回 ビルドした triplets コマンドを実行してみます。 fastWMD論文を参考に次のスクリプト triplets-cosine.sh を作成しました。
#!/bin/sh -x ../build/triplets \ --trip ../dataset/triplets/wikipedia/wikipedia-triplets.txt \ --docs ../dataset/triplets/wikipedia/wikipedia-papers.txt \ --emb ../dataset/triplets/wikipedia/wikipedia-embeddings.txt \ --verbose false --num_clusters 289 --max_iter -1 --func cosine --r 16
このスクリプトはビルドツリーを仮定してますが、 Github のfastWMDのビルドツリー にもスクリプトを追加しましてありますので参考してください。
まとめ
本稿では トリプレット(triplets) の解説を軸に、 Dai論文の「文書類似性データセット」、および それから生成された fastWMD 用データセットについて 紹介しました。
前述のスクリプトを実行すると、 実行時間が一番早いはずの cosine でも 実行終了まで結構待たされますが、 実は wikipedia-embeddings.txt は 以前紹介した Word2Vec の学習済みデータです。 大規模なベクトルデータなので ロードするのに時間がかかります。
以降、しばらくは Wikipedia 用データセットに注目して fastWMD の挙動を調べて行きたいと思います。
以上
*1:データファイルを生成するために、fastWMD では
arXiv 向けの
parser_arxiv_papers.py
と、Wikipedia 向けの
wiki-xml-to-txt.py
の2種類のPythonスクリプトが用意されています。
詳細はのちほど。