Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

ICCVでGoogle Landmark Retrieval 2021の解法を発表しました

皆さんこんにちは
@tereka114です。急に寒くなってきました。

先週は一週間、自宅からICCVに参加しており、今年は自分もWorkshopで発表しました。
そこで、発表したWorkshopの説明と簡単にICCVの傾向を紹介したいと思います。

ICCV2021とは

ICCVはコンピュータビジョンの国際学会で、正式名称は「International Conference on Computer Vision」です。
今年も1600本ほどのポスターが公開される大きな学会で、10月11日から10月17日まで開催されていました。
Workshop/Turtorialは11,16,17、本会議が12-15です。

公式サイトのリンクです。
iccv2021.thecvf.com

今年はWorkshopで発表させてもらうことになりましたので、その話を主に書いておきます。

Instance-Level Recognition Workshop(ILR)

Kaggleで毎年開催されているGoogle Landmark Retrieval 2021のコンペティションにて
5位に入賞したため、を「ILR2021」にて紹介してきました。

www.kaggle.com

このWorkshopでは、インスタンスレベル(富士山など)での識別や検索を議論しており、特に製品や目標物、芸術に関するものが対象となっています。
Google LandmarkのコンテンツはこのWorkshopの中で毎年発表されており、今年で4回目となりました。
そのGoogle Landmarkの一部門にRetrieval Trackがあります。

Retrieval Trackは世界中の地図からの目印(例:自由の女神)となる画像のクエリデータが与えられ、
同じ目印となる画像を別のデータセット群から検索する問題です。

f:id:tereka:20211020221059p:plain:w700
Landmark Retrievalの解法発表

私達のチームの解法はEfficientNetV2と距離学習で用いられるArcFaceを利用しました。
そのArcFaceを学習し、中間のベクトル表現を獲得したものを用いて近傍を計算しました。
最後にノイズとなる画像を削る「Bridged Confidence」と呼ばれる後処理を提案し、スコアを伸ばしました。

解法の詳細は次のYoutubeの14分あたりから御覧ください。(英語です)

www.youtube.com

ICCV2021の傾向

セッションも時間の許す限りチェックしました。
今年、特筆するものとして、Transformerを利用した提案手法が増えていました。
もともとTransformerはNLPで利用されていたアーキテクチャですが、Visual Transformerの発表以降、画像でもTransformerの熱が上がっていることが伺えます。

今年ICCVのベストペーパーもTransformerベースのアーキテクチャSwin Transformer: Hierarchical Vision Transformer Using Shifted Windows」でした。

大きなポイントはVisual Transformerと比較して、固定となるパッチサイズではなく、スケーリングや平行移動への対応のために、
徐々にパッチサイズを小さくする(CNNのPooling処理に近い)ようなこと行ってます。

このSwin TransformerはPyTorchのtimmライブラリから簡単に扱うことができ、先述のGoogle Landmarkのコンペティションでもトップチームが利用していました。

github.com

最後に

Transformerを利用したものが整理されて公開される時期が来たと感じました。
従来の画像のDeepLearningといえばCNN一強の時代が続いていましたが、Transformerが少しずつ取って代わっているような流れになってきています。
Transformer+CNNも組み合わせたり、Transformerをより画像向けにしたりするなど、改善できるところもまだまだある感じました。
これからのアーキテクチャの進化がどのようになるか非常に楽しみです!

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

Kaggle Grandmasterと話したいエンジニアWanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com

ElasticON Global 2021 最速レポート2

こんにちは。Elastic認定エンジニアのノムラです。

今回の記事は以下の続きになります。
acro-engineer.hatenablog.com


Opening Keynoteの後、Keynoteで紹介された各ソリューションについて、詳細説明のセッションがありました。
そのセッションについてそれぞれ紹介します。

1.Elastic Observability: Unified, actionable, frictionless

Observabilityの発表では、Logs, Metrics, Insights それぞれに関して現在取り組んでいる内容の説明の後、
ad hoc analysis & machine learning」というデモがありしました。
アプリケーションがバックエンドに使っているDBの種別などに基づいて絞込みをおこなったり、ログメッセージをカテゴライズできるようになるという話は興味深かったです。

f:id:acro-engineer:20211007061535p:plain:w500

また、最近機能追加された Prometheus や OpenTelemetry への対応についても説明がありました。
f:id:acro-engineer:20211007062440p:plain:w500
f:id:acro-engineer:20211007062646p:plain:w500

OpenTelemetryなどの標準的な規格に対応することで、Observabilityのバックエンドとして、より汎用的にElastic Stack を利用可能になりましたね。

2.Elastic Security: Limitless XDR. Unbounded security

この発表では、

  • バージョン7.14でリリースされた Limitless XDR
  • Cmdとbuild.security がElasticに加わった話
  • 今後おこなわれるクラウドセキュリティの強化について

といった内容が中心に話されました。

