M1 Mac Python3.9.10でsudachipyがインストールできなかったのを解決した

環境と状況

  • M1 MacBook Pro 2020, MacOS 12.3.1
  • Python3.9.10
  • sudachipyをインストールしようとするとエラー pip3 install sudachipy
    • ERROR: Could not build wheels for SudachiPy, tokenizers, which is required to install pyproject.toml-based projects
    • このエラーでぐぐっても解決しそうな情報が出なかった

原因

  • 他の人に相談したところ、

解決

  • Rustの環境をrustupで用意
  • 再度 pip3 install sudachipy するがビルドに失敗する
    • 以前にRustの環境を構築していたがバージョンが古くて失敗してるのかも
  • rustup update を実行してRust周りのバージョンを最新にした
  • 再度 pip3 install sudachipy を実行すると問題なくビルドされ0.6.3がインストールされた

気になる

  • Rustのバージョンって気軽に上げて良い?
    • 他のツール用に入れていたはずなので影響が出ないか

C96参加&新刊告知

ご無沙汰しています。私です。 来る夏コミ(C96)の3日目(8/11)にサークル参加して、サークル:ポストモダンのポリアネスの新刊を出す運びになりましたので告知させていただきます。

新刊概要

  • 頒布場所:C96 3日目 西こ-01b(お誕生日席!)
  • タイトル:ポストモダンのポリアネス tech. ~ 4コマ漫画のデータ収集と分析による評論の可能性(with Python) ~
  • 頒布価格:1000円
  • サイズ、ページ数:A5 72ページ(表紙込み)
    • 後書き・謝辞を書かないまま入稿したので後付ペーパーが挟まる予定です
  • 頒布数:多め
  • 新刊以外の頒布:なし。無料配布ペーパーは作るかも
  • 通販:コミックZIN様を検討中。電子版は未定
  • 3日目以外の委託頒布:現在予定なし

以下に書影および、1章全部を載せるので、購入の判断材料にしてください。

表紙

新刊の内容について

1章の内容と被りますが、弊サークルは2015年冬コミから4コマ漫画評論とプログラミングの力をかけ合わせて新しい分析・評論の可能性を探る『tech.』を刊行し、コマの切り出し、セリフの抜き出し、分析等の技術を向上してきました。

今回の新刊では4年分の成果を1冊にまとめ、データ収集から分析・評論までを一気通貫に行う方法を紹介しています。

内容は同人誌以外にPythonのカンファレンスや勉強会、ゆゆ式Advent Calendarのブログ記事などで発表してきたものをブラッシュアップし、セリフデータの分析など新たに書き下ろしたものになっています。

また、技術書というよりは、技術を基にした評論本として書いたため、詳細なプログラミングのコードが出てくるというよりは、それぞれの処理がどんな考え方で実行されていくのか、どのくらい便利になっていくのかを説明するものになっています。ただし、この本で使用したコードなどはすべてGitHubのリポジトリで公開しますので、だれでも同様の成果を得られるでしょう。

今後の展望

今回の本で表データをゆゆ式1〜9巻、セリフデータを1,5,9巻分データ化していますが、それをもっと楽にデータ化する手法の開発や、もっとゆゆ式の本質に迫る分析ができるといいと思っています。特にセリフデータをいい感じに形態素解析・ベクトル化して発話者特定とかしたいですが、いまいち方法がわからんので詳しい人にアイデアもらいたいです。

4コマ漫画の自動生成できかもですねえと、言われることも多いのですが、あまり面白いものができる未来は現状見えません。「三上先生を納得させるレベルのゆゆ式チューリングテストを考案し、それを突破する会話劇をGANかなんかで生成する」というよくわからないアイデアならあります。よろしくおねがいします。

また、コミック工学と呼ばれる漫画やアニメを主体とした技術研究の界隈があることを、本プロジェクトで参考にできそうな技術情報・論文を探すうちに知りました。詳しくは https://www.ai-gakkai.or.jp/MY-BOOKMARK_VOL32-NO6/ を一読いただけると良いかと思います。様々な研究で本プロジェクトはのようにコマ抜き出し、セリフ抜き出しなどが考案・実施されています。私とは進む道やモチベーションは違えど、技術やアイデアなどで協力できる部分があればと考えています。(先日行われたキックオフイベントがすごいから見て https://sig-cc.org/?p=22 )

Twitter関連サービスを10年作ってきて思ったこと

