メモ帳

python, juliaで機械学習をやっていく

(Part 1) tensorflow2でhuggingfaceのtransformersを使ってBERTを文書分類モデルに転移学習する

現在、NLPの分野でも転移学習やfine-tuningで高い精度がでる時代になっています。 おそらく最も名高いであろうBERTをはじめとして、競ってモデルが開発されています。

BERTは公式のtensorflow実装は公開されてありますが、画像分野の転移学習モデルに比べると不便さが際立ちます。 BERTに限らず、公式のtensorflow実装は難解で、tf.kerasの学習済みモデルに関してもほとんど画像のモデルしかないです。

ただし、pytorch用のライブラリにpytorch-transformersという有用なものがありまして、 BERT, GPT-2, RoBERTa, DistilBert, XLNetなどの多言語学習済みモデルが利用可能で、カスタマイズもしやすいということで有名でした。

続きを読む

PythonからJulialangの関数を使える、Python + Julia + TensorFlow + Jupyter 環境をDockerのマルチステージビルドで構築する

前処理の高速化のためにPythonからJulialangの関数を使える、Python + Julia + TensorFlow + Jupyter 環境をDockerのマルチステージビルドで構築してみました。

続きを読む

kerasで学習済みword2vecをembedding layerに組み込む方法

kerasで学習済みword2vecをモデルに組み込む方法を紹介します。word2vecなどで学習した分散表現(token id毎のベクトル値)をkerasのembedding layerの重みに設定し、新たに学習させないように指定するという流れです。こうすることで、word2vecによる特徴量抽出を行うモデルがkerasで構成できます。自然言語処理では頻出の処理だと思います。前処理の段階で分散表現を獲得する(layerに組み込まない)手もあるかとは思いますが、prediction用に別途前処理用のコードを書く必要がでてくるなどの手間が発生するので、できるだけ今回紹介するようにモデルに加えるほうが無難だと思います。

続きを読む

ハイパーパラメータ自動最適化ツール「Optuna」を更に便利に使えるラッパー関数をつくった

Preferred Network(PFN)が作ったハイパーパラメータ自動最適化ツール「Optuna」を超絶簡単に使うためのラーパー関数をつくりました。モデル名、モデルオブジェクト、引数名と型、範囲の5つをペタペタ書くだけでよしなに最適化してくれるようになりました。一度に複数のモデルに対してチューニングを行えます。

続きを読む

Metric Learning: L2 softmax Lossとsoftmax Lossをkerasで実装し、mnistを使って比較してみた

metric learningで有用なL2 Softmax Lossについて調べた。 mnist datasetをNeural Networkで特徴空間に写し、Siamese network (距離関数で手書き文字の類似度を判定させるモデル) を構築した。 L2 Softmax Lossを用いたNeural Networkと、Softmax Lossを用いたものの性能を比較した。なお、通常の分類タスクでよく用いられるSoftmax Lossもmetric learningで使われるようである。

続きを読む

F関数を使ってDjangoで効率よくquerysetのカウントアップを行う

検索ヒット回数や、QAのフィードバックのためにDB内の値をカウントアップしたいとき、単純にDjangoのquerysetを使うと、1. 値の取得 2. 値の更新の合計2回DBにアクセスしなければいけません。しかし、F関数を使えば1回のアクセスで更新できます。

続きを読む