2019年にEndgameを買収し、XDR (eXtended Detection and Reactions)に力を入れていており、そこがさらに強化されてきたような形です。その結果、エンドポイントでセキュリティ脅威を検出し、さらにそこへの対処までをおこなうことが可能になっています。

f:id:acro-engineer:20211007063609p:plain:w500

Limitless XDRは、SIEM・Endpoint Security・Cloud Security からなります。
今回は、今後導入される予定の Cloud Securityに関する話が特に印象的でした。
f:id:acro-engineer:20211007070430p:plain:w500


Endpoint Securityに関しては、発表の中で簡単なデモがありました。
組み込みの検出ルールによって脅威を発見してアラート、ホストをネットワークから切り離すところまでKibana上で完結しています。
f:id:acro-engineer:20211007064603p:plain:w500

また、Elastic AgentがOSQueryに対応したことで、
脅威の検出後に各エンドポイントでOSQueryを実行した結果を収集し、Kibanaで確認できるようになりました。素早く問題の特定をするのに役立ちますね。

さて、目玉となるCloud Securityについてですが、Elasticが今年8月に買収をおこなった2社から、
CmdのCSOである Jake King 氏と、build.securityのCEOであるAmit Kanfer 氏による発表+デモがありました。
Cmd社はeBPFを活用したクラウドにおける Runtime Securityを得意としており、build.securityは OPA(Open Policy Agent)によってクラウドインフラを管理するような内容に強みがあります。
これらの2社を取りこむことによって、セキュリティ基盤としてのElastic Stack がクラウドインフラに対しても大きな力を発揮できるようになるだろうと感じました。

f:id:acro-engineer:20211007070212p:plain:w500
f:id:acro-engineer:20211007070118p:plain:w500

この2社がElasticにジョインしたことについては、Elasticからブログ記事が出ていますので是非ご一読ください。
www.elastic.co

www.elastic.co

セキュリティの基盤として大きな躍進を遂げているというのが特に印象的でした。今後の動きも目が離せなさそうです。

3.Elastic Enterprise Search: Solve with speed, scale, and relevance, out of the box

Enterprise Searchでは以下のキャプチャのように、文書検索について手動/自動両方の調整機能がかなり開発されてきました。
その各機能の紹介とデモが主な内容でした。
f:id:acro_nomura:20211006225444p:plain:w500

その中で個人的には、Keynoteで紹介されたWeb Crowler以外ではRuntime Fieldを活用する、という話が面白かったです。
f:id:acro_nomura:20211006223343p:plain:w500

Runtime FieldはElasticStack7.11で登場した機能です。ひとまずデータをElasticsearchにインデキシングしておいて必要な時にRuntime Fieldを生成して Enterprise Searchで検索可能にする、という考え方のようです。
Runtime Fieldの再インデキシングが不要であるという利点を活かしているのが良いですね。

また機械学習を利用した検索機能の強化も非常に面白そうな内容でした。
f:id:acro_nomura:20211006224148p:plain:w500

これからは登録したドキュメントから学習して、自動で似た意味の単語や文章を判断してくれるようになる可能性がある、と思うと辞書整備の手間も減り非常に便利そうです。

まとめ

今年のKeynoteと各サービスのセッションから以下を感じました。
クラウド利用により世界中でサービスを簡単に展開可能となった
・Elastic Stackを活用することで簡易にあらゆるサービス/アプリケーションのデータを集め、横断的に検索・分析することができるようになった

実際にElasticStackを触り続けている身として、年々ElasticStackがより簡単に高度な検索/分析ができるようになっていると思います。
これからもどんどん強力になるElastic Stackを使いこなしていきたいです。

それでは。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com

ElasticON Global 2021 最速レポート

こんにちは。Elastic認定エンジニアのノムラです😊

最初に個人的な話で恐縮ですが、今週「Elastic認定オブザバビリティエンジニア」の資格を取得したので、
以下3つの認定資格をコンプリートしました!
・Elastic認定エンジニア
・Elastic認定アナリスト
・Elastic認定オブザバビリティエンジニア

さて、本題です。
現在Elastic最大のイベントである、「ElasticON Global 2021」が 10/05~10/07で開催中です。
今年も去年に引き続きオンラインでの開催で、多くのセッションがあり盛り上がっています!

f:id:acro_nomura:20211006114948p:plain:w500

アジェンダ

全部で、100近いセッションがあります。
3日間の開催ですが、後半2日間は各地域のタイムゾーンに合わせて同一内容を再配信する形式になっています。

セッションの一覧は下記のURLから確認することができます。
www.elastic.co

今回は、Keynoteについて簡単に内容をご紹介します。

ElasticON Global Opening Keynote: Solving for innovation

Elastic社CPOであるAshutosh Kulkarni氏、Microsoft社のScott Guthrie氏、そしてElastic社CEOであるShay Banon氏による発表でした。

f:id:acro-shiroi:20211007001849p:plain:w500

