見出し画像

Llama3.3 128Kコンテキスト長多言語対応オープンLLMと200万トークン対応かつ無料で使えるGemini-exp-1206など

OpenAIが平日毎日新機能の説明をするというイベントのために午前2時に起きたが、割と興味のない内容だったので松尾さんと二人で憤慨していたのだが、その裏でMetaがLlama3.3-70Bを公開していた。70BでGPT-4oを上回る性能かつ、Llama3.1 405Bを上回る性能らしい。

早速、昨日試したAttentionにまつわる物語を翻訳してもらうと、確かになかなかいい翻訳になった。

From: Dzmitry Bahdanau
To: Andrej
Date: 2022年9月1日 6:05 PM

Hi Andrej、

8年前に起こったことを話すことを嬉しく思います!

私は、Herbert Jaegerの下でJacobs UniversityでMScの1年目を終えた後に、Yoshuaの研究所にインターンとして赴任しました。私はYoshuaに「何に取り組んでいいか教えてください」と言ったところ、Kyunghyun Choと一緒に機械翻訳プロジェクトに取り組むことになりました。私は、単語の列をベクトルに圧縮するという考えに非常に懐疑的でした。しかし、私はPhDのオファーが欲しかったので、袖をまくって、コードを書き、バグを修正するなどの仕事に取り組み始めました。ある時点で、私はプロジェクトの理解度を示し、Yoshuaは私にPhDを勧めました(2014年は、そんなに厳しくなかった時代でしたから)。私はとても喜んでいたですし、楽しみながら創造的に取り組む時期だと考えました。

そこで、私はエンコーダとデコーダのRNN間のボトルネックを避ける方法について考えるようになりました。私の最初のアイデアは、2つの「カーソル」を持つモデルを作ることでした。1つはソースシーケンス(BiRNNによってエンコードされる)を移動し、もう1つはターゲットシーケンスを移動します。カーソルの軌跡は、動的プログラミングによって周辺化されます。Kyunghyun Choは、これがAlex GravesのRNN Transducerモデルと等価であることを認識しました。その後、私はアレックス・グレイブスの手書き認識の論文を読んだかもしれません。しかし、このアプローチは機械翻訳には適していないように見えました。

上記のカーソルアプローチは、インターン期間の残り5週間では実装するのが難しすぎるため、私は代わりにもっと簡単なものを試しました。2つのカーソルが同時に同期して動きます(実質的に、硬コード化された対角的な注意)。それが多少はうまくいきましたが、アプローチが優雅ではなかったです。

ある日、私はデコーダRNNがソースシーケンスの中でカーソルをどこに置くかを学習できるようにしたいと思ったのです。これは、私の中学校で英語を学ぶ際の翻訳の練習からインスピレーションを得たものでした。目線は、翻訳しながらソースシーケンスとターゲットシーケンスの間を往復します。私は、ソフト検索をsoftmaxとBiRNN状態の加重平均として表現しました。それは最初からとてもうまくいきました。私はこのアーキテクチャをRNNSearchと名付けました。私たちは、GoogleのIlyaと彼のチームが巨大な8GPUのLSTMモデルで先んじていることを知っていたので、アーカイブ論文を急いで出版しました(RNNSearchはまだ1GPUで動作していました)。

その後、名前が良くなかったことがわかりました。より良い名前(注意)は、Yoshuaによって最終的な段階で結論に追加されました。

私たちは、その1.5か月後にアレックス・グレイブスのNMT論文を読みました。それは確かに同じアイデアでしたが、彼はまったく異なる動機でそれに到達しました。私たちの場合は、必要性が発明の母でした。彼の場合は、ニューラルとシンボリックAIを橋渡しする野心でした、と思うのです。ジェイソン・ウェストンらのメモリ・ネットワークの論文も、同様のメカニズムを特徴としていました。

私は、注意が表現学習の核となる演算として、より低いレベルで使用できることを予測することはできませんでした。しかし、トランスフォーマーの論文を読んだとき、私はすぐに研究所の友人に「RNNは死んだ」と宣言しました。

