ニートの言葉

元ニートがやってみたこと・その過程で学んだこと・考えたこと・技術メモあたりを主に書いています。情報革命が起きた後に訪れるであろう「一億総ニート時代」の生き方を考え中です。

AIに絵本を描いてもらった

f:id:takuya0411:20211008040930p:plain

どうもこんにちは、あんどう(@t_andou)です。

最近『何かを生成するAI』に興味があり、触ってみました。

しかし、ただ「試してみた」だけでは面白みが無いので、何か作品を作りたいと考え、絵本を描いてもらうことにしました。

 

まずは完成作品をご覧ください。

youtu.be

 

違和感がすごいですね。

 

お気づきになった方も多いかとは思いますが、実はこちらの作品

絵だけじゃなく、物語、読み上げ音声、BGM、全てがAIによる生成物です。

 

完成度はまだ低いものの、あと数年もすれば違和感の無い作品が作れるようになりそうな予感がしますね。

使用した技術

全てを把握しているわけではないため自分用のメモ程度になりますが、使った技術を記載しておきます。

絵にはVQGANとCLIPという技術を使っています。

これは凄くて、描いて欲しいものを文章で伝えると描いてくれます。
しかも、どんな画風で描いて欲しいかまで理解してくれるのはやばいです。

本作品でははらぺこあおむしで有名なエリック・カールさんの画風でお願いしました。

ちなみに、今回はお遊び程度の試行、且つ絵本という分野なため深く追及せずに「よく分からないけどなんとなくそれっぽい」くらいの絵の品質で終わらせていますが、お題の指定次第ではよりちゃんとしたものが出来上がります。

次に挙げるのは割とよく出来たものの一例ですが、誰かが描いたものとして出されたらAIによる生成物だと見抜く自信は僕には無いです。

ハロウィンの夜

f:id:takuya0411:20211009085423p:plain

雲の上の山・リアルに

f:id:takuya0411:20211009085230j:plain

他に試したのはこんな感じです

物語

文章の生成にはGPT-2を使いました。

これは最初の文章だけを指定すると残りは全て書いてくれるというものになります。

今回指定した書き出しは
『あることろに小さな男の子が歩いてました。その後ろに犬も歩いてました。その後ろには』
です。これ以降は全てGPT-2が書いた文章になります。

 

理想的には「絵本風の物語」を出したいのですが、そこまでの指定方法がわからないため何度か生成をした上でこれなら使えるかも というものを選びました。

 

当初はrinna株式会社さんが公開されているモデルを利用しようと思ったのですが、試したところ会話風やwebの記事風になった印象を受けたため、tanreinamaさんのモデルを使わせていただきました。

読み上げ

@hiho_karutaさんが作られているVOICE VOX(四国めたん)を利用しました。

文章を入れると中品質の読み上げをしてくれます。

チューニングをすればそれらしく聞こえますが、時間がかかるため今回は話すスピードを遅くしただけになります。

詳細は理解できていないため、公式サイトGithubをご覧ください。

BGM

Performance RNNというものを使いました。

こちらも詳細は理解できていないため紹介だけに留めておきます。

こちらの本で知りました。

終わりに

「あと数年もすれば違和感の無い作品が作れるようになりそうな予感がする」と先述しましたが、実はもう(僕の目では)見分けがつかないレベルの分野もあります。

次の写真をご覧ください。これらは全てAIによって描かれたものになります。

f:id:takuya0411:20211009075850p:plain

f:id:takuya0411:20211009080051p:plain

f:id:takuya0411:20211009080058p:plain

これまで「何かを生成するAI」の技術はほとんど追っていなかったのですが、すごいところまで来てますね。

もうそろそろAI写真家やAI画家が活躍する世の中になりそうです。(知らないだけで既にそうなっているのかも)

参考

github.com

物語

github.com

読み上げ

voicevox.hiroshiba.jp

BGM

magenta.tensorflow.org

最後の写真

github.com

バックテスト&自動運用などリリースした機能の紹介と今年の開発予定

明けましておめでとうございます、あんどう(@t_andou)です。

