Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

Webアプリケーションにおける正しいキャッシュ戦略

こんにちは。プロダクト開発部のサーバサイドエンジニアの荒川です。普段はSansanのスマホアプリのAPIの開発をしています。

今回扱うテーマは皆さん大好きキャッシュ(Cache) です。

Webアプリケーションを開発するエンジニアである以上、キャッシュの存在からは逃れられないでしょう。 例えばパフォーマンスを向上させる手段として、キャッシュを仕込むことは往々にしてあるかと思います。

キャッシュを使えばパフォーマンスが向上しそう、というイメージも強いため安易に選択する戦略になりがちですが、正しく扱うことは本質的に難しいです。 しかしキャッシュを上手に使えば、ユーザ体験を圧倒的に向上させることができます。

そんな諸刃の剣キャッシュ💰について考慮するべきこと、その戦略を改めてまとめてみました。

今回の対象

今回の対象は、アプリケーションレベルでのキャッシュ戦略を取り扱います。 いわゆるキャッシュメモリ、ブラウザのキャッシュ、HTTPにおけるキャッシュ、CDNにおけるキャッシュなどとは文脈上異なるので注意してください。

さて整理すべきは、クライアント(Client)、サーバ(Server)、キャッシュ(Cache)、データベース(Database)の4つです。 本エントリでは以下のアーキテクチャをベースとしていきます。

f:id:ad-sho-loko:20190322023513p:plain
アーキテクチャ図

システム構成はシンプルなクライアントサーバのWebシステムです。 説明の都合上、各種サーバの分散化や冗長化などは割愛しています。

その他の用語を軽く説明します。

クライアント(Client)は、Webアプリケーションにおいてはブラウザに該当します。

サーバ(Server)は、アプリケーションサーバです。キャッシュサーバやデータベースと通信をするためにアプリケーションコードが動いています。

キャッシュ(Cache)は、キャッシュサーバです。当たり前ですが、I/Oについてはデータベースよりも高速でなければいけません。

データベース(Database)は、基本的にRDBMSと理解してもらって問題ありません。またS3などのストレージを追加で置いてもらってもOKです。

続きを読む

【Intern CV Report】超解像の歴史探訪 -2016年編-

f:id:s_yuka:20190318153645p:plain

こんにちは,DSOC R&Dグループ インターン生の内田です. 前回の記事が割合好評とのことで,この度めでたく連載を持つことになりました. 記事を読んでいただいた方や記事のレビューをしていただいた方に感謝申し上げます. これからも読んでいただける記事を書けるように頑張っていきます!

buildersbox.corp-sansan.com

さて,前回はPyTorchを用いてSRCNN[*1][*2]を実装してみました. SRCNNの発表は2014年であり,かなり古めのネットワークと言えます. 今回は,2016年に発表されたモデルを対象に,SRCNNをどのようなアプローチで改善していったかについてまとめたいと思います.

【再訪】SRCNN

SRCNNは3層の畳み込みニューラルネットワーク(CNN)であり,少ない計算量で超解像を行うことができます. 辞書ベースの手法が主流であった中で,CNNを導入したSRCNNは大きなインパクトを与えました. とはいえ,実はSRCNNもスパースコーディングから着想を得た手法であり,3層の畳み込みはそれぞれ ①パッチ抽出と低解像度空間におけるスパース表現,②獲得した表現の高解像度空間に対する非線形写像, ③高解像度画像の再構成 と見なせると論文中で述べられています.

f:id:S_aiueo321:20190312155556p:plain
CNNとスパースコーディングの関係性([1]より引用)

従来手法を踏襲しつつ新しいアプローチを提案する素晴らしい研究ですが,ネットワークサイズや学習時間からは,安定した学習に対する知見が少なかったという背景も見て取れます. SRCNN発表後,深層学習を応用した研究は加速度的に広まっていき,多層化や学習の高速化などの知見も多く溜まっていきました. 2016年頃には,それらの知見が超解像の分野に還元され始め,研究をまた次のステージへと推し進めていくこととなりました.

*1:Chao Dong, Chen Change Loy, Kaiming He, Xiaoou Tang. "Learning a Deep Convolutional Network for Image Super-Resolution", Proc. of European Conference on Computer Vision (ECCV), 2014

*2:Chao Dong, Chen Change Loy, Kaiming He, Xiaoou Tang. Image Super-Resolution Using Deep Convolutional Networks, IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI), 2015

続きを読む

文章埋め込みを用いた教師なしキーフレーズ抽出EmbedRankの実装とその評価

こんにちは、DSOC R&Dグループ研究員の奥田です。言語処理学会年次大会(NLP2019)の開催されている名古屋のホテルで今まさにこの記事を書いています。ひつまぶし美味しかったです。

