SwiftでRAG実装 Part 2:クエリに類似するドキュメント検索の試み で実装していて気がついたのだが、MLTensor の API ドキュメントを眺めると行列計算の関数が充実しることを知って感動した。
MLTensor | Apple Developer Documentation
昔、SCNVector 同士の計算を実装しようとした時、ベクトルという名でありながらベクトル計算の API がまったくなかったので残念に思ったことがあったのでなおさら。
どんな関数があるかというと、行列とスカラの演算はもちろん、行列同士の内積、軸ごとの最大/平均/最小を求めたり、軸に沿って累積積を計算したり、1次元に再配列したり、とキリがない。どんなアウトプットになるのか試してみないとわからないものも多い。
ただ、Core ML のコンテクストで引き回すデータ表現としては MLTensor が相性良いものの、行列演算そのものの高速性を求めるなら、やはり Accelerate framework を使ったほうが良いらしい(ChatGPTによる)。