Keynoteでは大きく以下について、話がありました。
①Azure等のクラウドプロバイダーとの連携について
②Observability、Enterprise Search、Securityの各ソリューションについて

Azure等のクラウドプロバイダーとの連携について

Elastic社は去年から今年にかけて、各クラウドプロバイダーと連携を強化しています。
現在では5つのクラウドプロバイダーを利用でき、リージョン数も40を超えています。
f:id:acro_nomura:20211006120703p:plain:w500

またクラウド上で非常に簡易にElasticStackを構築することが可能です。
今回のKeynoteではAzure上に構築するデモが紹介されていましたが、構築完了までほんの数クリックです。
f:id:acro_nomura:20211006124359p:plain:w500

仮想ネットワークとElastic Cloud を直接繋ぐPrivateLinkが利用可能となったほか、最新版である7.15では通信コストが以前から50%~70%抑えられるようになっているそうです。
f:id:acro_nomura:20211006131429p:plain:w500

Observability、Enterprise Search、Securityの各ソリューションについて

次に各ソリューションについて最新版ではどのようなことが可能なのか紹介がありました。

その中でもEnterprise SearchのWeb Crowlerは一押しの便利機能です。
デモでは画面から簡単にElastic社のブログをクロール/インデキシングして検索可能とするデモを紹介。
f:id:acro_nomura:20211006214538p:plain:w500

また以下のスライドの通り、Enterprise Searchでは様々なサービスのメッセージやファイルをインデキシングして検索可能です。
企業内検索を簡易に実現できるのは嬉しいですね。
f:id:acro_nomura:20211006214010p:plain:w500

Securityでは Limitless XDR として、エンドポイント検知や対処が強化されました。
特にクラウドセキュリティは注目すべき部分だと思います。
Elastic Stackという単一のプラットフォームで「SIEM」「エンドポイントセキュリティ」「XDR」の機能をフル活用できるのは
非常に魅力的だと感じました。
f:id:acro_nomura:20211007003807p:plain:w500

次の記事ではKeynote以外のセッションについて紹介予定です。お楽しみに!

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com

GraphQL APIをKarateで自動試験する

こんにちは、QAの@kareyama_rです。
最近お花のサブスクを始めました🌹
リモートワークで家にいる時間が長いので、部屋に季節の彩りが添えられて嬉しいです。

ソフトウェア開発において、自動試験・テスト自動化の話題はよく聞くようになりましたが、ユニットテストとE2Eテストが主体になっているように感じます。
当社では、ユニットテストとE2Eテストの間に来るインテグレーションテストとして、API試験の自動化も積極的に取り組んでいますが、E2Eテストより運用コストを抑えられるので、より対象範囲を拡大して導入していきたいと考えています。
そこで今回は、GraphQL で実装されたAPIを、テスト自動化フレームワークの Karate で検証してみました。

はじめに

最初に、知らない方のために、簡単に今回の対象について紹介します。

GraphQL とは

GraphQL はWeb APIのための仕様で、リクエスト時に利用されるクエリ言語と、クエリを実行するサーバ側のランタイムから成ります。
APIから提供されるエンドポイントは1つだけで、リクエストクエリで取得するデータフィールドを指定できます。
フロントエンドとしては、REST-APIと比べて、少ないリクエストで必要なデータが取得できるメリットがあります。感覚的には、フロントエンドから利用できるSQLのような印象です。

https://graphql.org/

Karate とは

Karate はE2Eテストや負荷テストを含むテスト自動化フレームワークであり、特にAPIテストに使いやすい機能が多く揃っています。
REST-APIのテストでよく利用されていますが、WebSocket や GraphQL のテストも可能です。
GraphQLのようにリクエスト内容によってレスポンス形式が変わるAPIでも、柔軟に試験を行うことができます。

https://intuit.github.io/karate/

GitLab の GraphQL API の確認

今回は、試験対象として、GitLabが提供しているGraphQL APIを利用します。
GitLabのチケット(Issue)の操作を、GraphQL APIから実行してみます。以下の内容です。

  • 一覧取得(Query): チケット一覧取得
  • 1件取得(Query): チケット詳細の取得
  • 更新(Mutation): チケットステータスの更新

API Docはこちら

予めテスト用にGitLabで`graphql-test`というプロジェクトを用意し、適当なIssueを作成してあります。
f:id:acro-engineer:20210913003346p:plain

GitLabが用意しているGraphiQL explorerを使い、クエリを実行してみます。

チケット一覧取得

プロジェクトを指定し、Issueの数とID・タイトルを取得します。

  query {
    project(fullPath: "sandbox17/graphql-test") {
      name
      issuesEnabled
      issues {
        count
        nodes {
          iid
          title
        }
      }
    }
  }

3件のテストデータが取得できました。

{
  "data": {
    "project": {
      "name": "graphql-test",
      "issuesEnabled": true,
      "issues": {
        "count": 3,
        "nodes": [
          {
            "iid": "3",
            "title": "issue3"
          },
          {
            "iid": "2",
            "title": "issue2"
          },
          {
            "iid": "1",
            "title": "Issue1"
          }
        ]
      }
    }
  }
}
チケット詳細の取得