さて、今回はCONLL 2018で発表されたSimple Unsupervised Keyphrase Extraction using Sentence Embeddingsを実装して日本語を対象に評価しましたので、その紹介です。こちらは1/31に開催された「第一回SIL勉強会 自然言語処理編」での発表を加筆修正したものですので、そちらの資料も合わせてご覧いただければと思います。

EmbedRankとは

本論文で提案されているEmbedRankとは、教師データを用意することなく、文章に含まれる重要なキーフレーズを抽出するアルゴリズムです。あるフレーズが重要かどうかは、それが含まれる文章全体の意味をよく表しているかどうかで評価できるのではないかというのが、この論文の発想です。そして意味をよく表すフレーズを抽出する際に、文章埋め込み(Sentence Embedding)を利用する点がEmbedRankの大きな特徴です。

アルゴリズムとしては、以下の3ステップから構成されます。

  1. 品詞の情報を元に、文章中から候補となるフレーズを抽出する
  2. 文章埋め込みを用いて、文章および各フレーズのベクトルを得る
  3. 文章の埋め込みベクトルに対する類似度を用いて、候補となるフレーズをランク付けし、キーフレーズを決定する

f:id:yag_ays:20190313095921p:plain
文章は「潜伏キリシタン関連遺産、世界遺産登録 - ウィキニュース」より

まず第1ステップとして、文章中から候補を抽出します。ここでは「形容詞+名詞」といった品詞に基づく特定のパターンをルールで記載し、それに合致するフレーズを候補として採用します。 次の第2ステップでは、それらの候補となるフレーズと文章自体を対象に、文章埋め込みを計算して埋め込みベクトルを計算します。文章埋め込みは論文ではsent2vecやdoc2vecが用いられていますが、原理的には入力となる文章から何らかの固定次元でのベクトルが出力されれば良いため、infersentやその他類似手法でも問題ありません。 そして最後の第3ステップで、文章自体のベクトルに近い候補フレーズの埋め込みベクトルを、類似度を元にして抽出し、キーフレーズを決定します。すなわち、文章と各候補フレーズを全てペアにして類似度を測り、その近さをもとに文章の意味をよく表しているフレーズをランク付けするわけです。そうすることで、フレーズの重要度というものを表現することができます。あとは、その上位n件を取得すれば、それが文章に対するキーフレーズとなります。

ただし、単に抽出するだけでは似たような表現が重複して取得されることがあるため、多様性を持たせたフレーズ抽出のためにMaximal Marginal Relevance(MMR)という手法を用いています。*1

f:id:yag_ays:20190312225824p:plain
https://speakerdeck.com/sansanbuildersbox/case-study-in-word-embedding

これにより、文章自体と似ているフレーズを抽出しつつも、フレーズ間の類似度はなるべく下げるようなランキングが可能になります。数式としてはargmaxが出てきたりして少しややこしいのですが、実際は候補の中で一番もっともらしいものを選択していけば良いので、複雑な最適化などを必要としません。

*1:論文中では、MMRを用いない手法をEmbedRank、用いる手法をEmbedRank++と区別しておりますが、両者にそれほど手法的な差異がないため、本記事ではEmbedRankとして統一して記載しています

続きを読む

DEIM 2019に参加して来ました!

f:id:ssatsuki040508:20190311184543j:plain
DEIM 2019 が催されたホテルオークラJRハウステンボス。
Sansan DSOC 研究員の吉村です。最近は社内のカフェで提供してくださっている「オリジナルジンジャーシロップ」のソーダ割りにハマっています。風邪予防になることを期待しつつ、頻繁に飲んでいます。

さて、今回、長崎はハウステンボスで開催された DEIM というワークショップに、Sansan DSOC 研究員の奥田高橋、吉村の3人で参加してきましたので、その報告をします。

DEIM とは

f:id:ssatsuki040508:20190311185739j:plain
会場から一歩外に出た時に見えた景色。ランチはこの景色を見ながら食べました。
DEIM とは「データ工学と情報マネジメントに関するフォーラム」のことで、その名の通りデータ工学と情報マネジメントに関する様々な研究トピックについて議論を行うためのワークショップです。何と言っても DEIM は、開催が合宿形式で行われるのが恒例となっており、今回も例に漏れず合宿形式での開催となりました。合宿形式の強みを生かした実際のスケジュールを見てみると、二日目は朝8:00から夜の2:00までセッションがあり、終日研究に関する議論ができる環境となっていました。

今回はおおよそ9部屋で別々の発表が同時に行われていたため、今回 DEIM 用に作られたSlackのワークスペース上で各部屋の研究発表の実況が行われていました。

続きを読む

Podcast #2 Legacy Meetup Kyoto

人事部 高橋 です。Podcast #2 を収録しました。

今回は、この Sansan Builders Box でもレポートした Legacy Meetup Kyoto について話しました。登壇者でもある加畑を交えて、当日のリアルな雰囲気をお届けします。

