GENZITSU / UsefulMaterials

34 stars 0 forks source link

weekly useful materials - 07/05 - #106

Open GENZITSU opened 1 year ago

GENZITSU commented 1 year ago

全文検索 完全に理解した

全文検索エンジンの仕組みをざっくり理解するための資料。

情報の収集インデックスの作成方法などがざっくり説明されている。

スクリーンショット 2022-06-29 22 26 08

スクリーンショット 2022-06-29 22 26 18

コメント

メモ

出典

全文検索 完全に理解した

GENZITSU commented 1 year ago

sys.path.append() を使わないでください

sys.path.append()を用いる弊害と対処法が綴られているブログ。

sys.path.append()は楽なのだが、以下のような弊害を生む

  1. モジュールへのパスを絶対パスで書いた場合、実行ユーザーごとに修正が必要になる
  2. モジュール名を変えた時の修正範囲が大きくなる
  3. fake8のコーディング規約に違反している

有望な対処方法は以下

  1. poetryのproject.tomlを用いてパッケージを管理する この管理が一番楽そう
    
    # from https://qiita.com/siida36/items/b171922546e65b868679#%E8%A7%A3%E6%B1%BA%E6%B3%952-requirementstxt

[tool.poetry] name = "my_package" version = "0.1.0" description = "" authors = [""] packages = [ { include = "my_package", from = "src" } ]


2. poetryを使用せずに、setup.pyを記述する

