記憶:StableDiffusionからtxt2img(0)

やったこと

話題の画像AIを触った。
今回触ったのはOptimized Stable Diffusionのtxt2img。
github.com
これにした理由はググったら出てきたから。

なお、python3.7でなんかよく分かんないけど動かした。あとconda環境ですらない。
yamlファイルを開いて必要そうななんやかんやをインストールした気がする。
以下は確かyamlファイルから抜粋したはず。

{'name': 'ldm', 'channels': ['pytorch', 'defaults'], 'dependencies': ['python=3.8.5', 'pip=20.3', 'cudatoolkit=11.3', 'pytorch=1.11.0', 'torchvision=0.12.0', 'numpy=1.19.2', {'pip': ['albumentations==0.4.3', 'opencv-python==4.1.2.30', 'pudb==2019.2', 'imageio==2.9.0', 'imageio-ffmpeg==0.4.2', 'pytorch-lightning==1.4.2', 'omegaconf==2.1.1', 'test-tube>=0.7.5', 'streamlit>=0.73.1', 'einops==0.3.0', 'torch-fidelity==0.3.0', 'transformers==4.19.2', 'torchmetrics==0.6.0', 'kornia==0.6', '-e git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers', '-e git+https://github.com/openai/CLIP.git@main#egg=clip', '-e .']}]}

生成

「A magical girl named Queen of hatred」

元ネタはロボトミーコーポレーションのO-01-04-W、憎しみの女王。


こういうバケモノ感のあるものを期待していたのでそうそうそんな感じになるよね〜という気持ちになった。

結構綺麗な感じの魔法少女も出た。後に「顔とか目とかが隠れていると結構いい感じに見えるかもしれない」という話をフォロワーさんとしたが、その通りだと思う。

全体的な感想としてはQueenに引っ張られた感じがしてHatredの要素はあんまり感じなかった。QueenとHatredが近いワードの可能性があるのかなぁとか思ったけどBERT詳しくないからわからん。(このAIはBERT使ってるとかいう噂も聞いた。違ってたらごめんなさい。)

「A monster named NothingThere」

こちらも元ネタはロボトミーコーポレーション。バケモノを期待してたからどうしてもこのゲームが真っ先に思いついちゃうのよね。

特に気になったのはなかったが、今回の結果では全体的にカードゲームモチーフのものが多いような気がした。MtGとかにそんなに触れてないので似てる気がする程度の認識ができないけど。

余談

せっかくだし動画の背景とかに使えたら面白いんじゃないかなぁって出力画像のサイズを変更して実行してみた。

……が、HD以上の画像サイズだとメモリ不足で動かなかった。悲しいね。

……と思っていたら(調べていないので)なんかわからんが「RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 16 but got size 15 for tensor number 1 in the list.」ってエラーが出た。やる気があれば後で調べておきましょう。

破壊したもの

  • PC*1のpython3.6環境
  • Sudachipy関連
  • tensorflow-gpuとnumpyだっけ?の互換性
  • pytorch環境を再構築したのでこれも破壊した

*1:CefaSipo

メモ書き:なんとなくビルドするのはやめよう(import Error)

何が起きたか








Who 私が
When/td>
今日、Transformersをimportしようと思い実行した際、
Where (自宅ノートPC*1で)
What
Why 複雑怪奇なビルド設計をしていたため
How ImportError: cannot import name 'ViTForImageClassification'が出てしまった。

問題点

  1. jupyter上でインストールとアンインストールを繰り返した
  2. ググって原因の調査を行ったが、「import transformersの綴りはあっていますか?」といった記事が多くてキレて近くにあった鉛筆を破壊した。
  3. sys.pathを用いて参照元を調査し、直前にインストールしたものとは違うものを見ていたことを把握した。が、何を思ったのかそのフォルダを削除した。
  4. おそらく、これによって(?)、エラーがImportError: (unknown location)に変化した。

雰囲気による解決

  • jupyterを閉じ、仮想環境をactiveにし、そこでアンインストール&インストールを行った。

どうするべきだったか。

  • なんとなくビルドするのはやめよう
  • 過去にsys.pathに追加を行っていた形跡があった。その場のノリと雰囲気だけで気軽にsys.pathに追加を行うべきではない。
  • キレても物にあたらない。

根本的解決と再発防止

piyo.__path__を使えば、importしたパッケージpiyoのパスを知ることが出来る。

この引用元の記事にも書いてありました。
なんとなくビルドするのはやめよう

備考

本記事は健常者エミュレータ事例集に大きく影響を受けた。
healthy-person-emulator.memo.wiki

*1:Quartavia

CRYSTAR思装一覧(兼進捗のメモ書き)

