GENZITSU / UsefulMaterials

34 stars 0 forks source link

weekly useful materials - 09/28 - #70

Open GENZITSU opened 2 years ago

GENZITSU commented 2 years ago

GMOペパボのエンジニア研修2021の資料を公開します

内容は、Ruby on Rails, コンテナ(Docker, terraformなど), Web セキュリティ, フロントエンド, モバイルアプリ, 機械学習

コメント

個人的にはコンテナとWebセキュリティのところがきになる。

出典

元記事

GENZITSU commented 2 years ago

ImageDataAugmentor

albumentationsの変換をtensorflowでも使えるようにするライブラリ

ImageDataAugmentor is a custom image data generator for tensorflow.keras that supports albumentations.

以下のようにalbumentaionsで定義した変換をImageDataAugmentorに渡すことで、使えるようにする

# from 

AUGMENTATIONS = albumentations.Compose([
    albumentations.Transpose(p=0.5),
    albumentations.Flip(p=0.5),
    albumentations.OneOf([
        albumentations.RandomBrightnessContrast(brightness_limit=0.3, contrast_limit=0.3),
        albumentations.RandomBrightnessContrast(brightness_limit=0.1, contrast_limit=0.1)
    ],p=1),
    albumentations.GaussianBlur(p=0.05),
    albumentations.HueSaturationValue(p=0.5),
    albumentations.RGBShift(p=0.5),
])

# dataloaders
train_datagen = ImageDataAugmentor(
        rescale=1./255,
        augment=AUGMENTATIONS,
        preprocess_input=None)

