GENZITSU / UsefulMaterials

34 stars 0 forks source link

weekly useful materials - 11/9 - #76

Open GENZITSU opened 3 years ago

GENZITSU commented 3 years ago

2行追加するだけでPython Pandasを高速化するPandarallel

pandasの各種メソッドを並列化してくれるライブラリの紹介。

ブログ記事の検証では1e6のデータで検証していたが45秒が41秒に縮む程度であった。

コメント

メモ

出典

元記事

GENZITSU commented 3 years ago

RecBole を用いてクックパッドマートのデータに対する50以上のレコメンドモデルの実験をしてみた

様々なレコメンドモデルを統一的に扱えるRecBoleを用いて、50以上のレコメンドモデルからなる比較実験を1日で終わらせたという記事。

記事中には自前データをRecBole形式に変換し、学習させる手順も書かれている。

今回の結果ではRecVAEというモデルが最も性能が高く、基本的な手法と言われるBPRやItemKNNもかなり強かったとのこと。 この結果は「Are We Really Making Much Progress? A Worrying Analysis of Recent Neural Recommendation Approaches」という論文の結果とも一致する。

スクリーンショット 2021-11-04 23 37 43 スクリーンショット 2021-11-04 23 38 00

コメント

画像分類ならtimm、物体検出にはmmdetection、segmentationにはsmp, ときて推薦にはRecBoleといった感じか。時代の進化が早い。

出典

元記事

RUCAIBox / RecBole

GENZITSU commented 3 years ago

Minimum Viable Secure Product

B2Bソフトウェアのプロダクトが最低限満たすべきセキュリティ要件のチェックリスト、障害検知やSSO、ロギング、暗号化などの24項目から構成されている。

Minimum Viable Secure Product is a minimalistic security checklist for B2B software and business process outsourcing suppliers.

コメント

有用そうだ

出典

元記事

GENZITSU commented 3 years ago

漫画のキャラに強制的に感情移入できる電子デバイスを開発!『データサイエンスの無駄遣い』

各コマと同じ感情にならないと次のページを読めないようにすることで、強制的に感情移入を促すシステムの紹介。 心拍数と顔の表情から感情を読み取り、

感情を“心拍数”と“表情”の組み合わせと仮定し、漫画のキャラクターと読者の間で心拍数と表情がマッチするたびにストーリーが進行するシステムとなる。逆に言うとシーンごとの漫画のキャラクターの表情・心拍数と読者の表情・心拍数が一致しない限り次のコマに進まないことで強制的に感情移入を促す

Raspberry Pi、Node.js、心拍センサ、Google Cloud Visionとカメラモジュールを用いて「漫画のキャラクターと読者の感情を強制的に同期させる装置」、“Emotion Sync System”を作成した(図3.1)。

スクリーンショット 2021-11-05 22 00 23 スクリーンショット 2021-11-05 22 01 10

コメント

技術とセンスの無駄遣い感がすごい笑

出典

元記事

GENZITSU commented 3 years ago

Elasticsearchで日本語検索を扱うためのマッピング定義

Elasticsearchで日本語検索を行うためのマッピング定義や単語分割の手順などが書かれている。

コメント

メモ

出典

元記事

GENZITSU commented 3 years ago

継続して改善する固有表現抽出

固有表現抽出AIを継続して改善するための取り組み(学習データの作成、試行錯誤の簡易化、改善のための試用の簡易化)などが紹介されている。

学習データ作成に関しては、アノテーションガイドラインを定め、モデルの仮出力を用い作業を簡易化し、能動学習により作業量の削減に取り組んでいる。

スクリーンショット 2021-11-07 21 24 41 スクリーンショット 2021-11-07 21 24 48 スクリーンショット 2021-11-07 21 25 09

試行錯誤の簡易化については、学習コードの統一化 / 前処理・後処理のオブジェクト化が行われている。

スクリーンショット 2021-11-07 21 27 29 スクリーンショット 2021-11-07 21 29 12

仕様のしやすさに関しては、ライブラリ化 + API化の貢献が大きそうだ。

スクリーンショット 2021-11-07 21 29 22

コメント

これから自社でAIを育てていく際にとても参考になる。
どこから着手すればいいか結構微妙ではあるが、フィードバックループを一度でも回すことが重要なので、
試用のハードルを下げる、ライブラリ化 + API化などが大事なのかもしれない。
API化に関連したところで、簡単に試せるフロント画面などがあってもいいかもしれない。

出典

元記事

GENZITSU commented 3 years ago

namedivider-python

日本語の名前分割を統計的に行うライブラリ。普通の名前に関してはacc 99%。レアな名前に対してはacc 95%の性能を誇る。サポートされているPythonのバージョンは3.7以降なので注意。

スクリーンショット 2021-11-07 22 45 34

コメント

便利そう

出典

元記事

GENZITSU commented 3 years ago