CRYSTARというゲームがあります。
store.steampowered.com
めちゃくちゃ(ストーリーが)面白いゲームなのでやってください。イラストもきれいですし、BGMもとてもいいです。語彙力が足りないのでこれ以上の魅力は伝えられません。今すぐとは言いません。セールの時でもいいから買ってプレイしてください。でも全実績解除するのは苦痛だからやらなくていいよ。ちゃんと最後までストーリークリアすればそれでいいから。
あ、あと思装一覧を書いています。なので、ネタバレを嫌う人はこの記事を閉じて、CRYSTARの死者回想録を完成させてください

続きを読む

Sudachiの形態素解析の品詞詳細メモ

そうだ、正規化しよう。

なお、この記事は自然言語処理の専門家でもなければ日本語の専門家でもない存在が書いています。大量に間違いがあるかもしれませんのでもしあなたがこの記事を参考にしようと思った際は気をつけてください。主に未来の私。

サンプルデータを雑にSudachiで形態素解析して得られた認識の一覧をメモしておく。
なお、サンプルデータは271108のTwitterテキストデータで、17978種類の単語からなっている文の集まり。

for y in tokenizer_obj.tokenize(x, tokenizer.Tokenizer.SplitMode.C)
     y.part_of_speech()

形態素解析を行うと、上記のy.part_of_speech()で品詞とかなんやらが得られる。
動詞,一般,*,*,五段-ワア行,終止形-一般
↑のような形をしている、品詞とかなんやらをpospとこの記事では呼んでいる。

全部まとめた印象としては、

  • pospの0番目は「品詞名」
  • pospの1番目は「区分1」
  • pospの2番目は「区分2」
  • pospの3番目は「区分3」
  • pospの4番目は「活用の種類」
  • pospの5番目は「活用形」

が入っているという認識をしている。

活用する品詞

国語のお時間です。

  • 動詞・助動詞・形容詞・接尾辞の一部の4つが活用する

形容動詞は……?

形容詞

  • pospの0番目は「形容詞」
  • pospの1番目は「一般」と「非自立可能」に分かれていた。
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は活用の種類が入っていた。活用の種類として「形容詞」「文語形容詞-ク」「文語形容詞-シク」が入っていた。他にあるかは不明。
  • pospの5番目は動詞や助動詞と同じような活用形が入っていた。

助動詞

  • pospの0番目は「助動詞」
  • pospの1番目は「*」が入っていた。
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「下一段-タ行」「五段-ワア行」「助動詞-タ」「文語下二段-ラ行」「文語助動詞-ズ」のような活用の種類が入っていた。
  • pospの5番目は「未然形-一般」「命令形」「仮定形-融合」「意志推量形」「已然形-一般」「語幹-一般」のような活用形が入っていた。

接尾辞

  • pospの0番目は「接尾辞」
  • pospの1番目は「名詞的」「形状詞的」「形容詞的」「動詞的」に分かれていた。
形容詞的接尾辞・動詞的接尾辞
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は活用の種類が入っていた。活用の種類として「形容詞」「下一段-ナ行」「五段-マ行」「五段-ラ行」「上一段-マ行」が入っていた。他にあるかは不明。
  • なお、確認した限りでは形容詞的接尾辞の活用の種類は「形容詞」、動詞的接尾辞の活用の種類は「下一段-ナ行」「五段-マ行」「五段-ラ行」「上一段-マ行」になっていた。
  • pospの5番目は動詞や助動詞と同じような活用形が入っていた。「意志推量形」は見当たってないが……

動詞

  • pospの0番目は「動詞」
  • posp1番目は2つに分かれていたっぽい。動詞は「一般」と「非自立可能」に分かれているらしい。
  • 「非自立可能」な動詞は「終わる」「ある」「なる」「やる」「くださる」とかそういったものらしい。
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「下一段-ア行」のような活用の種類が入っていた。
  • pospの5番目は「連用形-一般」「終止形-撥音便」「仮定形-融合」「意志推量形」のような活用形が入っていた。

活用しない(もしくは活用が確認されなかった)品詞

なお、今回形態素解析を行った際に空白が入っていない文章を使っているため、もしかしたらpospの0番目が「空白」となっている品詞があるかもしれない。

BOS/EOS

これは私が設定した気がする。

  • pospの0番目は「BOS/EOS」
  • pospの1番目は「BOS」または「EOS」が入っている。
  • pospの2番目は「*」が入っている。
  • pospの3番目は「*」が入っている。
  • pospの4番目は「*」が入っている。
  • pospの5番目は「*」が入っている。

感動詞

  • pospの0番目は「感動詞
  • pospの1番目は「一般」または「フィラー」が入っていた。
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。