プロジェクトとチケットIDを指定します。
チケットIDはvariablesとして定義し、値を自由に変えられるようにしています。

query ($iid: String!) {
  project(fullPath: "sandbox17/graphql-test") {
    issue(iid: $iid) {
      iid
      title
      state
      author {
        name
      }
      description
      labels {
        nodes {
          title
        }
      }
      dueDate
    }
  }
}
{
  "iid": "2"
}

タイトルやステータス、本文、ラベル、期日が取得できました。

{
  "data": {
    "project": {
      "issue": {
        "iid": "2",
        "title": "issue2",
        "state": "opened",
        "author": {
          "name": "kaya"
        },
        "description": "Issue2の本文です",
        "labels": {
          "nodes": [
            {
              "title": "Label02"
            }
          ]
        },
        "dueDate": "2021-09-30"
      }
    }
  }
}
チケットステータスの更新

mutationでIssueをクローズします。

mutation {
  updateIssue(input: {projectPath: "sandbox17/graphql-test", iid: "3", stateEvent: CLOSE}) {
    errors
    issue {
      iid
      state
    }
  }
}
{
    "data": {
        "updateIssue": {
            "errors": [],
            "issue": {
                "iid": "3",
                "state": "closed"
            }
        }
    }
}

Karate を利用した GraphQL のテスト

先ほどまでで実行した GitLab の GraphQL API の内容を、Karateを利用して、クエリの実行・レスポンス内容を行ってみます。
Karateプロジェクトの作成方法は、公式ドキュメントを参照してください。

まず1つ目のクエリ、「チケット一覧取得」を実行し、3件のチケットが取得できることを検証します。
Karateプロジェクトにquery_issues.featureというファイルを作成し、以下の内容を記載します。

Feature: GitLabのチケット(Issue)を取得する

Background:
  * url 'https://gitlab.com/'

Scenario: チケット一覧取得
  * text query = 
  """
  query {
    project(fullPath: "sandbox17/graphql-test") {
      name
      issuesEnabled
      issues {
        count
        nodes {
          iid
          title
        }
      }
    }
  }
  """
  Given path '/api/graphql'
  And request { query: '#(query)' } #リクエストボディを設定
  And header Accept = 'application/json' 
  When method post  #リクエストをPOST
  Then status 200  #レスポンスステータスが200であることを確認
  And match response.data.project.issues.count == 3  #チケットが3件あることを確認
  * print response

Karateはリクエストボディを定義する際、多くの場合defというキーワードを使いますが、GraphQLのクエリを渡すとJSON形式として解釈されてしまいます。
そのためGraphQLのクエリは、textというキーワードで宣言します。

実行すると、このようなレポートが出力されました。
f:id:acro-engineer:20210915222914j:plain
KarateでGraphiQL explorerと同じリクエストが実行され、レスポンスに対する検証もできました。


次に、「チケット詳細の取得」についても検証します。
今度はクエリを別ファイルに保存して読み込むようにしています。
.graphqlファイルで渡すと、defキーワードでも自動的にGraphQLのリクエストとして扱ってくれるようです(優秀!)

また、variablesを定義して、queryと一緒にリクエストボディとして渡します。

検証内容は「ステータスが"opened"であること」「ラベルに"Label02"が含まれていること」に変更します。
レスポンスデータのネストは、".."で表記を省略できます。

Scenario: チケット詳細取得
  Given def query = read('issue_detail.graphql')
  And path '/api/graphql'
  And def variables = { iid: "2" }
  And request { query: '#(query)', variables: '#(variables)' }
  And header Accept = 'application/json'
  When method post
  Then status 200
  And match response..state == ['opened']
  And match response..labels.nodes.[*] contains {title: Label02}
  * print response

実行すると、このようになりました。
f:id:acro-engineer:20210915225409j:plain

最後に、「チケットステータスの更新」を行います。
更新時のレスポンスでも結果を取得できますが、更新後に再度チケット詳細をクエリして、ステータスがCLOSEになっているか確認するシナリオを組んでみます。

Feature: GitLabのチケット(Issue)を更新する

Background:
  * url 'https://gitlab.com/'

Scenario: チケットステータス更新
  * text query = 
  """
    mutation {
        updateIssue(input: {projectPath: "sandbox17/graphql-test", iid: "3", stateEvent: CLOSE }) {
            errors
            issue {
            iid
            state
            }
        }
    }
  """
  Given path '/api/graphql'
  And request { query: '#(query)' }
  And header Accept = 'application/json'
  And header Authorization = 'Bearer <アクセストークン>'
  When method post
  Then status 200
  * print response

  # 更新結果を検証
  Given def query = read('issue_detail.graphql')
  And path '/api/graphql'
  And def variables = { iid: "3" }
  And request { query: '#(query)', variables: '#(variables)' }
  And header Accept = 'application/json'
  When method post
  Then status 200
  And match response..state == ['closed']
  * print response

