ナード戦隊データマン

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

doccanoでAutoLabelingっぽいものを自前で実装

doccano1とは、@Hironsan が作成しているアノテーションツールです。今回は、いくつかの要件に基づいて自動ラベリングをテストします。 要件 手作業でアノテーションしたプロジェクトが数件ある。 それらのプロジェクトのラベルは一致している。 自動ラベリ…

Wikipedia記事のグラフ特徴量を求める

ページランクとは、グラフ特徴量の一つで、ネットワーク上のノードの重要性を判別するための量の一つです。ここでは、igraphというパッケージを用いてページランクを求めます。 事前準備 jawikiのダンプから、jawiki-latest-page.sql.gzとjawiki-latest-page…

単語ベクトルの性能評価

JWSAN1 とは、日本語単語類似度・関連度データセットです。ここでは、単語ベクトルの評価にこのデータセットを使ってみます。 事前準備 https://github.com/sugiyamath/jawiki2w2v を使ってword2vecモデルをjawikiから生成します。(おすすめは、t82w.pyを編…

BERTとfaissを組み合わせる

BERTをエンコーダとして使ったらどうなるか検証するために、文をエンコードし、それをfaissへ入れて類似性検索を行います。 そもそもBERTにおける文ベクトルってあるの? BERT Vector Space shows issues with unknown words https://github.com/google-rese…

word2vecのオンライン学習

nonce2vec1とは、少数のデータを用いて訓練済みWord2vecに新語を加えるなどする手法です。ここでは、その使い方を見てみます。 概要 nonce2vecは3つのフェーズを取ります。 事前訓練済みWord2vec(skip-gram)の読み込み。 訓練対象文のボキャブラリー構築。 …

jawiki2w2v: jawikiダンプからword2vecを自動生成

Wikipediaのダンプからword2vecを生成するやり方を知らない初心者がいると思ったので、Ubuntu上で簡単に実行できるスクリプトを作成したので紹介します。 jawiki2w2v jawiki dumpのURLを渡せばText8とword2vecを生成してくれるツール。 https://github.com/s…

word2vecで未知語に対処する

Word2vecの問題点は、訓練後のWord2vecのボキャブラリーは固定で、OOV(Out of vocabulary)へ対処できないことです。ここでは、Word2vecのボキャブラリーをsentencepieceでサブワード分割し、それを訓練することで未知語への対処を試みます。 モデル 事前に必…

移動平均を使って感情を気分へ変換する

感情や気分の心理学的な定義は、感情を使ったアプリの開発に役立てられると考えています。ここでは、感情の構成要素と、それを気分へ変換する方法を論文1をもとに書きます。 概要 感情は、ArousalとValenceという構成要素から成ります。Arousalは感情の覚醒…

共起頻度でタグ予測しMRRで評価

共起頻度とは、2つの対象x,yが現時点までの全イベントの中で同時に現れた回数のことです。今回は、インスタグラムから特定のユーザーのタグを抽出し、共起頻度を用いて予測し、それを平均適合率と平均逆順位を用いてスコアリングします。 問題定義 ユーザー…

ElasticsearchのLTRプラグインの使い方の実例

以前、LTRについての概略を書きましたが、技術的な詳細をあまり書かなかったので、今回はElasticsearchを用いた訓練の仕方を書きます。 利用するプラグイン 以下のプラグインを利用します: https://github.com/o19s/elasticsearch-learning-to-rank パイプラ…

タグレコメンデーション: グラフを使って次のタグを予測

StackLite 1 とは、stackoverflowの質問につけられたタグの一覧のデータセットです。このデータセットを使って、エレガントな方法でタグ候補を予測します。 仮定 使えるデータは、質問IDとそのIDに対応したタグのみ。 入力済みのタグから次のタグを予測する…

気分のダイナミクスに関する数理モデル

前回の記事では、とりあえずそれっぽい仮定の基でオレオレモデリングを行い、その結果をプロットしました。今回はちゃんとした感情・気分の数理モデルを論文1から使います。 論文概要 Modeling the Dynamics of Mood and Depression[^1] という論文では、発…

心理学的な現象の数理モデル化

感情は一時的かつ特定の事象に結びついているのに対し、気分は感情の集合で継続的かつ特定の事象に結びついていません1。この事実を利用してmatplotlibでプロットしてみます。 仮定 感情が引き起こると、ネガティブ(マイナス)またはポジティブ(プラス)の…

sentencepieceとkerasを使って感情分析

sentiment140とは、distant supervisionを使って収集された感情分析データセットです。以前の方法では文字ベースCNNを使いましたが、よりよい方法を考えます。 ベースライン AUC, ACC = 0.796649954004895, 0.7966525 この精度(以前の記事の方法)をベースラ…

機械学習を使ったサービスを作る際に考慮したい事の一覧

「Webサービスに機械学習を使う」という目的に対する、個人的な質問リストを列挙します。 目的と入出力 機械学習を使う目的はなにか。その目的には機械学習を使うメリットが存在するか。あるいは機械学習を使うデメリットはあるか。 その目的の入力と出力は…

絵文字を使ってword2vecする

ツイートからword2vecを学習させると、絵文字のベクトル表現も獲得できるので、ここでは絵文字ベクトルのいくつかの演算を試します。 事前準備 # apt install p7zip-full # wget https://github.com/sugiyamath/word2vec_japanese_twitter/blob/master/model…

テンプレートベースの言語生成を試してみる

data2text1とは、あるデータを説明するためのテキスト等を生成するタスクです。今回は、「感情」「行動」を入力すると、それに対する反応を生成する、というモデルを考えます。 簡単な仕組み 入力する特徴量に対して出力したいテンプレートをラベル付します…

sklearnのjsonシリアライズ・デシリアライズ

scikit-learnのモデルは、通常はpickleで保存しますが、移植性の観点では好ましい方法ではありません。ここでは、移植性を高めるためにjsonへシリアライズします。 コード 汚いコードですがお許しください。 from functools import reduce import operator i…

syntaxeval: 文の正しさの評価モデル [失敗]

文法的に正しそうな文かを判定するモデルを作成し、パッケージ化したのですが、全然うまくいかないということを紹介します。 プロジェクトの場所 https://github.com/sugiyamath/syntaxeval 準備 mecabとjavaを入れてください。ubuntuなら以下です: sudo apt…

機械学習で文の構造の良し悪しを評価する

KeyakiツリーバンクからPCFGを生成して構文解析という記事では、PCFGを生成しました。この生成したPCFGを利用して、文の構造の良さを評価するモデルを作成します。 実行の流れ Keyaki Treebankの文を正例としてデータを整形。 PCFGによってランダム生成した…

ntlkでツリーバンクからPCFGを自動生成

PCFGとは、文脈自由文法の各ルールに対して確率を付与したものです。ここでは、Keyaki treebankというコーパスからPCFGを生成します。 Keyaki treebankとは Keyaki Treebankは、日本語の一貫した記述文法を具体化し、さまざまな文法現象を検索できるようにす…

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…

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

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