記号

  • pospの0番目は「記号」
  • pospの1番目は「一般」または「文字」が入っていた。
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。
posp[1]:一般 の例
  • 「っ」
  • 「ゃ」
  • 「O」*1
  • 「ヴ」*2
  • 「ゅ」*3
  • 「ゆ」*4

何をもって一般としているのかは分からなかった。

posp[1]:文字 の例
  • 「¥」
  • 「Ω」*5
  • 「Τ」*6
  • 「オメガ」
  • 「しゅ」*7

何をもって文字としているかは分からなかった。

形状詞

  • pospの0番目は「形状詞」
  • pospの1番目は「一般」「タリ」「助動詞語幹」が入っていた。
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。

特に「タリ」に区分されているものは形容動詞に似ているようなそうでもないような……

助詞

  • pospの0番目は「助詞」
  • pospの1番目は「格助詞」「係助詞」「終助詞」「準体助詞」「接続助詞」「副助詞」が入っていた。
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。

接続詞

  • pospの0番目は「接続詞」
  • pospの1番目は「*」が入っていた。
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。

接頭辞

  • pospの0番目は「接頭辞」
  • pospの1番目は「*」が入っていた。
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。

接尾辞

  • pospの0番目は「接尾辞」
  • pospの1番目は「名詞的」「形状詞的」「形容詞的」「動詞的」に分かれていた。
名詞的接尾辞
  • pospの2番目は「一般」「副詞可能」「助数詞」「サ変可能」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。
形状詞的接尾辞
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。

代名詞

  • pospの0番目は「代名詞」
  • pospの1番目は「*」が入っていた。
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。

副詞

  • pospの0番目は「副詞」
  • pospの1番目は「*」が入っていた。
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。

補助記号

  • pospの0番目は「補助記号」
  • pospの1番目は「一般」「読点」「句点」「括弧開」「括弧閉」「AA」が入っていた。*8
  • 「AA」以外ではpospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。
AA
  • 「AA」ではpopsの2番目は「顔文字」または「一般」が入っていた。

AAに含まれていた単語は以下のもの。

  • 「^^」:顔文字
  • (´・ω・`)」:顔文字
  • 「^^」:顔文字
  • 「(´・ω・`)」:顔文字
  • 「^q^」:顔文字
  • 「orz」:一般*9

名詞

  • pospの0番目は「名詞」
  • pospの1番目は「固有名詞」「助動詞語幹」「数詞」「普通名詞」が入っていた。
固有名詞
  • pospの2番目は「一般」「人名」「地名」が入っていた。
  • 「人名」の場合、pospの3番目は「一般」「姓」「名」が入っていた。
  • 「地名の場合、」pospの3番目は「一般」「国」が入っていた。*10
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。
助動詞語幹・数詞
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。

連体詞

  • pospの0番目は「連体詞」
  • pospの1番目は「*」が入っていた。
  • pospの2番目は「*」が入っていた。
  • pospの3番目は「*」が入っていた。
  • pospの4番目は「*」が入っていた。
  • pospの5番目は「*」が入っていた。

*1:おそらく「O-01-04」のような文字列を分解して生じたものと思われる。

*2:これは固有名詞の可能性がある。

*3:おそらくこれは固有名詞の間違い。271108にこう呼ばれている人物がいる。

*4:おそらくこれは固有名詞の間違い。271108にこう呼ばれている人物がいる。余談だがゅと同一人物。

*5:ギリシャ文字全般がこうなっていた

*6:分かりにくいがこれはタウ。Tではない。

*7:原文であるかは分からないが、これを含む文章を生成させたところ、「しゅがーまーがりんとか恐ろしそうなワードが見えた」と出力された。おそらく「シュガーマーガリン」をひらがなで書いたことの弊害。正規化、しよう!

*8:なお、今回のデータでは括弧開と括弧閉の数が釣り合っていない。「’」と「>」に対応する括弧開がなかった。なんとなく括弧としてこれらの記号を使っていない気がする。

*9:まぁ確かに顔文字ではないわな。

*10:「NZ」をニュージーランドであると認識しているのか、国として分類していた。

進捗確認:20220704

271108.hatenablog.com
↑これの進捗確認と優先度確認です。

前提

沢山の文(と言うかツイート)をなんやかんやして集める、と言うか集めてる。別にAmesiorineさんのお仕事は1時間に1回トンチキなことをツイートするためだけじゃあないんですよ。

変更点はなし。

271108の知識関係なく考えること