チケット情報を取得するクエリを別ファイルにしたことで、使い回しができます。
結果のレポートはこのようになりました。
f:id:acro-engineer:20210916005503j:plain

まとめ

Karateを使って、GraphQLのAPIも簡単に実行・検証できました。
特にGraph QLに対してKarateでテストする際、以下の機能がサポートされているのがありがたかったです。

  • QueryとMutationの実行
  • Variablesの受け渡し
  • .graphqlファイルの読み込み

GraphQLはリクエスト時に自由に取得フィールドを指定できる分、レスポンス形式も流動的になりますが、Karateであれば必要な箇所のみ取り出して柔軟な検証を行えます。
また、GraphQLのレスポンスは階層が深くなりがちですが、Karateならすっきりと書くことができました。

ぜひAPIテストを自動テストの1つとして取り入れてみて下さい。
それでは。


顧客のビジネスをインフラから加速するエンジニア募集! - Acroquest Technology株式会社のインフラエンジニアの求人 - Wantedlywww.wantedly.com

ACM SIGIR 2021 に参加してきました

こんにちは、@shin0higuchiです😊
7/11~7/16に、情報検索のカンファレンスである ACM SIGIR 2021 がオンライン開催されました。
私も参加してきたので、概要や特に興味深かったセッションについてブログを書きます。

1. 概要

1. SIGIRとは

ACM(コンピュータ分野全般を対象とする国際学会)が主催するカンファレンスで、毎年一回開催されます。
ACMは毎年数多くのカンファレンスを主催しており、SIGIRは Special Interest Group on Information Retrieval の略で、毎年情報検索に関する様々な研究成果が寄せられます。

2. 今年のSIGIR

昨年のSIGIRは中国の西安で開催され、リモートでの参加が可能という形となっていましたが、
今年は完全オンラインということで、Underline / Zoom / Gather.Town などを駆使した催しとなっていました。
オンラインではありましたが、約1000人(46か国)が参加したようです。

Gather.Townは私自身初めて利用したのですが、
ポスターセッションなどもストレスなく回ることができてとても良いプラットフォームだと感じました。
仮想空間上を自由に歩き回ることができ、近くの人と会話したり、ポスターや企業ブースを回ったりと、かなり自由度が高かったです。
(~25人のスペースなら無料で作れるようなので、遊んでみるのも面白いかもしれません)
gather.town


f:id:shin0higuchi:20210722151229p:plain:w700
f:id:shin0higuchi:20210722151340p:plain:w700

Underlineでのセッション視聴も使いやすく快適でした。(オープニングセッションの様子)
f:id:shin0higuchi:20210723052055p:plain:w800
 
学会全体での論文傾向などはオープニングセッションで紹介されていました。
short paper なども含めると1410ものサブミッションがあり、382本が Accept されたそうです。
https://waseda.app.box.com/v/sigir2021opening

セッションのカテゴリは以下の通りで、
私は主に「Recommendation」、「Searching and ranking」、「Question answering」などを中心に聞いていました。
f:id:shin0higuchi:20210723050957p:plain:w800

3. 昨年との傾向比較

今年のトピック一覧を見てみると、「Content recommendation, analysis and classification」「Search and ranking」などが多いことがわかります。
f:id:shin0higuchi:20210724100324p:plain:w800

ちなみに、昨年のAccepted Papersのトピック分布はこちらです。昨年は圧倒的にRecommendationが多かったですが、この分野は引き続き研究が盛んであることがわかりますね。
f:id:shin0higuchi:20210724095622p:plain:w800

2. 興味深かったセッション

1. Reinforcement Learning from Reformulations in Conversational Question Answering over Knowledge Graphs (Magdalena Kaiser, Rishiraj Saha Roy, Gerhard Weikum)


Question Answering(以下QA)で、会話を通して強化学習するというトピック。

良い質問応答のシステムを作るためには、良い応答と悪い応答を適切に判断して学習させる必要があります。
システム側は常に「良い応答」だと思って応答を出力するので、良し悪しの判断は原則外部(質問者)からフィードバックされることが必要です。
一般的に、会話で期待通りの答えが返ってこない時、自分の質問を言い換えることがあると思いますが、
QAのシステム側から見れば、ユーザーが言い換え(Reformulation) を行った場合は、適切な回答ではなかったと考えることができます。


f:id:shin0higuchi:20210723045026p:plain:w800

この研究では、入力される発話が「新たなインテント」「言い換え」のどちらであるのかを推論し、
言い換えであった場合は reward = -1、新たなインテントであった場合は reward = 1 とすることで、回答を生成する強化学習モデルにフィードバックすることが提案されています。
インテント」というのは、目的・意図といった意味で、ここではユーザーが「何を訊きたいか」を意味します。
つまり、訊きたいことに対する適切な回答が得られた場合は次の質問(=新たなインテント)、得られなかった場合は言い換えをするという仮説に基づいた考えです。

