エムスリーテックブログ

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

mypy plugin に入門して社内 OSS である gokart を型安全にしてみた

今回は mypy plugin を利用して、型安全に対応していないライブラリを型安全にする方法を紹介します! 具体的にはエムスリーが開発する機械学習パイプラインツールである gokart を対象とし、mypy plugin を用いてどのように型の課題を解消したかについて解説します。 対象読者としては、既に gokart を使ってくださっている方はもちろんですが、dataclassPydantic がどのように型を担保しているかについて興味がある方も想定しています。

続きを読む

SRE NEXT2024 登壇&体験記 その2

AI・機械学習チームの北川(@kitagry)です。 この記事はAI・機械学習チームブログリレーの記事です。

8/3,4の2日間、SRE NEXT 2024で登壇させていただきました。 こちらで自分の登壇の話しと印象に残ったセッションなどの参加レポートとして紹介します。

また、弊社の後藤もレポートを書いているので良ければこちらもご参照ください。

www.m3tech.blog

SRE NEXT登壇の様子 Photo by SRE NEXT Staff

続きを読む

第27回 画像の認識・理解シンポジウム(MIRU2024)にシルバースポンサーとして参加します!

こんにちは! AI・機械学習チームの氏家(@mowmow1259)です。 エムスリー福岡オフィスの一人目のエンジニアとして福岡で働いています。 本稿はエムスリーAI・機械学習チームで2週間連続で行われるブログリレー3日目の記事となります! 2日目の記事も是非ご覧ください。

www.m3tech.blog

さて、この度、エムスリー株式会社は8/6〜8/9に熊本で開催される第27回 画像の認識・理解シンポジウム(以下、MIRU)にシルバースポンサーとして参加させていただきます! 皆様の研究発表から刺激を受けるとともに、弊社の臨床画像分野での研究の取り組みをご紹介することで医療分野での実応用の知見などを共有できたらと考えています。 8/7〜8/9にかけて3F大会議室A S6でポスターを展示しておりますので、研究に興味のある方はもちろんのこと、エンジニアリングや弊社エンジニアの働き方に興味がある方も是非ブースへお立ち寄りください!

MIRU2023の様子

また、ブログリレー1日目の記事を見てくださった方はお気づきかと思いますが、こちらでご紹介したQuineクリアファイルをノベルティとしてプレゼント予定です! 先着順ですので、お求めの方はお早めにブースにお越しください!

Quineクリアファイル

今回展示予定のポスター

この記事では、MIRU2024の企業展示に先立って、ひと足先にポスターで展示予定の弊社の研究内容をご紹介できればと思います。

  • MIRU2024とは
  • エムスリーでの臨床画像分野の研究取り組み
    • 臨床画像分野での応用ってどんなもの?
    • エムスリーでの研究事例
      • 研究1:胸部X線からの薬剤性間質性肺炎の検出システムの評価
      • 研究2:胸部X線画像からの肺動脈性肺高血圧症の検出
      • 研究3:治療の副反応として起こる皮膚疾患のリスク予測
  • まとめ
  • We are hiring !!
続きを読む

ニューラルネットのレコメンドをメモ化して高速にする

こんにちは、AI・機械学習チーム(AIチーム)の農見(@rookzeno)です。最近作ったニューラルネットのレコメンドが遅くて困ってました。その時ふと推論してるデータを見ると、これ同じユーザーとアイテムが多発してるなと気づいたので、メモ化をして高速化しました。メモ化して高速化は基礎の基礎ですが、ニューラルネットでやってるのはあまり見ないかなと思ったので、今回はそのやり方について記載します。

DALL-Eでサムネを作成

この記事はエムスリーAI・機械学習チームで2週間連続で行われるブログリレー2日目の記事です。昨日の記事もよろしくお願いします。

www.m3tech.blog

  • 使っているモデルについて
  • コード
  • メモ化したコード
  • 感想
  • We're hiring!
続きを読む

肺動脈性肺高血圧症(PAH)を検出するAIを開発し、論文化しました

こんにちは、AI・機械学習チーム(AIチーム)の農見(@rookzeno)です。最近、私が開発したAIの論文が公開されたので、今回はそれを紹介をします。

発表された論文はこちらです

bmcpulmmed.biomedcentral.com

