u++の備忘録

画像認識におけるKMeansによるBoVW

 『画像認識』(機械学習プロフェッショナルシリーズ)*1の第4章pp.92-95に載っていた、KMeansによるBag of Visual Words(BoVW)を実装。

import numpy as np
from sklearn.cluster import KMeans

## KMeansによるBoVW
def coding(X_ap):
    bovw = np.zeros((len(X_ap), NUM_K))
    for i in range(len(X_ap)):
        cluster = kmeans_model.predict(X_ap[i].reshape(1, -1))
        bovw[i, cluster] += 1
    return bovw

# KMeansモデルの学習
NUM_K = 200 # クラスタ数
kmeans_model = KMeans(n_clusters=NUM_K, max_iter=100).fit(X_ap)

# コーディング
C = coding(X_ap)

画像データセット「CIFAR-10」からのSIFT特徴量の取得

CIFAR-10とは

以下のブログが詳しい。

aidiary.hatenablog.com

SIFT特徴量とは

『画像認識』(機械学習プロフェッショナルシリーズ)*1の第2章などを参照のこと。

ライブラリのインストール

以下のライブラリを準備する。

  • from chainer import datasets
  • import cv2
  • import numpy as np

筆者の環境

chainer

pip install chainer

opencv

SIFT特徴量を抽出するメソッドは、opencvの中の別のcontribモジュールに分離されている(通常のopencvをインストールするだけでは使えない)。

カリフォルニア大学のサイトにcontribモジュールも含んだ.whlファイルがあるので、環境に合ったファイルをダウンロードする。筆者の場合は「opencv_python‑3.3.0+contrib‑cp36‑cp36m‑win_amd64.whl」。
Python Extension Packages for Windows - Christoph Gohlke

cd (.whlファイルを置いたフォルダ名)
pip install (.whlファイル名)

numpy

筆者の場合は、Anacondaに標準でインストールされていた。

実装

データの読み込み

from chainer import datasets
train, test = datasets.get_cifar10()
# image = train[i][0]    # trainのi番目の画像
# label = train[i][1]    # trainのi番目のラベル

SIFT特徴量の取得

## SIFT特徴
def sampling_descriptor(data):
    images_des = [] # 特徴量のリスト
    images_labels = [] # 特徴量を得られた画像のラベル郡
    for i in tqdm(range(len(data))):
        image = data[i][0]
        # 画素が0~1に正規化されているので255倍
        image_rollaxis = np.uint8(np.rollaxis(image, 0, 3) * 255)
        image_rollaxis_gray = cv2.cvtColor(image_rollaxis, cv2.COLOR_BGR2GRAY)
        sift = cv2.xfeatures2d.SIFT_create()
        kp, des = sift.detectAndCompute(image_rollaxis_gray, None)
        if isinstance(des, type(None)):
            continue
        else:
            images_labels.append(data[i][1])
            images_des.append(des)
    return images_des, images_labels

images_des, images_labels = sampling_descriptor(train)

画像のエラー?などで特徴量を全く検出できない画像があった。今後訓練データとして使うことを考え、この時点で特徴量を検出できなかった画像(とそのラベル)は欠損値扱いとして除外している。

線画

一枚目の画像(ラベル:カエル)について、結果を出力してみた。

from skimage import io
# 元画像
io.imshow(np.uint8(np.rollaxis(train[0][0], 0, 3) * 255))
# 検出点の線画
kp = sift.detect(image_rollaxis_gray)
out = cv2.drawKeypoints(image_rollaxis_gray, kp, None)
io.imshow(out)

f:id:upura:20170815133208p:plainf:id:upura:20170815133215p:plain

【論文メモ】業績推定とのマルチタスク学習による決算短信からの重要文抽出

論文名

磯沼大 et al.: 業績推定とのマルチタスク学習による決算短信からの重要文抽出, 研究報告情報基礎とアクセス技術(IFAT), 2017-IFAT-124, No. 10, pp. 1-6, 2017.02.

研究会 - 業績推定とのマルチタスク学習による決算短信からの重要文抽出

どんなもの?

重要文抽出の学習に参照要約だけでなく業績情報を用いる。具体的には、業績推定とのマルチタスク学習を導入し、業績を推定可能な文を抽出するように判別器を学習し、参照要約が少量の場合にも汎化性能が高い学習モデルを実現する。

先行研究と比べてどこがすごい?

重要文抽出と業績推定のマルチタスク学習を導入することで、業績情報を擬似的な学習データとして利用し、参照要約が少ない文書においても汎化性能が高い重要文抽出手法を新規に提案している。

技術や手法のキモはどこ?

Chengら [2] の研究をベースにしたモデル構築。

どうやって有効だと検証した?

提案手法をLSTM-RNNに適用し、実際の決算短信と記事を用いた精度検証実験を行った結果、特に訓練データが少量の場合において精度が向上し、かつそれが業績推定の学習によりもたらされたことが確認された。

議論はある?

汎化性能の向上に業績推定が寄与したことは、検出成功した重要文が業績を反映しているか確認することで検証された。既存手法に比べ提案手法の方が検出成功した重要文が業績を反映しており、提案手法が再現率とF値の上昇に寄与したと示唆された。

次に読むべき論文は?

