2024年1月14日日曜日

機械学習で全然精度が上がらない

 最近、seq2seqの独自実装にハマっています。まあ独自実装といってもまだ自慢できるような工夫はほとんどないんですが、翻訳とかチャットボットとかになんか使えそうなのでとりあえずエンジンを作っている段階です。

そんな自作seq2seqを使って試しに英日翻訳エンジンを作ってみたんですが、どれだけ学習させても全くもってトンチンカンな翻訳結果にしかなりません。多分アルゴリズムは合ってるはずだし学習データもネット上で公開されている機械学習用のトレーニングデータを使っています。ただデータ量が多いので、ある程度まとめてミニバッチ学習をさせています。何がおかしいんだ・・・

数日悩んでいましたが、ある日ソースコードを見直して気づきました。

ミニバッチ学習させるときに、パディングの影響を最小限にするためにトレーニングデータを長さ順にソートしています。それはいいんですが、入力と出力を独立にソートしていたため、英文と和文の対応がグチャグチャになっていることに。

対応がずれないように、英文の長さを基準にして「英文・和文のペアの配列」をソートして再学習させたところ、無事それっぽい翻訳結果が出ました。そのうちどこかで公開したり、基礎から始めるseq2seq的な記事を書いたりするかもしれません。

良い子のみんな、学習データの入力と出力は別々にソートしちゃダメだよ!こんなことするのは他にいないと思うけどね!

2024年1月7日日曜日

新年のごあいさつ

 あけましておめでとうございます・・・と言える気分ではなく、新年早々大変なことが続いていますがみなさんお元気でしょうか。被災されたみなさんにお見舞いを申し上げます。

こちら(兵庫県)は地震の影響は全くなく、家族の中で揺れに気づいたのが自分だけという状況です。「またいつものザコ地震か・・・」と高をくくっていたところ、ニュースを見て驚きました。

姉の家族が金沢に住んでいるのですが、家具がひっくり返って汚部屋ならぬ汚家になったくらいで人的被害はなし、物流・電気・水道などのインフラも問題なしとのことで安心しました。

金沢以北の能登地方が大変ということで、一日も早い復興を願っています。今年もよろしくおねがいします。

2023年12月31日日曜日

ダイハツの第三者報告書にみるプロジェクトマネージメント

 ダイハツがなんかえらいことになってますね。

そして、第三者報告書に関する𝕏のポストがちょっと話題になっています。

言いたいことはわかるし概ねこの人に同意なんですが、一点引っかかることが。

②日程に間に合わないと感じ手を挙げると「なぜ間に合わないのか」「どうしたら間に合わせられるのか」「今後どうするのか」の説明に追われる

これは、特に最初の2つについて説明するのは当たり前じゃね?と思うのですよ。

2023年12月24日日曜日

Goでmain関数が終わった時の終了ステータスは?

 突然ですが問題です。Go言語で以下のコードを実行した時の終了ステータスは何だと思いますか?

package main

import "fmt"

func main() {
	// 地獄の言葉
	fmt.Println("hell, word")
}

「え、普通に考えたら0じゃないの?」そう思ったあなた。試しに実行してみてください。

はい、0が返ります。

・・・何が言いたいんやこいつは。

2023年12月17日日曜日

StyleX

 MetaがStyleXという新しいスタイリングシステムを公開したようです。すでにFacebookやらInstagramやらのMetaのサービスで使われているようですね。

最近知ったばかりなので詳しいところはまだ見ていないのですが、これを知った時に思ったことが2つ。

MetaってJSに色々ぶっ込むの好きだね。ReactがHTML in JSならStyleXはCSS in JSみたいな感じ。

イーロンマスクがつけそうな名前だね。というか先に考えてたら絶対つけてたね。

2023年12月10日日曜日

Dockerのdebian-slimイメージでwait-forを使う時の注意

 恒例のドジなハマりシリーズです。相変わらずこういうハマり方をしています。

Dockerでウェブサービスとかを開発するとき、DBサーバーなどの依存サービスが立ち上がるまでアプリケーションサーバーをwait-forなどで待機、という使い方をすることがあると思います。そこで無駄にハマったのでメモしておきます。

2023年12月3日日曜日

TypeScriptでジョブキュー

 多分使い古されたネタですが、なんとなく思いついた&作ってみたくなったので気にせずに投下します。

「一度に実行するジョブの数は最大でN個、それ以上はキューイングしておき、実行中のジョブが終了したら順次実行」というアレです。