この論文では、

  • 胸部X線 (レントゲン) から肺動脈性肺高血圧症(PAH)を検出するAIを開発しました。
  • AIと医師を比較した結果、AIの方が医師よりもPAHの検出力が優れていました。
  • このAIを使うことでのPAHを早期に発見できることが期待されます。

この研究は千葉大学の今井 俊先生、坂尾 誠一郎先生と共同で行い、今井先生に執筆していただきました。ありがとうございます。

また関連記事として、前回AIチームが発表した同じくレントゲンから病気を予測する論文も紹介しておきます。

www.m3tech.blog

  • 肺動脈性肺高血圧症(PAH)のAIを作成した理由
  • データセット、実験設定
  • 結果
  • 感想
  • We're hiring!
続きを読む

エムスリーが難読プログラミングオタクに送るノベルティ、Python Quineクリアファイルの作り方

早速ですが、こちらに書いてあるソースコード、実際に動くコードとして作成しました。実行結果はどのようになるでしょう?

答えはこれから各種イベントで配られるノベルティを受け取って打ち込んでみてください!!!

まずはあすから行われるコンピュータビジョンの学会MIRU2024のスポンサーブースで配布します!!!

と、いうのは冗談で、さすがに受け取れたとして打ち込みが大変ですし、以下にソースコードを貼り付けます。 本稿では以下のQuineの作り方について解説していきます。ただし、難読プログラミングが好きな人はまずは解説を読まずに自力で読んでみてください!

exec('''m=lambda_x:exec("".join(x.split()).replace("~",chr(32)),globals())'''.replace("_",chr(32)));
m("""import~base64~as~b6;import~zlib;tr=lambda~x,y,z:~(y~if~x~else~z);dba=lambda~x:zlib.decompress(b
6.b64decode(x),-15).decode();a=1;lme=lambda~x:list(map(lambda~x:tr(x=="1",1,0),x));s="ZXhlYygnJydtPW
xhbWJkYV94OmV4ZWMoIiIuam9pbih4LnNwbGl0KCkpLnJlcGxhY2UoIn4iLGNocigzMikpLGdsb2JhbHMoKSknJycucmVwbGFjZS
giXyIsY2hyKDMyKSkpO20oIiIiaW1wb3J0fmJhc2U2NH5hc35iNjtpbXBvcnR+emxpYjt0cj1sYW1iZG    F+eCx5LHo6fih5fm
lmfnh+ZWxz             ZX56KTtkYmE9bGFtYmRhfn             g6emxpYi5kZWNvbXB            yZXNzKGI2LmI2
NGRlY29kZSh4 K         SwtMTUpLmRlY29kZSgpO2            E9MTtsbWU9bGFtYmR                hfng6bGlzdC
htYXAobGFtYmRhf         ng6dHIoeD09IjEiLDEs         MCkseCkpO3M9Int9Ijt                   kaT16bGliL
mRlY29tcHJlc3Mo           YjYuYjY0ZGVjb2Rl          KCI3WlpCRG9Vd0NFVDN   QUTI5LytX       K2lab0NuUU
crSmhxTnJDeU1QQ           WVpc2ZVTG9uMlFX            eUd5UkFBUkhid0RsOUNpY1NJOWhwUV       JUdURIRlZG
S05VU2hrTGxWT0V            1ZFBRSEpOM1lF            SXJYQ1NZaVVDam5EUTlZeWFMYWVDaEN       rUUU1QXMrM
FFRNmhaNEVUcmpj             RVlJajVTaUoy             WXZlQVVUOHNndXQrNG9iQVRKS09Rb       1p6bVZxWmdD
T29IY3pVbnU0eE     Q         wTXYvSnlSM    0F        sdFNpRWw1MFF3SnhCUUNuMlFrMn       Fqb1ZSdjVmckR
mTDJRUVRGaERpSV    Rz        YU83REsvM    nBQ        eEl2aC93QSIpLC0xNSkuZG             Vjb2RlKCk7cH
JpbnQoIiIuam9p    bihb        dHIoYz0     9Ij        EiLGI2LmI2NGRlY29kZS                 hzLmVuY29k
ZSgidXRmLTgiKS    kuZGV         jb2R     lKCJ         1dGYtOCIpLmZvcm1hdCh  zKVtzd          W0obG1lK
GRpKVs6al0pXSx    0cihjP         T0     iMCIs        Y2hyKDMyKSxjKSlmb3IoaixjKWluKGV        udW1lcmF
0ZShkaSkpXSkpI    iIiKSMj        I     yMjIyMj        IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM       jIyMjIyM
jIyMjIyMjIyMj     IyMjIyN             3ZV9hcm         VfaGlyaW5nPXJlcXVlc3RzLmdldCgi         aHR0cHM
6Ly9qb2JzLm0z     LmNvbS9l           bmdpbmVl         ci8iKSMjIyMjIyMjIyMjIyMjIyMjIy        MjIyMjIy
MjIyMjIyMjIyM     jIyMjIyMj         IyMjIyMjIy        Mj";di=zlib.decom  press(b6.b6       4decode("
7ZZBDoUwCET3P    Q29/+W+iZoC       nQG+JhqNrCy        MPAeisfULon2QWy    GyRAARHbwD       l9CicSI9hp
QRTuDHFV  F        K  NUShkLl      VOEudPQ H            J  N3YEIrXCSY                   iUCjnDQ9YyaL
aeChCkQ               E5As+0QQ    6hZ4ETrj                 cEYIj5SiJ2Yv              eAUT8sgut+4obAT
JKOQoZzmVqZgCOoHczUnu4xD0Mv/JyR3AltSiEl50QwJxBQCn2Qk2qjoVRv5frDfL2QQTFhDiITsaO7DK/2pPxIvh/wA"),-15).
decode();print("".join([tr(c=="1",b6.b64decode(s.encode("utf-8")).decode("utf-8").format(s)[sum(lme(
di)[:j])],tr(c=="0",chr(32),c))for(j,c)in(enumerate(di))]))""")#####################################
###############we_are_hiring=requests.get("https://jobs.m3.com/engineer/")##########################