[2] Cheng, J., et al.: Neural Summarization by Extracting Sentences and Words, in ACL, pp. 484-494 (2016)

【論文メモ】文書分類とのマルチタスク学習による重要文抽出

論文名

磯沼大 et al.: 文書分類とのマルチタスク学習による重要文抽出, 人工知能学会全国大会論文集(第31回), 2017.05.

jsai2017:1J1-4 文書分類とのマルチタスク学習による重要文抽出

どんなもの?

参照要約(人手で作成された要約)が少量の場合においても有効な重要文手法として、文書分類の学習により重要文抽出の学習をサポートするマルチタスク学習モデルを提案する。提案モデルでは、文書分類に各文の分散表現の加重平均を利用し、その重み付けに各文の抽出確率を用いる。即ち、抽出確率の高い文ほど文書分類に大きな影響を与え、文書分類の学習時には、分類に有効な文の抽出確率が高くなるように学習が行われる。

先行研究と比べてどこがすごい?

文書分類及び重要文抽出は様々な既存研究が存在するが、文書分類を重要文抽出のサポートとして利用する手法は提案されていない。本研究ではこれをマルチタスク学習モデルによって実現すると共に、マルチタスク学習を効率的に進めるための新規のカリキュラム学習を提案する。

技術や手法のキモはどこ?

Cheng ら [Cheng 16] の分散表現を用いた一般的な重要文抽出モデルに汎用可能であるLSTM-RNNを用いた重要文抽出モデルに、マルチタスク学習を適用している。

どうやって有効だと検証した?

決算短信New York Times 紙における重要文抽出実験を行い、提案モデルの有効性を検証する。決算短信では売上高変化率及び純利益変化率の正負判定、New York Times 紙では記事のカテゴリ分類を文書分類タスクとして設定し、文書分類とのマルチタスク学習が精度向上に寄与するか検証した。

議論はある?

既存手法に比べ提案手法では、抽出成功した文内容と、ラベルとして用いた純利益変化率や売上高変化率との合致率が向上していた。

次に読むべき論文は?

[Cheng 16] Cheng, J., et al.: Neural Summarization by Extracting Sentences and Words, in ACL, pp. 484-494 (2016)

【論文メモ】業績変動を考慮した決算短信からの重要文抽出

論文名

磯沼大 et al.: 業績変動を考慮した決算短信からの重要文抽出, 情報処理学会研究報告, Vol. 2016-NL-227, No. 6, 2016.07.

情報学広場:情報処理学会電子図書館

どんなもの?

 概要から抜粋

本研究では過去の決算短信と決算記事から業績変動と短信文の掲載パターンを学習し,記事に掲載されるべき文を決算記事から抽出する手法を提案する.提案手法は2パートに分かれ,第1パートでは各事業セグメントの業績変動と,記事掲載パターンを学習することにより,各事業セグメントの重要度を判定する.第2パートでは,判定した各事業セグメントの重要度と極性判定を用いることで各文の重要度を評価し,抽出を行う.

先行研究と比べてどこがすごい?

先行研究[3]は「他の文に関連する文は重要である」という前提に基づいている。これは一般的な新聞記事要約や複数文書要約など各文が依存しあっている文書の要約では効果的だが、決算短信のように各文が比較的独立である文書の要約には適さない。

-> 第1パートで対応(重要な文を推定する別のアプローチ)

単語対の数が費用に多いため、それらの網羅的な取得や極性推定を行う一般的な手法が存在しないことから、非負値行列因子分析(Non-Negative Matrix Factorization; NMF)[1] による未出現単語対の極性値推定を提案し、多様な単語対の極性値取得を行っている。

-> 第2パートで対応

技術や手法のキモはどこ?

決算短信からの重要文抽出という課題を解決するべく、既存手法を組み合わせている。

どうやって有効だと検証した?

データセット

うち

検証結果 - 重要セグメントが判定できているか - 重要文が抽出できているか - 提案手法の各ステップごとにF値を算出

議論はある?

重要セグメントの判定において、適合率0.92に対し、再現率が0.65と低調だった。原因を分析すると、資産売却や減損処理による特別利益・特別損失が発生した場合が原因だった。この場合には、決算記事には取り上げられているが、セグメント売上・利益には計上されない業績変動が小さいものが多数を占めていた。特別利益や特別損失が発生したセグメントについては別の手法が必要ということが示唆された。

重要文抽出後の文章要約にも取り組む必要がある。

次に読むべき論文は?

疑問

学習データの作成において事業セグメント名とその略称が決算記事内に含まれているかを、集合管の類似度を示すdice係数[14]を用いて判定している。そこでの閾値を0.7としているが、果たしてこれは適切なのか。

-> dice係数[14]に関する論文を読む

論文メモを残そうと思った

 「論文メモを残そう」という、ただの感想文

動機

 これまで乱読していたので、一定の形式で残したい。

形式

 取りあえず「論文メモ」で検索して最初にヒットした以下のページの内容にすることに。

lafrenze.hatenablog.com

 メモする内容は以下の通り。

  1. どんなもの?
  2. 先行研究と比べてどこがすごい?
  3. 技術や手法のキモはどこ?
  4. どうやって有効だと検証した?
  5. 議論はある?
  6. 次に読むべき論文は?