ナード戦隊データマン

機械学習, 自然言語処理, データサイエンスについてのブログ

記事に対するローカルクローラの抽象化

ローカルクローラは、「特定のサイト内に限定したクローラ」とここでは定義するとすると、さまざまなサイトに対して異なるクローラが存在するはずです。しかし、それらのローカルクローラの共通の特徴はなんでしょうか。 グローバルクローラとローカルクロー…

スクレイピングにおいてIPのBanを防ぐ方法

自然言語処理では、しばしばコーパスを作るためにWeb上のリソースを利用します。そのためにスクレイピングをするのですが、大量のリクエストを特定のサイトに送るとBanされる可能性があります。今回はそれを防ぐ一つの方法を書きます。(悪用厳禁) TL;DR 概要…

超効率のいいローカルキーバリューストアkyotocabinetを試してみた

データベースを使う必要はないが、メモリ内でやるには量が多すぎる、という場合にキーバリューストアを利用することができますが、より簡単かつ高速に実行できるライブラリの一つがkyotocabinet1です。今回は、kyotocabinetをインストールし、パフォーマンス…

字幕コーパスJESCのコードを理解し、パラレルコーパスを作成する

JESCとは、ネット上からクロールされた字幕データを用いた日英パラレルコーパスです。 概要 corpus_generation subscene_crawler.py parser_v4.py ドキュメントアラインメント 文アラインメント subscene_crawlerの機能追加とリファクタリング 追加したい機…

パラレルコーパスフィルタリングのMarginベーススコアリング

Marginベーススコアリング手法は、近傍探索を類似度に組み合わせた手法で、Facebook AI Researchによって論文が公開されています。 実装したいもの 簡易実装 使い方 課題 参考 github.com 実装したいもの Margin-based Parallel Corpus Mining with Multilin…

LASERtrain: 文Embedding LASERの訓練方法

LASERはクロスリンガルのセンテンスエンコーダとして使えるモデルです。 概要 LASERについての概要は以下で書いたことがあります。 Sentence Embeddingを用いた多言語の転移学習 - ナード戦隊データマン もし、publicの事前訓練済みモデルを使うだけならば、…

zipporahにLID+overlapスコアを追加する

機械翻訳のデータの質を大きく下げる要因として、言語の誤り、単語のオーバーラップがあります。 概要 zipporahスコアへの組み込み方 zipporahスコアはロジスティック回帰の決定関数を出力しています。この決定関数の最小値よりも小さな値を、「言語の不一致…

WMT19のパラレルコーパスフィルタリングのタスクでzipporahとbicleanerを比較

WMT19では、リソースの少ない言語に対するパラレルコーパスフィルタリングを共有タスクとして公開しています。 概要 zipprahとbicleanerの比較 実行方法 事前準備 プロジェクトのダウンロード 必要なツールのインストール データの準備 baselineの実行 自前…

Language Identificationの2つのモデルのパフォーマンスを比較

Language Identificationとは、与えられたテキストの言語の種類を予測するタスクです。 2つのモデル langdetectモジュール fasttextの公開モデル パフォーマンス比較 コード 結果 考察 2つのモデル langdetectモジュール pythonのlangdetectモジュールは言語…

bicleanerにおけるProbabilistic Dictionaryの正式な生成方法

bicleanerのドキュメントに、確率的辞書の生成方法についての記述が追加されたので紹介します。 事前準備 mosesdecoderとmgizappをインストールします。 cd /opt git clone https://github.com/moses-smt/mosesdecoder.git git clone https://github.com/mos…

bicleanerの特徴量設計コードを抜き出す

bicleanerの特徴量設計のコードを抜き出すことが出来れば、他のツール(例えばzipporahやlaser)の特徴量を組み合わせて使えるようになります。 features.py 基本的に、特徴量設計は以下の部分にまとめて書かれています。 https://github.com/bitextor/biclean…

Zipporahの特徴量設計をpythonで実装

ZipporahはWebクロールによって収集したパラレルコーパスのノイズを除去するツールですが、bashによる複雑なスクリプトで実装されていてモジュール性がありません。そこで、特徴量設計部分をpythonで実装してみます。 論文の要点 ノイズ生成 実装 zipporah_f…

MGIZA++の最終出力からbicleaner用の確率的辞書を生成する

確率的辞書とは、ソース言語の各単語に対して、どのぐらいの確率でターゲット言語の対応する各単語が生起するかを表す辞書です。この辞書は、ターゲット言語の単語[space]ソース言語の単語[space]生起確率[newline]という形式で生成されます。MGIZA++は単語…

Webクロールで集めたパラレルコーパスをクリーニングする

パラレルコーパスフィルタリング1とは、ノイズのあるパラレルコーパスをクリーニングするタスクです。ParaCrawlプロジェクト2 のようにWebクロールしてパラレルコーパスを生成する手法では、間違った対応関係をもつ文ペアを保持することがあります。あるいは…

tensor2tensorのn-best出力を言語モデルでリスコアリング

NMTにおけるリスコアリングとは、NMTによって得た出力を、別のモデルで再評価することです。その一つの方法として、言語モデルによるリスコアリングがあります。 概要 tensor2tensorでn-best出力を得る KenLMで言語モデルを作成 コンパイル 言語モデルの作成…

