洋食の日記

「だ・である」調ではなく「です・ます」調で書きはじめれば良かったなと後悔してる人のブログです

3ヶ月で体重を5kg減らした

はじめに また減量することがあればのための備忘録で、自分が行ったことを勧めるわけではなく、ダイエットは自己責任で。 参考にした本とか 何冊か本を読んだが、結局はこの1冊だけで良かったと思う。 忙しい人のための「自重筋トレ」 (光文社新書)作者:比嘉…

2023年はいつのまにか健康になった年だった

ここ数年、腱鞘炎とか帯状疱疹とか腫瘍切ったりとか色々あったけど、2023年はそういう謎の体調不良に襲われることが無かった。 あるとしたら、吐き気がして起きてられないくらいの激しい頭痛に襲われたぐらい。それも、後日、脳神経内科でCTとか丁寧に検査し…

RumaleにHessian Eigenmapsによる次元削減を追加した

はじめに 最近、Rumaleのリリース記事を書くことをすっかり忘れていた。最近リリースしたv0.28.1では、多様体学習の非線形次元削減手法であるHessian Eigenmaps(a.k.a. Hessian Locally Linear Embedding, HLLE)を実装した。HLLEは、各点の十分に小さい近…

Rumale::SVMにClustered SVMによる分類器を追加した

はじめに Clustered Support Vector Machine(CSVM)は、データをクラスタリングし、各クラスターごとに線形SVMを学習することで、非線形な分類器を実現する手法である。また、Rumale::SVMは、Rubyの機械学習ライブラリであるRumaleと同様のインターフェース…

Rumale::SVMにRandom Recursive SVMによる分類器を追加した

はじめに Random Recursive Support Vector Machine(R2SVM)は、ランダム射影による特徴変換を繰り返すことで、線形SVMで非線形な分類器を実現する手法である。また、Rumale::SVMは、Rubyの機械学習ライブラリであるRumaleと同様のインターフェースで、様々…

Rumale::SVMにLocally Linear SVMによる分類器を追加した

はじめに Locally Linear Support Vector Machine(LL-SVM)は、多様体学習の考え方を利用して、線形SVMで非線形分類器を実現する手法である。Rumale::SVMは、Rubyの機械学習ライブラリであるRumaleと同様のインターフェースで、LIBLINEARやLIBSVMで実装され…

LINE社の日本語言語モデルは前提知識をもとにした回答ができる

はじめに Hugging FaceにあるLINE社の日本語言語モデルの実行例では、四国の県名をたずねるシンプルな受け答えのみなので、凝ったことができるか試してみた。結果、前提知識をもとに回答できることがわかった。 実験 準備 LINE社の日本語言語モデルを、GPTNe…

LINE社の日本語言語モデルをRubyで試す

はじめに LINE社の日本語言語モデルを手元のmacOSで試したくて、llama.cppのRuby bindingsを作ってる経験を活かして簡単なGPT-NeoXモデルのクライアントを作った。 github.com モデルの準備 LINE社の言語モデルをggml形式に変換する。ggmlをcloneしてきて、…

Numo::LinalgのサブセットのNumo::TinyLinalgを作った

はじめに Numo::NArrayで逆行列計算や固有値分解などの線形代数計算を担うNumo::LinalgのサブセットであるNumo::TinyLinalgを少しずつ作っていた。どのようなサブセットかというと、機械学習で使う(Rumaleで使う)メソッドだけを実装したものになる。 githu…

llama_cpp.rbを使ってRubyでLlama2を利用する

概要 llama.cppのRuby bindingsであるllama_cpp.rbでもLlama2が使えた。 github.com インストール llama_cpp.rbのインストールは、通常のnative extensionsなgemと同様である。 $ gem install llama_cpp もしmacOSを利用しているなら、metalオプションをつけ…

3ヶ月間大規模言語モデル関連の開発に力をいれてみた

花粉症なので、洗濯後に外干しはせずに、コインランドリーで乾燥機にかけている。乾燥機が止まるまで暇なのでKindleで本を読んでいる。その中で、「3か月」の使い方で人生は変わる、を読んだ。著者はGoogleに務めた経験があり、Googleでは3ヶ月周期でプロジ…

llama_cpp.rbでチャットボットのサンプルを作った

はじめに 以前に作ったllama.cppのRuby bindingsであるllama_cpp.rbでチャットボットのサンプルを作った。llama.cppのexamples/main/main.cppをいい感じにRubyにすれば作れるので「誰か作ってくれないかな」という他人まかせな気持ちでいたが、作る時間がと…

不健康初心者なので体調が悪いことの検知と対処ができない

これは自分への備忘録である。 3年前からヒドい腱鞘炎に悩まされるようになるまで、高い健康運を頼りに生きて来てので、体調が悪いことに気づけない。そもそも腱鞘炎が悪化したのも、手に違和感があることを「そのうち治るだろう」で放置したのが良くなかっ…

llama.cppのRuby bindingsを作った

はじめに llama.cppはMetaの大規模言語モデル (Large Language Models, LLMs) であるLLaMAを、量子化することでCPU上で動作させるものである。C/C++で実装されているので、Ruby bindingsを作って、Rubyから呼び出せるようにした。 github.com 使い方 インス…

ChatGPTのパーソナリティ特性を調べてみた

はじめに ChatGPTが人間のように回答するので、パーソナリティ特性はどうなるか興味がわいた。パーソナリティ特性の尺度として広く用いられるものにBig Fiveというものがあり、これを調べてみた。Plusにしてない無課金ユーザーなので、回答が短くなるように…