以前『AIを使ってボートレースで資産運用してみたら稼げた』という旨の記事を書いたところ、「ユーザーがこの予想に乗っかれないなら意味が無いじゃん」という反応がありました。

元々この記事は「みずはのめの予想の精度が高く、稼げる可能性があること」を示したくて書いたのですが、この予想に乗っかり、同じように運用したいと考えるのは当然のことですね。

しかし、僕らが運用している買い目に全員が乗っかってしまうとオッズが下がってしまい全員で損をしてしまう可能性があります。

そこでしばらく悩んでいたのですが、みずはのめ上でユーザーの皆様それぞれが回収率100%を超えるような好条件をバックテストで見つけ、その条件で自動運用できるようになれば、プログラミングが出来なくても僕らと同じような運用を出来るのでは?
という結論に至り、作成しました。 

今回はそのバックテスト→自動運用機能を初めとする幾つかの昨日のご紹介です。

1.バックテスト→自動運用まで

1-1.バックテストの設定 

まずはバックテストの設定です。

例えば
・浜名湖の12Rだけ、123を100円購入した場合
・SGのレースだけ、1256のBOXを購入した場合
・オッズが50以上の券でみずはのめの予想確率が0.1(=10%)以上の場合
などと言った買い方の検証ができます。

期間は過去3ヶ月で、検証した条件を保存できます。

f:id:takuya0411:20210122184150p:plain
(説明や言葉が分かりづらいだろうとは感じているのですが良い表現が思いつきません。もしも、より伝わりやすい表現がありましたらフィードバックください。)

今回のリリースではレース場やグレード、組番、みずはのめの確率の範囲など、指定できる条件は少ないです。もしもこの機能が好評であれば、他にも「天候」や「波の高さ」などシンプルな条件から「オッズの変動率」などと言った複雑なものなども追加していこうかと考えています。
欲しい条件などご要望がありましたら「みずはのめのフォーラム」までお知らせください。

1-2.フォワードテスト

次にフォワードテストです。

バックテストで好条件を見つけても、実際に運用するのはちょっと怖いという方もいらっしゃるかと思います。そんな方のために、フォワードテストも実施できるようにしています。

↑の画像は僕が設定したバックテストの条件で一週間ほどフォワードテストをした結果になります。
約475万ほどプラスになっています。回収率は146%でした。(フォワードテストなどと言わずに運用しておけば良かった)

1-3.自動運用

最後に自動運用です。

こちらは月額会員であれば別料金は不要で利用可能です。(使用状況によっては料金設定を変更する可能性があります)

ここで「実稼働させる」にチェックを入れることで、バックテストで保存しておいた条件に一致する舟券を自動で購入することができるようになります。

是非良い条件を探して回収率100%超えを目指してください。

2.その他の修正点・リリースした機能

今回のリリースでいくつか修正した点をご紹介しておきます。

2-1.乗っかり購入時の金額調整

「ある予想屋さんの予想に乗っかりたいけれど、購入金額が高くてそのままだと乗っかれない」というご意見がありましたので、乗っかり購入時に予算に合わせて金額を変更できる機能を作成しました。

マイページ→舟券購入/乗っかり購入/自動入金の設定 から設定できます。 

1点あたり100円で購入したり、1レースあたりの予算を設定してオッズに応じて配分することができるようになりました。

この機能の使い方などの詳細についてはこちらをご覧ください。

2-2.ランキング画面の見やすさ向上

ランキング画面をスクロールすると日付が隠れてしまい、いつのランキングなのかが分かりづらいというご意見がありましたので、スクロールに合わせてくっついて動くようにしました。

Image from Gyazo

2-3.予想の投稿回数を1レースあたり1人1回に制限

これまでは1レースに対して何度でも予想を投稿できたのですが、みんなの予想ページの視認性が悪くなるのと、悪意を持った予想屋さんが居た場合に乗っかり購入で得られるポイントを不正に稼ぐ可能性があったため、1レースに対して予想を投稿できるのは1人1回までに制限しました。

3.バックテストの予想販売機能

まだ全員にはリリースしていない機能のご紹介と予想屋さんの募集です。

バックテストで保存しておいた条件に一致した券が出てきた場合、それをご自身の予想として販売できる機能を作りました。