Reformulationの判定にはファインチューニングされた BERTモデルを利用しているそうです。
モデル全体のアーキテクチャは下図のようになっています。
f:id:shin0higuchi:20210723044352p:plain:w800


コードはこちらで公開されています。
github.com

QAは個人的にかなり興味のある分野だったのでためになりました。

2. Personalized News Recommendation with Knowledge-aware News Interactions (Tao Qi, Yongfeng Huang, Chuhan Wu, Fangzhao Wu)

ニュースのレコメンデーションに関するトピックでした。ニュースをレコメンドする際には、

  • ユーザーの関心
  • 推薦候補記事同士の関連性

を紐づけることでユーザーごとに適切な記事を推薦する必要があります。

一般的に、上記をそれぞれ別個のモデルで学習し、組み合わせる手法が多いのですが、
ユーザーの関心(≒クリックや検索の傾向)と、推薦候補の記事傾向を別々に学習すると、適切なマッチングが難しいという問題があります。
この研究ではこれらを統合的に学習することで、精度を改善する手法が提案されています。

f:id:shin0higuchi:20210723045456p:plain:w800
  
論文はこちら:arxiv.org

3. Meaningful Answer Generation of E-Commerce Question-Answering (Shen Gao)

E-Commerceにおける質問応答システムに関する発表でした。
「この商品は辛いですか?」といったような、商品に関する質問に対して応答を自動生成するシステムがテーマです。
応答は基本的にユーザーのレビューをもとに生成するのですが、中には間違った情報が含まれていたり、レビュアー間で観点が異なっていたりという問題があります。(たとえば、ほとんどの人が「辛くない」と言っている中で、ひとりだけ「とても辛い」とレビューしている場合など)
データソースに誤った情報や関係のない情報が混ざっている場合に、それに引っ張られず適切な応答を返すのは難しいだけに、勉強になりました。

f:id:shin0higuchi:20210724141119p:plain:w800

この研究では、レビューを事前にクラスタリングし、それぞれについて回答を推論してから統合する形を取っています。
f:id:shin0higuchi:20210724142535p:plain:w800

また、クラスタ毎の推論部分は以下のような構成を取っており、これによって少数派の間違った情報から影響を受けにくくなるようです。
f:id:shin0higuchi:20210724145333p:plain:w800




4. その他

今回のAwardは以下の通りでした

  • Best Short Paper: Contextualized Offline Relevance Weighting for Efficient and Effective Neural Retrieval by Xuanang Chen, Ben He, Kai Hui, Yiran Wang, Le Sun and Yingfei Sun
  • Best Student Paper: Dynamic Modality Interaction Modeling for Image-Text Retrieval by Leigang Qu, Meng Liu, Jianlong Wu, Zan Gao and Liqiang Nie
  • Best Paper: Computationally Efficient Optimization of Plackett-Luce Ranking Models for Relevance and Fairness by Harrie Oosterhuis
  • SIGIR Test of Time Award: Exploiting geographical influence for collaborative point-of-interest recommendation by Mao Ye, Peifeng Yin, Wang-Chien Lee, Dik-Lun Lee, SIGIR 2011

興味のあるかたは是非読んでみてください。

3. 最後に

上記で挙げた以外にも、沢山の面白いセッションがあり、非常に良い刺激を貰えた一週間でした。
運営の皆様、発表者の皆様お疲れさまでした。

以上となります。お読みいただきありがとうございました。



Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com

【イベントレポート】PRODUCT LEADERS 2021に参加してきました!

TorrentioVideoの開発に携わっている、3年目MLアプリケーションエンジニアの@yktm31です。

7/9(金)に開催された、PRODUCT LEADERS 2021というイベントに参加したので、レポートしたいと思います。

japancpo.org

イベント概要

PRODUCT LEADERS 2021は、Ken Wakamatsuさんが立ち上げた、日本CPO協会が主催するイベントで、
「日本企業をプロダクトの力で強く進化させる」というミッションのために開催されました。

SalesforceAdobe、AtlassianなどのCPO、プロダクトマネージャーの、 プロダクトづくりにおける考えやマインド、意思決定やノウハウがなんと無料で聴けるというイベント。

全部で約9時間になるイベントで、一つ一つのセッションの密度が濃くとても刺激的でした。
全部を網羅するのは難しいので、本記事では特に印象に残ったセッションを3つほど取り上げたいとおもいます。

全体の概要を知りたい方は、ハヤカワカズキさんのまとめをぜひ読んでみてください

印象に残ったセッション

Keynote CPOとは - CEO/CTOとの働き方 (Pratima Arora)

Pratimaさんは、Atlassian社でPM(プロダクトマネージャー), GM(ジェネラルマネージャー)を経験し、 現在はChainalysis社でCPOとして働いている方。