ご無沙汰してます、私です。 最近、Twitterに関連するサービスをシュッとリリースしたのですが、そういえば2008年あたりからTwitter関連サービスを作り続けて、10年くらい経っとるなと気付いたので、その振り返りとサービス告知をしておくか、という文章です。

2008年頃:Tweetまとめ支援ツール

TwitterのつぶやきURLをまとめて入力すると、status_idたちを取り出し、APIに投げてname,screen_name,img_url,text,あたりを取得して、はてなダイアリーに貼るとまあまあいい感じに見えるhtmlのテーブルタグを吐き出すというツールをPHPで雑に作っていました。 つぶやいたものをまとめたいという欲求がこの頃からあったことが伺えますね。まなめさんに褒めてもらって承認欲求を満たしていた記憶があります。

2012年頃:RT直後のつぶやきを見に行くやつ(RtRT)

リツイート(RT)という機能が公式に実装されて幾ばくかしたころ、RTの後に自分の意見を言うユーザーが増えてきました。Replyと違ってその意見が通知として上がってくるわけではないので、ある程度バズった(数RTされた)つぶやきの反応が気になった場合、RTしたユーザーのタイムラインをそれぞれ見に行くということをしていました。 この動きはAPIを使えば自動化できそうだなーと思ったので、PHPでめちゃくちゃ雑に作りました。動いていたのが今では奇跡に思えます。 自分が使う用に実装して動かしたのをTwitterにつぶやいてみたら1000RTされて作るしかないなーという気持ちになって作りました(当時の1000RTは現在の10000RTに相当する…と思う)

ねとらぼさんにも取り上げていただき、今となっては当時を振り返る貴重な資料となっています。本当にありがたい。

その後、TwitterAPI変更や借りていたサーバーの閉鎖に伴い、サービスは終えることになりましたが、@jz5さんが同等以上の機能を持ったリツイート直後のツイートを表示するやつを運営されることになり、今は私もこちらを使うようになりました。便利です。

2014年頃:コミケやらコミティアに出る人のサークルスペースをがっとまとめるやつ(subcatalog)

コミケの時期が近づくと、Twitterの名前に3日目東A01-aみたいにサークルスペースを入れてくれる人が多くなります。どうせカタログチェックをするときにはフォローしてる人やリストに入れてる人も見たりするので、このへんががっと取れると楽だなーとコミケ会場で知り合いの名前を検索窓に入れながら思ったので作りました。

最初はPython2系を使いGoogle App Engineで作ってましたが、2015年夏コミの頃には利用者が増加し、高負荷でGAEの無料枠を使い果たす事態に陥ったため、リニューアルも兼ねてherokuに引っ越して、Djangoとmithril.jsで作り直しました。

さらに去年にはフロントをVue.jsに刷新し、誰でもイベントを作れるようにしました。私がイベントの時期に合わせてイベントデータを作って運用するのが辛すぎたためです。

新しいサイトのURLはこちらです。今でも大きめのイベントが近づくと、↑のつぶやきがRTされたり紹介するのでちょっと悲しいです。

https://www.subcatalog.net/

2018年:Twitterリストに入ってる人達のReplyの応酬だけ抜き出してSlack等に投稿する(relationship)

Virtual YouTuberが隆盛した2018年。オタク活動として推しのTwitterアカウントをフォローするのは当然ですが、推し同士のやりとりから関係性を見出すことも重要になってきます。そういった関係性は時にとてつもない輝きを放つため、絶対に見過ごせないのですが、告知などに埋もれてしまうのもよくあることです。そのため、濃縮された関係性を効率的に味わい、Slackのチャンネルに投稿することで抜けなくチェックできる体制を作りました。

事前準備としてTwitterリストに対象のアカウントを入れておくと、バッチが叩かれる度にリスト内のつぶやきをチェックし、Replyがあれば対象のつぶやきとReplyのURLを指定したSlackのチャンネルに投げます。

f:id:esuji5:20190121181721j:plain

(実行された様子)

公式WEB・クライアントで使われている、特定のつぶやきへのReplyが取得できるAPIを使えればいいのですが、一般には開放されていないのでin_reply_toなんかの情報を駆使してまとめるのがなかなか大変です。

ツールのおかげ化Slack内の人々が関係性に敏感になったことで、30分に1度の起動より先にURLが書き込まれてしまうことが何度かありました。それだけ速報で伝えたいほどに関係性は強烈なのです。

Pythonバッチを雑に作ったものなので、需要があればコード公開したいと思います。

最近のやつ:Twitterに画像を4枚ずつ貼ったものをリプライツリーで読めるようにしてるをWEBの1ページでまとめて読むやつ(sucrose)