予想屋になりたいけれどまだ良い予想を出すことが出来ない方などにはぴったりかと思います。僕のようにボートレースはよく分かっていなくても回収率をそこそこ高めの予想を出せるため、予想を購入する方々にとってもプラスになると思っています。

ただし、こちらの機能は全員に開放してしまうと、似た予想が大量に出てくる可能性があるため、ご利用を希望の方は下記のフォームより申請してください。

主にフォロワーの多い方、みずはのめの宣伝にご協力いただける方を優先して招待しようと考えています。

forms.gle

2021年の開発予定 

最後に今年の開発方針を書きます。

引き続きボートレースAIとしての精度向上を目指しつつ、今年は『予想屋さんがより販売しやすく、予想を購入する方がより安心して購入しやすい場所を作ること』を目指すことに注力したいと考えています。

そのために、ブログやSNSのような機能を追加していこうと思っています。

・ブログのような機能
・月額定額でその人の予想やブログを見れるようになるマガジン機能
・金額を指定しない買い目予想
・いいね機能
・投げ銭機能(予想が当たった場合に予想屋さんへのお礼として使うチップのようなもの)
などなど

そのほかに欲しい機能がありましたらユーザーフォーラムまでご連絡ください。

forum.mizuhanome.net

本年もみずはのめをどうぞよろしくお願いいたします。

AIでボートレースをやったら2ヶ月で200万稼げた話

どうもこんにちはあんどう(@t_andou)です。 

僕はボートレース予想のAI「みずはのめ」というサービスを作っているのですが、ご覧いただいた方からよく言われるのが

「けっこう当たるっぽいけど、本当にこれで勝てるの?」
「そんなに当たるんなら予想なんて売らないで自分で買ったら良いのに」
という内容です。当然のご意見ですね。

開発を始めたころは僕も勝てるかどうかは半信半疑でした。
そのため、ちょっとでも当たりやすい予想を提供することで「回収率50%の人が70%になるお手伝いになれば」というスタンスで情報を提供していました。

ですが、ボートレースの予想AIがどんどん出てきており、みずはのめが提供している情報は本当に価値があるのかの判断が難しくなっていると思います。

そこで、みずはのめで提供している情報で本当に勝てるのかを検証するため、約2ヶ月間実際に運用してみました。

前提

・資金は100万円スタート
・みずはのめで提供している「直前予想 」を使う
・何を買うかは締め切り1分前に判断する
・舟券の購入はみずはのめのAPIを使って自動行う
・みずはのめの「みんなの予想」に買い目の投稿も行う
・参加するレースは6~7割程度
・1日に購入する金額はその日の開始時の資金の20~30%程度
・的中率は7~8%、回収率は110%程度を想定

結果

タイトルにも書きましたが約2ヶ月で100万→300万を突破しました

追記:11/9時点で100万→400万を突破しました

資金の推移はこんな感じです。多少の増減を繰り返しつつも、割と良い感じに右肩上がりになっており、日々の収支も概ね想定内の動きをしています。

f:id:takuya0411:20201031214758p:plain

週次の成績はこちらで公開してます。

twitter.com

 

一応、公式サイトのスクリーンショットも貼っておきます。

9月分

f:id:takuya0411:20201031221347p:plain

9月収支

10月分

f:id:takuya0411:20201101205342p:plain

10月収支

的中した高配当舟券

AIと言えば硬い舟券を狙いに行くのかと思っていましたが、意外と高配当なものも買いに行っているようです。393倍に500円はなかなか冒険してます。

f:id:takuya0411:20201101205514p:plain

的中した高配当一覧

買い目の公開場所

v2.mizuhanome.net

買い目はこちらで公開しています。

f:id:takuya0411:20201103221151p:plain

直近一年の収支(8月以前はシミュレーション)

また、このプロフィールに載せている直近1年の収支ですが、実際の運用開始(8月末)までにいくつかシミュレーションをしていたので大きくマイナスになっていましたが、この2ヶ月で急激に回復しています。(実運用開始のタイミングで戦略を変えました)

終わりに

