ナード戦隊データマン

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

KNPを使ったOpenIE

KNPとは、日本語文の構文・格・照応解析を行うすごいシステムです。今回は、このうち「構文解析」の結果を使ってSVOの抽出をできるか、ルールベースで試します。 事前準備 KNP, JUMAN, jumanppをインストール後、pyknpをインストールしてください。 [jumanpp…

posregex: POSタグ正規表現による抽出器

品詞タグによる正規表現抽出器とは、名詞や動詞といった品詞を指定して文から語などを抽出するものです。ここでは、30行程度のコードで実行できることを確認します。 事前準備 mecabのインストール git clone https://github.com/taku910/mecab && \ cd meca…

words2textのためのアノテーション

文の自然さを評価するための2値分類モデルがあれば、文の生成タスクにおいて、いくつかの候補文の中から不自然な文を除外したり、ランク付けすることに使えます。ここでは、そのような目的で使う「文の自然さ」のためのアノテーション方法を考えます。 Words…

wordnetを使った特徴量設計

wordnetとは、概念の関係を表すシソーラス(辞書)です。概念の階層はネットワークとして表せるため、networkxへ読み込むことができます。ここでは、日本語wordnetを使い、ルートノードから指定した日本語の単語までの概念パスを求めます。その概念パスを使…

BERT苦行録3 - OpenIEをBERTで解く

OpenIEとは関係抽出タスクの一種で、文から主語、動詞、目的語のトリプルを抽出するタスクです。ナレッジグラフの自動構築などに使われます。今回はBERTをファインチューニングしてOpenIEに適用してみましょう。 アイデア BERTのrun_squad.pyでは、ソース文…

poem_detector: Qiitaのクズ記事を判定する機械学習モデル

記事の良し悪しを判定するのは、文書分類の典型的なタスクです。イイネが記事の良し悪しを意味しないなら、アノテーション基準を制定する方法でモデルを構築すればそれなりのものができそうなので、試してみましょう。 パイプライン 良い記事と悪い記事の基…

BERT苦行録2 - sentencepieceを使って事前訓練

BERTを用いて日本語ツイートの感情分析を試すという記事では、BERTについてファインチューニングと事前訓練を行いました。今回は事前訓練を行う上での注意点を書きます。 1. 語彙数とトーカナイザの問題 MeCabのボキャブラリにあわせてBERTを訓練をしようと…

BERT苦行録 - ファインチューニングして日本語ツイートを分類

BERTとは言語表現モデルで、GLUEデータセットなどに対して最近SOTAを達成したものです。今回は、日本語ツイートの感情分析を試し、その後四苦八苦して色々試したことを書きます。 BERTのダウンロード git clone https://github.com/google-research/bert wge…

セマンティックウェブと知識グラフ

セマンティックウェブとは、情報の視覚的表現よりもコンピュータに対する識別(意味)を扱うことを目的としたプロジェクトです。すでに古い技術だと考える人もいる一方で、機械学習と組合せて使われるようにもなり、再認知されてきている分野です。ここでは…

sentimentja: 日本語感情分析のpythonパッケージ

感情分析とは、与えられたテキストの感情を分類するタスクです。今回は、日本語ツイートをEkmanの基本6感情で評価という記事で作成したモデルをパッケージ化したので紹介します。 実行環境 実行を確認した環境は"Anaconda3-5.2.0"です。もし、実行環境をanac…

domextract: コンテンツ抽出のpythonパッケージ

スクレイピングの自動化とは、抽出箇所の選択等で人手を介さず、URL(またはhtmlのファイルパス)を渡すだけで抽出する技術です。今回は、コンテンツ抽出のdomベースモデルをパッケージ化したので、紹介します。 仕様概要 urlまたはhtmlのファイルパスを渡すと…

コンテンツ抽出のdom-basedモデルをvision-basedモデルのデータから学習した

コンテンツ抽出のdom-basedモデルとは、domの構造を特徴量として利用するコンテンツ抽出の手法です。今回は、web2textというツールで使われている特徴量を、RandomForestで実行します。 特徴量一覧 上記特徴量のうち、いくつかを利用します。 データの準備 …

補足: Webコンテンツ抽出モデルのために作成したモジュール

Webコンテンツ抽出のvision-based CNNという記事では、前処理段階で省略した部分がある・モジュールが若干汚い・url入力からコンテンツ抽出までのパイプラインが明確でない、という3つの点で読みにくいので、今回はその3つの点を補足します。 1.事前の前処理…

Webコンテンツ抽出のCNNモデル

Webコンテンツ抽出のvision-based手法とは、Webページのスクリーンショットを解析し、コンテンツ抽出の特徴量として使う手法です。TextMapsというオープンソースの手法もありますが、今回はモデル自体を自作します。 事前準備 Webページのスクリーンショット…

TextMapsのアノテーション環境をlabelImgで構築

TextMapsは、ディープラーニングを用いた視覚ベースのウェブコンテンツ抽出ツールです。このツールのためのアノテーション構築環境をします。 labelImg labelImgは、Pascal VOCフォーマットに対応した画像認識のためのアノテーション環境です。このアノテー…

diffbotのようにコンテンツ抽出したい

Webコンテンツ抽出におけるvision-based手法とは、Webコンテンツのスクリーンショットの画像を用いて、ターゲットのコンテンツを自動的に抽出する手法です。ここでは、TextMapsというプロジェクトを見つけたので、その理論の概要と、デモの実行を行います。 …

markerclusterを使う: 感情データをGoogle Mapにプロット

Ekmanの6感情を分類する文字ベースCNNモデルを作成しましたが、それを用いてGoogle Mapにプロットする方法を紹介します。 プロットされるもの 見たほうが早いので、以下にプロット後の画像を貼ります。(動画はこちら) ズームする前 ズームした後 日付バーの…

Kerasで多入力CNNを構築しsklearnと組合せる

文字ベースのCNNと単語ベースのCNNを組合せ、さらにsklearnでBoW+LogRegのモデルをCNNと組み合わせるコードを書きます。 jupyter notebookで実行 データはこのコンペのものを使います。 In[1]: import numpy as np import pandas as pd import os print(os.l…

gensimとkerasでツイートの感情分析

gensimのword2vecをどのようにしてKerasのEmbeddingレイヤーに凍結するのかについて、感情分析を例としてコードを書きます。 準備 まず、感情分析データは以下と同じものを使います。 https://qiita.com/sugiyamath/items/7cabef39390c4a07e4d8 そして、word…

sentencepieceとgensimとツイートデータを使ってword2vecを訓練

ランダムに収集したツイートデータが6000万件あったようなので、そのデータを使ってgensimのword2vecモデルを作りました。このモデルは、次回の記事でツイート分類タスクに使おうと思いますが、どんな感じのword2vecになったのか、その生成過程も含めて書い…

日本語ツイートの感情分析とデータの収集方法

ポール・エクマンは、感情について研究を行った心理学者で、怒り、嫌悪、恐れ、喜び、悲しみ、驚きは普遍的感情だと結論づけたようです。今回は、日本語ツイートをこの6感情で評価します。 github コードだけ見たい場合は、以下のノートブックをgithubに上げ…

ツイートをCNNで感情分析 (成功)

前回、文字ベースCNNによるツイート分類が失敗しました。結局、失敗要因は「特徴量設計がおかしい」だけでした。具体的には、データの行列化でasciiコードのOne-hotを作ってConv2Dに渡すのがそもそも無理がありました。今回は、もっと単純なCNNモデルで高い…

API利用登録せずにTwitterからツイートをスクレイピング

Twitterからのデータ収集は通常、APIが用いられますが、APIにはいくつかの利用制限があることはご存知かと思います。この利用制限を回避できる便利ツールTwitter Scraperを紹介します。 Twitter Scraperの特徴 Webから直にとってくるのでAPI登録する必要がな…

Scrapy Cloudのデータをmongodbへ自動的に格納

Scrapy Cloudとは、scrapyやportiaをscrapinghubのクラウド上で実行・監視するサービスです。スクレイピングをやっていると、スクレイピングのプロフェッショナル集団が作り上げたシステム"scrapinghub"が如何に便利で優れているか思い知らされます。 今回は…

scrapinghub/portiaの使い方

ビジュアルスクレイピングツールとは、スクレイピングをGUIから行うことのできるツールのことです。ここでは、scrapinghubの提供するportiaの使い方を書きます。 2種類の使い方 使い方には2種類あります。 scrapinghubにサインアップし、SaaSとして使う。 po…

スクレイピングのための2つの課題とブラックハット的解決

スクレイピングとは、Web上のコンテンツを自動的に抽出するテクニックの総称です。ここでは、スクレイピング時に生じる2つの技術的問題についてまとめ、「ブラックハット的解決策」を考えていきます。 課題1: 速度が遅い スクレイピングの一つの課題は、「速…

カンニングした生徒の割合を調べる方法

ベイズ推定を使えば、生徒から集めたアンケートを「正しく」用いてカンニングした生徒の割合を求めることができます。ここでは、そのアルゴリズムと算出方法を書いておきます。 プライバシーを守るアルゴリズム 各学生に面接をする方法を取る場合、生徒に直…

機械学習を使わずにニュースイベントを分類する

前回と前々回、マルコフクラスタリングによってニュースイベントを分類しました。今回は、機械学習を使わず、nnlm-ja-dim128による分散表現と類似度に対するスレッショルドだけを用いてどの程度分類できるのか試します。 ニュースイベントの分類についての概…

MCLによるクラスタに後から割り当てる

前回の記事では、マルコフクラスタリングによってニュースイベントを分類しました。今回は、こちらの論文 (Unsupervised Event Clustering and Aggregation from Newswire and Web Articles) を日本語で実行します。 パイプライン [クラスタリングフェーズ] …

マルコフクラスタリングによるニュース分類

ニュース・イベントのインスタンスとは、同一のイベントを参照する記事のことです。ここでは、教師なし学習の一つであるマルコフクラスタリングを使ってイベントインスタンスの分類を試します。 手法の概要 ここで説明する手法は以下の手順を取ります。 BoW…