最近、漫画家や同人作家の方が過去に描いた漫画などを4枚ずつ貼ったリプライツリーを形成することでTwitterに投稿されるものをよく見ます。つぶやきが2、3個ならさっと読んでしまいますが、けっこう長いものもあり、ありがたいのだけど読むの大変で、でもリプライツリーを辿ればウェブサービスでなんとかまとめて読めそうだなと思ってとりあえずの実装を行いました。とりあえず、以下のリンクから読んでもらうと話が早いです。

リプライツリーと言いつつ、前述の通りリプライを取得するAPIは使えないので、起点になるつぶやきIDを投げると、ユーザータイムラインをsince_id=つぶやきIDよりちょっと過去で指定して取得、画像がないつぶやきがあるまでまとめていくという感じになってます。 とりあえずの実装なのでドメインはsubcatalogに間借りし、画像が何十枚あってもサーバーサイドレンダリングしてますが、需要があれば逐次読み込みなどの高速化をやっていくかという気持ちです。こんなんでも意外と体験がいいのでしばらくは運用する予定です。

この10年で気付いたこと

まとめツール以外は、そもそもなんでこのツールが必要なのかを他人に説明するのが大変で、色々と込み入った使い方をされるTwitterはすごいなあと改めて思いました。

とはいえ、最後のsucroseなんかは、私がツールを作るよりも、Twitterの機能としてユーザーが画像をまとめられるアルバムを作れるようにすれば良さそうな話でもあります。Facebookを例に上げると、こちらには既にそういった機能がありますし、有用なサービスは買収し、それができなければより良い模倣サービスを開発することで大きく成長してきました。もっとも、Twitter社が同様のことをしなかったからこそ私達はTwitterを使い続けてきたのかもしれないので、それは良いとも悪いとも言えません(モーメント機能については見なかったことにします。APIもないですしね…)。

Flickr等の外部サービスを使えばよいとTwitterの経営陣は思っているのかもしれませんが、私はとにかくTwitter外部に遷移したくない・Twitter内で全てを済ませたい人間です。画像を上げたらすぐにRTやFav(現在のLike)で反応がもらえますし、見る側のときは画像や漫画を見るのにpixivにさえ飛ばされたくないです。そしてまあまあの割合で同様に考えているユーザーがいるのではないかと思っています。

sucroseを公開した時に、「ジャンプルーキー等の然る場所にシュッと応募しつつ、Twitter上では最初の4ページを簡単に確認できるようになっている状態があると、作家も読者もプラットフォームも嬉しいのではないか」という意見およびお気持ちをいただきました。 これはけっこうハッとさせられるもので、僕が真に解決すべきはTwitterのしょぼくれた機能を補助することではないと気付いてしまいました。とはいえ、Mastodonを改造して最高のプラットフォームを作るという気持ちがあるわけでもなく、今のTwitter社にAPIの拡充や制限解除など期待するのも無駄だと思うので、せめて現状維持を願うのですが、それもどうかと思うことがなくもなく、なんとも言えない気持ちになりました。

まとめ

  • なんだかんだ使われ続けるTwitterすごい
  • でも、もうちょっとユーザーの声を反映した機能追加があっても良いと思う
  • Twitter関連ツールを作るのは楽しいけど、しょぼくれた機能を補助することが真のゴールじゃないよ
  • 期待もできないが、諦めてばかりいるのもなんだかなあ、なんとも言えねえ

ところでこれはいい感じのsucroseページなので読んでくださいお願いします。 www.subcatalog.net

ゆゆ式Advent Calendar2017オープニングと年表まとめ

オープニング

私です、こんにちは。 今年もゆゆ式Advent Calendarの時期がやってまいりました。

ゆゆ式 Advent Calendar 2017 - Adventar

募集開始からすぐに埋まった去年と違って、今年はまだ空席がある程度のゆったり進行となっております。2017年は、ゆゆ式にとって色んなイベントがあった(公式からの供給があった)1年だったので、みんなの気持ちが満たされているのかもしれません。そんなわけで、今年のオープニング記事としてはこの1年の出来事を振り返り、色々あったことを確かめたいと思います。