250万を突破したと思ったら数日負け続けて200万を切ったり、1日で50万勝ったと思ったら1日で40万負けたりとなかなか忙しない日々でしたが、無事にみずはのめの予想を使って勝つことが出来ています。

これからはAIによる予想だけではなく、ボートレースをより楽しむためのコンテンツ開発を続けていきたいと思っていますので、今後ともみずはのめをよろしくお願いいたします。

宣伝

みずはのめで出来ることの一覧表
f:id:takuya0411:20201103174126p:plain

みずはのめではチャットをしながらレースのライブを見れたり、AIによる前日予想などを無料で見ることができます。

月額980円(税別)のプランに入ることで、より精度の高い「直前予想」や舟券の購入、他の予想屋さんの予想へ乗っかって購入する機能などをが使えるようになりますので、是非まずは無料会員登録をしてご利用ください。

使いにくい点などのフィードバックはこちらの問い合わせフォームからいただけると幸いです。

docs.google.com

防音室を作る その1 調査

こんにちは、あんどう(@t_andou)です。

僕は実家に居た時は部屋でギターを引いたり歌ったりしていたのですが、一人暮らしを始めてからは近所迷惑にならないように大きな音を出さないように静かに暮らしていました。

そんな生活を始めて10年以上経ったいま、偶然見かけたこのツイート

防音室って自作できるんだという衝撃を受けると同時に、気づいたら作り方を調べ始めていました。

ということで防音室を作ります
※DIYすらやったことのない素人が試行錯誤しつつ自分用のメモを兼ねて書いているため、現時点では綺麗にまとまった情報ではないことをご了承ください。無事最後まで完成しましたら纏めます。

今回は防音室の自作方法を調査した記録です。

自作した記録まとめ

まずは先人たちの足跡を調べました。
調べてみると自作をしている人は結構いらっしゃるんですね。

先ほどのツイートのかた

一連の流れがnoteに纏められていて概要を掴むのに良かったです。

note.com

↑のかたが参考にしたというサイト

こちらも記事が順に書かれていて分かりやすいです。

blog.livedoor.jp

工程図までアップしてくださっているので非常に参考になります。http://blog.livedoor.jp/britishtree/pdf/%E9%98%B2%E9%9F%B3%E5%AE%A4_%E5%B7%A5%E7%A8%8B%E5%9B%B3.pdf

2.5万で自作したという人

防音性能は分かりませんが安く作りたい場合は参考になります。

www.tamusguitar.com

振動対策

床の下に水道用のゴムホースを敷くことで電子ドラムを叩く振動も軽減できるらしいです。今回はドラムを設置する予定は無いので見送りましたが面白い。

jisakudebouon.web.fc2.com

クローゼット?を防音室にしているパターン

www.nicovideo.jp

だんぼっちを加工しているパターン 1

だんぼっちは段ボールでできた簡易防音室ですが防音性能はイマイチらしく、加工することで防音室として使えるようになるとのこと。

www.nicovideo.jp

だんぼっちを加工しているパターン 2

遮音材として鉛シートを使っている珍しい事例

総額は20万を超えているけれど防音性能は良さそう。

www.nicovideo.jp

制作風景を載せている人 1

www.youtube.com

制作風景を載せている人 2

www.youtube.com

2畳くらいのものを作っている人

図面やパーツ一覧など僕が求めているものを完璧に記載してくれていました

hibitetsu.com

まとめ

すごくたくさんの事例が見つかりました。

知識ゼロからのスタートなので「どんなビスを使うと良い」みたいな情報から記載されているのは非常に助かります。

公開していただきありがとうございます。

次の記事では自分が作りたいものをまとめていきます。

買い占め防止システムを作れないか

どうもこんにちはあんどう(@t_andou)です

新型コロナの流行によりマスクが入手困難ですね。

僕はほとんど外出しないので手元にまだ少し残っていますが、知り合いはフリマアプリを使って親のために1万円で買っていると言っていて驚きました。

さらにこの数日はデマが原因であるとは言え、トイレットペーパーも店頭から無くなり困っている人も多いと思います。

今後、流通が混乱して他の複数の商品において同じことが起きる可能性がありそうです。