ということで、改めまして、AI・機械学習チームリーダーの大垣@Hi_kingです。 本稿はエムスリーAI・機械学習チームで2週間連続で行われるブログリレー1日目の記事となります!

  • エムスリー難読プログラミング部
  • 難読プログラミングジャンル、整形Quineをやろう!
  • 自分で整形したPython Quineを作ってみたい方へ
  • まずはとりあえず整形ではないQuineを作る(赤パート)
  • 次に、AAを圧縮する(青パート)
  • 展開されたAAの形に、展開したプログラムをprintする (橙パート)
  • Pythonで改行や空白を自由に整形する (紫パート)
  • まとめ
  • We are hiring !!
    • エンジニア採用ページはこちら
    • カジュアル面談もお気軽にどうぞ
    • インターンも常時募集しています

エムスリー難読プログラミング部

エムスリーエンジニア公式X をフォローいただいている方は、朝のポストで流れてくるからご存知かと思いますが、エムスリーでは難読プログラミング部が盛んに活動しています。

せっかくなのでこの盛り上がりを会社の外でも知ってもらおうということで、#crazy_programmingチャンネルで以下のように呼びかけられました

その中から、今回は、まず機械学習エンジニア向けということで、Python難読おしゃれノベルティを作ってみた次第です。

おしゃれプログラムを書こうとワイワイするエンジニアたち

難読プログラミングジャンル、整形Quineをやろう!

さて、難読プログラミング界隈が好きな人は、最初に見た目で予測がついたかと思いますが、こちら、Quine となっています。

クワイン (プログラミング) - Wikipedia

クワイン(英: Quine)は、コンピュータープログラムの一種で、自身のソースコードと完全に同じ文字列を出力するプログラムである。

つまり、それ自体が実行可能で、かつ出力した文字列が自分自身のソースコードとなります。別の言い方をすると、exec(exec(exec(quine)))...と何度でも実行可能なコードとも言えますね。そして、Quineのなかでも、Quineの機能を保ったまま色んな機能をつけるという遊び方があり、今回作ったQuineは、見た目に意味を持たせたQuineです。

さて、このような整形Quineを作るうえで難しいポイントは以下の3つになります。解説の見通しを良くするためにパートごとに色を付けたコードもおいておきます。

  • ソースコード自分自身を出力するために、自分の情報を圧縮して自分に埋め込むこと (赤パート)
  • 狙った形に整形すること (青パート橙パート)
  • 改行や空白が重要なPythonで上記を実現すること (紫パート緑パート)

続きを読む