あなたの元の質問に戻ります:モントリオールのYoshuaの研究所での「可微分かつデータ依存の加重平均」の発明は、Neural Turing Machines、Memory Networks、以及90年代(または70年代)のある認知科学の論文から独立したものでした。これは、Yoshuaの研究所を野心的に導くリーダーシップ、Kyunghyun Choの優れたスキルで大規模な機械翻訳プロジェクトを運営する能力、以及私自身の創造性とコードスキルが結びついた結果でした。ただし、私は、このアイデアは、GPUが十分に高速化して深層学習の研究が本格的に始まるまで待たされることはなかったと思います。私自身、アレックス・グレイブス、その他の人物が深層学習をしていないとしても、注意は深層学習で柔軟な空間接続性を実現するために自然な方法であり、待ち望まれるアイデアであったと考えます。

それ以来、私の大きなAIの野心は、翻訳プロジェクトのような驚くべき応用プロジェクトを開始することです。素晴らしいR&Dの取り組みは、すべての華麗な理論化よりも、基本的な技術の進歩に多くの貢献をします。私はそれ以来、いつもそんなプロジェクトに取り組みたいと思っています。

あなたの教育AIプロジェクトについてもっと聞きたいです(Harm de Vriesからいくつか噂を聞きました)。

Cheers、
ディマ

これでいいじゃんよ。
これまでLlama系は日本語に弱かったが、翻訳タスクでここまで性能が上がると、もうわざわざ日本語のファインチューニングをする必要性が薄れてきてる気がする。

AnyChatで誰でも無料で試せる。Groqは日本語がうまく処理できないらしくデタラメな役になったのでHyperbolicを使った方がいい結果になった。

基本的な知識を確認してみる。

プロンプト:日本の都道府県と県庁所在地、それぞれの地域の特徴をJavaScript形式でまとめてください

日本の都道府県と県庁所在地、それぞれの地域の特徴をJavaScript形式でまとめました。

// 日本の都道府県と県庁所在地
const prefectures = [
  { name: "北海道", capital: "札幌市", region: "北海道" },
  { name: "青森県", capital: "青森市", region: "東北" },
  { name: "岩手県", capital: "盛岡市", region: "東北" },
  { name: "宮城県", capital: "仙台市", region: "東北" },
  { name: "秋田県", capital: "秋田市", region: "東北" },
  { name: "山形県", capital: "山形市", region: "東北" },
  { name: "福島県", capital: "福島市", region: "東北" },
  { name: "茨城県", capital: "水戸市", region: "関東" },
  { name: "栃木県", capital: "宇都宮市", region: "関東" },
  { name: "群馬県", capital: "前橋市", region: "関東" },
  { name: "埼玉県", capital: "さいたま市", region: "関東" },
  { name: "千葉県", capital: "千葉市", region: "関東" },
  { name: "東京都", capital: "新宿区", region: "関東" },
  { name: "神奈川県", capital: "横浜市", region: "関東" },
  { name: "新潟県", capital: "新潟市", region: "中部" },
  { name: "富山県", capital: "富山市", region: "中部" },
  { name: "石川県", capital: "金沢市", region: "中部" },
  { name: "福井県", capital: "福井市", region: "中部" },
  { name: "山梨県", capital: "甲府市", region: "中部" },
  { name: "長野県", capital: "長野市", region: "中部" },
  { name: "岐阜県", capital: "岐阜市", region: "中部" },
  { name: "静岡県", capital: "静岡市", region: "中部" },
  { name: "愛知県", capital: "名古屋市", region: "中部" },
  { name: "三重県", capital: "津市", region: "近畿" },
  { name: "滋賀県", capital: "大津市", region: "近畿" },
  { name: "京都府", capital: "京都市", region: "近畿" },
  { name: "大阪府", capital: "大阪市", region: "近畿" },
  { name: "兵庫県", capital: "神戸市", region: "近畿" },
  { name: "奈良県", capital: "奈良市", region: "近畿" },
  { name: "和歌山県", capital: "和歌山市", region: "近畿" },
  { name: "鳥取県", capital: "鳥取市", region: "中国" },
  { name: "島根県", capital: "松江市", region: "中国" },
  { name: "岡山県", capital: "岡山市", region: "中国" },
  { name: "広島県", capital: "広島市", region: "中国" },
  { name: "山口県", capital: "山口市", region: "中国" },
  { name: "徳島県", capital: "徳島市", region: "四国" },
  { name: "香川県", capital: "高松市", region: "四国" },
  { name: "愛媛県", capital: "松山市", region: "四国" },
  { name: "高知県", capital: "高知市", region: "四国" },
  { name: "福岡県", capital: "福岡市", region: "九州" },
  { name: "佐賀県", capital: "佐賀市", region: "九州" },
  { name: "長崎県", capital: "長崎市", region: "九州" },
{ name: "熊本県", capital: "熊本市", region: "九州" },  
 { name: "大分県", capital: "大分市", region: "九州" },  
 { name: "宮崎県", capital: "宮崎市", region: "九州" }, 
  { name: "鹿児島県", capital: "鹿児島市", region: "九州" },  
 { name: "沖縄県", capital: "那覇市", region: "九州" } ];  