近似最近傍探索ライブラリHnswlibのNode.js bindingを作っていた

はじめに Hnswlibは、近似最近棒探索のベンチマークでも上位に位置する、Hierarchical Navigable Small World graphsによるC++の近似最近傍探索ライブラリである。Node.jsのbindingがなかったので、腱鞘炎のリハビリとnpm作成の勉強がてら作成していた。ずっ…

SentencePieceのRuby bindingsを作った

はじめに Rubyでなにか大規模言語モデル (Large Language Models, LLMs) に関することをやってみようと思って、SentencePieceのbinding gemがないことに気づいて作った。 github.com SentencePieceはニューラルネットワークな言語処理向けに作られたTokenize…

確率分布に従う乱数によるNumo::NArrayを生成するNumo::Randomを作った

はじめに 正規分布や二項分布などの確率分布に従う(疑似)乱数によるNumo::NArrayを生成するNumo::Randomを作った。アイディア自体はずっと前に考えていたが、腱鞘炎と忙しさで、形にできていなかった。 github.com 動機 Numo::NArray自体にも、一様乱数を…

帯状庖疹は痛いし長引く

帯状庖疹になった。これを書いてる時点で、発症から2週間ちょっとだが、ブツブツはあるし痒みと寝起きとかに若干の痛みがある。背中と腰にブツブツができた当初は「あせもができたかな?」と思ったが、すぐにロキソニンを飲まないと眠れないほどの痛みが起き…

ひどい腱鞘炎になると一年たってもなおらない

4月になった。手に痛みを感じて湿布貼ったりし始めたのが去年の4月頃なので、腱鞘炎になってだいたい1年がたった。個人的には、痛みを和らげる塗り薬よりも、サポーターでガチガチに固めるのとストレッチが効果があった。もちろん、休むのが大事で、土日にバ…

ひどい腱鞘炎になると半年たってもなおらない

はじめに 今後のため記録として残す。タイトルのとおりで、手が全て腱鞘炎という、ひどい腱鞘炎になって半年以上が経ったが、完治する気配がない。今でも寝起きや仕事終わりでは、人差し指や小指は曲げると激痛が走る。原因は手指の使いすぎなので、今の仕事…

近似最近傍探索ライブラリHnswlibのRuby bindingを作った

はじめに Hnswlibは、C++で書かれたHierarchical Navigable Small World graphsによる近似最近傍探索ライブラリである。近似最近棒探索のベンチマークでも上位に登場する。Ruby bindingがなかったので作成した。 hnswlib | RubyGems.org | your community ge…

インストール時にBLISをビルドしてNumo::Linalgのバックグラウンドライブラリに使用するGemを作成した

はじめに Numo::OpenBLASのBLIS版を作成した。Numo::OpenBLASを作ったのが、だいたい1年前だった。 インストール時にOpenBLASをビルドしてNumo::Linalgのバックグラウンドライブラリに使用するGemを作成した - 洋食の日記 BLISは、最適化BLASの一種で、線形…

RBSでメソッドをオーバーロードするときは三点リーダーを書く

はじめに タイトルのとおり。RBSによる型注釈が提供されているメソッドをmonkey patchして、その型注釈をpatch.rbsに書きたい時がある。Rubyのノリで書くと、重複定義エラーになる。 ディレクトリ構成 以降の文章は、次のようなディレクトリ構成で、 |- lib …

ひどい腱鞘炎になったので型注釈を書いている

はじめに タイトルのとおり。色々あって仕事でのタイプ量が急増したために、4月末頃からヒドい腱鞘炎に悩まされている。手首から先の曲がる箇所は全て曲げると痛い。朝起きてしばらくは、指が痛みで曲げられないほどで、仕事では、サポーターで手首から先を…

Rumaleのリッジ・線形回帰のソルバーでL-BFGS法が自動的に選択されるようにした

はじめに Rubyの機械学習ライブラリであるRumaleで、RidgeとLinearRegressionで、solver: 'auto' とした場合に、Numo::Linalgがロードされていない場合は、L-BFGS法をソルバーとするようにした。Numo::Linalgがロードされている場合は、従来どおり特異値分解…

Rumaleのカーネル法まわりを便利にした

はじめに Rubyの機械学習ライブラリであるRumaleに、前処理としてカーネル行列を計算するクラス、カーネルリッジ回帰による分類器を追加した。また、Nystroemカーネル近似では、サポートするカーネル関数がRBFカーネルだけであったが、多項式カーネルやシグ…

Rumaleに投票によるアンサンブル法を追加した

はじめに Rubyの機械学習ライブラリであるRumaleに、投票(voting)によるアンサンブル法を利用した分類器・回帰分析を追加して、ver. 0.22.4としてリリースした。 https://rubygems.org/gems/rumale/versions/0.22.4 使い方 Rumaleはgemコマンドでインスト…

Rumaleに非負最小二乗法による回帰を追加した

はじめに Rubyの機械学習ライブラリであるRumaleに、非負最小二乗法(Non-nagtive Least Squares, NNLS)による線形回帰を追加して、ver. 0.22.3としてリリースした。 https://rubygems.org/gems/rumale/versions/0.22.3 使い方 Rumaleはgemコマンドでインス…

Rumaleにスタッキングによる分類器と回帰分析を追加した

はじめに Rubyの機械学習ライブラリであるRumaleに、スタッキング(stacking / stacked generalization)を用いた分類器と回帰分析を追加して、ver. 0.22.2としてリリースした。 rumale | RubyGems.org | your community gem host 使い方 Rumaleはgemコマン…