ナード戦隊データマン

機械学習と自然言語処理についてのブログ

CCNetとCCMatrixについて

CCNetとは、言語を識別しながらCommon Crawlからモノリンガルコーパスを生成するFacebook Researchのツールです。一方、CCMatrixは「CCNetによって生成されたコーパスからパラレルセンテンスを抽出する」というタスクに対する一つの手法です。

概要

cc_net ( https://github.com/facebookresearch/cc_net )では、common crawl snapshotから生のコンテンツを抽出し、重複を排除し、言語を検出し、言語モデルによるフィルタリングを適用するようです。cc_netの出力の例は以下のようになります:

{
  "url": "http://www.pikespeakhospice.org/members/1420",
  "date_download": "2019-02-15T18:40:25Z",
  "digest": "sha1:VQW3KXUOALO543IJGTK2JLVEAN2XXKHI",
  "length": 752,
  "nlines": 5,
  "source_domain": "www.pikespeakhospice.org",
  "title": "LeeRoy Aragon",
  "raw_content": "Date Honored: March 2017\nHe was a man of integrity, a hard worker, and a dedicated family man. He loved spending time with family camping, fishing, hunting, boating and just hanging out.\nHis Catholic faith was extremely important to him as he gave of his time and talents to the community. He had many friends through church and the Knights of Columbus. He was a meticulous handyman, and enjoyed building and fixing things and restoring antique furniture to perfection. He was a fan and supported his Colorado Rockies and Denver Broncos. Throughout the years he had devoted four-legged friends (his dogs and a horse named Sunny Boy).\nWe have many cherished memories of him that we will treasure until we are with him again.\n~ Family of LeeRoy F. Aragon",
  "original_nlines": 7,
  "original_length": 754,
  "language": "en",
  "language_score": 0.99,
  "perplexity": 255.11,
}

cc_netによって生成されたコーパスから、さらにパラレルコーパスを作るのがCCMatrix ( https://github.com/facebookresearch/LASER/tree/master/tasks/CCMatrix )です。

CCMatrixは、2019-12-12 9:43時点ではコードが公開されていません。

We will soon provide a script to extract the parallel data from this corpus. Please be patient

しかし、論文は公開されています。

[1911.04944] CCMatrix: Mining Billions of High-Quality Parallel Sentences on the WEB

CCMatrixの仕組みの要約

パラレルコーパスフィルタリングのMarginベーススコアリング - ナード戦隊データマン では、LASERを用いたマージンベースのフィルタリング手法を考察しました。CCMatrixのマイニングでも、その手法が使われているようです。

We show that margin-based bitext mining in a multilingual sentence space can be applied to monolingual corpora of billions of sentences. We are using ten snapshots of a curated common crawl corpus (Wenzek et al., 2019), totaling 32.7 billion unique sentences. Using one unified approach for 38 languages, we were able to mine 3.5 billions parallel sentences, out of which 661 million are aligned with English. 17 language pairs have more then 30 million parallel sentences, 82 more then 10 million, and most more than one million, including direct alignments between many European or Asian languages.

ドキュメントアラインメントはどうしているのか、と疑問に思いましたが、以下のように書かれています:

Our approach is generic and simply compares all sentences among each other, without requiring any document alignment.

つまり、すべての文に対して、LASERによるmargin-based手法を適用しているようです。そうなると問題となるのはスケーラビリティの問題です。LASERで大量の文をエンコードし、それをすべてindexへ登録するとなると、大量の空間を必要とする上に、実行時間がかかってしまいます。それについても説明はあります:

We use the same underlying mining procedure as (Schwenk et al., 2019) who extracted 135 million parallel sentences from Wikipedia in 1620 different language pairs. However, our CCNet corpus is more than fifty times larger than Wikipedia: 32.7 billion against 595 million unique sentences. Our largest corpora are English and Russian, with 8.7 and 3 billion unique sentences, respectively. For ten languages, CCNet has more than one billion unique sentences (see Figure 1). This required to significantly modify the mining pipeline in order to tackle the substantially increased computational complexity. The overall processing pipeline can be structured into three tasks: 1. text extraction and processing including sentence splitting, language identification (LID) and deduplication; 2. creation of a compressed index for each language; 3. mining parallel data for each language pair using the sentence embeddings and indexes. For each step, we aimed to parallelize the processing as much as possible, by splitting the data into several blocks. We used blocks of about fifty millions sentences. This size was chosen so that the different operations can be performed in a couple of hours. As example, all the English texts are split into 160 blocks.

CCMatrixのステップとしては、

  1. ccnetでデータ収集。
  2. laserでエンコードしてfaissにインデクシング。
  3. パラレルテキストをマイニング。

の3つだと考えられますが、スケーラビリティのために、このすべてのステップにおいて並列化することを行っているようです。並列化のために複数のブロックに分割しています。

並列化の詳細は論文を読むことをおすすめします(説明量が多いので): https://arxiv.org/abs/1911.04944

コーパスの評価

マイニングしたパラレルコーパスの評価のために、NMTの性能を評価しています。

To evaluate the quality of the mined bitexts, we train NMT systems for most of the language pairs and evaluate them on TED, WMT and WAT test sets. Using our mined bitexts only and no human translated parallel data, we achieve a new state-of-the-art for a single system on the WMT’19 test set for translation between English and German, Russian and Chinese, as well as German/French. In particular, our English/German system outperforms the best single one by more than 4 BLEU points and is almost on pair with best WMT’19 evaluation system which uses system combination and back-translation. We also achieve excellent results for distant languages pairs like Russian/Japanese, outperforming the best submission at the 2019 workshop on Asian Translation (WAT).

翻訳タスクでは「データの量や質」が翻訳性能にとって重要だと言われることがありますが、それを評価する方法として、そのデータで訓練したNMTのBLEUを評価する方法があります。

提案手法の評価は以下の3つで行われています:

  • TED
  • WMT
  • WAT

特に、英語/ドイツ語システムは、最高のシングルポイントを4 BLEUポイント以上上回っており、システムコンビネーションと逆翻訳を使用する最高のWMT-19評価システムとほぼ一致しています。(訳)

所感

JParaCrawlの手法では、paracrawl/extractorによって生成されたlangstatから候補ドメインをランク付けしていて、その中からbitextorでアラインメントを実行しています。JParaCrawlの手法は、直感的にも「候補ドメインの各々の言語のテキスト量が近ければ有力な候補である可能性が高い」というのは納得できます。そして、ドキュメントアラインメントを行ったほうが一致するセンテンスを見つけやすいという直感もあります。

その直感から見てみると、CCMatrixの「全センテンスからペアを見つける」という方法、つまりドキュメントアラインメントを使わない方法が本当に機能するのかという疑問はあります。これが機能するためには、LASERを用いたmargin-based手法によって、良い並列文を見つけられなければなりません。

個人的には、CCMatrixでもドキュメントアラインメントを使ったほうが質が上がるのでは?という気がしていますが、まだ実験していないため単なる仮説に過ぎません。ドキュメントアラインメントを使うデメリットは、おそらく抽出される並列文の量が減ってしまうという問題です。この点において、質と量がトレードオフになる可能性があるかもしれません。

参考

  1. GitHub - facebookresearch/cc_net: Tools to download and cleanup Common Crawl data
  2. LASER/tasks/CCMatrix at master · facebookresearch/LASER · GitHub
  3. [1911.00359] CCNet: Extracting High Quality Monolingual Datasets from Web Crawl Data
  4. [1911.04944] CCMatrix: Mining Billions of High-Quality Parallel Sentences on the WEB