// 地域の特徴
const regions = {
  "北海道": "寒冷な気候、豊かな自然、農業、漁業",
  "東北": "寒冷な気候、豊かな自然、農業、漁業",
  "関東": "人口密度が高く、経済、文化、政治の中心地",
  "中部": "自然豊かで、観光、農業、工業が盛ん",
  "近畿": "文化、歴史、経済の中心地、人口密度が高く",
  "中国": "自然豊かで、観光、農業、工業が盛ん",
  "四国": "自然豊かで、観光、農業、工業が盛ん",
  "九州": "自然豊かで、観光、農業、工業が盛ん"
};

// 都道府県と地域の特徴を出力
prefectures.forEach((prefecture) => {
  console.log(`都道府県:${prefecture.name}`);
  console.log(`県庁所在地:${prefecture.capital}`);
  console.log(`地域:${prefecture.region}`);
  console.log(`地域の特徴:${regions[prefecture.region]}`);
  console.log(`-------------------`);
});

このコードでは、都道府県と県庁所在地、それぞれの地域の特徴をJavaScriptのオブジェクトで定義しています。さらに、forEachメソッドを使用して、都道府県と地域の特徴を出力しています。

割と文句のつけようがない。
学習用データセットに相当な工夫をしたことが伺える。まあこういう典型的な問題に対応させただけかもしれないが。

プロンプト:9.11と9.8ではどちらが大きい?

9.11は9.8より大きいです。

これはダメなのか。

プロンプト:ステップバイステップで考えて。9.11と9.8はどちらが大きい?

ステップバイステップで考えてみましょう。9.11と9.8はどちらも小数点以下2桁の数字です。
9.11と9.8を比較する場合、小数点以下1桁目(0.1)と小数点以下2桁目(0.01)を比較する必要があります。
小数点以下1桁目(0.1)を比較すると、9.11の0.1は9.8の0.0より大きいことがわかります。
したがって、9.11は9.8より大きいです。

ダメだな。もう少しヒントをあげるか

プロンプト:ステップバイステップで考えて。9.11と9.8はどちらが大きい?二つの数の大きさを比べるには、小数点がなくなるまで10^n枚するのがいいよ

9.11と9.8の大きさを比べるには、小数点がなくなるまで10の累乗を掛けてみましょう。

10倍すると、9.11は91.1、9.8は98になります。さらに10倍すると、9.11は911、9.8は980になります。ここで、小数点はなくなっています。

911は980より小さいので、元の数では9.8が9.11より大きいと言えます。したがって、9.8は9.11よりも大きいです。

まあ小学生くらいの知能はあると思われる。
あーこの「知能がある」という表現は危険だな。本当は知能なんかどこにもないんだが。「小学生に言って聞かせればできること」はできそうだ、という現象を指しているのであって、本質的に「知能がある」わけではない。それはo1 proも同じ。

o1 proはかなりつまらないことで間違える。今のところ、ほとんどの人にとって、o1 proにo1の10倍の金を価値は無いと思う。o1 proが突出しているのはプログラミング能力だが、それとてo1で十分足りてしまうように見えなくもない。

プログラミング能力といえば、Geminiもアップデートした。200万コンテキストに対応し、APIとAIstudioで使うことができる。AIstudioは無料だ。



Geminiはこれまで日本語にすごく弱かったが、今回のGeminiは日本語がすごく強くなっている。ReplitとかBolt.newとかCursorとかと組み合わせたら高い効果を発揮しそうだ。

Ollamaも0.5にアップデートされ、構造化されたレスポンスを受け取ることができる。

OpenAIの発表がちょっと肩透かしでも、他のAI研究チームが全力で成果をぶつけてくるので今月は退屈はしなさそうだ。