Keras: ImageNetで学習済みのVGG16をPlaces365へ転移学習する

Kerasを使って、ImageNetで学習済みモデル (VGG16) をPlaces365の分類タスクへ転移学習する、ということに取り組みます。 今回使用するパッケージたちです。 import numpy as np import pandas as pd import os import shutil from keras.applications.vgg16…

KerasでLeNet-5を実装してKuzushiji-MNISTを分類する

仕事でそろそろコンピュータビジョン系の力が必要になるかも、となってきましたので、チクタク勉強を始めてます。 今回はKerasを使ってKuzushiji-MNISTの文字を分類するネットワークをLeNet-5で実装する、ということに取り組みます。 Kuzushiji-MNIST 日本の…

Pythonで形態素解析器Sudachiを使う (SudachiPy)

仕事でSudachiをお試しする機会がありましたので、基本的な使い方を備忘録として整理しておきます。 Sudachi Sudachiはワークスアプリケーションズさんで開発されたOSSで、日本語に特化した形態素解析器です。分かち書き・品詞付け・正規化を行います。 gith…

Python: lifetimesで顧客のトランザクション数を予測する

前回紹介したBG/NBDなど、顧客の未来のライフタイムバリュー (ここではトランザクション数) を予測するモデルを、簡単に利用できるPythonパッケージ lifetimes を紹介します。 lifetimes lifetimesは、顧客の未来のトランザクションを計算するためためのパッ…

ライフタイムバリューを予測する (BG/NBDモデル)

今回は、顧客のライフタイムバリューを予測する方法の1つとして、BG/NBDモデルを紹介します。 モチベーション 顧客のライフタイムバリューを予測できると、その顧客に対してどれだけ投資して良いかがわかります。ここで言う投資は、クーポンやポイントなどの…

PythonでXGBoostを使う

最近XGBoostに触れる機会がありましたので、使い方を確認します。 (今まで使わなかったことの方がどちらかというと珍しいのかもしれません。) XGBoost XGBoost (eXtreme Gradient Boosting) は、単純な分類器 (ex. 決定木) を組み合わせたアンサンブル学習モ…

形態素解析前の日本語文書の前処理 (Python)

日本語の文書を扱っていますと、モデルやパラメータよりも、前処理を改善する方が精度が改善し、かつ、頑健になることがしばしばあります。 本投稿では形態素解析 (分かち書き) する前、つまり文字レベルでの前処理でよく使っているテクニックを紹介します。…

spaCyで英文の固有表現認識

今回はspaCyを使って英文の固有表現認識を行ってみます。 GiNZAを使った日本語の固有表現認識はこちら↓です。 ohke.hateblo.jp 固有表現抽出 固有表現認識 (named entity recognition: NER) は、文書から固有表現 (named entity) を抽出・分類することです。…

論文メモ: Latent Aspect Rating Analysis on Review Text Data: A Rating Regression Approach