さらに、コロナの流行を防ぐために人混みは避けるべきなのに毎朝スーパーに並んでるという人も少なくないように見えます。これでは感染がさらに拡大していきます。

買い占め防止のためのシステムを作れないか

さて本題です。

買い占めを防ぎ、必要分だけ多くの人に渡るためにITエンジニアの僕に何かできることは無いかを考えました。

まだまだ思いつきの曖昧なアイディアですし、僕は流通や製造業界に関して知識が無いため、「既にある」とか「現実的じゃない」「これを使えば実現できそう」などご意見いただけるとありがたいです。

解決策のアイディア

すごくざっくりしてますがこんな感じです

1.店員が入荷予定を登録

2.入荷予定を知ることが出来て予約できる

3.店舗で受け取る

機能の案

具体的にはこんな機能が必要かなと考えてます。

  • 店員が自店舗の情報を登録(店名・住所など)

  • 商品情報と入荷予定(いつどれくらい)を登録

  • 購入側はユーザー登録(1人1アカウントにするため、電話番号をキーにするのが良さそう)

  • 予約をして割り当てる

  • 店舗をまたがっても同じカテゴリ(マスク・トイレットペーパーなど)の商品は購入数に制限をつける

想定される課題

具体的な実装案についてはまだまだ固まってないため、機能面における課題は無視するとして

一番大きな課題は店員さんの手間が増えることだと思っています。(入荷予定の入力や予約した人かどうかの確認が必要となるので)

ですので、店舗側にメリットを考えないといけないです。

今回の騒動が収まった後でも、お客さんに知らせて買いに来てもらう目的で使えるように設計してたら良いかも。

最後に

小売店のかたのアイディアをいただきたいです。
最初は入荷予定を知らせる機能だけでも無駄に並ぶ人が減るので良いかもしれないですね。

また、途中で力尽きるかもしれませんがこちらでオープンに開発していきます。

https://github.com/takuya-andou/Prevent-buy-out/wiki

【Kubernetes】1週間かかる処理を1.5時間で終わらせた【並列処理】

こんにちはあんどう(@t_andou)です。

今回はKubernetesを使って並列処理させた記録です。

まだ「とりあえずそれっぽく動くまで試してみた」という段階で、kubernetesを理解できてはいないので自分用のメモを公開しているという認識でご覧ください。

間違っている部分や、よりスマートなやり方がありましたらご指摘いただけると幸いです。

この記事の概要

機械学習に使う特徴量の作成で1週間かかりそうな処理を10分くらいで終わらせられないかと考え、GKE(=GoogleのKubernetes環境)を使い試行錯誤した記録です。

今回は一部失敗して完了時間が1.5時間になったものの、設定を上手く出来れば15分程度で終わる見込みです。

 

対象読者

・Kubernetesの概要は知っているくらいのレベルの人
・KubernetesのJobを使った並列処理をしたい人

目次

  • この記事の概要
  • 対象読者
  • 目次
  • 背景
    • どのくらい時間がかかっていたのか
    • どうやって処理時間を短縮するのか
    • なぜKubernetesなのか
  • やってみたこと その1:処理部分を独立させた(失敗)
    • 構成
    • 処理の流れ
    • 困ったこと
      • MySQLへの接続部分
  • やってみたこと その2:データをGCSにダンプした(失敗)
    • 構成
    • 処理の流れ
    • 困ったこと
      • デフォルトではGCSへの書き込み権限が無い
      • Nodeの容量不足
  • やってみたこと その3:永続ボリュームにデータを配置した(成功)
    • 構成
    • 処理の流れ
    • 困ったこと
      • 永続ボリュームの読み書き権限周り
      • 使えるvm数に制限がかけられていたのでリクエストが必要だった
  • 完成したymlとシェルスクリプト
    • クラスター作成
    • 永続ボリューム
    • ジョブ実行
  • かかった料金
    • Kubernetesのマスター管理料金:無料
    • データ転送料:ほぼ無料
    • データのストレージへの保管料金:数円
    • VMの料金
      • VMの料金見積もり
    • 合計金額
  • 分からないこと 
    • ReadOnlyManyでPVCを作成する時に最初のデータ配置をどうするのか
    • jobsのCOMPLETIONSが途中で減ることがあった
    • 処理から抜けているものが複数あった
    • GKEのアップデートが始まって時々接続できなくなった
  • 参考にした資料
    • Webページ
    • 書籍
  • 最後に
    • 処理時間について
    • 用途について
  • おまけ:試行錯誤のツイート