model.fit(
        train_generator,

コメント

使い慣れているalbumentationが簡単にtfで使えるようになるのはありがたい。

出典

元記事

GENZITSU commented 2 years ago

シン・仮説検証 70000枚の付箋で分かった仮説検証のエッセンス

仮説検証を効果的に行えるようになるためのエッセンスをまとめたスライド。

エッセンス 2 (1は省略)

検証しやすが大事

スクリーンショット 2021-09-24 18 43 38

ないない言葉に気をつける

人がいない, 予算が足りないなどの言葉は安直な解決策に陥りがち。
それらの多くは解決策ではなく、事実を言い換えただけに過ぎない。

スクリーンショット 2021-09-24 18 46 40

安易にないない言葉をつかうのではなく、まずは正確に現状を観察することが大事

スクリーンショット 2021-09-24 18 48 15

コメント

安易にOOがないと言いがちになりそうなので、気をつけていきたいところ。

出典

元記事

GENZITSU commented 2 years ago

日本語辞書ありキーワード抽出器からの多言語辞書なしキーワード抽出器の Distillation

アノテーションデータを既存辞書から自動生成して、キーワード抽出を行う試みの紹介

辞書を用いないキーワード抽出器は、専門性が高すぎる単語や社内用語をカバーできる可能性があり魅力的だが、アノテーションコストが甚大。   そもそもキーワードのアノテーションが難しいのもつらい

ということで、既存の辞書から教師データを作成して、キーワードを予測するモデルの作成を行った。
使用モデルは今後英語にも拡張したいため、bert-base-multilingual-cased。

スクリーンショット 2021-09-24 19 23 46

以下が学習データ

言語: すべて日本語
文数: 6437 文
平均文字数: 64.4 文字
平均キーワード数: 4.1 個
ユニークキーワード数: 7870 語

結果

既存辞書の出力は全て網羅しつつ、それっぽいキーワードも拾えるようになっている。

スクリーンショット 2021-09-24 19 25 21

一方で、元々の辞書にあまり入れてこなかった人名や社名などは当然ながら取りづらくなっていた。

スクリーンショット 2021-09-24 19 27 44

面白いのは日本語データでしか学習していないのに、英語データでもある程度機能すること
トークンの並び方からちゃんと予測できているということだろうか

スクリーンショット 2021-09-24 19 28 11

コメント

8000単語ほどの辞書で、そこそこやれてるのはすごい。
学習させたモデルの結果をもとに、辞書への追加を行っていけば辞書の拡充も楽になりそう。
(pseudo labelingとかもありかも?)

一方で、人名、社名についてはそもそもキーワードか?という話がでてくる。
キーワード自体も流行のキーワードと普遍的なキーワードあると思うが、人名・社名は前者に相当しそう。
となればコンテンツ管理者(?)が週次で足し引きしたり、単語出現頻度の推移とかで管理した方が良さげな気もする...。

出典

元記事

GENZITSU commented 2 years ago

1ms 以下のリアルタイムオブジェクト検出/画像処理を目指して Goの配信サーバサイドで通知ぼかしを実装してみたこと

動画配信中にプライベートな通知が来たときに、内容をぼかす機能を作成するまでの道のり。
めちゃくちゃ高速に動作することが必要だが、実現させるところまで行ってるのがすごい。

難しい内容も多いので、大事そうなところだけかいつまむ。

エッセンス①: YCbCr <-> RGBA に変換が遅い

image/color や image/draw を使うことで非常にシンプルに変換できるため使いたかったのですが 360p の1フレームあたりの処理時間です、RGBA -> YCbCr に 3.914ms / YCbCr -> RGBA に 0.976ms 合わせて 4.89ms ほどかかり

for文のunrollなどを用いた画そこまで早くならず、libyuv による実装でめちゃくちゃ早くなった。

libyuv にしたことにより RGBA -> YCbCr が 0.075ms (Go版は 3.914ms) / YCbCr -> RGBA が 0.125ms (Go版は 0.976ms) となりかなり処理速度が向上しました

エッセンス②: 探索領域を減らす

情報量が少ない領域は popcount = 0 とみなすことができるため、情報がある領域だけ計算を行うようにできます

エッセンス③: さらなる高速化

ここまでで、 Pure Go だけで実装していた場合だと(正確なログが残っていないのでざっくりになりますが)10-15fps程度(100ms+)だったものが 30fps(30ms以下)程度にはなりました

  • 最初に手掛けたのはSIMDで処理できるところを置き換えていくことでした
  • cgo 経由のオーバヘッドも気になってきました さて、SIMD処理への置き換えやその他ロジックの最適化等を行った結果、 300fps(3ms+) くらいまで下げることができました

エッセンス④: halide-langの利用

halide は C++ の DSL言語として利用できる、プログラミング言語です 大きな特徴はアルゴリズムとスケジューリングの分離が行える言語であることと、CPU/GPUなどに最適化されたコードを出力してくれる点

halide によって既存ロジックを置き換えることなく、スケジューリングによってチューニングができるようになったのはとても大きく、また チューニングを加えることがなくてもそこそこの良い速度で処理できるのも良いです

その後、 libyuv や SIMD などの処理をすべて halide に置き換えを行いました

この時点で、0.7ms 程度でfpsにすると1400fpsくらいでしょうか、(もろもろ荒削りですが)検出からぼかし処理までを行えるようになっていました

コメント

縁遠い世界の話だが、高fpsを求める際にはこういう技があることを頭に入れておきたい。

出典

元記事

GENZITSU commented 2 years ago

Learning and Evaluating Representations for Deep One-class Classification

google aiからiclr 2021で発表された異常検知手法のスライド 自己教師あり学習学習 + one class classifier (oc-svm, kde)などで異常検知を行う。

スクリーンショット 2021-09-24 20 39 11

結果

スクリーンショット 2021-09-24 20 39 43 スクリーンショット 2021-09-24 20 39 49 スクリーンショット 2021-09-24 20 40 09 スクリーンショット 2021-09-24 20 41 27

ちなみに、Distribution augmented contrastive representationというのは、下記のようなもので、   異なるインスタンス同士 + 同じインスタンスでも異なるaugmentationだったら離すことをゆうらしい。

スクリーンショット 2021-09-24 20 43 09

そのほか実践的な検証もされており、

表現学習のアンサンブル

スクリーンショット 2021-09-24 20 53 51

SSLに必要なデータ数と正解率

スクリーンショット 2021-09-24 20 54 31

ミスラベルの混入による精度悪化

スクリーンショット 2021-09-24 20 56 53

DA contrastive representationの効能はこちらの表でも確認できる

スクリーンショット 2021-09-24 20 57 50

コメント

~100枚くらいだとpretrained modelをつかったほうがよいが、250枚を超えるとsslで表現を学習したほうが精度高いのが面白い。    実務では対抗クラスをもってこれるので、one classのみで学習させるケースはあまりなさそうだが、学習データからの逸脱度合いをはかるのにはつかえるかもしれない。

出典

元記事

論文

GENZITSU commented 2 years ago

AI movie posters

VQGAN + CLIP をつかって映画のあらすじから画像を生成させた例が22個の載っている。

スクリーンショット 2021-09-25 19 36 18 スクリーンショット 2021-09-25 19 35 51 スクリーンショット 2021-09-25 19 35 24 スクリーンショット 2021-09-25 19 33 12

コメント

ちょうどいいクイズに面白い笑

出典

元記事

GENZITSU commented 2 years ago

Computer vision and deep learning provide new ways to detect cyber threats

有害なソフトウェアを画像化して検出しようという論文が2つ紹介されている。

マルウェア検出

マルウェア検出ではパターンマッチングベースの手法が元々用いられていたが、攻撃側はさまざまな手を使ってパタンマッチングを逃れる。これの対応としてsandbox環境などで動的な検知などを行うことも可能だが検知が遅く環境構築の必要性がある。

A Novel Malware Detection System Based On Machine Learning and Binary Visualizationという論文ではバイナリやASCIIのコードを画像化してマルウェアの検出を行う方法を提案している。

スクリーンショット 2021-09-25 23 12 19

この論文では、悪意のあるファイルはさまざまなASCIIコードが用いられておりカラフルな画像になるとのこと。

Malicious files have a tendency for often including ASCII characters of various categories, presenting a colorful image, while benign files have a cleaner picture and distribution of values.

画像化の方法は以下のようにしている。

スクリーンショット 2021-09-25 23 24 45

The dataset contained a variety of malicious payloads (viruses, worms, trojans, rootkits, etc.) and file types (.exe, .doc, .pdf, .txt, etc.).

結果としては ランサムウェアによく用いられる .docや.pdf形式のファイルに対する検知性能が良く、正解率としては74%だったとのこと。 (論文の数値を見てみると)

Experiments by the researchers showed that the deep learning model was especially good at detecting malware in .doc and .pdf files, which are the preferred medium for ransomware attacks. The researchers suggested that the model’s performance can be improved if it is adjusted to take the filetype as one of its learning dimensions. Overall, the algorithm achieved an average detection rate of around 74 percent.

スクリーンショット 2021-09-25 23 20 45

フィッシング攻撃

フィッシング攻撃に対する典型的な防衛策はブラックリストとホワイトリスト方式であるが、ブラックリスト形式は実際に被害が起きてから出ないと対応できず、ホワイトリスト形式はメンテナンスが大変という問題がある。

A Novel Approach to Detect Phishing Attacks using Binary Visualisation and Machine Learning という論文ではサイトのhtmlやcssを画像化することで、フィッシングサイトの検出を試みている。

スクリーンショット 2021-09-25 23 34 47 スクリーンショット 2021-09-25 23 43 08

画像化したサイトをCNNで判別させており、正解率は94%だったとのこと。

The researchers’ experiments showed that the technique could detect phishing websites with 94 percent accuracy.

画像への変換方法は以下、一個上の論文と共通の著者がいるから似たような方法をとっている。

スクリーンショット 2021-09-25 23 45 54 スクリーンショット 2021-09-25 23 47 52

コメント

音を画像化して~とか、重力波を画像化して〜などと同じ文脈で、サイトやプログラムを画像化して〜みたいなのができることに驚いた。

出典

元記事

GENZITSU commented 2 years ago

Why I Use Nim instead of Python for Data Processing

Pythonと似た書き方でデータ分析ができる言語としてNimが紹介されている。

NimはPythonと同じように書きやすく、Cと同じくらい早い。

t a high level, Nim is as easy to write as Python and as fast as C. It's part of a newer generation of languages that have the performance of compiled languages with the expressiveness of dynamic languages. If you know Python, you're 90% of the way to knowing Nim and reaping all of the benefits.

Nimはコンパイル言語であるがコンパイルが早いらしい

Even though Nim is a compiled language, the compilation process is fast enough that it can be used in place of an interpreted one.

pythonとnimの比較

スクリーンショット 2021-09-26 21 50 36 スクリーンショット 2021-09-26 21 50 36

コメント

環境構築の方法とかきになる。色々ライブラリが整ってくるといいなぁ。

出典

元記事

GENZITSU commented 2 years ago

Pythonを用いたPDFデータからの情報抽出 / Extraction data from PDF using Python

PythonでPDFを扱うことのができるPyMuPDFとCamelotを紹介している

PyMuPDFではPDF中の情報をブロック単位であるかい文字を抽出できる

スクリーンショット 2021-09-26 22 07 48 スクリーンショット 2021-09-26 22 07 59 スクリーンショット 2021-09-26 22 09 38

Camelotはpdf中の表をdataframe形式で扱うことができるライブラリ

スクリーンショット 2021-09-26 22 09 52 スクリーンショット 2021-09-26 22 09 56

コメント

表検出できるのよいな。文字を読む方はOCRの精度によるだえろうけど手描き文字じゃないからそこそこやれそう。

出典

元記事

PyMuPDF

Camelot

GENZITSU commented 2 years ago

Torchvision Object Detection and Instance Segmentation pre-trained model Benchmarks

torchvisionで学習済みモデルとして提供されているobject detectionモデルのベンチマーク。

やはりlatencyが低いのはSSDやmobilenet v3みたいだ。

スクリーンショット 2021-09-26 23 06 44

コメント

ベンチマークされてるモデル自体はそこまで多くないが、latencyまで乗せてくれているのは実務的には助かる。

出典

元記事

GENZITSU commented 2 years ago

代理モデルによる機械学習モデルの説明

機械学習モデルを別のモデルで説明するやり方のハンズオン。
XAIライブラリを使わずに自分で摂動を与え説明モデルを作成しているのが珍しい。

代理モデルを立てる際の注意点や、摂動に関する注意点も書かれておりとても良い。

さて,ここからが本題です.データを準備して摂動を加えて新しいデータを作ります.この摂動はカテゴリカルなデータにも使える・欠損を生じさせない,実装が楽などの特徴があって使いやすいため,わたしは好んで使っています.特徴量間に強い相関がある場合にはナンセンスな設定になることに注意してください.

決定木がどのパスを通ったかを表示できるのもしらなかった。

https://scikit-learn.org/stable/auto_examples/tree/plot_unveil_tree_structure.html

スクリーンショット 2021-09-26 23 47 59

コメント

初めて勉強するのにとても良いハンズオンだとおもいます。

出典

元記事

GENZITSU commented 2 years ago

sedthh / Super Pyxelate

写真をドット絵に変換するライブラリで、オリジナルのPyxelateよりも高速に動くように実装されている。

スクリーンショット 2021-09-27 9 30 33

おおまかな使い方は下記のようになっており、sklearnライクな使い方ができるようにデザインされている。

# from https://github.com/sedthh/pyxelate

from skimage import io
from pyxelate import Pyx, Pal

# load image with 'skimage.io.imread()'
image = io.imread("examples/blazkowicz.jpg")  

downsample_by = 14  # new image will be 1/14th of the original in size
palette = 7  # find 7 colors

# 1) Instantiate Pyx transformer
pyx = Pyx(factor=downsample_by, palette=palette)

# 2) fit an image, allow Pyxelate to learn the color palette
pyx.fit(image)

# 3) transform image to pixel art using the learned color palette
new_image = pyx.transform(image)

# save new image with 'skimage.io.imsave()'
io.imsave("pixel.png", new_image)
スクリーンショット 2021-09-27 9 32 14

よく用いられるようなプリセットカラーパレットも存在している。

スクリーンショット 2021-09-27 9 34 34

おそらくゲームやアートなどへの使用が想定されていると思うが、
実際にノベルゲームのdot絵にする過程はこちらのqiitaが詳しい https://qiita.com/komanaki/items/237161a43285471ad3c9

コメント

githubのreadmeを見る限りではかなりうまくいっているが、qiita記事をみてみると変換後に手修正が必要なようだ。
ドット絵にする前にしておくべき前処理的なものがあるのかもしれない。

出典

github

GENZITSU commented 2 years ago

AWS LambdaとGlue、どっちを選ぶ?

AWS Glue と AWS Lambdaの比較記事。

結論としては、ETL系の処理は基本的にGlueに任せ、簡単な物についてはLambdaを使用するのがよいとのこと。

以下理由

  1. Lambdaは15分でタイムアウトするが、Glueは48時間までいける
  2. Lambdaは時間及びメモリ使用量に応じて料金が増えるが、Glueは10分からの計算でミリ秒単位で計算される
  3. そもそもどっちも同じことを実現できる。Lambdaでやるなら細かく分割し、Glueでやるなら一つにまとめれば良い。

コメント

どうでもよいけど、説明で出てくる図がかわいい。

出典

元記事

GENZITSU commented 2 years ago

「Google Cloud Platform」の収益配分比率が20%から3%へ大幅引き下げか

GoogleがGCPのレべニューシェアを3%へ大幅引き下げする可能性が出てきている。

Google Cloud Platformについて新たに、CNBCが匿名の情報筋からの情報として「Googleがレベニューシェアを20%から3%に引き下げる予定がある」と報じました。CNBCはGoogleにレベニューシェアを引き下げる予定があるのか直接問い合わせており、同社の広報担当者は「マーケットプレイスの料金体系の改定が進行中であることは事実です。これについては、近日中に詳細をお知らせします」とコメントしています。

これの動きには、プラットフォームの独占力を下げるような圧力が強まっている背景がある。

Googleがこのような動きを見せているのは、ビッグ・テックに対して「プラットフォームの利用手数料を引き下げろ」と多方面から圧力がかかっているため。Googleはアメリカの36州とワシントンD.C.から「Google Playは手数料を取り過ぎている」と訴えられているだけでなく、Appleも公式アプリストアの手数料を回避する手法を規約で禁じる行為を巡る裁判で敗訴。世界的IT企業の運営するプラットフォームの利用手数料を巡って複数の大型訴訟が進行しているだけでなく、世界各国が法規制を検討している段階です。

これに際して、app store系の手数料も近年大幅に下がっており、ある会社の値下げに追随して他社も値下げが行われた経緯がある。

Appleは2020年11月にApp Storeの配信手数料を30%から15%に引き下げると発表し、この発表を追う形でGoogleも2021年3月にGoogle Playの手数料を30%から15%にすると発表。Microsoftも2021年4月にMicrosoft Storeで販売されるPCゲームの販売手数料を30%から12%に引き下げると発表しています。

この議論に関しては以下のよう記事もある
長年30%だったGoogle Playの配信手数料の損益分岐点はわずか6%、30%という数値も「Appleの丸パクリ」と裁判で報告される

コメント

この動きが実際に行われるとAWS, Azureとかも料金引き下げされることになるんだろうか。

出典

GIGAZINE

元記事

GENZITSU commented 2 years ago

PyTorch to JAX 移行ガイド(MLP学習編)

Pytorchで書かれたMLPをJAXに書き換えるという記事。

jaxではflax.linenでモデルを書くことができる

import jax import jax.numpy as jnp import flax.linen as fnn

class MLP(fnn.Module): @fnn.compact def call(self, x): x = fnn.Dense(128)(x) x = fnn.relu(x) x = fnn.Dense(256)(x) x = fnn.relu(x) x = fnn.Dense(10)(x) x = fnn.log_softmax(x) return x


またパラメータも後付けで設定する形になる。
- numpy系の関数はjax.numpyに色々実装されている (jnpでimportされている)

from https://zenn.dev/jellied_unagi/articles/d986044a425e94

model = MLP() params = model.init(jax.random.PRNGKey(0), jnp.ones([1, 28 * 28]))['params']


これを学習ループにすると以下
- jax.value_and_gradを用いてgradientとlossを計算することが可能
- jax.jitでコンパイルしているところもポイント

from https://zenn.dev/jellied_unagi/articles/d986044a425e94

@partial(jax.jit, static_argnums=(3,)) def step(x, y, state, is_train=True): def loss_fn(params): y_pred = state.apply_fn({'params': params}, x) loss = optax.softmax_cross_entropy(logits=y_pred, labels=y).mean() return loss, y_pred x = x.reshape(-1, 28 * 28) y = jnp.eye(10)[y] # optax.softmax_cross_entropyはone-hotを受け取る if is_train: grad_fn = jax.value_and_grad(loss_fn, has_aux=True) (loss, y_pred), grads = grad_fn(state.params) state = state.apply_gradients(grads=grads) else: loss, y_pred = loss_fn(state.params) return loss, y_pred, state



### 結果
pytorchにtf datasetsを使うのでもかなり高速化されているが、JAXをいれるとさらに20%ほど高速化している。

<img width="400" alt="スクリーンショット 2021-09-27 20 31 08" src="https://user-images.githubusercontent.com/19774756/134900145-8c93bce9-d12c-4c16-a9a2-5ea876e5e517.png">

### コメント
あれ思ったよりも高速化していないな...?  
しかしtf datasetsのプリフェッチ機能はやはり強力でモデル部分はpytorchを使いつつも、dataloaderはこっちをつあくべきかもしれない。

参考として[これのqiita](https://qiita.com/namahoge/items/71be06c8fe37e88909c9)がある

### 出典
[元記事](https://zenn.dev/jellied_unagi/articles/d986044a425e94)
GENZITSU commented 2 years ago

yonetaniryo / jax-vs-pytorch

jaxとpytorchを比較していきましょうというgithub 現状はMLP on MNIST / CNN on CIFAR10/ VAE on MNISTが作成されている。

ちなみにCNN on CIFAR10ではjaxの方が1.3倍ほど早い。 pytorch:

スクリーンショット 2021-09-27 20 51 31

jax:

スクリーンショット 2021-09-27 20 51 40

MLP on MNISTでも1.3倍程度 ptorch:

スクリーンショット 2021-09-27 20 53 09

jax:

スクリーンショット 2021-09-27 20 53 14

VAE on MNISTでは2.3倍程度 pytorch:

スクリーンショット 2021-09-27 20 54 29

jax:

スクリーンショット 2021-09-27 20 54 34

コメント

jaxのコードサンプルとしても有用。
所詮線形倍程度だからあれかもしれないだけど、我々はMLフレームワークの移行期に差し掛かっているのかもしれない。

出典

元記事

GENZITSU commented 2 years ago

HuggingfaceのAccelerateの紹介

pytorchの訓練コードを様々なデバイスで学習させられるようにするライブラリAccelerateの紹介

スクリーンショット 2021-09-27 21 49 39

以下のコードのように.to(device)の代わりに、accelerator.prepareを用いてデバイスの設定などを行う。

スクリーンショット 2021-09-27 21 50 31

AMPによる訓練やgradient clippingなどもで設定可能

accelerator = Accelerator(fp16=True)
accelerator.clip_grad_norm_(model.parameters(), max_norm=5, norm_type=2)

ただし実際使う時は以下のようにaccelerate configのコマンドを実行してからlaungをする必要がある。

# from https://zenn.dev/hiroya_w/articles/c13f2153fe8bd16dd947

# ノード数やGPU数,FP16を使うかどうかの質問に答える.
$ accelerate config
# その後
$ accelerate launch path_to_script.py --args_for_the_script

これをnotebookでやるための関数も用意されている

from accelerate import notebook_launcher

notebook_launcher(training_function)

コメント

これcolabのTPUでも学習できるようになるんだろうか?後で試したい。

出典

元記事

GENZITSU commented 2 years ago

Stop Hardcoding Sensitive Data in Your Python Applications

APIキーなどの環境変数を.envなどに入れる際に便利なライブラリpython-dotenvの紹介

.envファイルで管理すると呼び出しの際に都度、source .envなどをしないといけなくなるが、 python-dotenvは以下のようにすることで、それを不要にする。

https://towardsdatascience.com/stop-hardcoding-sensitive-data-in-your-python-applications-86eb2a96bec3

import os
from dotenv import load_dotenv

# load_dotenv will look for a .env file and if it finds one 
# it will load the environment variables from it

load_dotenv()

PROJECT_ID = os.getenv("PROJECT_ID")
API_KEY = os.getenv("API_KEY")
STORAGE_BUCKET= os.getenv("STORAGE_BUCKET")

もちろんカレントディレクトリに.envファイルがある必要がある。

その他の使い方として、以下も公式のgithubで紹介されていた。

環境変数ではなく辞書オブジェクトとして用いる

from dotenv import dotenv_values

config = dotenv_values(".env")  # config = {"USER": "foo", "EMAIL": "foo@example.org"}

.envファイル以外のものを使用する

import os
from dotenv import dotenv_values

config = {
    **dotenv_values(".env.shared"),  # load shared development variables
    **dotenv_values(".env.secret"),  # load sensitive variables
    **os.environ,  # override loaded values with environment variables
}

IPython notebookで使用する

%load_ext dotenv
%dotenv

or

%dotenv relative/or/absolute/path/to/.env

コメント

requirements.txtは増えるけど、毎回sourceするのも手間だからこれもいいなぁ。
商用とかであればsource コマンドと併記する形にして、開発期間は何回も打つからこっち使いたいところ。 何か脆弱性とかないんだろうか?

出典

元記事

github

GENZITSU commented 2 years ago

自動で多種多様な質問を生成できるオープンソースライブラリ「Questgen」を試してみる。

Questgenとは元となる文章を与えることで自動で質問文を生成することができるライブラリ

生成できる質問の種類は以下の6種

①boolean (Yes/No) Questions:真偽問題の生成 ②MCQ Questions:多選択肢問題の生成 ③FAQ Questions:質問・回答ペアの生成 ④Paraphrasing Questions:言い換え文の生成 ⑤question Answering (Simple):質問回答 ⑥question Answering (Boolean):質問回答(真偽)

使用しているモデルはT5のようだ。

For maintaining meaningfulness in Questions, Questgen uses Three T5 models. One for Boolean Question generation, one for MCQs, FAQs, Paraphrasing and one for answer generation.

Questgen自体は英語にしか対応していないがこの記事では、DeepLの開発者向けAPIを用いて日本語の質問文の作成をしている。

Questgenの呼び出し方はかなり簡単

qe= main.BoolQGen() 
en_text = deepL_trans_to_en(ja_text) # 日本語を英語に変換
payload = {
            "input_text": en_text
        }
output = qe.predict_boolq(payload) # 質問生成

以下のような質問文の生成が可能

【入力文】
 久保は9月22日に行われたレアル・マドリード戦に出場。5試合連続のスタメン入りとなったが、
前半のみの出場に終わっていた。海外メディアは、松葉杖をつく久保の姿を報じていた。日本代
表戦も控える中、心配していたことが現実になってしまった。

【問題1】
久保は松葉杖をついたことがありますか?

【問題2】
日本のスター、久保は松葉杖をついていた?

【問題3】
日本で松葉杖を使ったことがある人はいますか?
入力: フォーブスが発表した最新の「世界で最も稼ぐサッカー選手」ランキングで、
今回もトップを堅持したのは、前回のリストから順位を入れ替えた1位のクリ
スティアーノ・ロナウドと、2位のリオネル・メッシだった。

問題1 : クリスティアーノ・ロナウドを最も稼いだサッカー選手に選んだのは?
 選択肢1 : フォーブス
 選択肢2 : Business Insider
 選択肢3 : Wsj
 選択肢4 : Nyt

問題2 : 世界で最も稼いでいるサッカー選手は誰ですか?
 選択肢1 : ロナウド
 選択肢2 : クリスティアーノ・ロナウド
 選択肢3 : リオネル・メッシ
 選択肢4 : ウェイン・ルーニー

問題3 : No.1のサッカー選手は誰?
 選択肢1 : リオネル・メッシ
 選択肢2 : ティエリー・アンリ
 選択肢3 : ウェイン・ルーニー
 選択肢4 : Cristiano Ronaldo

問題4 : トップの座は何ですか?
 選択肢1 : スポット
 選択肢2 : で
 選択肢3 : 次のページ
入力: むかしむかし、あるところに、おじいさんとおばあさんが住んでいました。おじいさんは山へしばかりに、
おばあさんは川へせんたくに行きました。

問題1 : 川に行って洗ったのは誰?
 選択肢1 : ママ
 選択肢2 : おばあちゃん
 選択肢3 : 祖母
 選択肢4 : 大叔母

問題2 : おじいさんはどこに行って調達してきたの?
 選択肢1 : 湖
 選択肢2 : 砂丘
 選択肢3 : 山
 選択肢4 : キャニオン

問題3 : おばあさんはどこで服を洗ったの?
 選択肢1 : 川
 選択肢2 : 湖
 選択肢3 : ショアライン
 選択肢4 : クリーク
入力: 龍心は那須川天心の弟で、現在中学3年生。天心同様幼少の頃から空手を始め、数々のアマチュア大会で結果を残している。対する山﨑は、関西のアマチュア大会『TOP☆RUN』の2階級王者。  試合は12オンスグローブで、ヒザとスネあてを着用、
ヘッドギアは無し。顔面へのヒザ蹴りは禁止で、ワンキャッチワンアタックルールとなる。

-質問1-
龍心の現在の学年は?

-質問2-
龍心の兄は誰?

-質問3-
試合のルールは?

-答え1-
現在、中学3年生のRyushin。

-答え2-
那須川天心

-答え3-
ゲームのルールは、12オンスのグローブ、ニーパッドとシンパッドを着用し、ヘッドギアは着用しない。

コメント

このクオリティは凄すぎる。。 T5を使っているということなので、実行時間は相応に長いことが予想される。

出典

元記事

github

GENZITSU commented 2 years ago

Google Cloud、アプリの販売手数料を引き下げへ

 CNBCによれば、同社は、Google Cloud Marketplaceのアプリストアの売り上げから徴収する手数料を20%から3%に引き下げるという。GoogleのMarketplaceは、企業がSaaSアプリケーションを顧客に流通させるためのプラットフォームだ。

AWS: 32%, Azure: 19%, GCP: 7%というシェアのようです。

AWSは依然として市場シェアの32%を占めており、Microsoft Azureがシェア19%、Google Cloudがシェア7%でAWSの後を追う形になっている。Googleは機械学習、アナリティクス、データ管理に力を入れている。

コメント

なるほどGCPのクラウド費用ではなく、アプリストアというものがあってそこの手数料だったんだな...

出典

元記事