年表

  • 2/20 OVA発売記念で「ゆゆ式」のニコ生一挙放送
    • 今年前半の話題といえばやはりOVAですね
    • OVAに関しては秋葉原での看板広告を始めとして、売ってやろうという気持ちが伝わってきたのが良かったです
  • 2/22 OVA発売日
    • TVシリーズに続く13話目のような形でOVAが発表がされました
    • 4年ぶりのアニメ化にも関わらず「ゆゆ式」の雰囲気が出ていて素晴らしい作品でした
    • オリコン情報では2週間で9千枚強が売れたと伝えられ、界隈がざわつく
      • 実際、中身がまったく分からないアニメがこんなに売れるのはとんでもないと思います
  • 3/19 文芸部イベントとして新宿ロフトプラスワンでイベント開催
    • OVA脚本を手掛けたかおり監督、高橋ナツコさん、小倉Pによるトークイベント(飲み会)
    • チケットはなかなかの争奪戦となりました
      • (発売開始時間にUSJハリーポッターブースにいたのでそこからデザリングを駆使して取った思い出)
    • ロフトならではの距離が近い雰囲気でゆったりまったり楽しい時間を過ごせました
    • OVAでの北川隆之さんパートは冒頭のゆずこがくるくる回るところ という情報をゲットしてきました
    • (時間があればもうちょっとちゃんとしたイベントレポートも付けたかったです……)
  • 3/24 ゆずこ&弘崎真史さんの誕生日
    • 三上先生の相方でおなじみの弘崎真史さんとゆずこの誕生日
    • めでたい
    • 作品の登場人物の誕生日を忘れないように、ゆずこは弘崎さん、縁さんは三上先生と同じにしてあるとのこと(参考:マンガルカvol.1)
  • 4/14 お母さん先生の誕生日であることがまんがタイムきらら2017年6月号(5/9発売)にて発覚
    • 誕生日が分かっているのが単行本1巻に出てきたゆずこたち3人のだけだった
    • って5/9に分かっても誕生日もう今年過ぎとるやんけ! というアレ
  • 5/1 唯ちゃんの誕生日
    • ここは特に知り合いの誕生日とかではないらしい(この前のコミケで直接質問してくれた友人情報)
  • 5/7 情報処理部イベント
    • 多分3回目の情報処理部イベント
    • 開演前にかおり監督と小倉Pと観客みんなでOVAを実況する時間があって楽しかった
    • イベントはまあそんなにいいかな……と思ってはいても、やっぱり行ってみると最高という気持ちになりました
  • 6/25 きららファンタジアと初期参加作品にゆゆ式があることが発表される
  • 8/27 原作9巻発売
    • 8巻からは1年2ヶ月ぶり
    • 毎月8P掲載だと1年1ヶ月毎に出るが、この時期は縮小掲載が多かったので致し方なし
    • 表紙の唯ちゃんとおかちーを見るだけで、あーーっとなれる逸品
  • 10/6 種田梨沙さんが仕事への復帰を報告
  • 10/22 きららファンタジア事前登録記念でニコ生一挙放送
    • 1年で2回もあるだと……
  • 11/1

  • 11/4 三上カルデアのタマモキャットが絆レベル10になる

  • 11/11 縁さんと三上先生の誕生日
    • めでたい
  • 12月中 きららファンタジア稼働開始
    • らしいです
  • 12/1-12/25 ゆゆ式Advent Calendar2017開始
    • めでたい
    • 今年もよろしくお願いします
  • 12/31 冬コミにて三上先生と弘崎さんのサークル、クラスメイトショック出展
    • 冬コミは久しぶりに私がサークル申し込みしてないので帰省の予定を立てたらこれだよ
    • 行かないのでちゃんと調べてないけど多分3日目なんじゃない?

そして、来年の1月にはなんと、ゆゆ式連載10周年!(平成20年2月号かららしいので合ってると思う)

縮小掲載はあれど、ここまで(多分)休載なしで続いてきた漫画として存在感がすごいことになっていますね。これからもゆゆ式の世界を拡充していってもらいたいです。3年生に進級してもいいのよ……?

2017年のゆゆ式まとめ

f:id:esuji5:20171201010854p:plain

それでは、今年もゆゆ式を、きららファンタジアを、Advent Calendarをよろしくお願いします。

夏コミ及びPyCon Jp 2017に参加してきました

私です。どっこい生きてます。今更ですが、夏コミ及びPyCon Jp 2017に参加してきましたのでご報告エントリです。

夏コミはサークル参加で「Google Cloud Vision APIOCR結果を『日本語』にする技術」という件で新刊を発行しつつ、ゆゆ式合同誌の『ゆゆすき 4期』には「『OVA の絵柄は原作の何巻に似てるのか?』を深層学習で確かめる」というタイトルで4ページ寄稿させていただきました。