続きを読む

高精度でテキスト分類を行えるAIの環境を用意しました【BERT】

 

こんにちは、あんどう(@t_andou)です。

最近、自然言語処理のAIの一種であるBERTをよく触っています。

今回はBERTのソースを読まなくてもサクッと試せる環境を用意しましたので、メモとして残しておきます。

BERTとはどういうものか


画像引用:https://arxiv.org/pdf/1810.04805.pdf

凄くざっくりと説明すると、BERTとは2018年末にGoogleの人たちが開発した自然言語処理において汎用的に使えて精度の良いAIです。

自然言語処理において精度を測るためにいくつかのタスクがあるのですが、発表された時点ではダントツの成績でした。

仕組みなどの詳細については論文を読むか解説記事をググってください。

2019/09/22時点で既により精度の良い手法がどんどん発表されていますが、BERTの情報量と比べるとまだ少ないため、入門としてはBERTを触ってみるのが良いと思っています。

どんなものに使えるか

詳細は書けませんが、僕は実際の仕事で

  • ある文書からその業種を推定する
  • 面接時の受け答えのテキストから面接の評価スコアを付ける

と言ったことに使っています。

他にも、今回の学習方法では使えませんが

  • 質問を投げると答えを抽出してくれるシステム*1

などにも利用されているようです。

作ったもの

繰り返しになりますが、今回はBERTのソースを読まなくても試せる環境を用意しました。公式のソースを少し修正し、実行環境を用意しただけですが。→github , Google Colab

出来ること

自前のデータセットを用意することでテキスト分類をしてくれる人工知能を作れます。

使い方

1.データセットの用意

データセットの形式としてはtextとlabelの2カラムのtsvで
学習用、検証用、テスト用にそれぞれtrain.tsv , dev.tsv , test.tsvというファイル名で用意してください。

2.GoogleDriveにアップロード

1で用意した3つのファイルをGoogle Driveにアップしてください。

※Colab上にアップしても良いですが、ランタイムのリセットで消えてしまうためDriveがオススメです

3.Google Colabを自分のドライブにコピー

今回用意したGoogle Colabはそのままだとコメントしか出来ない状態にしているため、ご自分のドライブにコピーしてください。

4.自分のデータセットに合わせてパス・ラベルを修正

下記の箇所を修正してください。

  1. DATADIR:学習させたいデータセットを置いたディレクトリのパス*2
  2. FINETUNE_OUTPUT_DIR:学習したモデルを出力するディレクトリのパス
  3. LABEL:学習させるラベル一覧
5.学習開始

その後、上から順に実行していくと「4.Train」の箇所で学習が開始されます。

学習完了までの時間はデータセットの量によって変わってきますが、10万件弱のデータセットで2~3時間でした。

※TPUを使うことでより高速に終わらせることが出来ましたが、その場合はGoogleColabとGoogleDriveだけでは完結できず、Google Cloud Storage(有料)を使う必要が出てくるようですので、今回はパスしています。

6.予想の計算

「5.Predict」を 実行するとテストデータに対して予想を計算してくれて、データセットのディレクトリにtest_results.tsvというファイルで出力されます。

最後に

BERTを使い、テキスト分類のタスクを簡単に行えるようにしました。

今回は多言語モデルという日本語を含む色んな言語に対応したモデルを利用しましたが、日本語モデルを公開してくださっている方もいらっしゃいますので、日本語に特化した問題であればそちらを利用した方が良いかもしれません。

参考

https://github.com/google-research/bert

*1:https://www.pragnakalp.com/demos/BERT-NLP-QnA-Demo/

*2:もしもアップロードしたデータセットのパスが分からない場合はGoogleDriveをマウントした後でパスをコピーするとわかりやすいです