ナード戦隊データマン

データサイエンスを用いて悪と戦うぞ

geolife: GPSログから移動手段を予測

geolifeデータセット1とは、Microsoft Research Asia Geolife projectによって収集された、 182人のユーザーの2007年から2012年に渡るGPSログのデータです。 概要 データの読み込み データの分割 特徴量抽出 データジェネレータの作成 モデルの訓練 モデルの…

Kashgari: 固有表現抽出のモデルを簡単に作成するツール

Kashgari1は、Eliyar Ezizによって作成されている、KerasベースのNLPフレームワークです。 なにができるのか 系列ラベリング、テキスト分類のタスクを解くことができます。3種類のEmbeddingをサポートしており、その中にはBERTがあります。 このツールを使う…

VoxELでの評価結果

前回の記事で、モデリングと訓練を行ったので、今回は評価を行います。 評価手順 評価方法はメンション位置も正しく予測することではなく、正解エンティティをどのくらい予測できたかを用いることにします。 ただし、今回は正解エンティティが含まれない文は…

VoxELの5つの言語のELモデルを自動作成

VoxEL1とは、マルチリンガルのエンティティリンキングのための評価用データセットです。 やりたいこと 実行方法 run.shの中身 どんなモデルなのか 課題 VoxELをjsonへ変換する 参考 やりたいこと 複数言語に対応できるアルゴリズムを用いてELを言語ごとに訓…

Wikipediaから拡張固有表現を用いたCoNLL形式のデータを生成

拡張固有表現とは、PER, LOC, ORG, MISCのような少数のタイプではなく、より多くのタイプを定義したものです。 追記: 2019-06-25 11:09 IOBタグの定義を間違えました。 Bは先頭、Iは中間です。 CoNLL形式について 固有表現抽出でよく使われるデータには、CoN…

多言語エンティティリンキングを誰でも実行できるようにした

前回、多言語エンティティリンキングの訓練コードの一部を公開しましたが、今回はメモリが十分にあり、スペックが十分あれば実行できるようにしておきました。 GitHub - sugiyamath/e2e_EL_multilingual_experiments: the experiments of an end to end meth…

E2Eの多言語エンティティリンキング

エンティティリンキングとは、テキスト内のメンションを、知識ベース内の適切なエンティティに対応させるタスクです。 エンティティリンキングの概要 E2E化するには 多言語化するには コード 1. データジェネレータ 2. 訓練 3. 候補生成モジュール 4. Entity…

deeppavlov: BERTによる固有表現抽出の多言語モデル

deeppavlov1は、ダイアログシステムやチャットボットのための、ディープラーニングを使ったエンドツーエンドのオープンソースライブラリです。 NERコンポーネント deeppavlovはチャットボットなどのためのライブラリですが、様々なコンポーネントを公開して…

corefとopenieで知識グラフを自動構築

知識グラフとは、主語・述語・目的語のトリプルからなるグラフです。主語と目的語はエンティティであり、述語はリレーションとなります。ここでは、CoreNLPのco-reference resolutionとopenieを使って知識グラフの自動構築をします。 事前準備 CoreNLPサーバ…

感情分析: 英語で訓練するだけで数十言語に対応する

LASER1というSentence Encoderを使えば、zero-shotで感情分析の多言語モデルを作成可能だと思ったので、試してみます。 実行フロー 事前準備 コード モジュール (embed_hander.py) 英語で訓練 テスト 英語のテスト アラビア語のテスト テスト結果 実行フロー…

TSAのための自動ラベリング

TSAのデータセットにはSentiHoodなどがありますが、データセットのサイズはそれほど大きくありません。今回は、Unsupervised Aspect Term Extraction with B-LSTM & CRF using Automatically Labelled Datasets1 という論文にかかれている自動ラベリング手法…

系列ラベリングのより良いモデル: 単語 + 文字

系列ラベリングの基本的なモデルは、単語ベースの埋め込みを利用します。これに加えて文字ベースの埋め込みを追加する方法があります。 目的 コード データの読み込み 前処理 モデリング テスト 結果 考察 参考 目的 TSA (targeted sentiment analysis) のた…

targeted sentiment analysisを試しにやってみる

TSA(targeted sentiment analysis)とは、文内の対象に対して感情ラベルを予測するタスクです。 データ jupyterで実行 考察 参考 データ データは以下からダウンロードします: https://github.com/sugiyamath/tsa_examples/tree/master/data/conll jupyterで…

bahuleyan-vechtomova2017semevalの検証

semeval2017 task8は、ツイートに対するstance detectionのタスクの一つです。 検証対象 論文 概要 事前準備 コード 前処理 idとデータパスの対応付け データの展開 展開したデータの整形 訓練 特徴量設計モジュール xgboostを訓練 テスト コード 結果 考察 …

bpembをkerasのEmbeddingに凍結

BPEmbとは、事前訓練済みのSentencepieceモデルです。 github.com 今回は、BPEmbをKerasのEmbedding layerに凍結する方法を書きます。 コード まず、以下のURLからBPEmbをダウンロードします。 https://github.com/bheinzerling/bpemb#downloads-for-each-la…

