1 時間で振り返る 2023 年と hsjoihs
どうも、締切ドリブンで人生を回している hsjoihs (はすじょい) と申します。
現在 22:58、日本時間で 2023 年が残り 1 時間になったタイミングで、なんか 2023 年の振り返りをしたくなったので、書きます。23:59 ぐらいに投稿するんじゃないかな。
3月
スタンフォード大学の卒業要件を満たしました。
よし、これで 3 つの学科の卒業要件を満たすために必要なものは全て提出できたはず!
— はすじょい (hsjoihs) (@hsjoihs) March 25, 2023
いや~長い 6 年だった(安心するにはまだ早いぞ、学位授与が確認できるまでは確実なことは言えない) https://t.co/sPpDqN4kEv
物理学科から I have verified and confirm you have completed all of your courses to confer you B.S. in Physics winter quarter. との連絡があった。やったね
— はすじょい (hsjoihs) (@hsjoihs) March 27, 2023
ということで、寮から出る準備をし、
立つ鳥立つときだけ跡を濁さず(荒れ果てていた部屋だったが、フライト 6 時間前になってやっと片付け始め、なんとかきれいにして寮を出ることができた)(今は空港に向かっています) pic.twitter.com/RdFgUJbjOo
— はすじょい (hsjoihs) (@hsjoihs) March 30, 2023
普段引っ越し前日は寝ないのだが、今回に限ってしっかり寝たのでフライト 6 時間前から片付けを始める羽目になったわね https://t.co/Z4QzogJQEt
— はすじょい (hsjoihs) (@hsjoihs) March 30, 2023
さてそろそろフライト。ちゃんと搭乗時刻にも余裕で間に合ったし、
— はすじょい (hsjoihs) (@hsjoihs) March 30, 2023
数学科(学部)
物理学科(学部)
応用・工学物理学科(修士)
の 3 つから卒業要件を満たしている旨の連絡も来ているし、とりあえずなんとかなったな…… https://t.co/W1ZaID6GPr
帰国しました。
4月
株式会社ドワンゴに入社しました。
入社月だけツイート数が少ない。
はすじょい (hsjoihs)(@hsjoihs) - Twilog
そして学位が授与されました。
・数学科(学部)
— はすじょい (hsjoihs) (@hsjoihs) April 7, 2023
・物理学科(学部)
・応用・工学物理学科(修士)
の学位を同時に獲得する卒業に成功しました。この 6 年間、私といろいろお話しして支えてくださった皆様、本当にありがとうございました。 pic.twitter.com/iVjhWgNhZs
最初の 2 週間ほどは人事側の新卒研修がありました。
その後、配属先の発表があり、その際に
「実は大学を作ります」
と言われました。6 月 6 日まで口外禁止了解。
その後で新卒エンジニア研修がありました。新卒エンジニア研修については会社のほうで出ている記事があるので、興味がある人はどうぞ。
5月
ゲームマーケット春です。
つまり、そこに出展するための準備をいろいろしなくてはいけないということです。
弊サークルは「架空の言語と文化を作り、その文化のもとで伝統的に遊ばれてきたという設定のボードゲーム」とかを作っています。
ということで、今回は
「向こうの世界のボードゲーム・カードゲームなどについてまとめた、向こうの世界の言語と日本語で書かれた対訳冊子を書こう」
ということになりました。
こんな感じで。
ということで、ゴールデンウィークをフルで使って、これを書き上げて査読するなどしました。
6月
ZEN 大学が発表されました。
その後はスタンフォード大学の卒業式に出てきました。
炎天下の下で真っ黒な服と真っ黒な帽子を着用する謎イベントであるところの、スタンフォード大学卒業式
— はすじょい (hsjoihs) (@hsjoihs) June 18, 2023
私は数学科(学士)と物理学科(学士)と応用・工学物理学科(修士)を卒業したので、物理学科と応用・工学物理学科のほうの式典に出てきたのですが、数学科のほうの式典には 3Blue1Brown の Grant Sanderson が来ていたらしい。そんなぁ。
7月
新卒エンジニア研修をしていました。
あと、Kernel/VM探検隊@東京 No16 に対面出席しました。初の対面出席 Kernel/VM。
ちなみに、https://twitter.com/search?q=from%3Ahsjoihs%20until%3A2023-08-01%20since%3A2023-07-01&src=typed_query で検索したらマジで Kernel/VM の話しかしてなかったので、本当にこの 2 つ以外なんもしてなかったんじゃないかという気がしてきました。
そして、新卒エンジニア研修が 7/28 (金) に完了。 7/31 (月) から配属。
……なのだが、諸事情で 7/31 締めの業務が来てしまったので、
- 7/25 に書籍を選定
- 7/26, 27, 28 に研修の締めをやりつつ書籍を爆速読破
- 7/31 に出社して 12 時間モニタに向き合ってタスクを完了させる
というアクロバティックをこなすという。
8月
セキュリティ・キャンプの講師をやりました。
若干名刺を印刷しすぎた疑いがある pic.twitter.com/57w25z2hB7
— はすじょい (hsjoihs) (@hsjoihs) August 5, 2023
さて、セキュキャンの荷物準備進捗率、2%程度です……(名刺しかセットアップしてない) #seccamp https://t.co/9FEUjEcTYl
— はすじょい (hsjoihs) (@hsjoihs) August 6, 2023
と、到着……(張り切って荷物を持ってきすぎたので疲労困憊)
— はすじょい (hsjoihs) (@hsjoihs) August 7, 2023
というわけで、かなりの量の書籍があります。5 日間よろしくお願いします #seccamp https://t.co/NAJCbUPF6g
— はすじょい (hsjoihs) (@hsjoihs) August 7, 2023
— ポタージュ (@_2pt) August 8, 2023
唐突に部屋に来て「はすじょいさ〜ん、RustのPinの解説しにいっていただけます? 代わりにCコンパイラ班は見ておきますんで」が発生したのはとてもよかった https://t.co/Hq6Y6PvJCQ
— はすじょい (hsjoihs) (@hsjoihs) August 9, 2023
#seccamp 佐藤弘崇氏、高名典雅氏による『Cコンパイラゼミ』では、C言語のソースコードを受け取って対応するアセンブリを出力する「Cコンパイラ」をゼロから自作します。実装のためのテクニックやC言語の仕様に関するフォロー、豊富なテストの提供やデバッグ等様々な面で講師陣がサポートしています。 pic.twitter.com/wLlMakDfmO
— セキュリティ・キャンプ (@security_camp) August 10, 2023
セキュキャンが終わった後は、台湾に行きました。
私の場合は、事前に一切言わずに当日の午前 5 時とかにスーツケース持って「今から台湾行ってきま~す」をやったことがありますね
— はすじょい (hsjoihs) (@hsjoihs) October 4, 2023
親というのは一般にどうしても子を過度に心配しがちなので、「はい、行って帰ってきましたが、なにか?」という実績をさっさと積んでしまったほうが手っ取り早い https://t.co/kwFM5luR3a
これになっている(今から台湾に行きます) https://t.co/AC84GoBs2R
— はすじょい (hsjoihs) (@hsjoihs) August 13, 2023
と、いうことで、 @SyoteninMochiko さんと一緒に台湾に行ってきます https://t.co/KudnUpiGbF
— はすじょい (hsjoihs) (@hsjoihs) August 13, 2023
うおー台湾華語の第一声ってこんなに低くていいんだ
— はすじょい (hsjoihs) (@hsjoihs) August 13, 2023
初手で私に分かりうる表記全部に目を通して、次にアラビア文字が全部独立形であることを認識し、直後に「あ〜 marḥaban が書かれようとしていたのだなぁ」となり、最後に「なんで台北の転写を hā’ で終わらせてるんだ? 入声の反映か?」までは見てましたね https://t.co/7uB8sKses5
— はすじょい (hsjoihs) (@hsjoihs) August 22, 2023
これは九份で見かけたおもろい翻訳ミス。
翻訳依頼者と翻訳者の間で何らかのミスコミュニケーションがあったと推察される pic.twitter.com/7rRjemXoRC
— はすじょい (hsjoihs) (@hsjoihs) August 15, 2023
そしてその後は N 予備校の番組に出演。
今日はこれに出演します。ニコニコアカウントがある人は、https://t.co/crk3CVkWtg にアクセス → 「ログイン」 → 「ニコニコでログイン」で N 予備校のアカウントを作ったあと、 https://t.co/zEBp0jMhq8 にアクセスしてみてください https://t.co/FMR4DVdQ3a
— はすじょい (hsjoihs) (@hsjoihs) August 24, 2023
説明自体もどんどん加速させていく、加速度の説明 https://t.co/XGT8iBVAzi
— はすじょい (hsjoihs) (@hsjoihs) August 24, 2023
9月
主に業務にいそしんでいた。9 月だけはまともに紙の日記をつけていたので、行動記録が手元にはあるが、public internet に放出しやすいものが全然ないので割愛。
あ、「脳内ワンダーランド」に出演して架空言語創作の話をしたのが放映されたりした。
「脳内ワンダーランド」、BS朝日で現在放送中です!(私たちの出番は後半なので、たぶん私が出るのは 22:30 からとかだと思います) https://t.co/YXtAvjaZxD
— はすじょい (hsjoihs) (@hsjoihs) September 15, 2023
10月
「今年こそは無色透名祭Ⅱに出るぞ」という思いのもと、第一週と第二週の火曜と木曜に有給を入れ、曲作りにいそしんだ。
私は「無色透名祭Ⅱに楽曲を投稿したいので、その作業時間確保のために今週と来週は火曜と木曜に休みを入れます」みたいな使い方をしましたねhttps://t.co/oMZJ4I3pAW
— はすじょい (hsjoihs) (@hsjoihs) October 22, 2023
締切当日、なんとか提出。
提出~~~~~
— はすじょい (hsjoihs) (@hsjoihs) October 15, 2023
無色透名祭Ⅱに楽曲を投稿しました! https://t.co/K2ALWlDAxG #無色透名祭2 #無色透名祭2参加表明
あとは業務にいそしんだ。
11月
主に業務をしていた気がする。
12月
ゲームマーケットに再び出てきた。あとは業務をしていた。
年末は、PeriodiCode というのを書き始めた。
Nand2Tetris の ALU の設計が美しくて感動した話
tl;dr
nand2tetrisのALU設計が強すぎて困ってる
— クレイジーピエロ (@Cra2yPierr0t) May 24, 2019
これになっています これもう「正解」だろ https://t.co/El5zGNEdx1
— 【ゲムマ両サ-19】はすじょい (hsjoihs) / ヒンジ壊しP (@hsjoihs) October 26, 2023
ここまで本格的に感動したのは数年ぶりかもしれない
— 【ゲムマ両サ-19】はすじょい (hsjoihs) / ヒンジ壊しP (@hsjoihs) October 26, 2023
「人類とは独立に発生した知的生命体も、この ALU を思いつきうるだろう」という美と普遍性への執着を強く覚える。これは、すごい
— 【ゲムマ両サ-19】はすじょい (hsjoihs) / ヒンジ壊しP (@hsjoihs) October 26, 2023
これはなに
この記事はドワンゴ Advent Calendar 2023 の 7 日目の記事です。
Nand2Tetris ってなに
Nand2Tetris は、Nand to Tetris という意味であり、Nand ゲートという非常にシンプルな素子だけ*1を使ってテトリスを組み上げるという、すごいプロジェクトです。英語資料は https://www.nand2tetris.org/ から読むことができ、日本語版はオライリー・ジャパンから「コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方」というタイトルで出版されています。
ここでいう Nand ゲートというのは、
- 0 または 1 が 2 つ入ってくる
- 入ってきたのが両方 1 なら、0 を出す
- それ以外が入ってきたら、1 を出す
という振る舞いをする、なんらかの代物です。
この「なんらかの代物」が如何なる物理的実体によって実現されているかはどうでもよく、ただ単にその機能を果たしてくれる素子がめちゃめちゃたくさん与えられたときに、そいつらをうまく組み合わせてテトリスを実装しよう(そして、その過程でコンピュータがどんな仕組みで動いているのかの全体像を把握しよう)、というのがこのプロジェクトです。
ものすごく壮大に見えると思います。実際、だいぶ壮大です。欲張りとも言えるでしょう。
しかし、この本は非常によくできていて、この「Nand からテトリスを作るぞ」というコンセプトの実現のために最低限必要な部分だけを本当に上手く抽出し、短くまとめ上げています*2。
実際に紙の本を買うとこのまとめ上げっぷりのすごさが如実に分かります。なんと、厚みにして 2 cm ほどしかありません。ページ数も 400 ページを切っています。
この 21 cm × 15 cm × 2 cm、体積にして 630 ml の中に、Nand とテトリスとその間にあるあらゆるものが非常に上手に詰め込まれているのは本当にすごいことです。
特にその中でも、第 2 章で登場する ALU(算術論理演算器)が非常に美しく思えたので、それについて書いていこうと思います。
ALU
ALU (Arithmetic Logic Unit) とは、雑に言うと CPU の中で計算を担当してくれるやつのことです。
Nand2Tetris で作られる CPU は 16 ビット CPU なので、入ってきた 16 ビットの値 2 つをもとに計算をして、新たな 16 ビットの値を作るというのが主目的になります。
これは組み合わせ回路として作られます。つまり、内部状態・記憶・フィードバックループといったものを一切持たず、「Nand ゲートを使い倒して、入力として入ってきた 0 や 1 をもとに、新たな 0 や 1 を作っていく」ということだけが許されています。
そして、Nand2Tetris においては、この設計が本当に上手い。
書籍の本文にも
最小限の内部パーツだけから構成されてはいるが、それにもかかわらず、非常に多くの機能を持つ。それゆえ、その論理設計は「効率さ」と「簡潔さ」を示す良い手本になるだろう。 ―「コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方」p.34
という、作者本人による自画自賛が書いてあります。実際めちゃめちゃ良い手本だと思います。
Nand2Tetris の ALU 設計
さて、ここからが本題です。
Nand2Tetris の ALU はどんな設計になっているのか。
C 言語で書くと、こんな感じの設計です(フラグについては後述)。
#include <stdint.h> #include <stdbool.h> uint16_t ALU(uint16_t x, uint16_t y, bool zx, bool nx, bool zy, bool ny, bool f, bool no) { x = zx ? 0 : x; x = nx ? ~x : x; y = zy ? 0 : y; y = ny ? ~y : y; uint16_t o = f ? (x+y) : (x&y); o = no ? 0 : o; return o; }
つまり、
- 入力として x や y を使うか、それともそれを無視して代わりに 0 を入れるかを選択するフラグ、zx と zy がある(ステップ 1)
- ステップ 1 を経由してきた入力を、ビット反転(0→1, 1→0)するかしないかを選択するフラグ、nx と ny がある(ステップ 2)
- ステップ 2 を通過した 2 つの入力を、「足し合わせる」のか「bit ごとに AND を取る」のかを選択するフラグ、f がある(ステップ 3)
- ステップ 3 で計算された値を、ビット反転するかしないかを選択するフラグ、no がある(ステップ 4)
- ステップ 4 で計算された値を出力する
という設計です。
この設計の面白さとして、「非常に簡潔でありながら、やたら多くの機能を提供できている」というのがあります。
この zx, zy, nx, ny, f, no の 6 種類のフラグを切り替えるだけで、なんとこの ALU は
- 何が入ってきても、定数 0, 1, -1, -2 を出力する回路
- x と y を足し引きする回路
- x と y に対して bit ごとの OR や AND などを計算できる回路*3
- x+1, x, x-1, y+1, y, y-1 を計算できる回路
- -x, -x-1, -x-2, -y, -y-1, -y-2 を計算できる回路
- x+y+1, x-y-1, -x+y-1, -x-y-1, -x-y-2 を計算できる回路
として振る舞うことができるのです。
なお、Nand2Tetris の ALU は、出力値と同時に「その出力値が 0 と等しいかどうか」「その出力値が負の数かどうか」という情報も出力してくれるようになっています。
なぜこれで上手くいくのか
こんなにも上手くいく理由は、専門的にいうと「2 の補数表現においては、x をビット反転したものは -x-1 であるから」と言えます。
専門的ではない言い方もしておきますか。ということで、その説明のために突然話題を変えることにします。
「6832 円の支払いに対して、1 万円札を出した時のお釣りの計算」をパッと暗算できるようになると便利ですね。
それを素早くやるためのテクニックとして、「1 万円から 6832 円を引き算するのではなく、先に 9999 円から 6832 円を引き算して後で 1 円を足す」という手があります。
9999 から 6832 を引くのは、繰り下がりが発生しないので、
9-6 → 3
9-8 → 1
9-3 → 6
9-2 → 7
とすればよいですね。
慣れてくると、6832 と見ただけで、それぞれの桁を 3167 と変換できるようになるでしょう。
ということで、「足して 9 になるような数」へと各桁を変換して、最後にその結果に 1を足したものが、1 万円を支払ったときのお釣りになります。
「先頭に 1 があり、その後ろに 0 が並んだ、キリの良い数」からの引き算をするときには、いつでもこのテクニックが使えます。
さて、16 ビット整数を使った 2 進法の計算をするときに、このテクニックを使うことを考えると、「0 → 1、1 → 0」という変換を各桁にかますというのは、この「ピッタリの数から引き算をする操作」のうち、最後に 1 を足す操作をしなかった、というのに相当します。
ということで、-x-1 になるんですねぇ。
別れの挨拶
本当はもうちょい説明したいんですが、22:00 に退勤したいので、ここで筆をおくことにします。締切ドリブン執筆。
私の「うたよみん」活動歴バックアップ
概要
短歌投稿サービス「うたよみん」が2023年3月末日でサービス終了する。
https://www.utayom.in/u/90bc7a52 の 10 件の投稿と、9 つの「よいねした歌」をここに貼ることで、私の「うたよみん」での活動歴をバックアップする。
なお、うたよみんの UI では「1 年前」などと表示されるため、投稿日時は取得不可能かと思ったが、開発者ツールで見ると <span class="time" style="font-weight: normal; font-size: 11px; color: rgba(0, 0, 0, .4)" time="2022-02-07 16:38:58 +0900">1年前</span> などと書いてあるため復元可能。
私の投稿
サ終するまでは https://www.utayom.in/u/90bc7a52 で確認できる。
投稿日時: 2022-02-08 15:59:49 +0900
本文: 湯を注ぎ 即座にできる お味噌汁 海外勢の お供マルコメ
リンク: https://www.utayom.in/t/568ded57
説明など: 食堂に行き損ね、コンビニというものもない環境で、手元にマルコメの即席味噌汁があると便利。
投稿日時: 2022-02-07 16:38:58 +0900
本文: 漢字音 マジで身近な蟻地獄 なんもわからん なんもわからん
リンク: https://www.utayom.in/t/5da7bddc
説明など: 日本語話者にとって非常に身近な存在である漢字音(要は漢字の音読みのこと)。これを手掛かりにすると漢字文化圏の諸言語を学ぶのが容易になるため、私やその周りでは諸言語の漢字音についてそれなりの理解を有している者が多いが、しょっちゅう「え?なんでこの字ってこの言語でこの読みになるの」を喰らう羽目になる。なんもわからん。
投稿日時: 2022-02-07 16:30:05 +0900
本文: アエネイス 数行だけを 暗記して 「ちょっとラテン語 やった」言う人
リンク: https://www.utayom.in/t/0991dff7
タグ: #語学 #ラテン語
説明など: 「アエネーイス」はラテン語の有名な叙事詩。ラテン語文法をあんましっかり身に着けていないが「アエネーイス」の冒頭だけは丸暗記している hsjoihs の現状を自ら皮肉る投稿。
投稿日時: 2022-02-07 15:54:27 +0900
本文: とりあえず またテキトーに 書いてみた 短歌を友に 見せる月曜
リンク: https://www.utayom.in/t/8b6ba16d
説明など: この日は Discord のボイスチャットですごい勢いで人々が短歌を書いては互いに見せあっていた。
投稿日時: 2022-02-07 15:51:48 +0900
本文: 横たわり 動画見る我 眠る我 時は流れる なにもせずとも
リンク: https://www.utayom.in/t/c913bf5c
タグ: #そして生活は続く #人生 #生きる
説明など: 進捗が出ず、ひたすら動画を見たり寝たりしかできないときってありますよね。
投稿日時: 2021-10-03 06:56:33 +0900
本文: 書店にて 興味惹かれぬ 本を見て 想う出版文化の裾野
リンク: https://www.utayom.in/t/20f66955
説明など: 興味ある本は Amazon とか Twitter が薦めてくれるが、興味のない本というのは大きい書店に行って本棚を眺めないと見ることができない。そして、本棚が上から下まで私にとって興味のわかないトピックで埋まっているのを見て、「そうだよな、社会を成り立たせるには当然こういう分野の本も必要であるわけだ」と思い、「その言語で出される書籍の裾野の広さがあってこそ、その言語での高度な社会運営が可能になるのだ」という畏敬の念を再確認する。
投稿日時: 2021-10-03 06:50:39 +0900
本文: 人はなぜ 本を書かずに 消えていく 有為の奥山 なお越え難く
リンク: https://www.utayom.in/t/91612dc0
タグ: #人生 #そう思ったのです
説明など: これほどまでに情報化した社会であっても、この世が無常であることには変わりなく、有限な人の命を超えて情報を伝えるには明示的に本やらを書く手間が必要になり、そのコストを支払わないと何事もいとも簡単に失われる。
投稿日時: 2021-10-03 06:38:30 +0900
本文: しょせん世は 神の走らす計算機 ユニタリ掛けて 進む年月
リンク: https://www.utayom.in/t/d2d89278
タグ: #物理学 #人生 #そして生活は続く #そう思ったのです #生きる
説明など: 数学科と物理学科のダブルメジャー(二重専攻)をやったことで、「まあ時の流れなんて結局は超巨大なユニタリ行列が掛かっていっているだけなんだよな」という人生観が得られた。
投稿日時: 2021-10-03 06:03:50 +0900
本文: 将来を見据え調べる同居人 機会追わずにただ過ごす我|はすじょい|うたよみん
リンク: https://www.utayom.in/t/7a76517a
説明など: 当時の私は、ルームメイトのパキスタン人が卒業を見据えて Optional Practical Training(学生をやったあとに発生する労働権)とかを調べて企業に連絡の電話とかしているのを横で聞いていた。
投稿日時: 2021-10-03 06:10:24 +0900
本文: 本棚と壁のあいだの九インチ 山と積まれる缶・紙・袋
リンク: https://www.utayom.in/t/ffab3444
説明など: いざ退去する日まで片付けを先延ばしにするタイプの人生を送ってきた。
よいねした歌
サ終するまでは https://www.utayom.in/u/90bc7a52/likes で確認できる。
私用領域を使って UTF-8 エンコードされた文字列にバイナリを埋め込む術
「ソースコードにアスキーアートや罫線文字使って図を頑張って書いて埋め込むのってめんどいことがあるよね」「どうして人類はプレーンテキストに画像も埋め込めるようにしておかなかったんだろうな」みたいなことを考えていたら、「私用領域を使って UTF-8 エンコードされた文字列にバイナリを埋め込もうとしたらどうなるかな」という発想に至った。ということで考えてみよう。
私用領域とは
https://www.unicode.org/versions/Unicode15.0.0/ch23.pdf によれば、私用領域 (private use area) とは
Private Use Area: U+E000–U+F8FF
The primary Private Use Area consists of code points in the range U+E000 to U+F8FF, for a total of 6,400 private-use characters.
Supplementary Private Use Areas
EncodingStructure.The entire Plane 15, with the exception of the noncharacters U+FFFFE and U+FFFFF, is defined to be the Supplementary Private Use Area-A. The entire Plane 16, with the exception of the noncharacters U+10FFFE and U+10FFFF, is defined to be the Supplementary Private Use Area-B. Together these areas make an addi- tional 131,068 code points available for private use.
とのことである。つまり、基本多言語面の「U+E000 以上 U+F8FF 以下」、第15面の「U+F0000 以上 U+FFFFD 以下」、第16面の「U+100000 以上 U+10FFFD 以下」が私用領域である。
ちなみに、上にも書いてあるとおり、U+FFFFE、U+FFFFF、U+10FFFE、U+10FFFF は私用領域ではなくて非文字 (noncharacter) という分類になる。今回の考察では、非文字を避けることを考える。
余談:非文字
ところで、そもそも「なぜ FFFE か FFFF で終わるコードポイントが全て非文字なのか」という点について気になったのでちょっと調べてみたところ、なんと 2001 年 10 月 1 日(20 年以上前!)のメーリングリスト http://www.unicode.org/mail-arch/unicode-ml/y2001-m10/0014.html に書いてあった。なんでも、Unicode と ISO/IEC 10646 を統合する過程で意図せず紛れ込んでしまった仕様であり、気づいた頃には既に直せなくなっていたから今も残っている、という経緯らしい*1。
> > BTW, it doesn't make sense for every code position
> > ending in FFFF or FFFE to be a non character.
>
>It doesn't make much sense, but it is the rule anyway.This crept in during the merger of ISO/IEC 10646 and Unicode, and when it was
discovered, it was too late to do anything about it.
やっていき
U+0800 以上 U+FFFF 以下のものを UTF-8 でエンコードすると 3 バイト消費する。基本多言語面の「U+E000 以上 U+F8FF 以下」はここに当てはまるので、6400 種 (= 12.64 bit) をエンコードするのに 24 bit が必要という計算になる。
U+10000 以上 U+10FFFF 以下のものを UTF-8 でエンコードすると 4 バイト消費する。第 15・16 面の「U+F0000 以上 U+FFFFD 以下」「U+100000 以上 U+10FFFD 以下」はここに当てはまるので、131068 種 (= 16.99995597 bit) をエンコードするのに 32 bit が必要という計算になる。
ということは、基本多言語面のやつのみを使うと 52.68%、追加多言語面のやつのみを使うと 53.12% の効率でエンコードできる。
「普通に 0-9, A-F の文字で 16 進数を書く」よりは若干効率よく、かつプレーンテキストと紛れることが一切ない*2となると、わりと面白い使い方ができるのかもしれない。
両方使った場合はどうだろうか。6400 + 131068 種 (17.0687 bit) をエンコードするのに、6400/(6400+131068)(4.6556%)の確率で 24 bit、それ以外において 32 bit を要するので、
53.96% か。じゃあまあほとんど上がらないということで。
結論
- 最初は全く使い物にならんかと思ったが、意外とアリな気がしてきた
- それなりには使えそうなので、いつか応用するかもしれん
拡散モデルに言語創作をしてほしいなぁ
この記事は創作+機械学習 Advent Calendar 2022 の 25 日目の記事です。ところで今は 2022 年 12 月 31 日です。おやぁ。
遅刻しておきながら、実際に計算機を回したりしているわけではない、ある意味少し的はずれな記事内容になってしまい申し訳ありません。一方で、比較的ユニークな話題をこのアドベントカレンダーに持ち込むことができるように努力したので、楽しんでいただければ幸いです。
なお、昨年度は 『架空世界の表意文字用の手書き文字認識を実装したい (part 1)』という記事で創作+機械学習 Advent Calendar 2021 に参加したのですが*1、今年の記事の内容はこの去年の記事と関連があるので、そちらも合わせてお読みいただけるとさらに楽しめるかもしれません。
以下常体で書きます。
- 想定読者層
- 言語は一様乱数列ではない
- 拡散モデル
- え、文章生成 AI はもうあるよね?
- どういうこと?
- 我々はどのようにして言語を作っているのか?
- 我々はなぜ言語を作っているのか?
- 拡散モデルが言語創作をしたら
- 絵と言語創作は何が違うか
想定読者層
以下のうちのどれかに当てはまる人。
- 人間が話す言語に興味がある人
- 機械学習、特に拡散モデルによる絵の生成に興味がある人
- 細かい設定を詰めた創作が好きな人
言語は一様乱数列ではない
言語は一様乱数列ではないということはマジの太古の昔から知られてきた。1843年に発表されたエドガー・アラン・ポーの小説「黄金虫」には、主人公が暗号を解読するのに、英文に登場するアルファベットは t や e がやたら多く z や x はかなり少ないという性質を用いる描写があり、この事実が人口に膾炙するきっかけの一つになった。また、言語を構成する要素の使用頻度の分布自体にも、20世紀前半の言語学者ジョージ・キングズリー・ジップが「ある言語で n 番目によく使われる単語は、一番使われる単語の n 分の 1 程度しか登場しない」という法則を発見した。
とはいえ、抽象的な話だけしていても面白くないので、読者にとって身近であると推察される日本語を例にして説明しよう*2。
日本語(の標準語)*3の文の音韻的構造を記述できる非常に雑 (crude) なモデルを紹介すると、
const 子音候補 = ["", "k", "s", "t", "ts", "n", "h", "m", "r", "w", "g", "z", "d", "b", "p", "f"];
const 母音候補 = ["a", "i", "u", "e", "o", "ya", "yu", "yo"];
const 特殊モーラ候補 = ["", "ん", "っ", "ー"];
とでも定義したとき、
- 「子音+母音+特殊モーラ」が繰り返され、「アクセント句」が作られる
- アクセント句の中の 1 個または 0 個に「アクセント核」が付与され、「アクセント核」より後からジェットコースターのように一気に音程が下がる
としてやると、日本語の音声*4をそれなりに表せるモデルになる。
具体例を挙げると、「ちょっと相談がありますので」という文は
(画像は OJAD - オンライン日本語アクセント辞書 を用いて生成)
というような構造になっているので、これを
と分析してやることで、先程のフォーマットに当てはめることができる。以下、これを略記して「ちょ]っと そーだんが ありま]すので」のように表すことにする。
さて、このフォーマットにだけ従って、残りを一様乱数で埋めるとどうなるだろうか。日本語になるだろうか。やってみよう。
- ぴょべ] でゅーせ]ー たんてぃっしょっよ]ん びゅぴ]っひょんうぃゃんばっ のっうぃゅんじゃふゅんふゃ]ー
- きでぃゃ]ーひょ ふぃっぎゃ]っぎゃーうぉっし うぃゃーひょ] げんふぁず]ん みょ
- ちゃーな]ー さーほ でぃゃん めーつぃゃじゃ]ってっぴーせー うぃゃちょーめ]ーぬっ
知 っ て た。
RGB にランダムな値をセットしたものが絵と呼びうる代物では到底無いのと全く同じように、フォーマットにだけ従って音素をランダムに並べたものは到底人間の話しうる言語ではありえない。
「RGB にランダムな値をセットしたやつ全体の集合」の中の非常に小さい部分集合のみが絵と呼びうるのと同様に、「フォーマットにだけ従って音素をランダムに並べたもの全体の集合」の中の非常に小さい部分集合のみが、人間の話しうる言語として plausible でありうる。
さて、ここまでお膳立てをすると、私がなんの話をしようとしているのか察することができる方も多いであろう。最近世間をとてつもなく賑わせて久しい、拡散モデルによる絵の生成である。
拡散モデル
「言語に詳しいが、機械学習とかにあんま興味を持ってこなかった」という人もこの記事の想定読者に位置づけているので、雑に拡散モデルというものの紹介をしようと思ったが、書くのが面倒になってきたので、人様の記事を丸々引っ張ってきて紹介とする。
同様のことが言語に関してもできてくれないかな〜、というのが、この記事で私が一番言いたいことである。
え、文章生成 AI はもうあるよね?
もちろん。私が求めているのはそれではなく*5、
「語彙・文法現象・例文・その言語ならではの特性を生かした文学」とかを内部一貫性を保った形で持った、「いかにも人間が話しそうな」言語が創作されること
である。
これに関して、ともに言語創作をしてきた Μίττον(みっとん)に感想を求めてみたところ、以下のような返事が得られた。
文章生成 AI って言語構造にただのりしているからなぁ。我々は言語という制度の体系を作りたいのであって、文章生成 AI が書いてくる日本語や英語の文章という『既存制度にうまく適応した例』でしかないものは、おもろいが、おもろいだけという気持ちになる。多分この世には『お絵かきAI、美術史上の動向に乗っかることはできるだろうけど、今のところ動向を作れそうにはないよね』とか言っとるやついるだろ。
どういうこと?
さっき貼った「一様乱数列な日本語」を録音してくださった id:yuchiki1000yen が非常に上手く記事にまとめてくださっているので、まずそれを引用すると、
ということで、私は、この記事で登場するバート語という言語を(他人から引き継いで)創作している。
他にも、その言語が話されている(という設定の)文化圏で広く遊ばれている(という設定の)ボードゲームのオンライン対戦を実装したりなどしているが、それは今回の記事にはそんなに関係ないので、過去記事を参照されたい。
さて、先程「内部一貫性」という単語に言及した。創作をする上でそれなりにこだわっているポイントなので、もう少し詳しく具体的に述べていきたいと思う。
たとえば、知り合いのこういうことをツイートしているような人に、
一応社会性というやつを持ち合わせているので会話でタリバンという単語が出てきたときに「あっこれはアラビア語の √ṭ-l-b の行為者名詞 “追求する者,学生” を意味する ṭālib を借用してパシュトー語の複数語尾をつけたやつ」とか言ったりしない
— 🍨卵生 Мороже💣 (@Morojenium) 2021年8月17日
「今年中に記事を書きたいので今から2時間半以内に語源を遡ってこうこうみたいな話をしたためてください」という無茶ぶりを頼んでみたところ、
こんにちは,Мороже です。僕はポケモンというゲームを少し触れています。ところでポケモンというゲームは日本で購入してもセーブデータを作成する前に言語を選択することができ,勉強になるかなぁという思いでORAS以降のポケモンを全てドイツ語でプレイしています。
さて,シャンデラという名前の通りシャンデリアを意識したようなデザインのポケモンがいるのですが,これのドイツ語名は Skelabra です。シャンデラはゴースト・ほのおタイプのポケモンであることを踏まえると,Skelabra はドイツ語 Skelett「スケルトン」とラテン語 candēlābra(pl.) < 単数形 candēlābrum「枝付き燭台」をミックスしたものだと思われます。みなさんご存知の天井から吊り下げる「シャンデリア」はこのラテン語 candēlābrum /カンデーラーブルム/ からのフランス語 chandelier /シャンデリエ/,からの英語 chandelier /シャンデリア/ に由来するカタカナ語ですね。つまりシャンデラと Skelabra はその見た目に反して同語源の単語をそれぞれネーミングに含んでいることが分かるわけです。
カンデーラーブルムがシャンデリエになった経緯の背景として,ラテン語の /ka/ の音が古フランス語(9 世紀ごろ)で /t͡ʃa/ (チャ)になり,数世紀かけて /ʃa/ になったことが知られています。音変化というのはある程度規則的に起こるものであり,もっと別の例を挙げることもできます。
・「シャルル」というフランスの人名がありまが,これは Charles と書き,ラテン語 Carolus /カロルス/ に由来します。Charles は同じスペルのままで英語でチャールズと読めますが,これは英語くんがフランス語側で ch の発音が /t͡ʃ/ だった時代にこの語を借用してきたことの名残ですね。
・「オーシャンゼリゼ」の歌で知られるシャンゼリゼは les Champs-Élysées と書きます。Élysées の部分は古典ギリシャ語 Ἠλύσιον エーリュシオン「ギリシャ神話の死後の楽園」で,champ は「野原」です。元となったラテン語は campus /カンプス/ で,これはコクヨの Campus ノートや,大学構内を表す英単語 campus およびそれ由来のカタカナ語「キャンパス」でお馴染みですね。野営地を表す英語 camp もラテン語 campus に由来します。
シャンデラに少し話を戻すと,ラテン語 candēlābrum 「枝付き燭台」は candēla 「蝋燭」から来ていて,英語 candle「蝋燭」はここに由来しています。光度のSI基本単位であるカンデラ(記号 cd)もこれですね。
ついでなのでヨーロッパから離れて東南アジアの言語の話もしましょう。タイ語では,月曜日のことを วันจันทร์ /ワンチャン/ と呼び,วัน /ワン/ が日,จันทร์ /チャン/ が月のことです。ところでタイ文字をやったことがある人は分かるかもしれませんが,จันทร์ という綴りにはなんと /t͡ʃandr/ と書いてあり,最後の dr という部分にはガーラン (การันต์) という黙字記号(←語源を表しつつも発音を表すための優良システムです。英語とかも採用してくれないかな〜)が付いています。というわけでタイ語 การันต์ /チャン/ はサンスクリット語 चन्द्र /チャンドラ/ 「月」に由来するわけなんですが,これは原義を辿ると「光るもの」であり,ここでさっきのラテン語の蝋燭 candēla(< candeō「光る」の名詞形)との繋がりが見えてきますね。先ほどフランス語の話で述べた /k/ > /t͡ʃ/ の変化がサンスクリット語でも起きていることも確認できます。サンスクリット語とラテン語が共通の祖先「印欧祖語」を持ち,さらにタイが仏教圏であるためにサンスクリット由来の借用語を大量に持つおかげで,タイ語の「月曜日」とポケモンのシャンデラが回り回って繋がるの,とても面白くないですか?
(以上: https://nitrone7.hatenablog.com/entry/2022/12/15/210832 に書いた文からいろいろ加筆)
ところでこの文章は「今年中に記事を書きたいので今から2時間半以内に語源を遡ってこうこうみたいな話をしたためてください」と hsjoihs さんにいきなり言われて急ぎで生成したものです。無茶振りか???
という記事を書いてきてくれた。すごい。マジでありがとう。
こういう風に、「語源を追いかけていくことで、数多くの言語が回りまわって繋がっていく」という話を何時間でも続けられるような我々が、こういう部分にまでこだわって言語を創作すると、わりと同様の解像度で我々の創作した設定について語れるようになるのである。
こういうオタク語りが無限にでき、しかもそれが実在の言語についてできるオタク語りと同様の質であってほしい*6、というのが、私が述べた「内部一貫性」の意味である。
我々はどのようにして言語を作っているのか?
「言語を作っている」という話をすると、「言語なんていったいどうやったら作れるんですか?」と訊かれたりする。絵を描いている人や曲を作っている人に対してはあんまりこういう質問が来ているのを聞いたことがない*7が、私にはしょっちゅうこういう質問が来る。
ただまあ、人間がどうやって絵や曲を生み出すかを考えれば、答えはおのずから明らかであって、
要するに、雑に要約すれば「たくさん入力を入れ、なんか手を動かすと、それなりにいい感じの出力が得られたりする」といういつもの話になるのである。
ということで、我々が言語を作るようなプロセスは、具体的には以下のとおり。
1. 手動で語学書とか言語学論文とかを読み漁って「言語ってこういう挙動をするのか〜」というデータセットを脳に蓄える。
過去記事を引用すると、
こういう作業をし、いろんな言語を見て、「言語ってこういうことをするんだな」というデータセットが脳内に構築されると、それをもとに新たな言語が作れるようになったりするのである。
ただ、機械学習の界隈においても「画像生成 AI が白人男性の顔ばかりを生成してくる」という話が問題になったのと全く同様に、日本において知名度のある言語の多くが西欧的言語であるというサンプリングバイアスにも気をつけねばならない。
つまり、「西欧の付近では共有されているがそれ以外の地域では全然発生しない、言語全体を通して見たときには稀な現象」*8 を強く拾いすぎてしまうと私の目的に合わないので、そういうのに気をつけるために、私に直接的な経済的利益をあんまりもたらさないような言語を幅広く学び、質の良いデータセットを作るというモチベーションが発生する。
2. 脳に蓄えた天然学習済みモデルからゆっくりと滴り落ちてくるものを全部かき集めて陳列する
大量のインプットを入れると、なんかいい感じに少しずつアウトプットが得られるので、それをかき集めて陳列していくことで、創作が進んでいく。私の場合は、ここに陳列してある。
試しにブラウザの印刷ダイアログで印刷してみようとしたら、122 枚あった。びっくり。そんなに書いたのか。
3. 人がそれを読んでなんか理解が生え、創作した言語が使用されていく。
世の中には、語学書をたくさん読んできたがゆえに、文法と語彙とそれらに関する考察が陳列されていると、そこから言語を学んで文章やら詩やらをサクサク書けるタイプの人類が存在する。なんなら私もそういうタイプの人類である。
ゆえに、そういう人の前にこういう情報を見せると、なんなら 6 ~ 7 時間ぐらいの学習時間で理解が生え、創作自然言語で書かれた既存文章を読解できるようになったりするのである。
これまた Μίττον(みっとん)に訊いてみたところ、
この感想は、私がラテン語だのサンスクリットだの割と語形変化の複雑な言語をまあまあ不親切な教科書で習得するのを強いられるのが割と好きで、かつ数学科とかいう、ある意味で一生語学をしているような専門だから出てくるものなのかもしれませんけど、人の陳列棚を眺めていると、そこから背後にある言語を割と復元できますよね。
と言われた。
私としても、私の創作した言語でみっとんが普通にいい感じの詩とかを書いてきたことにびっくりし、リパライン語でこのような詩を書いたりした*9。
4. 言語を運用して集積していると、創作者本人も気づいていなかった言語現象がどんどん観察されていき、記述が増えていく
我々が普段話す日本語の細かい文法についてすらすらと精細に記述できるわけではないのと同様に、
母語話者に自言語に対する抽象的説明を求めるのは一般に酷で、例えば「『しなかった』と『していない』の違いってなに?」って訊かれて↓のような条件分岐を述べられる日本語母語話者はまあ皆無といって差し支えない https://t.co/2mjeMlbvvy pic.twitter.com/CHzcrAB7zi
— hsjoihs (はすじょい) @ 12月18日から東京 (@hsjoihs) 2020年5月28日
一旦言語を作り始めて運用してしまったが最後、別に文法書に書いて明示的に設定したわけでもないのに「なんかこれはこうやって言うのが自然な気がする!」「たしかに文法書を読むとそういう言い方もできそうに読めてしまうけど、それは超絶不自然。そんな文構造は無理!」といった直観が勝手にニョキニョキ生えてくる。
こうなってくると、「言語を作っている」というよりも、母語話者に『この文って言える?言えない?こういうこと言いたいときってどうやって表現するのが一番自然?』という調査を行ってそれを記述していく、言語学者の中でもフィールドワーカーと呼ばれる職種を体験しているような気持ちになる。
(本職のフィールドワーカーとはどのようなことをする人か、に興味がある方は、古本 真『第1回 フィールドワーカーの苦悩:フィールド言語学とは何か』などをご参照あれ)
我々はなぜ言語を作っているのか?
これもまあ、絵を描いたり作曲をしたりする人たちがそれらの行為をするのと同様の理由であり、私の場合は以下の通りである。
とはいえ、今まで長々と語ってきた内容から容易に推察されるように、言語を作るのは普通にめちゃめちゃめんどくさい。ゆえに、ゆったりまったり作っているといつまで経ってもあんまり進まない。もちろん着実に育っていってはいるのだが。
ところで、最近のお絵かき AI の台頭により、私の言語・言語創作アカウントの方の TL でも「AI が言語創作をするようになってきたら」みたいな意見を見かけた。
人工言語が一大産業の世界で私がプロの人工言語作者だとして人工言語を生成するAIが登場したら、私はどう思うんだろう。
— Ziphil “Ziphineko” Shaleiras 🐈 (@Ziphil) 2022年8月30日
AIが人工言語、架空世界の次元までやってきて、一瞬で文法も語法も語彙も整った人工言語を出力できるようになったり、科学的な整合性の取れた(取らずにフィクション満々の世界を出すこともできる)架空世界を出力できるようになったら、私は恐怖と落胆を感じるでしょう。
— Kainex (@lenqeetaszaves) 2022年10月11日
それは、私がレーゲン語や人工世界の創作に費やした時間や努力そのほか諸々に対する否定だからです(感情的に言えば)。
— Kainex (@lenqeetaszaves) 2022年10月11日
私はAIイラストに対して肯定的な見方をしていますが、これは、飽くまでも、イラストは私の努力するところではなく、距離と保って見ることができるから、というだけにすぎません。
まあこういう意見に私が全く納得しないかというとそういうわけではないが、一方で 6 年間もうだうだやっていると「途中まで言語作ったから、あとはその間を納得行く感じに埋めておいていってくれないかな」という気持ちがだんだん強まってくるのである。
拡散モデルが言語創作をしたら
拡散モデルで言語創作が行われるなら、それはどのような作られ方となるのであろうか?
今までの絵が、「人がストロークを一つ一つ書いていき、それを重ね合わせることで作られていた」のに対して、拡散モデルによる絵というのは「絵とは呼べないノイズから、ノイズでない部分だけを残す」という作り方によってできている。なので、これの創作自然言語版ということは、「長大な一様乱数列をまず用意し、そのうち『言語と呼べない部分』を削り、言語な部分を残す」という作り方になることだろう。
さて、手元の「現代ヘブライ語辞典」は 30 行 2 段組、1 行 18 字の日本語で 488.5 ページあり、「約 17,000 語を収録した」と書いてあるので、30 * 2 * 18 * 488.5 = 527580 文字の和文があるということになる。和文で使う文字なんて JIS 第一水準ぐらいあればだいたいなんとかなるだろうし、1 文字辺り 12 bit ぐらい割いてやればよかろう。ということは…
え、そんなもんか。800 キロバイトの一様乱数列とか普通に既存手法の拡散モデルが扱ってるようなサイズなのでは。それを上手いこと「辞書」へと変えていけば約 17,000 語を収録した辞書になる、と考えると、私が長々と語ってきたこの妄想も実現そんなに遠くなさそうかもしれん。
ところで私が造語をするときの方法の一つに、「非一様乱数列を引いてみて、『この語形はこの言語に合わない!』と直観的に判断したものを除き、『まあこの語形ならいいんじゃない?』となったものを採用する」という過程がある。
この感覚はないなぁ。ある程度育ってくると「この体系にとってこの語形は受容されづらいだろう」「これは語形が短くなりすぎるし、複合語内に痕跡的に残るだけなんだろう」とか自然と思い浮かぶけど、響きの良さを目的にしているというより「合わない語形を言語くんが勝手に排除し始める」感覚なのよね https://t.co/w4aax94PuV
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2022年10月26日
これをやることで plausible なものが作れているという実体験から、「乱数列のうち、気に入らない部分を捨てて言語とする」を全てにおいて適用してドカッと言語を作るのも、わりといけるんじゃないか、と妄想している。
これに対しての Μίττον(みっとん)の感想は以下の通り。
なんなら語形に対する直観もなぜかある程度伝播するからな。たとえば、前に私が akuti という単語の同根語をバート語に作ろうとしたとき、一瞬 akat という語形を提案したいと思ったが、「バート語はこれほどに短い単語を嫌う」という直観が働き、ághat という語形を提案することができた。こういう直観が学習できるの、非直観的。
なんか『かなり初級の学習者でも、【この単語はこの言語にはないだろ】というのは直観的に判断できるらしい』という論文を昔見た覚えがあるが、出典失念。
絵と言語創作は何が違うか
絵や小説といったものは大量にインターネットに放流されており、また絵ならピクセルの並び、小説ならコードポイントの並びという、その最もプリミティブな形に関しては非常に機械に扱いやすい形としてインターネット上に放流されているし、それを生産する人も消費する人もおびただしい。一方で、私の脳内のデータセットの元になっているものというのは、
- paywall の向こう側にあったり一般公開されていたりする大量の書籍や論文
- 人に語学を教えることが目的であって、別に言語の包括的な記述を試みているわけではない雑多な情報源
- 同様のデータセットを構築することに興味がある同好の士(言語創作者に限らず、言語類型論という分野の研究者も比較的近いところにモチベがある)がまとめてくださった様々な情報
- 実際に私が自分で既存の言語の統計を取って分析して curve-fit したもの
- 似た趣味のやつらと何十時間何百時間何千時間と Discord 通話して得られた様々な断片的情報
といったごった煮であり、このごった煮にはまとまりもなければ、「私もやってみたい!」という人々の興味もあんまり引けないような代物である。
また、絵は、生成しておけば人間側が勝手にいい感じに解釈してくれる(うれしい)。一方で、言語は、その言語での文だけ生成しても面白くなくて、そこに既知言語での解釈がついてこそ、そしてその解釈が文法構造を成していて内部的一貫性があってこそ、その言語は言いたいことを何でも言える無限(文字通り無限)の可能性を秘めた存在となるのである。
なお、余談だが、「その言語での文だけ生成しても面白くな」いを如実に表す例として、私は「特に意味のない韻律詩書くか〜」とある日思い立ち、韻律詩を無から数千行吐き出している。
「特に意味のない韻律詩書くか~」と思い立ったのが一年前。それからというものの、電子機器持ち込めない状況が発生するたびにコピー用紙にひたすら謎の音素列を書き連ねた結果、気づけば無意味な dactylic tetrameter がなんと1518行も書かれていた(全文は https://t.co/kggTB1mIny に置いてある) pic.twitter.com/gJ1UEm7a3C
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2021年9月28日
また、既知言語であっても、意味が無だとこれまたあんまりおもしろくないということを示す例として、昨年「一億総教祖時代を強力にサポートするための、お手軽聖典作成技術」( https://zenn.dev/hsjoihs/articles/2dd0287e32a982 ) と称して、「言語と呼べないような乱数列を機械翻訳にぶち込むことで、言語としての体裁だけは整っている代物を吐き出す」という実験を記事にした。
終章 男 vs. 警備員
流石に人の痕跡があるもので、休憩から同じ長い時間のプログラマーと家系の影に言及しながら食べるために、両方のローンを取る貸主の後に大きな手放すものですが、いくつかは、久保で合計を与える。作った。自衛官って、自分から数人のパーティーみたいなものだよね。最初は真ん中の方にあります。2つは、ヨーロッパの細かいシャットの人々の2つの裁判官は、理解を放棄し、彼らは販売時にチューニングされています。建てられたラインから、コミュニティに群がる小さな雷鳴が疑惑の日が続く中でチャンスを叱り、それを混ぜ合わせた。
ということで、私は拡散モデルが流行る前から「一様乱数列を加工して、それを『人間の話しうる言語として plausible である代物』という小さなサブセットに落とし込めたらうれしいのになぁ」と妄想し続けていたので、その妄想が(絵という、私が全然慣れ親しんでいない分野ではあるが)大いに流行り世間の話題を動かしているのはおもろいなぁと、勝手に思っているのである。
*1:xbar_usui 賞をいただけました。ありがとうございます。
*2:機械翻訳でこの記事を読んでいる非日本語話者がいたらすまない。
*3:本当は「標準語」というより「共通語」と言いたいのだが、この記事の想定読者には「標準語」と言わないと通じない可能性があるので、分かりやすさを優先する。
*4:実は「音韻」
*5:私も創作をする上で現状の文章生成 AI には既にだいぶお世話になっていますけど
*6:要するに、全ての単語が全ての単語と語源的つながりがある、というのもまた現実的ではないよね、というだけの話
*7:「どういうツールを使って曲を作ってるんですか?」といった質問は頻繁に発生しているのだろうが、「曲を作るなんて……いったいどうやって!?」という点を疑問に思って問う人は見たことがない
*8:ここらへんの話はStandard Average European で調べるともっと詳しく出てくる
語学と私 (part 4) ― ご縁あってナワトル語の履修が 3 年目に入りました
この記事は 言語学な人々 Advent Calendar 2022 の 25 日目の記事です。
今までのあらすじ
最後にこのテーマについて記事を書いたのが 1 年半前という遅筆。今日も「アドベントカレンダーに登録したからには記事を書かなきゃなぁ」と思いつつ、昨日のワクチン接種の副反応を言い訳にスーパーマリオ 64 の A ボタン縛り TAS の通史動画を見るなどの有意義なクリスマスの過ごし方をしていたところ、
「おっ、Bismuth が新作出したか〜」と思って見始めたら 5 時間以上あった。スーパーマリオ 64 の A ボタン縛りと、その研究の大部分を一人で作り上げた pannenkoek2012 さんの活躍が非常に面白く語られている
— hsjoihs (はすじょい) @ 12月18日から東京 (@hsjoihs) 2022年12月25日
The Complete History of the A Button Challenge https://t.co/ftsmhM0h5c
このアドカレの主催者である id:yearman(まつーらとしお)さんから催促ツイートが来たので、いま大急ぎで文をしたためているというわけです。
@hsjoihs こんばんは。アドベントカレンダー(言語学な人々)の担当が今日ですが、いかがでしょうか?
— まつーらとしお (@yearman) 2022年12月25日
さて、そんな話はどうでもよくて、本題に移りましょう。
本題
詳しくは過去記事を見ていただければと思いますが、授業一覧を眺めていたところ、「今まで私の人生になんだかんだ少しだけ縁があった言語であるナワトル語の授業が開講されている」ということに気づき、履修してみることにしました。
「履修した理由が訊きたい」
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2020年10月2日
「@Mitcharaに言われて買った文法書を読破したことも一因で、あとそうそう!現代ナワトル語についての英語資料が乏しくて」
「ふむふむ」
「シラバスに『スペイン語の知識が*useful*』とあるからには要求はされていないと思って」
「そういう人を釣るためにそう書いてる」 https://t.co/JHpoMunJQD
「スペイン語でナワトル語を教える授業(スペイン語分からない人のために英語⇄スペイン語の通訳が授業内にいます)」というのに参加できて非常に勉強になったので、そういう形式でもいいから開催されると喜ぶ人は少なくないんだろうな、とは思う https://t.co/W6SjkY2KRz
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2021年3月30日
このように、1 年目は「Zoom に TA がいて、ネイティブの先生がスペイン語で話した内容を英語に同時通訳して Zoom チャットにひたすら書き込む」という方針だったのですが、2 年目になったらその TA がいなくなり、スペイン語を真面目に聞き取る必要が発生しました。
普通にスペイン語そんなにわかんないので大変で、授業も正直そんなに理解できていない気がします。その中でも特にキツかったのはこれと、
今日はナワトル語の試験があり、「あなたの街の遊びを一つ言え」とかいう苦しすぎる口頭試問があった(二人で向き合って人差し指を一本ずつ出し合い、相手の手に当てることで数が加算されていくあの遊びの解説をした)
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2021年12月2日
あとこれでしたね。
ナワトルの課題、詩を一個持ってこいと言われたので、「ちはやぶる神代も聞かず竜田川からくれなゐに水くくるとは」の解説をスペイン語とナワトル語でして提出。
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2022年4月5日
Yontlen axmocacqueh quemman totiotzitzin itztoqueh, [miac chichiltic xihuitl tlen huetzqui atlauhco] quipahqui atlauhtli tlen itocah Tatsuta.
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2022年4月5日
「神々のいた時に一度も聞こえてこなかった、(川へ落ちた沢山の赤い葉が)タツタという名の川を塗った」
とか訳せばまあいいんじゃなかろうか
さて、なんとか 2 年目も終わらせ、夏休み。アメリカの大学は秋学期から年度がスタートするので、次の年度の履修を確認してみたところ、SPECLANG 103A: Third- year Nahuatl- First Quarter は Last offered: Autumn 2017 と書いてあり「あー、今年は 3 年目のナワトル語の授業は開講されないのか。まあしょうがないよね。じゃあ ASL (アメリカ手話) でも取ろうかなぁ」と思っていたところ、
つまり「そっちの都合に合わせて開講するからどのタイミングなら空いてるか教えてくれ」というメールが来ました。ということで、3 年目も履修することとなったのです。
今学期の内容
三年目のナワトル語の授業、フィールドワークで蒐集されたナワトル語の物語をスペイン語訳するという構成なのだが、初っ端から祖母 (Tenantzitzimitl) が孫 (Chicomexochitl) をしょうもない理由で殺そうとしてきたし、今日の授業ではその反撃に Chicomexochitl が倉庫に登って祖母の頭上に放尿した
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2022年10月14日
主人公が 2 ヶ月で身長 1 メートルまで育ったり、祖母による呪殺を避けるために主人公が魚の舌を引っ張ったり、主人公の不思議なパワーで土からトウモロコシが生えてきてどれだけ引っこ抜いてもまた生えてきたりといった、様々な謎展開が毎週登場します
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2022年10月14日
Tenantzitzimitl が孫いびりのために網で水を汲ませようとしたところ、Chicomexochitl は超自然的な存在なのでなぜか網で水を汲むことができた。「えっわたし知らなかったけど、もしかして網って水汲めるの?」と思い、自分でやってみたら当然失敗した。これにブチ切れ、再度孫の殺害を決意する祖母
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2022年10月14日
悪と怒りの権化である Tenantzitzimitl を焼いて得られた灰は、死してなお邪悪の怨念がこもっているらしく、Chicomexochitl はその灰を丁寧に木の箱に入れ、一粒たりともこぼれないようにした。邪悪な灰が二度と悪事を働くことのないように、カエルに頼んでデカい湖に捨ててもらうこと。カエルは承諾
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2022年11月18日
とても強いカエルは、箱を背中に担いではるばる水辺へ。さて水へと捨てようと思ったとき、箱の中からトントントンと音が鳴る。開けてはならないと聞かされていたはずだが、中身が気になったカエルはちょっぴり箱を開けてチラ見しようとした。そうしたらその隙間からハエだったりが大量に飛び出てきた
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2022年11月18日
ハエとかクモとか、人々を怖がらせる小動物や虫がうじゃうじゃと。カエルは急いで蓋を閉じたが、既に放たれてしまったやつらはどうしようもない。そして自分の姿を見たカエルは、自らの身体中が虫に噛まれていることに気づき、全身がかゆくなった。
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2022年11月18日
ゆえにカエルの肌は今でもなおデコボコしているのだ
Tenantzitzimitl の命は終わったが、全て消えてなくなったわけではなく、水の中に入った箱はワニとなって、今でも人を襲うのであった
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2022年11月18日
ちなみに、前述の通りわたしはあんまりスペイン語ができないので、
- 渡されたナワトル語文を急いでなんとかスペイン語に逐語訳する
- その逐語訳に(主にスペイン語文法上の)誤りがあるので、それをネイティブの先生に直してもらう
- もう一度直された文を読み上げ、これで本当にいいか確認する(一般に、文字だと気づかない誤字も、耳で聞くと気づくことがあるので)
- その文を DeepL に突っ込み英文にし、「あ〜〜そういうストーリーラインなのね〜」と納得する
というプロセスでなんとか授業に喰らいついていっています。なので上記のわたしの解釈には普通に誤読があるかもしれません。
あんまり言語学の話ができていないな
そういえばこれは「言語学な人々 Advent Calendar 2022」の記事なのでした。このままでは語学記事になってしまう。(まあ「言語にまつわるエピソード,エッセイ」もオーケーとのことですが)
ということで、もうちょい言語学寄りっぽい話でもしますかね。日付が変わるまでにあんまり時間がないので、とりあえず音声の話だけ。
帯気
スペイン語と同様、オンセットの破裂音は帯気しません。
2022 年 12 月頭に「みなさん IPA で書かれた音素列を見てどれくらいいい感じに初見の言語読めるんだろう」と気になって、
teˈnant͡siˈtˡawelkʷalanˈtojakemamoˈkʷapʰkipampaʔaʃˈwel̥kikiwaˈlikaˈʔatˡʰpanˈʔajatˡʰ wannel̥kʷaˈlaŋkikemakiˈʔitakʰˈnopatˡaˈjolitˡeŋkitepehˈtehki | t͡ʃikomeˈʃot͡ʃitˡʰkitentoˈjajapaŋˈkomitˡʰ
を読み上げさせてみたところ、ゆーちきさん (id:yuchiki1000yen) がやってみてくださり、
「ガチ初見がこんな感じ」として以下の音声を、
https://cdn.discordapp.com/attachments/831728193031503933/1049305766831595531/334e4a9858e9a718.m4a
「数分練習したあと」として以下の音声を提示していただけました。
https://cdn.discordapp.com/attachments/831728193031503933/1049305870766448711/e0c38957c8d7515b.m4a
感想としては、全体的にかなり上手く読みあげられているものの、「この言語、オンセットは帯気しちゃいけないんですよね」という気持ちが第一に出てきました。
日本語はかなり有気と無気の両方が free variation で頻出する一方で、ロマンス諸語とかは「有気と無気に対立がないといえばないが、一方で有気で読まれるとそもそもめちゃめちゃ違和感がある」んだなぁというのを改めて実感しました。
『イタリア語母語話者が古典期ラテン語の発音を好まない傾向にあるのは、ラテン語の古典期発音をしていると自負している英語話者・ドイツ語話者が実は語頭無声破裂音を帯気させ母音を弱化させるからではなかろうか』 pic.twitter.com/hBOxT1ia1T
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2021年3月7日
ちなみに、https://www.sil.org/system/files/reapdata/47/26/65/47266563262242678149396571357053294485/15362.pdf に明示的に記載がある通り、コーダは帯気します。韓国語みたいな
- 입다「着る」 [ip̚t͈a̠]
- 있다「いる・ある」[it̚t͈a̠]
- 읽다「読む」[ik̚t͈a̠]
を聞き分ける苦労とは無縁。
声門閉鎖
スペイン語は母音連続の間に意地でも声門閉鎖を入れず、同じ母音が連続するときにはなめらかに繋げて読まなければなりません。
この「典型的な日本語なまり」を具体的に書きます。あのとき読まれた例文は ¿Dónde está~? という形の疑問文がいくつも並んだものでした。モデルスピーカーはこれを毎回 [ˈdon.des.ˈta] と3音節で発音していました。スペイン語母語話者は必ずそう発音します。(1/2) https://t.co/Xx8gK5PuEt
— Takuya Kimura 1962 (@1962Kimura) 2021年9月7日
しかし上川さんは一貫して dónde と está の間に声門閉鎖を入れ、 [ˈhttps://t.co/3jSk1QeJZx.ʔes.ˈta] と発音し、そのつど「同じでしょ?」とドヤっていました。この声門閉鎖を入れる発音は日本語母語話者と英語母語話者の両方に観察される悪い発音です。(2/2)
— Takuya Kimura 1962 (@1962Kimura) 2021年9月7日
しかし、ワステカナワトル語では二つの母音が形態素をまたいで連続するときには間に声門閉鎖が挟まれるという現象があり(先述の https://www.sil.org/system/files/reapdata/47/26/65/47266563262242678149396571357053294485/15362.pdf にもそう書いてある)、その影響なのか、スペイン語で va a comprar とかを言う際にも先生は a の前に声門閉鎖を入れていました。
o と u
ナワトル語*1は o と u を区別しません。それが如実に現れていたのが、1 年目の授業で先生が未来形の解説をしているときのこの一枚。
スペイン語では未来を futuro というのですが、ご覧の通り、右では futuro と綴っているにも関わらず、左では foturo となっています。なるほどなぁ。
感想
ナワトル語学習歴ももう 3 年目に入りましたが、なんだかんだ面白くて貴重な経験ができていると思います。
まず、意外とインターネットにはナワトル語話者もいるので、普通に書く機会は探せばあります。
Piyali tlamachtihquetl. Pan xihuitl tlen macuiltzontli huan cempohualli, nipeuhqui nimomachtiz Nahuatlahtolli tlen Chicontepec, Veracruz. Quichihuaz curso, ninehnehuilia nopa ohuih, zanpampa Duolingo quipiya curso tlen Guaraní. Melahua oncaz curso tlen Nahuatlahtolli tlen panoz.
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2022年7月24日
あと、単純に話のネタとしてウケがいいというのもあります。アボカドとかワカモレとかコヨーテの語源の話をするもよし、実はスペイン植民地時代のメキシコでは結構長い間ナワトル語で裁判とかの行政をやっていた話をするもよし、フランス語の文法書がこの世に生まれるよりも前にナワトル語の文法書が在ったという話もよし。
さらに、わたしは「人間の言語ってどういう挙動をするんだろう?」という問いに対するデータセットをなるべく脳内に蓄えたいというモチベがあるので、語学書とかを買いまくって乱読したりしているのですが、
こういう文法書の乱読をして「面白かった〜」とだけなって単語を 3 つだけ覚えて終わるような語学の向き合い方だけではなく、テストを課されて単語暗記を強要されて真面目に文を読み書きできるようになる語学というのをやれたのは良かったと思っています。
よし、現在 23:59!
*1:というか、古典ナワトル語とワステカナワトル語。他の方言では区別するところもあるらしい
京大マイコンクラブ #hsjoihs-lifelog チャンネル
この記事は KMC Advent Calendar 2022 の 17 日目の記事です。16 日目の記事は itoooak さんの「PDFを書いてHelloWorldする」だそうですが、私がこの記事を執筆しているタイミングではまだ投稿されていません。
概要
それは 2021 年 11 月 9 日に唐突に始まった。京大マイコンクラブ(以下 KMC)の自分用チャンネルに、何気なく睡眠とかのログを取り始めたのである。
そのうち、それ以外の日常の出来事も全て記載していくようになった。
こういうのは一度始めると続いてしまうもので、そこから半年経っても、
一年経っても、私は自分の生活ログを取り続けた。
ちなみに、「こういうのは一度始めると続いてしまうもので」についてはもう一つ心当たりがあり、私はいま Duolingo の streak を 628 日繋いでいる。Duolingo の streak は一日サボっても切れない仕様で、私が自分でつけている集計によれば、「2021 年 2 月 19 日に Duolingo を始めてからの 667 日のうち、94.15% にあたる 628 日は Duolingo に触れている」というカウントになる。
コツ
もちろん、なにかをしている最中に常にログを取っていけばいいのだが、必ずしもそういうわけにもいかない。よって、「後でログを取る自分」の手間を最小限にするには、以下のポイントを押さえるのが有用である。
- 履歴を日単位でしか出してくれず、閲覧時刻を表示してくれないブラウザである Safari をなるべく使わない。使うにしても Twitter(投稿時刻・リツイート時刻が twilog に保存される)かニコニコ動画(視聴時刻が保存される)だけにする
- なるべくあらゆる時間をインターネッツに注ぎ込み、「この時間ってなにしてたんだっけ?」という使途不明時間を減らす
- 食事は必ず写真を撮ってDiscord や Slack のチャンネルに投稿
- 眠くなったとき・起きたとき・外出したとき・外出から戻ったときにはその旨を特定 Discord サーバーの特定チャンネルで宣言する
これらのコツを駆使することで、2 日〜 3 日ほどログ取りをサボっても後からそれなりに自分史を追えるようになる。
今学期
さて、卒業が近く、しかも私は 3 種類の卒業要件を全て満たすようなスケジュールで動く必要があったため、
・数学科(学部)
— hsjoihs (はすじょい) @ 12月18日から東京 (@hsjoihs) 2022年9月20日
・物理学科(学部)
・応用物理学科(修士)
を同時にこなしているので 3 つの卒業要件を確認していたら、数学科からの
「
卒業要件を変える。ただ、今まで満たしていた人が満たさなくなることはない。
証明:57 = 49+8=10+15+8×4 かつ 3 = 4-1 であるため、
」
というメールを確認
今学期はそれなりに忙しく、KMC にもそんなに顔を出せていなかったが、それでも hsjoihs-lifelog は執念で更新し続けた。
しかし…
おや、12 月 1 日で更新が止まってしまっている。
そう、12 月に入ってからというものの、タスクが積み上がり、忙しさが MAX に到達し(MAX と言いつつ、知り合いが「原神」中国語版の読解をするイベントとかには参加してたりしたけど)、ついに #hsjoihs-lifelog の更新が止まってしまったのだ。
至極ごもっとも pic.twitter.com/4bb6oxkraJ
— hsjoihs (はすじょい) @ 12月18日から東京 (@hsjoihs) 2022年12月5日
ちょうどいま卒業に必要な重めの課題を提出し、あとは飛行機に乗って日本に帰るだけという解放感の中で記事を書いているが、なにはともあれ、とりあえず最大の忙しさは通り過ぎることができたので、今から 17 日分遡ってライフログ更新かねぇ………………(でもフライト寝過ごしたらシャレにならないので、この記事を投稿したら寝る)