```python
# from https://qiita.com/siida36/items/b171922546e65b868679#%E8%A7%A3%E6%B1%BA%E6%B3%952-requirementstxt

from distutils.core import setup

setup(
    name="my_package",
    version="0.1.0",
    description="",
    author="",
    packages=["my_package"],
    package_dir={
        "my_package": "src/my_package",
    },
    package_data={
        "my_package": [                                                                                                                                      
            "sub_dir/*.py",
        ]
    },
)
# from https://qiita.com/siida36/items/b171922546e65b868679#%E8%A7%A3%E6%B1%BA%E6%B3%952-requirementstxt

# requirements.txt

-e .

コメント

検証レベルのコードだとsys.path.appendは使いやすくて多用してしまうのだが、アンチパターンであったというのは知らなかった。
poetry導入を本格的に検討しないとな...

出典

sys.path.append() を使わないでください

GENZITSU commented 1 year ago

New library updates in PyTorch 1.12

おっとなったものだけピックアップ

1. swin transformerとefficientnet_v2が追加

The Swin Transformer and EfficienetNetV2 are two popular classification models which are often used for downstream vision tasks. This release includes 6 pre-trained weights for their classification variants.

# from https://pytorch.org/blog/pytorch-1.12-new-library-releases/

import torch
from torchvision.models import *

image = torch.rand(1, 3, 224, 224)
model = swin_t(weights="DEFAULT").eval()
prediction = model(image)

image = torch.rand(1, 3, 384, 384)
model = efficientnet_v2_s(weights="DEFAULT").eval()
prediction = model(image)

スクリーンショット 2022-06-29 23 03 07

2. object detection / instanse segmentationが追加

We have introduced 3 new model variants for RetinaNet, FasterRCNN and MaskRCNN that include several post-paper architectural optimizations and improved training recipes

スクリーンショット 2022-06-29 23 04 48

3. 画像分類用の様々なpretrained modelの精度が改善

平均平均3%ほど向上している

スクリーンショット 2022-06-29 23 06 24

4. Dropout2dの挙動が1.10に戻る

1.11で変わった仕様が1.10の時に戻る。ただし、Dropout1dを使用することが推奨。

スクリーンショット 2022-06-29 23 15 00

コメント

業務をする中で、torchvisionに実装されているライブラリだけで戦う事はあまりないかもしれないが、 object detection系のライブラリだとバックボーンにtorchvisionの重みが指定されていることがあるので、 そこの精度が上がるのは嬉しい。

出典

GENZITSU commented 1 year ago

What's new in Python 3.11?

Python 3.11で新たに追加される機能の紹介。

目を引いたものだけ抜粋

1. errorの原因特定が簡単に

3.10だとこうだったのが、

スクリーンショット 2022-06-29 23 38 37

3.11でこうなる

スクリーンショット 2022-06-29 23 38 31

また、エラーに対してnotationをつけることが可能に

スクリーンショット 2022-06-29 23 39 35

2. tomlファイルが読めるようになる

# https://deepsource.io/blog/python-3-11-whats-new/
import tomllib

with open('.deepsource.toml', 'rb') as file:
    data = tomllib.load(file)

typingまわり

自クラスを表す、selfを定義可能に

スクリーンショット 2022-06-29 23 44 29

typedictにrequired, not requiredを利用可能に

# from https://deepsource.io/blog/python-3-11-whats-new/

from typing import TypedDict, Required

# `total=False` means all fields are not required by default
class User(TypedDict, total=False):
    name: Required[str]
    age: Required[int]
    married: bool  # now this is optional

marie: User = {'name': 'Marie', 'age': 29, 'married': True}
fredrick : User = {'name': 'Fredrick', 'age': 17}  # 'married' is not required
# from https://deepsource.io/blog/python-3-11-whats-new/

rom typing import TypedDict, NotRequired

class User(TypedDict):
    name: str
    age: int
    married: NotRequired[bool]

marie: User = {'name': 'Marie', 'age': 29, 'married': True}
fredrick : User = {'name': 'Fredrick', 'age': 17}  # 'married' is not required

一時的なディレクトリ移動を可能にするコンテキストマネージャー

# from https://deepsource.io/blog/python-3-11-whats-new/

import os

def write_logs(logs):
    with open('output.log', 'w') as file:
        file.write(logs)

def foo():
    print("Scanning files...")
    files = os.listdir(os.curdir)  # lists files in current directory
    logs = do_scan(files)

    print("Writing logs to /tmp...")
    with contextlib.chdir('/tmp'):
        write_logs(logs)

    print("Deleting files...")
    files = os.listdir(os.curdir)
    do_delete(files)

コメント

エラーの内容が分かりやすくなるのはかなり便利かも、それとコンテキストマネージャーでcdできるのも重宝しそう。

出典

What's new in Python 3.11?

GENZITSU commented 1 year ago

Graph Neural Network を用いた レイアウトつき文書からの情報抽出

請求書などのレイアウト付き文書から情報抽出を行うためにGNNを活用する論文が2本紹介されている。
処理するべき請求書の増大に伴い、レイアウト付き文書からの情報抽出は短期的なROIが高いルールベース→MLベースへと手法が移り変わっている。

スクリーンショット 2022-07-02 10 24 45

スクリーンショット 2022-07-02 10 24 54

GraphIE: A Graph-Based Framework for Information Extraction

2019年にNAACLで提案されたフレームワークで、テキスト情報とレイアウト情報を活用してタグを付与していく。

スクリーンショット 2022-07-02 10 27 08

スクリーンショット 2022-07-02 10 27 18

手法の全体像が以下

スクリーンショット 2022-07-02 10 35 47

スクリーンショット 2022-07-02 10 27 28

スクリーンショット 2022-07-02 10 27 54

スクリーンショット 2022-07-02 10 28 02

ベースラインとの比較

ここではSeqIEすなわち、検出された文字列を全部concatして一つの文章とみなした後、bi-LSTMをかける手法をベースラインとして設定

We implement a two-layer BiLSTM with a conditional random fields (CRF) tagger as the sequential baseline (SeqIE).

思いの外レイアウトを考慮しないベースラインが強いが、未知テンプレートに対しても汎化しているのはGraphIE。

スクリーンショット 2022-07-02 10 38 15

スクリーンショット 2022-07-02 10 38 20

ちなみに実験に用いられているデータセットは以下

さまざまな期間から収集された25,000 x 9 page の薬剤系の文書。

このうち半分をtrainにつかったということで、ざっくり、100,000枚のレイアウト文書で学習されている。

Dataset The corpus consists of 25,200 Adverse Event Case Reports (AECR) recording drugrelated side effects. Each case contains an average of 9 pages. Since these documents are produced by multiple organizations, they exhibit large variability in the layout and presentation styles (e.g.text, table, etc.).

The dataset is split in 50% cases for training, 10% for development, and 40% for testing

Merge and Recognize: A Geometry and 2D Context Aware Graph Model for Named Entity Recognition from Visual Documents

COLING 2020で提案された論文。抽出したい情報が複数のセグメントに分かれてしまっている時に対応するために提案されたもの。

スクリーンショット 2022-07-02 10 44 13

スクリーンショット 2022-07-02 10 44 24

スクリーンショット 2022-07-02 10 44 32

スクリーンショット 2022-07-02 10 44 40

スクリーンショット 2022-07-02 10 45 27

スクリーンショット 2022-07-02 10 46 11

精度の上昇はLSTM→BERTだけでは説明つかんさそうな上がり方。

スクリーンショット 2022-07-02 11 32 40

検証に用いられたデータセット

13,498枚の名刺のうち8割つまり、約1万枚を利用

The BCD dataset consists of 13,498 real-world business card images. The collection is provided by user-uploading. We get the text and corresponding bounding boxes with Alibaba’s OCR API2. Our goal is to extract all named entities (person, organization, location) in business card images. 80% images in BCD dataset are used as training data. The left 20% images in BCD dataset are used for testing.

コメント

レイアウト付き文書からの情報抽出にグラフを活用するアイデアが面白かった。
ただし、一つの学習済みモデルで異なる書類種別に対応できるのかどうかが気になったが流石に厳しそう....?

出典

GENZITSU commented 1 year ago

自然言語処理を用いた効果的な広告テキストの自動生成【CADC2022】

広告効果の高い広告テキストを自動生成するのに活用されている技術の紹介。

スクリーンショット 2022-07-04 22 26 45

スクリーンショット 2022-07-04 22 26 29

スクリーンショット 2022-07-04 22 27 21

スクリーンショット 2022-07-04 22 27 52

スクリーンショット 2022-07-04 22 28 27

スクリーンショット 2022-07-04 22 28 42

スクリーンショット 2022-07-04 22 29 36

スクリーンショット 2022-07-04 22 31 00

スクリーンショット 2022-07-04 22 31 19

Fluencyの評価方法

スクリーンショット 2022-07-04 22 45 37

スクリーンショット 2022-07-04 22 45 46

Relevanceの評価方法

実際のLPと広告文が内容的に近しいものかどうかを評価するところで、今回はLPに付与されているキーワードをどれだけ含んでいるか、どれだけ最初の方に載せているかで評価。

スクリーンショット 2022-07-04 22 51 28

スクリーンショット 2022-07-04 22 51 35

広告効果の評価方法

これまでの広告配信実績から広告タイトルと説明文から広告効果を予測するGBDTを作成。
強化学習の報酬として利用するためにできるだけ簡易なモデルを使用したとのこと。

スクリーンショット 2022-07-04 22 54 08

評価実験

データの規模は73万件ほど

We carefully split the dataset into 713,928, 8,000, and 8,000 pairs for training, development, and the test set, respectively.

8つの企業からなるデータセット

This dataset consisted of eight clients (one real estate company, one health food company, one media service company, two cosmetic companies, one job recruiting company, and three financial companies).

スクリーンショット 2022-07-04 22 57 39

ちょいちょいSEPよりも良いものがあるのがポイント

実際に配信した結果、および配信結果と各種メトリクスの相関を調べたもの

スクリーンショット 2022-07-04 23 00 58

スクリーンショット 2022-07-04 23 01 41

物によっては実際のCTRと相反しているものがあるのが面白い。理由としては広告らしすぎるものはクリックしないと述べられていたが、果たして...

コメント

強化学習を文章生成に取り入れて、より良い文章を作るという取り組みが面白かった。
通常の文章生成は尤度しか見ていないが、何らかの報酬関数を設定すれば、それに沿った文章を生成できる枠組みであるSCSTは非常に強力だと感じた。
ちなみに広告文生成に強化学習を取り入れる手法は非常に広範な範囲をCAが特許で抑えているので注意が必要。ちなみに発明者は論文の著者らである。

スクリーンショット 2022-07-04 23 19 56

出典

GENZITSU commented 1 year ago

AI Labの進めるクリエイティブ自動生成の研究【CADC2022】

広告クリエイティブ自動生成のための3つの研究事例の紹介。

クリエイティブは編集可能性や解像度変更などができるように、ピクセルで画像を表現するラスター形式ではなく、どこに何があるかを示していくベクター形式であることに注意されたい。

スクリーンショット 2022-07-05 22 46 40

研究事例①: 広告中テキストのベクター生成

論文: De-rendering Stylized Texts

数のようにラスター画像をベクター形式へと変換した上で、広告中のテキスト編集を可能にする研究

例えば「WANT」という文字の位置やフォント、大きさ、装飾などを、ドキュメントの中のベクタ形式の構造データとします。ベクタ形式であれば、スタイルを変えたり、テキストの中身そのものを書き換えるといった編集が容易に叶います。

スクリーンショット 2022-07-05 22 47 34

必要な技術要素としては、どこにテキストがあるかのOCR技術やテキストのフォントが何かの判別、どこが文字で、どこが背景かの領域分割

スクリーンショット 2022-07-05 22 48 58

スクリーンショット 2022-07-05 22 49 13

より詳しいものが以下

スクリーンショット 2022-07-05 23 38 53

若干背景と文字の検出がうまくいっていないところは見受けられるものの、パッと見の印象はかなり良い

スクリーンショット 2022-07-05 22 49 20

研究事例②: デザインテンプレートの自動生成

論文: CanvasVAE: Learning to Generate Vector Graphic Documents

ベクター形式のデザインテンプレートを自動生成するために、マルチモーダルVAEを提案した研究。

スクリーンショット 2022-07-05 22 55 00

スクリーンショット 2022-07-05 22 55 43

すぐさまクリエイティブに活かせるクオリティではないしにろ、それっぽいものが出来ている。

スクリーンショット 2022-07-05 22 56 55

研究事例③: ユーザーによるレイアウト制御

論文: Constrained Graphic Layout Generation via Latent Optimization

スクリーンショット 2022-07-05 22 59 04

スクリーンショット 2022-07-05 22 59 59

スクリーンショット 2022-07-05 23 00 25

実装をみたところ実際に指定できる制約条件は、人間の言葉を数式に置き換えられるものに限る模様。このbboxはこのbboxと被ってはいけないとか、このテキストはこのbboxの下とか。
自然言語での制約ではないことに注意。

コメント

画像生成技術をプロダクト活用するために必要な研究が着々となされている感じがする。
広告クリエイティブのデータがたくさん集まっているからこそ成せる技とはいえ、一個一個の論文を流しみすると泥臭いところもたくさんあることがわかる。 個人的には画像のラスター化部分の精度が上がれば、広告クリエイティブだけにとどまらず、その他レイアウト系文書の追加編集や自動生成とかに使えるような気がしているので、今後の発展に期待したいところ。

出典

AI Labの進めるクリエイティブ自動生成の研究【CADC2022】

GENZITSU commented 1 year ago

AI開発の新たなパラダイム「基盤モデル」とは

近年業界を騒がせてきた「基盤モデル」という大規模かつ多様なデータで学習を行った汎化性能が高いモデルの特性や代表的なモデル、活用事例が端的にまとめられているブログ。

スクリーンショット 2022-07-06 8 14 14

「基盤モデル」は大規模かつ多様なデータで学習を行っているので、個別のタスクに適用する際は少量の学習データで高い汎化性能を得られるという特性がある。

スクリーンショット 2022-07-06 8 15 26

スクリーンショット 2022-07-06 8 15 34

また、学習に用いるデータの量や、パラメータ数、訓練ステップ数を大きくすればするほど性能が上がるというスケーリング則が実験的に知られていて、今のところその限界は見つかっていない。

スクリーンショット 2022-07-06 8 16 56

代表的なモデル

言語のみでいうと、BERTやGPT-3, PaLMなど。PaLMは思考の過程をmodelのoutputに含ませることで、これまで解けなかった問題を解けるようにした、prompt engneeringでも注目の手法を提案している。

言語&視覚を整理したのが以下の図

スクリーンショット 2022-07-06 8 17 36

言語→画像で人間よりも高い創造性を発揮しているDALL-EやImagen, Partiなどに加えて、マルチモーダル入力、マルチモーダル出力を目指す、unified IOやGatoなども登場

活用事例

以下がviableの製品イメージ。顧客のフィードバックを自動で要約してくれたり、数値のモニタリングなども行ってくれる。
uberやslack, airbnbなどもで使われている。

スクリーンショット 2022-07-06 8 25 14

スクリーンショット 2022-07-06 8 29 42

スクリーンショット 2022-07-06 8 30 21

コメント

基盤モデルの特性や種類については普段からの情報である程度は知っていたが、活用事例がこんなにたくさんあるとは思わなかった。
特に新聞や雑誌の表紙を飾っていたところは驚きで、クリエイティブに携わるものは今後AIとどのように協業していくかを真剣に考えていかないといけないなと感じた。

出典

AI開発の新たなパラダイム「基盤モデル」とは