1225
えらい夜更かししたせいで起きたら午後3時だった。日本語変換のコードをすこしリファクタした。
夜はフライドチキンを揚げた。鶏肉を鍋に入れる時にちょっと大きく跳ねたので足に火傷を負ってしまった。それほど酷くはないけど水ぶくれができた。これから数日かけて痛くなっていくらしい。やれやれ。
寝ます。
えらい夜更かししたせいで起きたら午後3時だった。日本語変換のコードをすこしリファクタした。
夜はフライドチキンを揚げた。鶏肉を鍋に入れる時にちょっと大きく跳ねたので足に火傷を負ってしまった。それほど酷くはないけど水ぶくれができた。これから数日かけて痛くなっていくらしい。やれやれ。
寝ます。
メリクリ。それは明日か。もう今日だけど。
土曜日なのでのんびりしていた。嘘。ガトーショコラを作った。たまにしか作らないから毎回段取りが微妙にわるい。今日は薄力粉をふるうのにものすごい時間がかかった。もっと早く始めればよかったのだ。
昨夜学習を走らせて寝たかな漢字変換ソフトウェアは8時間ほどかかって学習完了していた。軽く試してみたけど、まあお世辞にも精度が良いとはいえない。それでもだいたいはそれっぽい変換をしてくるから、アルゴリズムの簡素さを考えれば上々だろう。改良はまた気が向いた時にする。
で、これをSwiftで書かれたIMEから呼び出す部分を実装した。バインディングを自動で生成してくれるクレートがあったのでそれを使ったらわりと簡単にできたが、データの受け渡しは多少面倒だなと思った。
InputMethodKitを使ってIMEのように振る舞う部分も一応実装したが、そういえばかな漢字変換の前にローマ字かな変換も必要だったことを忘れていたので、一旦繋ぎ込みは保留している。ひさびさにXcodeでコードを書いた。キーバインディングが飛んでいるのかえらく使いづらかった。
明日はRust側のリファクタから始めたい。もし調子がよければローマ字かな変換部分も実装したい。これは別に学習とかではないので書けば動くはずだが、IMEとの連携を考えてインターフェイスを考えなければなるまい。
謎に夜更かししてしまった。謎過ぎる。寝るぞ。
とにかくバタバタしていた。godotenvはテストの時に.envを読んでくれない(これはgoがテストの時にそれ用に一時ディレクトリを掘るせい)ために不都合が出てきたので、direnvでシェル側で実現することにした。ほぼ成功したけどまだ修正がいる。
夜は日本語変換の実装を進めた。ノード間の重みの学習を始めた。ほぼうまく動いているが、たまに変なエラーが出る。調査が必要そうだけど、まあ一旦無視。高速化のためにRayon入れてみたけど、これはやらないよりはマシ程度。
一晩でWikipediaを1周しそうなので、明日はSwiftから呼べるようにしたい。
寝ます。明日はガトーショコラ作るか。買いものの予定もあるが。はんだ付けもしたいんだけども。忙しすぎるな。
なんか金曜日感のある木曜日。今週は特に会議が多かったから息切れしてるのかもしれない。そんな疲れてる感じでもないのだが。
Wikipediaから引っ張ってきた巨大コーパスからAho-Corasick法のオートマトンを作成し、簡単に辞書引きするところまで実装した。これで一応ビタビ法と組み合わせて変換機能が動く。まだノードとエッジのスコアを学習していないので正しい変換とはほど遠いけど。
計算機で情報処理をすると、八億行あるテキストファイルを手許で処理するなんてことが行える、これは楽しい。こういうスケールのブースト感が計算機の醍醐味だなと思う。アルゴリズムさえ記述すれば、あとは計算器の能力と資源の許す限りどこまでも行ける。そこには手作業では絶対に届かないような景色が広がっている。
鹿目詢子さん(まどかのお母さんです)が「正し過ぎるその子の分まで、誰かが間違えてあげればいい」と述べている、これは本当にそうだなと思う。正しいことの素朴な合成が誰もが納得できる結論を導くとは限らないし、正しいかどうかなんて長い目で見ればどうだっていいことでもあるわけで、そういう場面で間違いを選ぶ、これは難しいことだけれども、しかしこれは世界のある性質に関する重要な指摘だなと感じる。
こういうのは欺瞞的なのかもしれない。結果さえよければ手段が誤っていてもいい、そういう態度は決して称賛できるものではないが……しかし、どこまでいっても人生には「そういう場面もある」。それが気に入らない人も多くいるだろう、それでも。
会議が合計5時間くらいあってほとんど何も進まなかった日。Terraformをすこし書いたがあちこちぶつけてうまく動かなかった。あれは素人が雰囲気で触れるようにはなっていないのだ。その点CDKは明らかにおかしいものは型チェックで弾かれるので楽ではあった。
夜は引き続きコーパス作成をしている。データの持ち方をいろいろ迷っていてあまり進まなかったが、とりあえず辞書を作る手前まではきた。重みの学習はまた別の苦労が予想されるのだけども。これRayonで並列化したいけど、素朴にやると絶対にうまく行かないと思うので、なんか考えなくては。
寝ます。
昨日はいささか飲みすぎたのか、今日はまあまあしんどかった。仕事は普通にできる程度だったので仕事は普通にした。バッチコマンドを追加するためにTerraformを見よう見まねで書いている。Terraformはもうすこしテキストエディタの支援が受けられるとうれしいが、IDEによっては強力だったりするのだろうか。
夜は日本語変換の学習に使うコーパスの準備をしていた。KyteaのPythonバインディングがM1 macだとpipで入らないらしく、Poerty環境でいい感じにするのにとても難儀した。というか結局いい感じにはなっていないが、あまりそこに拘る意味もないので妥協しておく。
Wikipediaから全記事データをダウンロードしてテキスト部分を抽出したら12億文字のデータが得られた。これを文単位に分割してKyteaで読みを推定させてコーパスを作る。それを元に重みを学習させたいが、たぶんマルチスレッド対応しないと厳しいだろうな。どうしたらいいか。
寝ます。明日はなんか会議が5個くらいある。なんかおかしくない??
月曜日はいつも会議がちで作業時間があまり取れない。でも小さな問題を一つ解決した。正確には、解決できないので迂回する方法を実装しただけだけど。これコントリビューション・チャンスのような気がするが、単に僕が勘違いをしている可能性もある。
夜は飲み会をした。みんな大変やね。その場に唯一のソフトウェアエンジニアとしては、頼り甲斐はともかく頼りやすい人間であろうという思いを新たにした。頼り甲斐は、わからん。
通常の意味においていい学歴がある人間だが、あってよかったと思ったことが一度もない。むしろ損をしている印象のほうが強い(特に、自意識との折り合いが悪い)。しかしこれは典型的な誤謬で、実際には学歴によってさまざまな得をしていることは想像に難くない。主観は主観でしかない。そのギャップがまた学歴に対するネガティヴな印象を強化するが、しかしどうしようもない。
寝る。
昼まで寝をして、それからラーメンを食べに出かけた。本当はべつにラーメンを食べに出かけるつもりではなかったのだが、近所のうどん屋が満席だったので、仕方なくバスに乗ってちょっと遠出をした。判断ミスだったような気がしないでもない。ラーメンはうまかった。
日本語入力エンジンを作り始めた。とりあえずビタビのアルゴリズムを実装して、ノードとエッジのスコアを考慮しながら最適な経路を見つけることはできるようになったが、じゃあそのスコアはどこから拾ってくんのという話である。コーパスを準備せねばなるまい。これはなんかスクリプト書けばいいか。あとパフォーマンスはチューニングが必要だろう。トライ木を実装するとか、そういう。
夜はM-1グランプリを途中から観た。面白かった。
寝ます。明日はなんか会社の人と飲み会。
何もしてない。来年のプロジェクトとして日本語変換エンジンを作ってみようかなと思ったのですこし調べごとをした。でも、これ素人がちょっと頑張ったって結局ATOKやらGoogle日本語入力やらを越えることはないのだろうなと思うと多少虚しくなるので、やらないかもしれない。まあすこし試してみようかな。
いや、でもOS作るとかファミコンエミュレイタ作るとかのほうが楽しいのではないか?特にエミュレイタにはちゃんと正解があるので、無駄なことに精神力を使わなくてもいいという利点がある。うーむ。
午前休をとって歯医者に行き、ラーメンを食べて帰った。前住んでいたところにはおいしいラーメン屋がいくつもあるのに、いま住んでいるところには何もないので、こうして時々歯医者に行くのが楽しみでもある。
仕事は午後に会議が3つあったのでほとんど何も進まず。いや、まあ今週やり終えたかったことは結構できたかな。
夜は「トップガン」を観た。うーん、なんかね、ラストの空戦はかなりよかったけど、映画全体がそこまでの長すぎる助走という感じで、ねえと思った。
寝るかぁ。duolingoのフィンランド語コースは1週間続いた。すごく基本的な表現は覚えたけど、ペースが遅い。まあスマホで一日10分ばかりぽちぽちするだけで語学をやろうというのがそもそも無理のある話なのだろうとは思う。しかしまあ、ちまちま続けていきたい。