対話システム、乃至発言システムというのはどうにも常識外れのことを発言してしまうものです。そのため、Amesiorineにはある程度賢そうに見えない設定が必要になるでしょう。天才そうに見えているのにすっとぼけたことを言うとがっかりしますからね。アホの子がアホなことを言っても「かわいいね」で済みますが、スーツ着た偉そうな人があほなことを言うと叩かれるようなものです。(本当?)
そのため、幼めの設定が必要になるはず。
あとは271108の趣味でいいでしょう。設定資料作ったら誰かに絵とか頼むか?

進捗ダメです。真面目にやれ。

バグ修正

多分今エミィなんも食べてない。
・DailySwallow()
・CanAmyEatThisTextList(d)
・swallow(c)
多分この辺にミスがあるっぽいので確認。
↑対応済

バグ修正できてえらい。

アップデート:BeTSCAE

  1. 作った文章を全部記録したほうがいいかも。
  2. テキスト生成の評価指標があったはず。これで作った文章の評価していいかも。
  3. 生成した文章の単語を置き換え*1てもいいんじゃないかな。単語スワップLSIとかで複数パターンできたりしない?

どれもやっていません。カス。

特定の単語から文章生成を開始することってできない?

案1
  1. 特定単語から開始
  2. 後ろへ展開していってEOSで終わり。
  3. 今度は特定単語から前へ展開していってBOSで終わり。
  4. できたものを出力

↑これだと、つなぎ目の部分が崩壊するかもしれない

案2
  1. 特定単語を真ん中に持つMDを持ってくる
  2. そのMDから案1と同じように展開して出力

案2で実装しました。えらい。まだエミィに組み込んでいません。
理由は「ありきたりでない単語を選ばなくてはいけないが、ありきたりでない単語の区別ができていないため」です。さっさと実装しろ私。

単語スワップ:BeTSCAE内

単語スワップ構想案
  1. 該当単語達がw2vにあるか確認する
  2. 単語の稀少度(IDFとか?)を算出?
  3. 1番稀少な単語を入れ替える
  4. 2番目に稀少な単語*2をw2vとかの足し算引き算してそれっぽく置き換える。

2の補足:IDFを使ってその文章の中で希少単語がどれかを調べる。(順位付をする?)

単語スワップ:BeTSCAE大幅改築

  1. マスク単語推定(正しくは何て言うんだっけ?BERTとかRoBERTとかT5みたいなのでできるやつ)をして文を書き換えるのができるかも。
  2. これと単語スワップでデータのカサ増しができるかも?
  3. カサ増ししたものも、目視だけじゃなくて、テキスト生成の評価指標あったはず、それかなんかである程度判定できないかな

ここまで読み返した私なら分かってると思うけど実装されているわけがありません。

未検討

  1. 格フレームってものがあったはず。用言とそれに関係する名詞とか助詞とかなんかだったような。
  2. MAUVE?

やってるわけないじゃん。

対話システム

まだそもそもデータを集めていない。

  1. 271108とエミィのリプライだけでもいいしそれ以外も集めてもいいかも。もっとも、遠くの人のデータまで集めに行くのはめんどい。

同じようなデータを集めないといろいろ面倒かもしれない。

やってるわけないじゃん。

データ整備

  1. DBDC対話破綻検出。対話が破綻しているかどうかのモデルを作るならこの辺?

やってるわけないじょん。
ところでこういう人間なら例えばボイロ動画のコメントとかで「○○じょん」ってなってると「○○じゃん」って意味だよなぁって分かるけどこれって機械はどうやるんだろう。これ大学とか研究所案件か?

追加の思い付き

GPT-2

前回の思い付きメモにはなかったこと。
GPT-2使って文章生成するとかエミィに食べさせる文章増やすとかできない?って思ってGPT-2に触れてみた。ある程度の汎用性のある私のツイートデータでファインチューニングを行ったものの、「『140字以内で文章を止める』の設定を行わなかった」か「そもそも140字以内だけの文章という思想が間違っている」のどちらかの要因により期待したようなものはできなかった。期待してたレベルも低かっただけにそれ以下か……という思いはあるけどまあしょうがないね。

ツイート要約

これはまだ完全に思いつき。
文字通りバラバラのツイートを集めて文章にした場合って要約できるのかな……?

BeTSCAE追加

出現回数について、いい加減考えませんか?思ったよりBeTSCAEも重くなさそうだし。

メモ

https://twitter.com/271108_/status/1547282555699081216?s=20&t=62-jJTm0iWdezxPdmYfokg
271108.hatenablog.com


https://twitter.com/271108_/status/1547331502962507776?s=20&t=ee9JCAGFQUPTbJm
先に後ろの「語」との活用が一致するかの確認がいるはず。typo


↑エミィのキャラ設定決められないんなら自動で生成して選ばんか?



その他

zenn.dev

twitter.com

*1:以降、「単語スワップ」と呼ぶ

*2:ただし、1番稀少な単語とは別単語