buildersbox.corp-sansan.com

前回よりもトーク力が向上しているんじゃないでしょうか...!?

soundcloud.com

Member

  • 高橋 : エンジニアから人事に転身した人。 Azure が好き。
  • 木田 : モダンな技術で新サービス開発に取り組むエンジニア。 GCP が好き。
  • 加畑 : レガシー改善に強いサーバーサイドエンジニア。 RDBMS が好き。

Show Note

  • Legacy Meetup Kyoto いってきた
    • 当日の雰囲気
    • 加畑の発表内容
    • ヤフーさん、はてなさんの発表内容
    • レガシー改善にどう取り組むか
      • 目的をどう設定するか
      • ドキュメント残す文化
  • 木田、高橋のレガシーの思い出
    • 前職 SIer でのリプレース案件
  • 京都の話

次回はそろそろゲストをお呼びしたいな~と思ってます。

質問、感想、苦情など、こちらでお待ちしてます!

marshmallow-qa.com

Google Cloud INSIDE Digital に登壇 & 継続的デリバリーツール Spinnaker について

DSOC Infrastructure Group の 大澤 です。今月から Infrastructure Group というグループができたのですが、新名刺が間に合ってないので Eight 上は旧部署のままです・・・!

先日3月7日に Google Cloud 主催の INSIDE Digital というイベントに登壇させていただく機会がありました。

cloudplatformonline.com

テーマが「ここでしか聞けない GCP 商用活用の第一歩」ということで、プロジェクト進行中の Windows サーバの VM 移行と、Spinnaker を活用した継続的デリバリー (Continuous Delivery; CD) について話をさせていただきました。

f:id:ohsawa0515:20190311193904j:plain

上の写真は会場の様子です。参加者が 200 〜 300 名の大規模イベントなのですが、満員ですね。登壇机がなく、カンファレンスのキーノートみたいなフリーハンドスタイルだったので発表中はかなり挙動不審だったと思います・・・

私のセッションの後は、アイリッジ様の大量の位置情報の収集・分析・可視化の事例や、LIFULL 様の Auto ML を活用した物件画像の自動タグ付けの発表がありました。私の発表した事例よりも他社様の事例紹介の方が GCP を十分に活用されて素晴らしい内容だったのでトップバッターで早々に終わらせられてほっとしています。

発表した内容の中で、懇親会や Twitter で反響が大きかったのが Spinnaker でした。発表時間内に説明しきれなかった部分も含めて本記事で Spinnaker を導入した理由や、どのように活用して CD を改善したのかについて紹介していきます。

続きを読む

▲The Prism of Creativity ▽ vol.3 孤独とクリエイティビティ[心理学編]

f:id:sansan_nissy:20190107153214j:plain
こんにちは、DSOC研究員の西田です!

この間、Cから始まる僕がこよなく愛しているブランドの本店に訪れたとき、そこに居合わせたお客さんが私のことを店員と思ったようで、「この財布をください!」と声をかけられてしまいました。店員になりきろうかとも思いましたが、「店員じゃないです。」と正直に答えました。GANのDiscriminator*1を騙す感覚を味わうことができました。


恒例のファッション小噺はここまでとして、本題に入ります。前回と同様、今回も心理学におけるクリエイティビティの研究をご紹介します。前回は、経験への開放性、簡単にいうと好奇心がクリエイティビティを高める要因であるという研究をご紹介しました。新しい経験や知識を追い求める人はクリエイティブに活躍できるという話でしたが、クリエイターの人などは外に出かけてばかりではなく、よく作業部屋に篭っているイメージもあります。そんな直感から、今回は孤独とクリエイティビティについての研究のご紹介です。

1人の時間がクリエイティブなアイデアを生む?

実際にクリエイティブな人というのは1人の時間を大切にしているのでしょうか?

アップル社の共同創業者であるスティーヴ・ウォズニアックは1人で働くことがクリエイティブな思考に必要であると主張しています。*2

先日、We Malgielaという映画を見てきました。(実は、もう2回見ました(笑))

この映画は、マルタン・マルジェラという有名なファッション・デザイナーに関するドキュメンタリー映画です。その中でも、「クリエイティブな人は社交的にはなれない。孤独が必要。」と言っているシーンや、マルタンと一緒に働いていたメンバーは「マルタンは1人でアトリエにいる」と述べていたりするシーンもありました。大抵、アトリエは1人でいるものだと思いますが、やはり1人の時間を大切にしているのです。

また、自分の同僚の画像認識チームのメンバーが革新的なアイデアを思いついたのはシャワーしている時だったそうです。私も「これだ!」というアイデアはシャワーしている時だったり、1人で部屋でゴロゴロしているときだったりします。

続きを読む

© Sansan, Inc.