Open GENZITSU opened 3 years ago
様々なレコメンドモデルを統一的に扱えるRecBoleを用いて、50以上のレコメンドモデルからなる比較実験を1日で終わらせたという記事。
記事中には自前データをRecBole形式に変換し、学習させる手順も書かれている。
今回の結果ではRecVAEというモデルが最も性能が高く、基本的な手法と言われるBPRやItemKNNもかなり強かったとのこと。 この結果は「Are We Really Making Much Progress? A Worrying Analysis of Recent Neural Recommendation Approaches」という論文の結果とも一致する。
画像分類ならtimm、物体検出にはmmdetection、segmentationにはsmp, ときて推薦にはRecBoleといった感じか。時代の進化が早い。
B2Bソフトウェアのプロダクトが最低限満たすべきセキュリティ要件のチェックリスト、障害検知やSSO、ロギング、暗号化などの24項目から構成されている。
Minimum Viable Secure Product is a minimalistic security checklist for B2B software and business process outsourcing suppliers.
有用そうだ
各コマと同じ感情にならないと次のページを読めないようにすることで、強制的に感情移入を促すシステムの紹介。 心拍数と顔の表情から感情を読み取り、
感情を“心拍数”と“表情”の組み合わせと仮定し、漫画のキャラクターと読者の間で心拍数と表情がマッチするたびにストーリーが進行するシステムとなる。逆に言うとシーンごとの漫画のキャラクターの表情・心拍数と読者の表情・心拍数が一致しない限り次のコマに進まないことで強制的に感情移入を促す
Raspberry Pi、Node.js、心拍センサ、Google Cloud Visionとカメラモジュールを用いて「漫画のキャラクターと読者の感情を強制的に同期させる装置」、“Emotion Sync System”を作成した(図3.1)。
技術とセンスの無駄遣い感がすごい笑
固有表現抽出AIを継続して改善するための取り組み(学習データの作成、試行錯誤の簡易化、改善のための試用の簡易化)などが紹介されている。
学習データ作成に関しては、アノテーションガイドラインを定め、モデルの仮出力を用い作業を簡易化し、能動学習により作業量の削減に取り組んでいる。
試行錯誤の簡易化については、学習コードの統一化 / 前処理・後処理のオブジェクト化が行われている。
仕様のしやすさに関しては、ライブラリ化 + API化の貢献が大きそうだ。
これから自社でAIを育てていく際にとても参考になる。
どこから着手すればいいか結構微妙ではあるが、フィードバックループを一度でも回すことが重要なので、
試用のハードルを下げる、ライブラリ化 + API化などが大事なのかもしれない。
API化に関連したところで、簡単に試せるフロント画面などがあってもいいかもしれない。
日本語の名前分割を統計的に行うライブラリ。普通の名前に関してはacc 99%。レアな名前に対してはacc 95%の性能を誇る。サポートされているPythonのバージョンは3.7以降なので注意。
便利そう
rustで書かれた点予測ベースの形態素解析ライブラリcaporetto。mecabも早いけど、そこからさらに2倍早い化け物。
めっちゃ早い。大量のテキストに対して形態素解析を実行しないといけない場合は使う必要がでてくるかも。
RDBMSのCOUNT()はシーケンシャルスキャンゆえにO(n)で必要時間が増えていくというアンチパターンの紹介。
このアンチパターンに対応して、カウント用のテーブルを作成する場合も、カウントテーブルへの書き込みがボトルネックとなりパフォーマンスが落ちるアンチパターンが存在する。
冷静に考えるとCOUNTはO(n)なので、巨大データに対してだと遅くなるか...
文字列の存在判定でよく使用される自作関数とその利用例が紹介されている。関数だけみるとわかりづらいが利用例を見るとその有用性が際立ってくる。
# 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()
"['ザラメ煎餅']"
これは使えそう。
[元記事]()
引数のうち一番最初の非nullの値を返すCOALESCE
関数を用いて、カラムが途中で変化したようなテーブルを統一的に扱うことができる方法の紹介。
運用カバー系の技ではあると思うが、知っておいて損はなさそう。
もうプロダクトとして引き返せない状態になってるとこういう技に頼る他なくなってくるのだろうか?
以下の動画のようなteniss解析を行うproject。テクニオン大学の理系学士を取るために作成したものとのこと。
解析対象は以下
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
すげぇ
2行追加するだけでPython Pandasを高速化するPandarallel
pandasの各種メソッドを並列化してくれるライブラリの紹介。
ブログ記事の検証では1e6のデータで検証していたが45秒が41秒に縮む程度であった。
コメント
メモ
出典
元記事