PratimaさんはCPOについて、乗り物に例え、以下のように説明していました。

  • なぜその目的地を目指すのか
  • 目的地では何をするのか
  • なぜ私たちが、他の誰かではなく、その目的地に行くのか
  • 同じ方向に向かっている船と、自分たちはどのように違うのか

つまり、CPOに求められるのは、ビジョンと戦略掲げること、それを元に帆を調整し前に進めること(=実行力)。

エンジニアである自分は普段、How(どのように目の前を解決するか)にコミットしています。 ですが、プロダクトリーダと同じ方向を向くためにも、プロダクトリーダが考えるWhy/Whatを理解していくことが重要だな、と感じました。


他には、顧客との関係、UXとの関わり方、多様性に対する考え方、チーム構築などの話をされていました。
その中でも特に印象に残ったのは、最後に話されていた、「最終的にはすべて人」ということ。

Pratimaさんは、少人数のチームから数百人規模のチームへ拡大した経験もある中、
「自律的で責任感のあるチームを作ること」が、ビジョンを元に前に進むために重要だと学んだと語っていました。
「PMだけでは何もできない」とも言っており、良いプロダクト作りは、 良い組織・良いコミュニケーションの中から生まれるのだ、と実感がこもった重みを感じました。

プロダクトチームをリードする人材育成 (Marcus Torres)

ServiceNow社でGeneral Managerを勤めるMarcusさんによる、PMの育成・チーム構築の話でした。

Marcusさんが言っていた、「プロダクト・マインドセットという言葉が、特に印象に残りました。

「プロダクト・マインドセット」とは、Marcusさん曰く、ソフトウェアに限らず物理的なものについても、
「その製品の目的はなんなのか」「何を達成しようとしているのか」「どうすればより良くなるのか」というプロダクト視点で見ること。

Marcusさん自身のエピソードとして、とあるホテルのシャワーノブが非常に使いづらかった時、
「人が使いこなせないものは、自分なら選ばない!」と思ったそうです。

このように、身の回りの有形・無形の製品に対しする姿勢から、その人がプロダクトを些細なもの、と考えているのかどうか見えてくるそうです。 そして、この「プロダクト・マインドセット」は本からでは学べず、偽れないもの。
エンジニア出身のPMや、MBA出身のPMがいて、それぞれの視点があるが、この「プロダクト・マインドセット」は、共通的に重要なことだとMarcusさんは語っていました。

f:id:yktm31:20210709232108p:plain

実際にMarcusさんは採用面接の場で、
「ある物理的な製品について自分の意見と、それをどうやって改善するのか」
ということを、候補者に聞いているそうです。


自分の胸に手を当て、、、出来ていないなと思わされました。
開発の中で、バックエンド・フロントエンド両方担当していますが、 特にフロントエンドの開発では、「使い勝手」を考え実装する、というチャンスを多くもらってます。
フロントをやる以上、UIデザインの知識がないといけないかな、と思っていましたが、 スキル的な面だけではなく、「プロダクト・マインドセット」を持つことの重要性を学びました。

新規開発とプロダクトマーケットフィット (Geoff Baum)

Adobe社の新規事業のリーダーを経験し、現在はAcceldata社でマーケティングを統括するBaumさんのセッション。

よりビジネスサイドの話題が中心で、Adobe社で新規事業を立ち上げたときのエピソードや、PMF(Product Market Fit)について話されていました。

その中での、Photoshop Expressについてのエピソードが面白かったです。
PhotoshopLightroomという製品がある中で、写真家ではない人のモバイルでの写真編集という市場を開拓。 まず最初にターゲットのニーズを満たすためのアクセシビリティを考え、iOSアプリをリリースしてPMFを検証。 どこでどんな機能を使っているのか、編集した写真を有料で保存、印刷したりするのか、などさまざまなメトリクスを分析し、
ユーザに価値が届いていると判断した時、次のGo-to-Marketのための施策を打つ。

プロダクトを立ち上げから、顧客のニーズを検証、プロダクトのスケールのために動いていく。 プロダクトマネージャーは、プロダクトのCEO(ミニCEO)と呼ばれることもありますが、 まさにプロダクトの成長にコミットするという、プロダクトマネージャー的なエピソードだと感じました。
パワーポイント上で作ったアイディアを、1000万ドル以上の収益にまで成長させた経験があるというBaumさんの、経験に裏打ちされた解像度の高い話がとても面白かったです。

最後に

このイベント登壇していたのは、最先端のテック企業で、 複数のプロダクトをマネージし、複雑な意思決定をしてきた熟練のCPOやPM。

たかだか2,3年のSWE経験しかない自分には、難しい話も正直多かったです。 しかしそれでも、プロダクトに関わる一人でもあり、 どのようにプロダクトを育てていくかという点は興味がある部分。

今回のイベントを通して、世界のプロダクトリーダのマインドセット・考え方に触れることができたのは、 とても刺激になりました。