議論マイニング: IBM Debater Claim Stance Dataset

IBM Debater Claim Stance Datasetとは、議題と主張を入力として、主張が議題に対して賛成か反対かを判定するためのデータセットです。 コード import pandas as pd import numpy as np import sentencepiece as spm from sklearn.utils import shuffle from…

討論を分析するというアイデア

討論とは、議題に対して賛否を争う言論上の戦いのことです。オンラインでは、debate.orgのようないくつかの議論サイトがあり、こういった議論のデータを使った分析が行えないか、というのが今回考えたいアイデアです。 概念図 なぜ討論を分析するのか 討論と…

名詞と形容詞の文内における共起関係

名詞と形容詞の共起関係の抽出は、その名詞の持つ性質についてなにか手がかりが得られるかもしれません。ここでは、名詞と形容詞の共起関係を抽出する単純なスクリプトを作成してみます。 コード # coding: utf-8 import nltk import nltk.tokenize as nt de…

入力語と共起しやすい単語をレコメンド

記事を書く人が利用するボキャブラリーやアイデアに悩んでいるとき、入力語に関連する単語をレコメンドすることによってアイデアが生まれるかもしれません。ここでは、そのような単語レコメンドのためのスクリプトを書きます。 wikipediaダンプから共起グラ…

XNLIとは何か

Cross-lingual Natural Language Inference (XNLI) コーパス1とは、MultiNLIコーパス2のために、集められたデータです。データは前提・仮説・ラベルから成り、14の言語に翻訳されています。このコーパスは、英語のNLIデータだけをトレーニング時に利用し、そ…

Sentence Embeddingを用いた多言語の転移学習

facebookresearch/LASER1とは、複数の言語に対応したSentence Embeddingです。 ざっくりした要約 LASERでは、英語のSentence Embeddingと他の言語のSentence Embeddingの類似度が同一空間で測れるように訓練されます。 モデル^2は以下のようになっています: …

Multilingual Unsupervised and Supervised Embeddings ってどんな手法?

facebook/MUSE1とは、Multilingual Word Embeddingにおいて、教師なし学習と教師あり学習を組み合わせた手法の一つ2です。 ざっくりいうと 2組のWord Embeddingを用いる。翻訳が共有空間において近くなるように写像を学習するのが目的。 教師あり学習 過去の…

英語word2vecを日本語word2vecに変換

マルチリンガルなWord Embeddingとは、複数の言語に対応するためのWord Embeddingの手法です。今回は、最も初歩的なモデルとして線形写像を使います。 概要 線形写像を用いたMultilingual Word Embeddingは、ソース言語のベクトルから、ターゲット言語のベク…

エンティティ名と定義文からタイプ予測

keras-self-attention1 は、self-attentionを簡単に使うためのライブラリです。今回は、このライブラリを使うことによって、エンティティタイプ予測の問題をより汎用的な特徴量から学習させられることを確かめます。 事前準備 pip install keras-self-attent…

語の定義を自動的に抽出する

Wikipediaにおけるエンティティとは、「ジョン・フォン・ノイマン」のようなタイトルを持つ、各々のページのことです。今回は、各々のエンティティを辞書的に定義する文を抽出します。 定義文の例 英語における定義文は、概ね以下の形式に従います。 X is a …

Wikipediaのタイプ予測

DBPedia Instance Typesは、DBPediaのオントロジー情報によって各記事を分類したものです。今回は、Wikipediaの記事をこのDBPedia Instance Typesで分類してみます。 特徴量 Wikipedia記事の定義文の単語の平均ベクトル。 Wikipedia記事のカテゴリー。 実行…

Word-sense disambiguation: 語義の曖昧性解消問題

曖昧性解消とは、ある単語が複数の意味を持つとき、文脈に応じて適切なエンティティを選択することです。今回は、前回作成したスクリプトの続きとして作成します。 仕組み node=(entity, mention), edge=(node1, node2)とした共起グラフを構築。 あるメンシ…

type probability: エンティティリンキングに使えそうな特徴量

DBPediaには、各エンティティのタイプ情報を持つデータがあります。今回は、Wikipediaから各メンションがどのエンティティと紐付いているかを統計的に算出し、その上でDBPediaと結びつけることで、語のタイプ確率を求めます。 実行 git clone https://github…

固有表現抽出のモデルを訓練する

NERとは、Named Entity Recognitionの略で、固有表現認識といいう自然言語処理のタスクの一つです。Stanford NER Taggerは、このタスクを解くためのツールです。今回は、これを自分で訓練します。 事前準備 まず、訓練データの例をダウンロードします。 http…

cmudict: 発音記号辞書をnltkから使う

cmudictとは、発音記号辞書です。nltkからこの辞書を使って、ラッパーのように韻(rhyme)を踏んでみます。 事前準備 コーパスをダウンロードします。 import nltk nltk.download("cmudict") たった30行のコード import random import nltk from collections i…