ナード戦隊データマン

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

wordnetで異なる抽象度の文を生成

wordnetは、同一概念の単語をまとめ、さらに概念の抽象度に基づくネットワークが定義されたデータです。 概要 単純なモジュール 文を生成する 何がしたいのか 参考 github.com 今回は、wordnetを使って単純な文を文レベルで抽象化・具体化します。 概要 以下…

データ全体から未定義の性質を持った部分集合を得る

データ全体から未定義の性質を持った部分集合を得る、という問題は最近取り組んでいる問題ですが、この問題は単に技術的な問題ではなく、政治的衝突が発生する可能性があると考えたため、問題について整理します。ここでの整理は自分の思考の整理を目的とし…

slurm上でlangstat_generatorを実行

langstatは、各言語のデータが各ドメインにどのくらいあるのかを表す統計ですが、これを生成するためにlangstat_generatorというものを作っております。CommonCrawlは膨大なデータがある上に、cc_netと同様の方法で生成するという要件があったため、slurm上…

slurmでZero Bytes were transmitted or receivedが出たときに行った対処

slurmはジョブを複数の計算ノードに分散実行するために使えるミドルウェアですが、Zero Bytes were transmitted or receivedというエラーが頻発したため、行った対処方法をメモします。 TL;DR slurmの仕様の一つ 対処方法1: タスク実行中は常に標準出力を生…

langstat_generatorの高速化

langstat_generatorとは、cc_netの手法に基づいてlangstat (各ドメインの各言語のテキストがどのぐらいあるかの統計) を生成する自作スクリプトです。slurm上で実行することが目標でしたが、いくつか高速化したため、高速化した点を書きます。 github.com 3…

aws parallel clusterのcompute instanceにpythonパッケージを入れる方法

compute instanceは分散実行させる際に使うノードです。分散実行させるためには、各々のノードに必要なものが入っていなければなりません。どうすればpythonパッケージを入れられるでしょうか。 TL;DR 概要 インストール方法 方法1: virtualenvを使わない方…

cc_net的な方法でlangstatsを生成する

cc_netとは、CommonCrawlからモノリンガルコーパスを生成するためのツールです。langstatsを生成するのにも使えそうですが、slurmによる分散実行部分のコードが欠損しており、sbatchにcc_netを渡すには面倒なコードになってしまいます。そのため、cc_net的な…

aws-parallelclusterでslurmを使う

AWS parallelclusterとは、AWSでハイパフォーマンスコンピューティング(HPC)を実行するための環境です。slurmはワークロードを管理するためのツールで、分散実行したいジョブを管理します。今回は、paracrawl/extractorというツールの分散実行を例にします。…

単語Embeddingを2次元上にプロットする

前回 ( https://datanerd.hateblo.jp/entry/2019/12/14/134234 ) は、単語の共起グラフから単語Embeddingを作りました。今回は、このEmbeddingをプロットします。なお、ここでの手順は一般的なword2vecにも適用可能です。 コード 出力 考察 参考 github.com …

単語グラフから単語Embeddingを生成する

前回の記事( https://datanerd.hateblo.jp/entry/2019/12/13/123857 )で単語の共起関係からグラフを作成しました。今回は、そこで用いた共起関係を用いてEmbeddingを作成します。 考えた方法 コード 共起語の生成 Embeddingの訓練 不正なEmbeddingの修正 Emb…

wordgraph: 単語グラフを記事テキストから生成する

記事テキストのコーパスから、単語の共起関係を使って単語グラフを生成するだけの単純なスクリプトを作ったので書きます。 使い方 ダウンロード セットアップ 共起関係の構築 グラフの構築 グラフを使う例 追記 参考 github.com 使い方 ダウンロード $ git c…

CCNetとCCMatrixについて

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

sentimentjaの作り方: 日本語の感情分析モデルを簡単作成

sentiment_jaは、日本語テキストの感情を6種類に分類するためのモデルです。このモデルを作るのはそれほど難しくはありませんし、ブログ記事の中で作り方を書いた覚えがありますが、「使い方しかわからん!」という人もいると思うので、sentiment_jaを作るた…

sentimentjaのモデルを更新しました

sentimentjaは、2018年に作った感情分析モデルです。Ekmanの6感情に基づいて、テキストを6つの感情によって分類します。今回は、モデルを更新したので更新した部分がどこなのか書きます。 更新点 インストール 使い方 v2の注意点 リンク 更新点 tensorflowの…

括弧の文法エラーをチェックする30行のコード

括弧は、始括弧と終括弧のペアによって機能する文法です。括弧の文法エラーは単純なルールベースで検出できると思ったため、コードを書きました。 カッコの文法規則 コード テスト 考察 コーパス中の括弧の傾向 Text normalization 参考 カッコの文法規則 カ…

bitextorで使うlangstatsを生成する方法

langstatsでは、各ドメインに対する各々の言語のドキュメント量を定義します。langstatsをbitextorに渡せば、スレッショルドを指定して候補ドメインを制限することができます。このlangstatsを生成する方法があったので書きます。 paracrawl/extractor 使い…

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

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

スクレイピングにおいて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クロールしてパラレルコーパスを生成する手法では、間違った対応関係をもつ文ペアを保持することがあります。あるいは…