エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

Nishika competitions 2nd solution

はじめに

はじめまして、エムスリー AI・機械学習チームの河合(@vaaaaanquish)です。 最近、以下機械学習コンペティションにて 182人中 2位 になりました。

Nishikaサービスローンチコンペ AIは芥川龍之介を見分けられるのか?

f:id:vaaaaaanquish:20200310164012p:plain:w500
competitions summary(https://www.nishika.com/competitions/1/summary)より
 

本記事は、コンペティションの解法の紹介をしつつ、3月7より開催されている技術書典 応援祭にて販売される、私も執筆に参加したエムスリーテックブック2を宣伝するものです。

  • はじめに
  • コンペティション概要
  • 利用したfeatureとmodel
  • コンペティション開催中の行動
  • 機械学習パイプラインの選定としてgokartはどうだったか
  • おわりに
  • We are hiring !!

 

コンペティション概要

青空文庫に登録されている10作家の作品、計4732作品の中から芥川龍之介の作品を機械学習で見つけるものです。 答えとなるデータは青空文庫で公開されている訳ですが、こちらを利用するのはもちろんルール上で禁止されています。

 

データ内には以下のような文章データと著者が芥川龍之介であるか否かの情報が含まれている、シンプルな2値分類の問題です。

writing_id,body,author
3,"[#3字下げ]一[#「一」は中見出し]島々《しま/\》と云ふ町の宿屋へ着いたのは...",1

上記のデータサンプルは芥川龍之介 槍ヶ嶽紀行のデータの省略形です。 このような青空文庫内のほぼ生のデータが、trainとtestに分けられて提供されており、testデータ内のF値が高いモデルを作成する事を目的としています。

 

利用したfeatureとmodel

以下は機械学習コンペティションでよく見られる、少し分かった気になる図です。

f:id:vaaaaaanquish:20200307182552p:plain
モデルパイプライン図

図の通り、ルールベースの特徴に加えて、NLPにおいて一般的なBERTやTF-IDFといった特徴を使っていました。 分類もまたLightGBMやNeural Networkといった一般的なモデルをOptunaで最適化する形です。

 

続きを読む

SpringBoot + Kotlin + GraphQL のアプリ向けスキーマ設計・実装のプラクティス

こんにちは、エムスリー エンジニアリンググループ マルチデバイスチームの藤原です。

昨年末に医師向けのスマホアプリを新たにリリースしました。 スマホアプリ向けの BFF(Backends For Frontends) も新規に開発したのですが、そこには SpringBoot + Kotlin + GraphQL なアプリケーションを採用しています。

GraphQL はチームでの採用は初めてで、私もこのプロジェクトで初めて触りました。 そのような状況だったので GraphQL 周りについては試行錯誤を重ねることとなったのですが、今回はその開発の中で見えてきた プラクティス をいくつか紹介したいと思います。
これから SpringBoot + Kotlin + GraphQL な開発をされる方の参考になれば幸いです。

f:id:m-fujiwara-m3:20200229054126j:plain

ボネリークマタカ(某GraphQLの入門書*1の表紙にもこの鳥が描かれている)

(Godbolemandar [CC BY-SA 4.0], ウィキメディア・コモンズより

*1:初めてのGraphQL, Eve Porcello Alex Banks 著, 尾崎 沙耶 あんどうやすし 訳

続きを読む

技術書典 応援祭参加のお知らせ

エンジニアリンググループの西名(@mikesorae)です。

新型コロナウイルスの影響により技術書典8自体は残念ながら中止となってしまいましたが、運営の方々の努力により3/7(土)〜4/6(月)の間、オンラインイベント「技術書典 応援祭」が開催されることとなりました。

時間もなくイベント中止のショックもある中でこのような機会を設けてくださった運営の方々に、この場を借りて改めて感謝の意を表します。

blog.techbookfest.org

さて、エムスリーエンジニアリンググループも本イベントにて、新刊「エムスリーテックブック#2」を頒布いたします。

エムスリーテックブック#2について

f:id:mikesorae:20200305121739p:plain
エムスリーテックブック#2

  • タイトル: エムスリーテックブック#2
  • ページ数: 約100ページ
  • 価格(税込): 1,000円
  • 頒布形態: PDFのみ
  • 執筆者: 河合、堀田、西名、平間、矢崎
  • 監修: 山崎
  • イラスト: 迫田
第一章 機械学習ワークフローライブラリ選定と運用
第二章 BoltとBlock Kitで作るSlack Bot
第三章 Hyperleadger Indyで実現する自己主権型アイデンティティ
第四章 M5StickC を使って社内hack(電子工作)
第五章 大規模 AWS ⇔ オンプレ相互接続ネットワーク設計・構築ガイド

今回も幅広く読み応えのある内容となっていますので、ぜひお買い求めください。 techbookfest.org

過去頒布物について

また、PDFのみですが「エムスリーテックブック#1」も再販いたします。 こちらもよろしくお願いいたします。 www.m3tech.blog

おわりに

全国的に自粛ムードが高まり大変なタイミングではありますが、このようなときこそ新しい文化が生まれるチャンスでもあると思います。 ぜひみんなで技術書典 応援祭を盛り上げていきましょう。

We are hiring!

エムスリーでは日々新たな課題の発見があり、それらを様々な技術や視点で解決できるエンジニアを募集しています。 活躍できるポジションも様々ですので、ご自身の強みを活かしてみたい方はぜひお気軽にお問い合わせください。

エンジニアリンググループ 募集一覧

jobs.m3.com

関連記事

www.m3tech.blog

推薦アイテムセットの多様性を考慮したBPR論文を実装・実験した

エンジニアリンググループ AIチームの金山 (@tkanayama_)です。2019年新卒でエムスリーに入社してから早くも1年経ってしまいました。

今回は、 "Bayesian Personalized Ranking for Novelty Enhancement" [Wasilewski and Hurley, UMAP'19] という論文を紹介します。Bayesian Personalized Ranking (BPR) のサンプリング方法を工夫することで、推薦するitemが多様になるようにした論文です。

f:id:tepppei:20200302205514j:plain:w400
ワラビーです。

続きを読む

git submodule はトモダチ!怖くないよ! (チートシート付き)

f:id:doloopwhile:20200226161647p:plain
この画像は本文とは関係ありません。

こんにちは、エムスリー・エンジニアリングG・基盤開発チーム小本です。

みなさん、git submodule コマンドは好きですか?git submodule は特定の状況下では便利なコマンドです。

f:id:doloopwhile:20200219195042p:plain
社内アンケートでも25%が怖いという結果に

しかし、なぜか世間にはgit submodule が怖いという人が相当数いるようです。推測ですが、git submodule は動作モデルや使用手順が誤解されがちなところがあり、それで「怖い」と思われているのないでしょうか。git 本体でも昔そんなことがありましたよね。

この記事では git submodule の誤解を解き、適切な使い方を解説します。また、記事の最後にチートシートをつけます。

git submoduleはトモダチ!怖くないよ!

続きを読む

Clean Architectureなにもわからないけど実例を晒して人類に貢献したい

こんにちは、エムスリーエンジニアリンググループの福林 (@fukubaya) です。

これまでは、中村の記事で宣言した 「医師版Stack Overflow」(12/16に正式名称Docpediaとしてリリースされました) の技術的チャレンジの 記事を続けて書いていたのですが、今回はここで宣言しなかったClean Architectureについて書きます。

f:id:fukubaya:20200205205515j:plain
浪江駅(なみええき)は、福島県双葉郡浪江町にある、東日本旅客鉄道(JR東日本)常磐線の駅。本文には特に関係ありません。

続きを読む

AWS・オンプレと GCP を VPN で相互接続する際の勘所

こんにちは。エムスリー CTO の矢崎 @Saiya です。

弊社ではクラウド環境の利用や移行を推奨しており、AWS, GCP のマルチクラウドやオンプレミス環境との相互通信を安全に行うために今回 AWS と GCP を VPN で相互接続しました。

しかし、AWS と GCP を VPN で接続する方法は調べると見つけられるのですが、例えば以下の点についてまとめて説明している資料がないため苦労しました:

  • GCP の HA VPNでのセットアップ方法
    • Classic VPN と HA VPN *1 はかなり仕様が異なるのですが、Classic 前提の情報が多く惑わされやすいです
  • 複数の VPC での推奨構成とその実現方法
  • GCP と AWS の VPN の IPSec のパラメーター調整の仕方

そこで、本稿では AWS と GCP にある複数の VPC を VPN で相互に接続する構成の全体像とハマりどころ・注意点を筆者の知る範囲でまとめました。

なお、本稿では AWS Transit Gateway *2 やオンプレミスとの専用線・VPNはすでに構築済みとし、それらの設計・構築については触れません。 それらの使い方や設計の勘所・難所・ハマり所については 技術書典8 2日目の *3 スペース お-46 にて頒布予定の エムスリーテックブック2 にて詳述いたしますので、ご興味ある方は是非そちらでお求めいただければと存じます。

f:id:Saiya:20200127192910p:plain
エムスリーテックブック2 (技術書典8 の 2 日目)

今回構築するネットワーク・トポロジー

f:id:Saiya:20200127200846p:plain

上図のように GCP <-> AWS <-> オンプレミス を接続することで、3 者間での相互通信を可能とします。 例えば GCP 内の任意の VPC (Network) から AWS の任意の VPC やオンプレミスと通信することが可能になります。

なお図では HA VPN を使って 4 本の VPN を設置していますが、可用性・SLA を犠牲にコストの節約も可能です (後述)。

以下、GCP <-> AWS 間の VPN 敷設と DNS 転送について概略と難所を説明します。

*1:HA という名前ですが、後述のように冗長性を犠牲に 1 VPN 接続分だけのコストで運用することも可能です

*2:AWSで多数のVPCを扱う際には必須と言っても良いサービスです。

*3:今回から2日に分けて開催になりました

続きを読む