Latent Aspect Rating Analysis on Review Text Data: A Rating Regression Approach (KDD'10) という論文について紹介します。 @inproceedings{Wang:2010:LAR:1835804.1835903, author = {Wang, Hongning and Lu, Yue and Zhai, Chengxiang}, title = {Late…

小ネタ: urllibでURLをパースする・生成する

urllibを使ったURLのパースと生成についてまとめます。よく使うのに、そのたびに調べてしまっているので。 パースする まずはURLをパースする方法ですが、urllib.parse.urlparseにURL文字列を渡すだけです。 あとは、返されたParseResultオブジェクトから必…

小ネタ: Pandasでqueryを使って行を選択する

PandasのDataFrameから行を抽出する簡便な方法として、queryメソッドが提供されています。 SQLで言えば選択 (WHERE句) にあたる処理を、文字列で記述できます。 pandas.pydata.org queryメソッドを使った選択の例 今回の投稿で使うデータを準備します。 impo…

Uplift modelingで施策が効く人を見極める

最近はお仕事でマーケティングに関わることが多いです。そんな中で、施策が効く人はどんな人?ということを特定・予測する方法を調べており、その過程で見つけたUplift modelingについてまとめました。 Uplift modeling Uplift modelingは、施策の真の効果を…

いまさら学ぶPageRankアルゴリズム

IR

情報検索 (IR) のみならず、いろいろな分野で応用されているPageRankアルゴリズムについてまとめます。 PageRank PageRankはリンク分析 (link analysis) に分類されるアルゴリズムで、1998年に提案されました (提案論文PDF) 。以下の特徴を持ってます。 リン…

Rocchioフィードバックアルゴリズム

IR

情報検索 (IR) の分野におけるフィードバックアルゴリズムの1つであるRocchioアルゴリズムについて紹介します。 Rocchioフィードバックアルゴリズムとは IRにおいて、検索クエリをTF*IDF等でベクトル化した後で、過去のラベリング情報 (フィードバック) を使…

Solrの類似度アルゴリズム (TF*IDF, BM25)

引き続きSolrに触れていきます。 今回はSolrの検索で使われる類似度 (similarity) についてです。 前提 Solrのダウンロードとkenikkiコレクションの追加まで完了している状態を前提として進めます。 ohke.hateblo.jp ohke.hateblo.jp 類似度 Solrのコアエン…

Solrで検索 (フィルタ, ソート, ファセット, ハイライト)

前回・前々回に引き続いて、Solrについてです。 今回は検索クエリで頻繁に使われる、フィルタ、ソート、ファセット、ハイライトについてまとめます。引き続き、チュートリアルと↓の本を参考にしています。 なお、前々回のSolrのダウンロード、前回のkenikki…

Solrでスキーマの定義とドキュメントの登録を行う

前回の投稿に引き続き、Solrに慣れ親しんでいきます。 ohke.hateblo.jp 今回の投稿では、スキーマの定義、および、JSONを使ったドキュメント登録を行います。引き続き、チュートリアルと↓の本を参考にしています。 Solrサーバの起動とSolrCoreの作成 話を単…

Solrの環境をMacに構築する

仕事で検索プラットフォームの Apache Solr を扱うことになったのですが、今までブラックボックスにしてきてしまっていたので、この機会に勉強することにしました。 http://lucene.apache.org/solr/ 今回は、Mac上にSolr (7.5.0) の環境を構築し、け日記のエ…

Python: LexRankで日本語の記事を要約する

仕事で行っているPoCの中で、文章の要約が使えるのではと思い、調査をし始めています。 今回はsumyのLexRankの実装を使い、過去の投稿を要約してみます。 LexRank LexRankは、抽出型に分類される要約アルゴリズムで、文書からグラフ構造を作り出して重要な文…

SQL ServerのテーブルをPandas DataFrameで読み書きする

SQL ServerのテーブルをPandasのDataFrameに読み込んだり、逆に書き出したりする方法の備忘録です。 ドライバにpymssqlを使います。また書き出しには $ pip install pymssql SQLAlchemy DataFrameへの読み込み まずはSQL ServerのテーブルからDataFrameへ読…

論文メモ: GloVe: Global Vectors for Word Representation

前々回の投稿でGloVeで単語ベクトルを計算しましたが、今回の投稿ではその提案論文を整理したいと思います。 nlp.stanford.edu ohke.hateblo.jp GloVe: Global Vectors for Word Representation @inproceedings{pennington2014glove, author = {Jeffrey Penn…

論文メモ: Distributed Representations of Words and Phrases and their Compositionality

前回の投稿で紹介したGloVeの論文を読もうと思ったのですが、先発のword2vecの論文をまだ読んでなかったので、先にそっちを読んだメモです。 なお、gensimのword2vecの実装を使った例を以前投稿してます。 ohke.hateblo.jp Distributed Representations of W…

GloVeで単語ベクトルを得る

単語ベクトル化モデルの一つであるGloVeを試してみます。 GloVe GloVeは単語のベクトル表現を得る手法の一つで、Word2Vecの後発となります。論文はこちらです。 nlp.stanford.edu Word2Vec (skip-gram with negative sampling: SGNS) では各単語から周辺単語…

PythonからGoogle Cloud Natural Language APIを使って感情分析

Google Cloud Natural Language APIを使って、Pythonで日本語文章の感情分析 (ポジティブ/ネガティブの判定) を行います。 このAPIは自然言語処理のためのGCPサービスで、感情分析以外にも、構文解析やエンティティ解析が提供されています。 cloud.google.co…

scipy.statsでカーネル密度推定 (KDE)

scipy.statsでカーネル密度推定 (KDE) を行う方法のメモです。 カーネル密度推定は、標本データから確率密度を推定するものです。 要するにヒストグラムをなめらかにすることで、データの傾向を捉えやすくします。 2017/1/1〜2017/12/31 (365日) の東京の日…

小ネタ: PandasでCSV文字列を分割して列にする

PandasでCSV形式の文字列のカラムを、それをカンマ区切りで分割して、別々の列にする方法のメモです。 例えば、1行目なら"123"と"456"と"789"を3つの列に分割します。 import pandas as pd df = pd.DataFrame({'name': ['A', 'B'], 'csv': ['123,456,789', '…

Flask-CachingでRedisにキャッシュする

Flaskアプリケーションでビューを楽にキャッシュする方法はないかと探していた時、同僚にFlask-Cachingを紹介されました。 Flask-Cachingを使ってRedisにキャッシュする方法について整理します。 Flask-Caching Flask-Cachingは以下の特徴があり、Flaskアプ…

PySparkでMLを使って機械学習する

引き続きPySparkについてです。今回はMLパッケージを使ってスパムメッセージを分類します。 PySpark + Jupyter Notebookの環境をDockerで構築する - け日記 PySpark (+Jupyter Notebook) でDataFrameを扱う - け日記 PySparkのMLパッケージを使ってMovieLens…

PySparkのMLパッケージを使ってMovieLensをレコメンドする

前回・前々回と引き続き、PySparkを使っていきます。 PySpark + Jupyter Notebookの環境をDockerで構築する - け日記 PySpark (+Jupyter Notebook) でDataFrameを扱う - け日記 今回はMLパッケージを使って映画のレコメンドを行います。 データセットにはお…

PySpark (+Jupyter Notebook) でDataFrameを扱う

前回の投稿では、PySparkをJupyter Notebookから操作するための環境を作りました。 ohke.hateblo.jp 今回は上の環境を使って、PySparkでDataFrameを扱う方法についてまとめます。 (そのため上の環境構築が済んでいる前提となります。) SparkのDataFrame Spar…