legalforce-research / vaporetto

rustで書かれた点予測ベースの形態素解析ライブラリcaporetto。mecabも早いけど、そこからさらに2倍早い化け物。

スクリーンショット 2021-11-07 22 51 37 スクリーンショット 2021-11-07 22 51 59

コメント

めっちゃ早い。大量のテキストに対して形態素解析を実行しないといけない場合は使う必要がでてくるかも。

出典

元記事

GENZITSU commented 3 years ago

PostgreSQLアンチパターン:巨大テーブルのCOUNT

RDBMSのCOUNT()はシーケンシャルスキャンゆえにO(n)で必要時間が増えていくというアンチパターンの紹介。
このアンチパターンに対応して、カウント用のテーブルを作成する場合も、カウントテーブルへの書き込みがボトルネックとなりパフォーマンスが落ちるアンチパターンが存在する。

コメント

冷静に考えるとCOUNTはO(n)なので、巨大データに対してだと遅くなるか...

出典

元記事

GENZITSU commented 3 years ago

文字列処理を効率化する自作関数3選 [python]

文字列の存在判定でよく使用される自作関数とその利用例が紹介されている。関数だけみるとわかりづらいが利用例を見るとその有用性が際立ってくる。

文字列の存在判定

# from https://qiita.com/s_asotus/items/9122975a8b7aaaa9fb2b

def extract_mod(series, ptn, axis=0):
    if axis == 0:
        judge = series.astype(str).str.extract(r"(" + ptn + ")", expand=False).notna()
    else:
        judge = series.astype(str).str.extract(r"(" + ptn + ")", expand=False).isna()
    return judge

利用例: 末尾が煎餅とるデータを抽出

# https://qiita.com/s_asotus/items/9122975a8b7aaaa9fb2b

data.loc[extract_mod(data, "煎餅$", axis=1)].tolist()
"['おかき', 'rice cookie']"

英字/かな/カナ/漢字の指定

# https://qiita.com/s_asotus/items/9122975a8b7aaaa9fb2b

def char_ptn(kind, range_="+", axis=0):
    # 英字(全半)
    if kind == 0:
        ptn = "[\u0041-\u005A|\u0061-\u007A]" + range_
    # かな
    if kind == 1:
        ptn = "[\u3041-\u309F]" + range_
    # カナ(全半)
    if kind == 2:
        ptn = "[\u30A1-\u30FF|\uFF66-\uFF6F|\uFF71-\uFF9F]" + range_
    # 漢字
    if kind == 3:
        ptn = "[\u4E00-\u9FFC]" + range_

    if axis == 1:
        ptn = ptn.replace("[", "[^")
    return ptn

利用例: 漢字が3文字以上続くもの

# from https://qiita.com/s_asotus/items/9122975a8b7aaaa9fb2b

data.loc[extract_mod(data, char_ptn(kind=3, range_="{3,}"))].tolist()
"['黒胡椒煎餅']"

利用例2: カタカナで始まり、漢字で終わるもの

# from https://qiita.com/s_asotus/items/9122975a8b7aaaa9fb2b

data.loc[
    [
        (search_mod("^" + char_ptn(kind=2), senbei))
        & (search_mod(char_ptn(kind=3) + "$", senbei))
        for senbei in data
    ]
].tolist()

"['ザラメ煎餅']"

コメント

これは使えそう。

出典

[元記事]()

GENZITSU commented 3 years ago

Standard SQLのCOALESCEで、時間経過によってカラム名が変化したデータを柔軟に抽出する

引数のうち一番最初の非nullの値を返すCOALESCE関数を用いて、カラムが途中で変化したようなテーブルを統一的に扱うことができる方法の紹介。

スクリーンショット 2021-11-07 23 59 21

コメント

運用カバー系の技ではあると思うが、知っておいて損はなさそう。
もうプロダクトとして引き返せない状態になってるとこういう技に頼る他なくなってくるのだろうか?

出典

元記事

GENZITSU commented 3 years ago

lightGBM, CatBoostの特徴概要

表題の通り。

スクリーンショット 2021-11-08 19 50 46

スクリーンショット 2021-11-08 19 50 54

コメント

後に参照する機会がありそうなのでメモ。

出典

元記事

GENZITSU commented 3 years ago

avivcaspi / TennisProject

以下の動画のようなteniss解析を行うproject。テクニオン大学の理系学士を取るために作成したものとのこと。

example_short

解析対象は以下

Example for some tasks completed in this project are:

  • Detecting and tracking the tennis court in frame
  • Detecting and tracking both player in the frame
  • Detecting and tracking the ball
  • Extract the bottom player skeleton
  • Detecting the exact moment of strokes
  • Classify the strokes of the bottom player
  • Create top view gameplay
  • Calculate statistics of the gameplay of both players including positions heatmap and distance travelled

コメント

すげぇ

出典

元記事