また、PythonのカンファレンスであるPyCon Jp 2017ではPythonで実現する4コマ漫画の分析・評論 2017というタイトルで30分のトークセッションをさせていただきました。

これらの資料を作る際に使用したJupyter notebookを公開しつつ簡単に説明をしていきます。

夏コミ:「Google Cloud Vision APIOCR結果を『日本語』にする技術」

4コマ漫画のデータ化をしていくにあたって、セリフの抜き出しをGoogle Cloud Vision APIOCRで行っています。縦書きの日本語に対して良い結果が得られますが、そのままで「日本語」として扱えるかというと微妙なので様々なクリーニングを行います。その手法について説明した本になります。

ただ、結果をそのまま使うと以下の点で問題があります。
- 文字ではない絵の部分が余計な文字として認識される
- 言語を指定しなくても日本語縦書きを認識するが、逆に横書きとして認識される場合もあって煩わしい
- 吹き出し外の手書き文字がの精度が悪い
- 上下で2つの吹き出しに分かれている場合、右上から下に向かって走査されるため、順番がおかしくなる
- 特殊なフォントでは文字列の誤検出になる確率が高い
- 傍線やリーダー点のような記号の区別精度が悪い

下2つはOCRそのものの性能ということで諦めますが、それ以外はプログラムでなんとかなりそうなので頑張ったというものです。方針は以下の様なものです

- ルールベースでとにかく余分なものを排除していく
  - 無効な文字の設定(例:英数記号のみ)
  - 横長の検出部を排除
  - 細すぎる検出部は除外文字(例:1, へ, ー等)以外なら排除
  - 吹き出し外の文字を判定して除外
- 吹き出しの結合
  - 吹き出し判定を行い、真ならそのエリア内の文字列を結合
  - 縦に吹き出しが分かれている場合も頑張る

以下が一般的な画像とOCR結果です

'野々原家\n独特の\n(ヘ\nなんか?\nあつやだ\n恥ずかしい!) e®\nし!\n家の事\n恥ずかしい\nし!\n'

これが上の処理を行うことで

1: 野々原家独特のヘなんか?
2: あつやだ恥ずかしい!家の事恥ずかしい!

のようなまあまあマシな日本語になりました。よかったですね。

コードはこちらのgistを参照してください。

ゆゆすき 4期:「『OVA の絵柄は原作の何巻に似てるのか?』を深層学習で確かめる」

毎年恒例になりつつあるサークルLavenderBlue様主催のゆゆ式合同誌である『ゆゆすき』に参加させていただきました。他の方がイラストや漫画を描かれている中、ドーンと文章が出てくるのはご愛嬌。

自分のサークルでは漫画に絞って4コマ×プログラミングをやっているので、こちらではフリースタイルということでアニメにも手を伸ばしてみました。執筆時期的に私が簡単なCNNを扱えるようになっていたのとOVAの発売があったことからこのネタを思いつきました。 f:id:esuji5:20170919153831p:plain
1巻から7巻まで、このように原作の絵柄が変化していくので、 f:id:esuji5:20170919153838p:plain
アニメのTVシリーズ(1,7,12話)及びOVAの絵柄がどこに近いのかを原作1~7巻までに分類しようという試みです。詳しくは同人誌の中身を参照してください。 コミックZINさんの店舗及び通販で委託されています。

コードはこちらのgistを参照してください。

PyCon Jp 2017: Pythonで実現する4コマ漫画の分析・評論 2017

昨年に引き続き、PyCon Jpでのトークセッションを行いました。Pythonのカンファレンスなのに4コマ漫画の話がたくさんでてくる変わり種トーク部門になります。4コマ漫画の分析・評論をプログラムで行うためには画像処理、機械学習、深層学習、自然言語処理(まだたいして使ってない)、分析等が扱えると良いのですが、Pythonならライブラリが揃っているので一気通貫にできるよ!というロジックでプロポーザル(こんな内容でトークするよという提案)を通していただけました。今年は100個以上のプロポーザルがあった中で、最初の選考である40個に選ばれたので、いい具合に需要を喚起できたのかなと思いました。 内容は、上記の「Google Cloud Vision APIOCR結果を『日本語』にする技術」に加えて、人物検出をdlibでやったけどうまくいったかよくわからんねという話、人物分類をCNNでやってみたけどデータが少なすぎてどうにもならなかった話、それにかこつけてゆゆ式を布教してきたという感じです。

コードはこちらのgistを参照してください。