weekly useful materials - 07/05 -
Opened this issue · 8 comments
sys.path.append() を使わないでください
sys.path.append()
を用いる弊害と対処法が綴られているブログ。
sys.path.append()
は楽なのだが、以下のような弊害を生む
- モジュールへのパスを絶対パスで書いた場合、実行ユーザーごとに修正が必要になる
- モジュール名を変えた時の修正範囲が大きくなる
- fake8のコーディング規約に違反している
有望な対処方法は以下
- 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" }
]
- poetryを使用せずに、setup.pyを記述する
# 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導入を本格的に検討しないとな...
出典
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)
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
3. 画像分類用の様々なpretrained modelの精度が改善
平均平均3%ほど向上している
4. Dropout2dの挙動が1.10に戻る
1.11で変わった仕様が1.10の時に戻る。ただし、Dropout1dを使用することが推奨。
コメント
業務をする中で、torchvisionに実装されているライブラリだけで戦う事はあまりないかもしれないが、
object detection系のライブラリだとバックボーンにtorchvisionの重みが指定されていることがあるので、
そこの精度が上がるのは嬉しい。
出典
What's new in Python 3.11?
Python 3.11で新たに追加される機能の紹介。
目を引いたものだけ抜粋
1. errorの原因特定が簡単に
3.10だとこうだったのが、
3.11でこうなる
また、エラーに対してnotationをつけることが可能に
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を定義可能に
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できるのも重宝しそう。
出典
Graph Neural Network を用いた レイアウトつき文書からの情報抽出
請求書などのレイアウト付き文書から情報抽出を行うためにGNNを活用する論文が2本紹介されている。
処理するべき請求書の増大に伴い、レイアウト付き文書からの情報抽出は短期的なROIが高いルールベース→MLベースへと手法が移り変わっている。
GraphIE: A Graph-Based Framework for Information Extraction
2019年にNAACLで提案されたフレームワークで、テキスト情報とレイアウト情報を活用してタグを付与していく。
手法の全体像が以下
ベースラインとの比較
ここではSeqIEすなわち、検出された文字列を全部concatして一つの文章とみなした後、bi-LSTMをかける手法をベースラインとして設定
We implement a two-layer BiLSTM with a conditional random fields (CRF) tagger as the sequential baseline (SeqIE).
思いの外レイアウトを考慮しないベースラインが強いが、未知テンプレートに対しても汎化しているのはGraphIE。
ちなみに実験に用いられているデータセットは以下
さまざまな期間から収集された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で提案された論文。抽出したい情報が複数のセグメントに分かれてしまっている時に対応するために提案されたもの。
精度の上昇はLSTM→BERTだけでは説明つかんさそうな上がり方。
検証に用いられたデータセット
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.
コメント
レイアウト付き文書からの情報抽出にグラフを活用するアイデアが面白かった。
ただし、一つの学習済みモデルで異なる書類種別に対応できるのかどうかが気になったが流石に厳しそう....?
出典
自然言語処理を用いた効果的な広告テキストの自動生成【CADC2022】
広告効果の高い広告テキストを自動生成するのに活用されている技術の紹介。
Fluencyの評価方法
Relevanceの評価方法
実際のLPと広告文が内容的に近しいものかどうかを評価するところで、今回はLPに付与されているキーワードをどれだけ含んでいるか、どれだけ最初の方に載せているかで評価。
広告効果の評価方法
これまでの広告配信実績から広告タイトルと説明文から広告効果を予測するGBDTを作成。
強化学習の報酬として利用するためにできるだけ簡易なモデルを使用したとのこと。
評価実験
データの規模は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).
- Reference: 人間が書いたもの
- Sep: 広告元ごとにモデルを分ける方法。非実用的だが効果の高いテキストが生成できる。今回の実験における上界という立ち位置
- Mix w/o tag: 全てのデータセットで学習 + MLEロスのみ
- Mix: テキストの初めに <domain_id> and <client_id> をつける + MLE
- Mix+[Rewards]: MLEに加えて、上記リワードを用いる。割合はリワード0.98 : MLE 0.02
ちょいちょいSEPよりも良いものがあるのがポイント
実際に配信した結果、および配信結果と各種メトリクスの相関を調べたもの
物によっては実際のCTRと相反しているものがあるのが面白い。理由としては広告らしすぎるものはクリックしないと述べられていたが、果たして...
コメント
強化学習を文章生成に取り入れて、より良い文章を作るという取り組みが面白かった。
通常の文章生成は尤度しか見ていないが、何らかの報酬関数を設定すれば、それに沿った文章を生成できる枠組みであるSCSTは非常に強力だと感じた。
ちなみに広告文生成に強化学習を取り入れる手法は非常に広範な範囲をCAが特許で抑えているので注意が必要。ちなみに発明者は論文の著者らである。
出典
AI Labの進めるクリエイティブ自動生成の研究【CADC2022】
広告クリエイティブ自動生成のための3つの研究事例の紹介。
クリエイティブは編集可能性や解像度変更などができるように、ピクセルで画像を表現するラスター形式ではなく、どこに何があるかを示していくベクター形式であることに注意されたい。
研究事例①: 広告中テキストのベクター生成
論文: De-rendering Stylized Texts
数のようにラスター画像をベクター形式へと変換した上で、広告中のテキスト編集を可能にする研究
例えば「WANT」という文字の位置やフォント、大きさ、装飾などを、ドキュメントの中のベクタ形式の構造データとします。ベクタ形式であれば、スタイルを変えたり、テキストの中身そのものを書き換えるといった編集が容易に叶います。
必要な技術要素としては、どこにテキストがあるかのOCR技術やテキストのフォントが何かの判別、どこが文字で、どこが背景かの領域分割
より詳しいものが以下
若干背景と文字の検出がうまくいっていないところは見受けられるものの、パッと見の印象はかなり良い
研究事例②: デザインテンプレートの自動生成
論文: CanvasVAE: Learning to Generate Vector Graphic Documents
ベクター形式のデザインテンプレートを自動生成するために、マルチモーダルVAEを提案した研究。
すぐさまクリエイティブに活かせるクオリティではないしにろ、それっぽいものが出来ている。
研究事例③: ユーザーによるレイアウト制御
論文: Constrained Graphic Layout Generation via Latent Optimization
実装をみたところ実際に指定できる制約条件は、人間の言葉を数式に置き換えられるものに限る模様。このbboxはこのbboxと被ってはいけないとか、このテキストはこのbboxの下とか。
自然言語での制約ではないことに注意。
コメント
画像生成技術をプロダクト活用するために必要な研究が着々となされている感じがする。
広告クリエイティブのデータがたくさん集まっているからこそ成せる技とはいえ、一個一個の論文を流しみすると泥臭いところもたくさんあることがわかる。
個人的には画像のラスター化部分の精度が上がれば、広告クリエイティブだけにとどまらず、その他レイアウト系文書の追加編集や自動生成とかに使えるような気がしているので、今後の発展に期待したいところ。
出典
AI開発の新たなパラダイム「基盤モデル」とは
近年業界を騒がせてきた「基盤モデル」という大規模かつ多様なデータで学習を行った汎化性能が高いモデルの特性や代表的なモデル、活用事例が端的にまとめられているブログ。
「基盤モデル」は大規模かつ多様なデータで学習を行っているので、個別のタスクに適用する際は少量の学習データで高い汎化性能を得られるという特性がある。
また、学習に用いるデータの量や、パラメータ数、訓練ステップ数を大きくすればするほど性能が上がるというスケーリング則が実験的に知られていて、今のところその限界は見つかっていない。
代表的なモデル
言語のみでいうと、BERTやGPT-3, PaLMなど。PaLMは思考の過程をmodelのoutputに含ませることで、これまで解けなかった問題を解けるようにした、prompt engneeringでも注目の手法を提案している。
言語&視覚を整理したのが以下の図
言語→画像で人間よりも高い創造性を発揮しているDALL-EやImagen, Partiなどに加えて、マルチモーダル入力、マルチモーダル出力を目指す、unified IOやGatoなども登場
活用事例
- ユーザーの入力からメールの補完を行うhyperwriteai
- ユーザーからのフィードバックを分析者からの取りかけをベースに要約してくれるviable
- コード保管を行ってくれるgithub copilot, openaiのcodex
- 新聞や雑誌の表紙での登用
- The EconomistはMidJourneyのAI
- CosmopolitanはDALL·E 2
以下がviableの製品イメージ。顧客のフィードバックを自動で要約してくれたり、数値のモニタリングなども行ってくれる。
uberやslack, airbnbなどもで使われている。
コメント
基盤モデルの特性や種類については普段からの情報である程度は知っていたが、活用事例がこんなにたくさんあるとは思わなかった。
特に新聞や雑誌の表紙を飾っていたところは驚きで、クリエイティブに携わるものは今後AIとどのように協業していくかを真剣に考えていかないといけないなと感じた。