SGNMT: 機械翻訳のためのデコーディングプラットフォーム

機械翻訳において性能を向上させるための一つの方法として、デコーディング系の手法があります。SGNMT1はStahlbergらによって開発されており、様々なデコーディング手法をサポートしているプラットフォームです。 概要 インストール install_openfst.sh inst…

探索と活用のトレードオフ: バンディットアルゴリズムでの検証

探索と活用のトレードオフとは、情報の探索にかける時間と、情報を活用する時間をどう割り振るかによって引き起こるトレードオフです。 バンディットアルゴリズムの概要 コーディング epsilon_greedy.py bernoulli_arm.py simulator.py jupyter notebookで実…

fairseqを試しに使ってみる

fairseq1とは、研究者や開発者が翻訳、要約、言語モデリング、その他のテキスト生成タスク用のカスタムモデルをトレーニングできるシーケンスモデリングツールキットです。 インストール データのダウンロード 前処理 mecab.pl split_data.py prepare.sh fai…

tensor2tensorでsentencepieceを使う方法

tensor2tensorのt2t-datagen1では指定したproblemに定義された方法を使ってtensorを生成します。内部ではSubwordTextEncoderを使ってサブワードに分割しますが、vocabファイルの生成において、sentencepieceよりも非効率なので大量のメモリを消費する上に実…

MTNTに対するモデリング

MTNTについての解説1や、WMT19でのタスク2などを書いてきましたが、今回は試しに実装してみます。 パイプライン モデル 結果 考察 参考 パイプライン 必要なデータのダウンロード データに対する準備 baselineモデルの訓練 逆翻訳の実行とファインチューニン…

WMT19 Robustness Taskの論文の1つをざっくりまとめる

WMT19のRobustness Task1とは、MTNT2のようなノイズありテキストに対する翻訳タスクです。 Robustness Taskの概要 論文の手法の概要 NMTモデル 前処理 モノリンガルデータ Placeholder ファインチューニング BLUEスコア 参考 今回は、そのうちの一つとして、…

ソース文にドメインタグを追加してTransformerを訓練

機械翻訳では、ソース文を編集する手法がいくつかあります。その一つがタグの追加です1。 概要 とあるデータの例 コード データの展開 myproblem.py 訓練 avg_checkpoint デコード 評価 結果 考察 参考 概要 ソース文に以下のような文があるとします。 文1: …

逆翻訳をtensor2tensorで実行

逆翻訳とは、ターゲット言語のモノリンガルコーパスを訓練済みNMTで翻訳することによりデータを増やす方法です。 実行フロー tensor2tensorでの実行方法 vocabの生成 シェルスクリプト myproblem.pyの中身 まとめ 補足 placeholder 文の長さに対する補正 言…

NMTのドメイン適応

ドメイン適応とは、ソースデータの分布から、異なる分布をもつターゲットデータで高いパフォーマンスを出すモデルを訓練する手法です。 ざっくり Data Centric 単一言語コーパスの使用 合成並列コーパス生成 ドメイン外並列コーパスの使用 Model Centric ト…

MTNTデータセットとは何か

MTNT1は、Redditから収集されたノイズありテキストに対する翻訳のためのテストベッドです。 ダウンロード データセットは以下からダウンロードできます。 https://www.cs.cmu.edu/~pmichel1/mtnt/ ノイズありテキストとは ソーシャルメディアのテキストには…

tensor2tensorの翻訳モデルをサーバ化して実行

tensor2tensorで訓練した翻訳モデルを使いたいとき、複雑なコードを書かずに実行する方法の一つがserving1です。 実行方法 1. serving用にexportする (t2t-exporter) 2. tensorflow_model_serverを立ち上げる 3. pythonからAPIを使う (query.py) 参考 実行方…

warc_crawler: warcファイルでWebをクロール

Web ARChive(WARC)1アーカイブ形式は、複数のデジタルリソースを関連情報とともに集約アーカイブファイルに結合する方法です。 WARC形式は、インターネットアーカイブのARCファイル形式の改訂版で、World Wide Webから収集したコンテンツブロックのシーケ…

webvtt形式のパラレルコーパスのalignment

webvtt1は字幕データの一般的なファイル形式です。 概要 コード align.py align_example.py アルゴリズムの説明 抽出結果の一部 考察 追記 参考 概要 youtube-dl2を使って字幕データのパラレルコーパスを生成した場合、そのままの状態では1対1の文のペアには…

youtube-dlを使ってYoutube動画の字幕からパラレルコーパスを生成

youtube-dl1は、youtube動画をダウンロードするためのCLIツールです。 インストール Unix系ユーザーは以下のコマンドでインストールが可能です。 sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl sudo chmod a+rx…

bitextor: Webから自動的にパラレルコーパスを生成するツール

bitextor1とは、指定したホストから自動的にパラレルコーパスを収集するツールです。 概要 実行方法 dockerコンテナに入る 必要なものを入れる トーカナイザの準備(mecab-tokenizer.perl) パラレルコーパスの準備 myconfig.yamlを書く 実行 結果 考察 追記 …