TopicModelの最終形態? Structured Topic Modelのご紹介

こんにちは。レトリバの飯田です。カスタマーサクセス部 研究チームに所属しており、論文調査やそのアルゴリズムを実行するスクリプトの実装などを行なっています。 今回は、Bag of Words(BoW)表現に於いて、これがTopicModelの最終形態ではないか?と私が思っているStructured Topic Modelの紹介と再現実装をpythonで行なったので、その紹介をします。

https://github.com/retrieva/python_stm

続きを読む

レトリバセミナーで関数型(Elixir)でConvolutional Neural Networkを実装した話をしました

レトリバ製品企画部の田村(@masatam81)です。
1/15にレトリバセミナーにて「Functional CNN in Elixir」というタイトルでお話しました。

retrieva.connpass.com

セミナーの内容としては、趣味や20%ルールで書いていたElixirでのDeep LearningフレームワークでConvolution2D/MaxPooling2Dまで使えるようになったので、関数型言語ならではの苦労や工夫・学びの共有といった感じでした。本記事は、そのフォローアップ記事です。当日はDeep LearningやElixirに詳しくない人もいたため、それらの簡単な説明も含めて、なるべく伝わるように話しました。

本記事ではDNNやCNN、Elixirの簡単な説明やConvolution2D、MaxPooling2D以外のレイヤーの話は省きます。その辺りの話は下記のYouTubeや関連書籍を見て下さい。動画ではNIFやMatrexに関しても少しだけ話しています。


Functional CNN in Elixir

スライドはこちらになります。

www.slideshare.net

また、本記事ではConvolution2D, MaxPooling2DのElixirでの実装で工夫した点にフォーカスして書きたいと思います。 セミナーでは最初に defstruct で構造体を作り、 defprotocol を利用して各レイヤーをLayerモジュールの継承関係のように扱う例を説明してから、それを関数型らしく修正した話をしましたが、今回の引用コードは修正後のコードを示します。

実装のベースになっている知識はオライリー・ジャパンの「ゼロから作るDeep Learning」です。元の処理に関する詳細な説明は、そちらをご覧下さい。

www.oreilly.co.jp

  • 畳み込みの準備
    • im2colとは
    • Elixirでの実装
  • forward処理
    • MaxPooling2D
      • Elixirでの実装
    • Convolution2D
      • Elixirでの実装
  • backward処理
    • MaxPooling2D
      • Elixirでの実装
    • Convolution2D
      • Elixirでの実装
  • 速度の問題
  • フレームワークの今後

続きを読む

PrometheusでサーバPCや自前アプリを監視してみた

こんちには。レトリバ製品開発部の高田 (twitter: @t-tkd3a)です。

この記事は 12/18 に行ったセミナーのフォローアップ記事です。

当日は動画の配信も行っていたのですが、音声が配信されたなかったトラブルが後から分かったため、スライドとキャプションの構成で掲載します

2 f:id:tomomi-takada:20191223190318p:plain

  • まず目次です。
  • 自己紹介、プロメテウスについての概要、使用例として、開発PC群の状態監視、自前アプリの監視例を示します。
  • 今日はだいたいこの流れでお話していきます。
続きを読む

TF2.0 tf.keras.Model 用 CRFレイヤーを試してみた

はじめに

こんにちは。 リサーチャーの坂田です。 レトリバでは、 主に文書分類とNERに取り組んでいます。

tensorflow 2.0 では、 1系のときに"tf.contrib"以下にあったcrfが、 "tensorflow_addons"として分離されました。 現在、 tf.kerasのレイヤーとして使えるように開発が進められています。 今回は、 このcrfの最新のプルリクを試してみたという内容です。まだマージされていないものなので、色々と問題がありました。

CoNLL 2003というデータセットを使って、 NERのタスクでCRFを試しました.

続きを読む

スクラムガイドから経験的プロセス制御を学ぶ

こんにちは。レトリバ製品開発部の@gumuncleです。

この記事は 11/20に行ったセミナーのフォローアップ記事です。

動画はこちらです。

スライドはこちらです。

www.dropbox.com

今年10月に認定スクラムマスター研修を受講し認定スクラムマスターになりました。

レーニング中は参加者と議論しながら能動的に参加でき非常に満足のいくものでした。

講師の人は Alan Cyment (@acyment) | Twitter さんでアルゼンチンからこのために飛行機で30時間かけて来日されたようです。

認定スクラムマスターはスクラムの入り口に到達できた!ということなので、これからも到達可能な理想郷であるスクラムを学び実践していきたいです。

今回はスクラムスクラムガイドについて詳しく話さなかったので、次回機会があれば話したいと思います。

音声分析ソフトウェアPraatとアノテーションフォーマットTextGrid形式について

はじめに

こんにちは、レトリバのエンジニアの岩田です。最近はリバウンドに悩みながら音声認識エンジンの製品開発をしています。

今回は、音声分析ソフトウェアのPraatと、Praatで読み込んだり保存できる音声のアノテーションフォーマットTextGrid形式について紹介したいと思います。おまけとして、TextGrid形式のファイルを読み書きするライブラリ textgrid.hpp を簡単に実装したので紹介します。

続きを読む

Random Features~Shift invariant kernelからGraph kernelまで~

こんにちは。レトリバのリサーチャーの木村です。10/16(水)のRetrieva Engineer Casual TalkでRandom Featuresについて発表しました。これはそのフォローアップ記事になります。

動画はこちらです。


Random Features 〜Shift invariant kernelからGraph kernelまで〜 - Retrieva Engineer Casual Talk vol.3

スライドはこちらです。

カーネル法はデータ数{n}について{\mathrm{O}(n^ 3)}の計算量を必要とし、データ数が増えると直接用いることが困難であるという問題があります。 この問題に対し、カーネル関数を近似的に高速計算するための手法の一つとしてRandom Featuresがあります。 Random Featuresでは内積の期待値がカーネル関数値と一致するような特徴ベクトルを得ることが目的です。 このようにして得られた特徴ベクトルを用いて線形学習を行うことによって、近似的にカーネル関数を用いた非線形学習を高速に行うことができます。 セミナーでは最初に提案されたShift invariantカーネルに対する手法から、文字列、グラフ構造に対する手法まで紹介しました。

私は学生時代カーネル関数を厳密に高速計算するためのアルゴリズムを研究していたこともあり、とても楽しくこのテーマを調査することができました。 近年深層学習の圧倒的な盛り上がりの前にカーネル法の勢いはどちらかというと下火になっていますが、興味深い論文は毎年出てきているのでこれからも動向をチェックしていきたいと思います。

Railsオンプレミス製品のためのDockerベストプラクティスver1.0

レトリバの今村です。2019年9月中旬、Answer Finder 2.1.0 をリリースいたしました。「Docker による提供形態の開始」が 2.1.0 の主な変更点となりますが、本記事ではその内容の設計の過程で得られた知見やハマりどころなどを紹介します。

レトリバ製品開発部で確立できた「Docker まわりの定石」に関する一種の備忘録的な内容となります。Answer Finder をはじめとして、レトリバの製品は Ruby on Rails アプリケーションがほとんどのため、本記事で紹介する Docker イメージは基本的には Rails アプリ提供用のものです。

続きを読む