当社は、ENdoSnipe、そして私が関わるTorrentioVideoという2つのプロダクトを展開しています。 プロダクトを通し、顧客に価値を届け、世の中の課題を解決していきたい。そう思えるイベントでした。

今回初回だったPRODUCT LEADERS 2021、年末に2回目の開催が予定されているそうです。 このような会を、無料で開催してもらえていること、とても有難いなと感じます。
主催の、日本CPO協会の方々ありがとうございます。 (微力ながら寄付させていただきました。) 次回もぜひ、参加しようと思います。



P.S.
記事中、おざきはやとさんのTweetを引用させていただきました。 イベント実況、ありがとうございました。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

  少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【データ分析】 Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com

CVのトップカンファレンスCVPR2021へ参加しました

皆さんこんにちは。
@tereka114です。最近、気温が上がってとても暑くなりましたね。

この季節恒例のCVPR2021が先日開催され、今年もリモートで業務後に動画を見たり、論文読んだりして参加していました。
この記事では、CVPR2021の簡単な紹介をしたいと思います。

CVPR2021

CVPRはコンピュータビジョンを扱うアメリカの学会で、6/19(土)〜6/25(土)の日程で開催されていました。
学会の正式名称はComputer Vision and Pattern Recognitionです。

cvpr2021.thecvf.com

昨年からオンラインで開催されており、昨年はリアルタイムで参加していましたが、今年は仕事が終わってから動画を確認するスタイルにしました。
前回のCVPR2020は、COVID-19の影響により急遽オンラインのみとなりました。その影響か、サイトがしばらく遅いことがありました。
しかし、今年はサイトが遅くなることもなく、Workshop/TutorialもYoutubeで配信されて後から確認できるようになっているなど、主催側がオンライン会議慣れしてきた感があります。

タイムゾーンがほぼ異なる私も大きく困りませんでした。

今年の特徴

今年の特徴は次の通りです。
昨年と比べて、論文の提出数が増え、参加者はそのままの傾向です。
参加者がそのままの傾向なのはリモートになったことで論文読むのと変わらない状況になったのが一つの原因でしょうか?

参加者:6800人(前年度同等)
論文数:1600枚/7000枚(Accept/Submission)、前年度比10%増
論文執筆者の国籍:中国、アメリカ、韓国が多い。

相変わらず論文数は多いこともあり、とてもではないですが、読み切れる数ではないので、抽出して動画を見たり読んでいます。
気づいていなかったのですが、公式から6/24に論文検索の素晴らしいサイトができているのでそこをチェックするだけでも楽しそうです。

見つけた論文や著者に類似している論文を探すのに便利なサイト
paper search1

f:id:tereka:20210702140246p:plain:w700

CVの分野ごとの論文を探すのに便利なサイト
paper search2

f:id:tereka:20210702140100p:plain:w700

学会の様子

全体的な傾向

昨年と比べてもより、3Dの技術の傾向は強く出ていました。
また、後述するContinual Learningの分野がOralでちらほらと見られるなど、注目される分野も変わってきたのではないかと考えています。
※今年は残念ながら論文のタグクラウド発表がありませんでした。

サイトでは直接質疑応答ができるビデオ会議や動画のページでテキストでやり取り可能なコンテンツや録画済のInvited Talkなどもあり、
TimeZoneを超えて、自由に参加ができる状態なのが個人的には良い流れだと感じています。

参加したWorkshop/Tutorial

興味ある論文は読み進めている段階ですので、参加したワークショップについて簡単に紹介します。

1. Responsible Computer Vision

sites.google.com

コンピュータビジョンにおける差別や信頼性、データセットの評価などを議論するワークショップです。
大規模なシステムを組んだ際に性別など実際の問題と関係のないような要素で評価されるようなシステムはよくありません。
そのデータセットの評価などで利用できる指標や影響度を消すような手法の紹介がありました。

このような問題は研究よりも、より業務上非常に重要な要素ですので、実際の業務にも活かしたいと思います。

2. Continual Learning in Computer Vision

Continual Learning(継続学習)と呼ばれる分野のWorkshopです。

2nd CLVISION CVPR Workshop

Continual Learningはあるデータを学習させたモデルに対して、新しいデータを継続的に学習させていく中で過去のを忘れないようにするものです。

例えば、TaskAを学習させたモデルAがあり、そこに、新しくTaskBを学習させます。
この 場合にTaskBのみを判定できるがTaskAのデータが判定できなくなる、といった事が多くありました。

これらを工夫により、TaskAとTaskB、どちらも判定できるようにしようといった試みです。
全てのデータを保有するのが難しいが、継続的に新しいデータを学習させ続けるようなケースに便利です。

最後に

昨年よりもリモートでも非常に参加しやすくなりました。
参加者と直に会えない、ポスターの集まりを見れないなど、
リモートならではの課題はまだまだありますが、参加して良い刺激が得られるカンファレンスだったと感じています。

来年はCOVID-19が収まってリアルタイムに参加してみたいです!

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com