🗞️

今週の生成AI情報まとめ(9/30~10/6)

2024/11/16に公開

こんにちは、ナウキャストでLLMエンジニアをしているRyotaroです。
9/30~10/6で収集した生成AIに関連する情報をまとめています。

※注意事項

内容としては自分が前の週に収集した生成AIの記事やXでの投稿・論文が中心になるのと、自分のアンテナに引っかかった順なので、多少古い日付のものを紹介する場合があります

それでは行きましょう

ひとこと

最近案件で多忙だったため、約1ヶ月遅れですがお許しを…

富士通 Takane を提供開始 (9/30)

富士通は 9/30 に Cohere と共同開発した LLM "Takane" の提供を開始。CohereのLLM「Command R+」をベースに、日本語に特化させるための追加学習とファインチューニングを行ったAIモデル。日本語の性能評価指標「JGLUE」で世界最高記録を達成。

特徴としては、プライベート環境で利用できること、日本語に特化していること

Dataset Takane Command R+ GPT-4 GPT-4o Sonnet 3.5
JSTS (Pearson)(注5) 0.93 0.88 0.91 0.89 0.90
JCoLA (Bal. acc.)(注6) 0.84 0.71 0.65 0.82 0.66
JNLI (Bal. acc.)(注7) 0.94 0.77 0.83 0.84 0.90
JCommonsenseQA (Exact Match)(注8) 0.98 0.96 0.95 0.98 0.97
JSQuAD (Accuracy)(注9) 0.93 0.86 0.84 0.86 0.87
JGLUE Average 0.92 0.84 0.84 0.88 0.86

参考資料

https://pr.fujitsu.com/jp/news/2024/09/30.html
https://www.itmedia.co.jp/aiplus/articles/2409/30/news159.html

Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning

この論文では、大規模言語モデル(LLM)のファインチューニングにおける「内在次元性(Intrinsic Dimensionality)」が、少量のデータで効果的にファインチューニングできる理由を説明する鍵であると提案されている。"内在次元性"とは、ある最適化問題を解くために必要な最小限の次元を指し、事前学習モデルのファインチューニングが低次元で実行可能であることを示す。

問題提起として上がっていたのが、数百万〜数十億のパラメータを持つ事前学習モデルが、数百〜数千のラベル付きデータでファインチューニング可能な理由は明確でない、ということ。それに対し内在次元性を用いると、モデルのパラメータ全体ではなく低次元の空間で効率的にファインチューニングできる理由を説明できると仮説を立てたところ、実際にあっていた。

実際に小規模データ(MRPC)および大規模データ(QQP)で実験。 RoBERTaモデルでは、200〜800の低次元パラメータで高い性能を発揮。他にもモデルが事前学習を進めるほど、内在次元性が低下し、大規模モデルほど、内在次元性が低く、効率的にファインチューニングが可能であることがわかった。内在次元性が低いモデルは、テスト性能が向上し、トレーニングとテスト間の性能ギャップも小さい。

つまり、要点をまとめると

  • 少ないパラメータで十分な性能が出せる
  • 大規模な事前学習モデルほど効率的
  • 事前学習は内在次元性を最適化している

参考資料

https://arxiv.org/abs/2012.13255

素数 ✖️ 画像生成AI

素数を画像生成AIに取り入れた方がいて面白かったので共有します!
素数理論と生成したい画像のスタイルや説明を組み込んでプロンプトにすると、細部が綺麗な画像が出来上がるということだと思われます。

#1. 素数理論の基本概念
素数は、1と自分自身以外では割り切れない自然数のことです。つまり、2、3、5、7、11、13などが素数に該当します。素数の分布には特定の規則性がないため、自然数の中で非常に特殊な役割を果たします。素数理論では、これらの数字の性質や分布について深く考察します。素数には以下のような特徴があります。

・非周期性: 素数の出現には一定のパターンがなく、ランダム性が含まれています。
・単純さと複雑さの共存: 素数は単純に定義されているが、分布は非常に複雑です。
この「単純な定義に基づく複雑な分布」という特徴は、画像生成に対しても新たな視覚的パターンやランダム性を提供する可能性があります。

#2. 素数理論を活かした画像生成AIのアイデア
・1. 構造とランダム性の組み合わせ
素数の分布に基づいて、ランダム性を導入しつつも一定の規則性を持つデザインパターンを生成できます。例えば、背景や模様の配置に素数列を利用して、ランダムな要素が散りばめられたようなデザインを作り出せます。

応用例:
素数に対応する点や形状をキャンバス上にランダムに配置する。
画像内の要素(色、形、線のパターンなど)を素数に基づいた間隔や大きさで配置し、全体的に非周期的な模様を作り出す。

・2. フラクタル的な構造の生成
素数のリズムや分布を使ってフラクタル的な構造を生成することも考えられます。フラクタルとは、自己相似性を持つ幾何学的なパターンで、自然界に広く見られるものです。素数のリズムに基づいて、自己相似的な画像生成を行えば、複雑で興味深いパターンができあがります。

応用例:
フラクタル図形をベースにした画像生成において、素数列を使用して、各レイヤーの複雑さや大きさをコントロールする。
自然界の木や葉、山の形状を模倣するアルゴリズムに素数を取り入れ、非対称かつ有機的なパターンを再現。

・3. 色や形のリズムに素数を利用
色のパターンや形状の変化に素数の規則を応用することも面白いです。色の配置や形の変化を素数に基づいた間隔や順序で決定することで、一般的なパターンにはないランダムな美しさを持つ画像を作成できます。

応用例:
素数に基づいて、色のグラデーションや色相の変化をランダムに配置する。
形状やオブジェクトの大きさ、位置を素数を用いて不規則に設定し、動きのあるダイナミックなデザインを生成。

・4. アルゴリズム的な生成パターン
素数をベースにしたアルゴリズムを活用して、画像生成に新しい規則を設けることも考えられます。例えば、ユークリッドのアルゴリズムや素数分解を応用して、幾何学的なパターンやモザイクを生成することができます。

応用例:
画像内の特定の領域に素数分解を利用してピクセルを配置し、ユニークなテクスチャやパターンを作る。
素数をベースにしたグリッドシステムを活用して、視覚的なリズムを生み出す。

#3. 素数理論と画像生成AIの本質的な結びつき
素数理論の非周期的でランダム性を帯びた特徴は、画像生成AIに新たな視覚的言語を提供します。以下の点が本質的に重要だと考えられます。

・予測不可能性と創造性
素数はその分布が予測不可能であるため、これを利用することで従来の規則的なデザインにはない「意外性」や「偶発性」を作品に取り入れることができます。この特性は、AIがクリエイティブプロセスにおいて新しい発見を促すための手法として活用できます。
・秩序とカオスの融合
素数は単純な法則に基づくが、その出現にはカオスが伴います。これを画像生成に応用すると、システムが持つ「規則性」と「不規則性」のバランスを取ることができ、視覚的に調和の取れたカオスを作り出すことが可能です。

・人間の認知との相互作用
人間は自然にパターンを探し出す能力を持っており、素数のように複雑で非周期的な構造は、見る者に独特の印象を与えます。素数理論を取り入れた画像生成は、この「パターンの認知」をより深いレベルで刺激し、ユーザーに新たな視覚体験を提供します。

イエローナイフのオーロラ, 夜空, 北極圏の風景

基本構成

  • 広大な夜空を背景に、緑と紫を基調としたオーロラが舞う
  • 地上には雪に覆われた針葉樹林と凍った湖面が広がる
  • 遠景に小さなイエローナイフの町の灯りが点在

素数に基づく要素の配置

  • オーロラの波動は素数列(2, 3, 5, 7, 11, 13, 17, 19, 23)に基づいて変化し、不規則な美しさを演出
  • 星々は素数の座標に配置され、自然な輝きのパターンを形成
  • 地上の木々は素数間隔で配置され、有機的な森林景観を創出

フラクタル的構造

  • オーロラの渦巻き模様に素数ベースのフラクタルパターンを適用し、複雑で魅惑的な光の織物を表現
  • 雪の結晶や氷の模様にも素数を用いたフラクタル構造を取り入れ、微視的な美しさを付加

色彩とリズム

  • オーロラの色彩は素数に対応する波長の光を基に、緑(557nm)、紫(427nm)、赤(630nm)を中心に変化
  • 色の強度は素数列に従って変動し、自然な明暗のリズムを生成
  • 地上の雪面の反射光も素数パターンで変化し、幻想的な雰囲気を醸成

秩序とカオスの融合

  • 整然と並ぶ針葉樹と、不規則に舞うオーロラのコントラストで秩序とカオスを表現
  • 湖面の氷の亀裂パターンに素数ベースのアルゴリズムを適用し、自然な不規則性を付与
  • 町の灯りは素数位置に配置しつつ、明るさをランダムに変化させ、生命感を演出

スタイル: 写実的, 高解像度, 夜景撮影技法を用いた長時間露光効果

参考資料

https://x.com/studio_veco/status/1840468102687100962
https://x.com/tetumemo/status/1840750243484491933

Codium

CodiumAIは、テストにフォーカスした生成AI/LLM(Large Language Models)を用いた開発者ツールを提供する会社です。
PRを自動で作成、コメント、レビューしてくれる PR-Agentという AI 機能も出しておりこれがかなり優秀そう。

GitHub Actions のワークフローに組み込むことができて、プロンプトも追加で書けるのでデフォルトは英語だが、日本語指定することができる。しかも AzureOpenAI に対応しているのでセキュアにもなっている。

on:
  pull_request:
  issue_comment:

jobs:
  pr_agent_job:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
      contents: write

    name: Run pr agent on every pull request, respond to user comments

    steps:
      - name: PR Agent action step
        id: pragent
        uses: Codium-ai/pr-agent@main
        env:
          OPENAI.API_TYPE: azure
          OPENAI.API_BASE: ${{ vars.AOAI_API_BASE }}
          OPENAI.API_VERSION: ${{ vars.AOAI_API_VERSION }}
          OPENAI.DEPLOYMENT_ID: ${{ vars.AOAI_DEPLOYMENT_ID }}
          OPENAI_KEY: ${{ secrets.AOAI_API_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PR_REVIEWER.EXTRA_INSTRUCTIONS: "Please use Japanese in descriptions."
          PR_DESCRIPTION.ADD_ORIGINAL_USER_DESCRIPTION: true
          PR_DESCRIPTION.EXTRA_INSTRUCTIONS: "Please use Japanese in descriptions. Titles should have prefix of commitlint pattern such as `feat:`, `chore:`, `test:`, `fix:`, `ci:`, `docs:` etc"
          PR_CODE_SUGGESTIONS.EXTRA_INSTRUCTIONS: "Please use Japanese in descriptions."
          PR_UPDATE_CHANGELOG.EXTRA_INSTRUCTIONS: "Please use Japanese in descriptions."
          github_action.auto_review: "true"
          github_action.auto_describe: "true"
          github_action.auto_improve: "true"

要約

自動レビュー

改善提案

多くの人のコメントを見る限り、改善提案はずれたことを言ってくることも多々あるので、参考程度につ可能が良さそう。

ラベル付け

/generate_labels でラベル付けも行なってくれるのはありがたい

参考資料

https://www.qodo.ai/
https://www.softbank.jp/biz/blog/cloud-technology/articles/202312/aoai-apim-genieai-pragent/
https://devlog.neton.co.jp/other/ganbaruzoi/
https://qiita.com/posi_posi/items/343bcc8e87a28c51bbfc
https://x.com/shiba_program/status/1840315589329322316

OpenAI プロンプトキャッシング(10/1)

OpenAI がプロンプトキャッシング機能を提供開始しました。1024トークンを超えるプロンプトに対して、128トークンずつキャッシュと合っているか見る。自動で割引が行われ10,000トークンを超える長いプロンプトでは最大80%レイテンシーが削減されることもあるそう。

モデル名 キャッシュされていない入力トークン キャッシュされている入力トークン 出力トークン
gpt-4o-2024-08-06 $2.50 $1.25 $10.00
GPT-4o fine-tuning $3.75 $1.875 $15.00
gpt-4o-mini-2024-07-18 $0.15 $0.075 $0.60
GPT-4o mini fine-tuning $0.30 $0.15 $1.20
o1-preview $15.00 $7.50 $60.00
o1 mini $3.00 $1.50 $12.00

大事な点は以下の3点

  • 自動で割引が適用されること
  • 1024 トークン以上で、開始からキャッシュと完全一致している部分のみ割引の対象
  • キャッシュの保存期間は5~10分

2つ目の割引の対象が先頭から一致している部分なので必然的にシステムプロンプトは固定文言で固める方が効率的にキャッシュを利用できる

ちなみに画像もキャッシュできる

参考資料

https://cookbook.openai.com/examples/prompt_caching101
https://zenn.dev/kun432/scraps/4fdfe1af08e533

Google RAG 戦略

RAG においてベクトル検索は非常に重要な手法だが、類似度を計算するという特性上次のような課題が存在する。それは「空はなぜ青いか?」という質問に対して、「太陽光の散乱が青色の原因です」は、文脈としては違いが、別々の文として明確に異なる意味を持つため、類似度が高くでない。

そこで Google は新しい「タスクタイプ」というタグを入れて embedding する手法を考案。

たとえば、質問と回答の埋め込みを生成するには、埋め込みを生成するときに、クエリテキストにタスクタイプ QUESTION_ANSWERING を指定し、回答テキストに RETRIEVAL_DOCUMENT を指定するだけです。タスクタイプで最適化された埋め込み空間では、クエリ埋め込み「なぜ空は青いのか?」と回答埋め込み「散乱...」は、埋め込みモデルが質問と回答の関係があることを学習するようにトレーニングされているため、はるかに近くに配置されます。したがって、ベクターデータベースを使用して、クエリの正しい回答を見つけるための検索品質を高めることができます。

タスクタイプ

タスクタイプ ユースケース
意味的類似性 類似の文を検索します。類似のテキストやドキュメントを検索する場合は、このタスクタイプを使用します。
検索クエリ ドキュメントの検索と情報取得。クエリ テキストには RETRIEVAL_QUERY を使用し、取得するドキュメントには RETRIEVAL_DOCUMENT を使用します。
質問_回答 RAG などの質疑応答アプリケーション。質問テキストには QUESTION_ANSWERING を使用し、取得するドキュメントには RETRIEVAL_DOCUMENT を使用します。
事実の検証 事実確認のための文書検索。対象テキストには FACT_VERIFICATION を使用し、取得する文書には RETRIEVAL_DOCUMENT を使用します。
分類 テキスト分類。埋め込みを使用して小規模な分類モデルをトレーニングするには、このタスク タイプを使用します。
クラスタリング テキスト クラスタリング。このタスク タイプは、k-means またはその他のクラスタリング分析に使用します。
from vertexai.language_models import TextEmbeddingInput, TextEmbeddingModel

model = TextEmbeddingModel.from_pretrained("text-embedding-004")
input = TextEmbeddingInput("Why is the sky blue?", "QUESTION_ANSWERING")
embeddings = model.get_embeddings([input])
print(embeddings[0].values)

>>> [0.0291112270206213, 0.020356014370918274, 0.011219413951039314,...]

参考資料

https://cloud.google.com/blog/products/ai-machine-learning/improve-gen-ai-search-with-vertex-ai-embeddings-and-task-types

We are Hiring!

この件についてもっと詳しく知りたい、議論したい、はたまたナウキャストという会社に興味を持ったという方は、カジュアル面談フォームから連絡ください。その際に「今週の生成AI情報まとめ見た!」と書いていただければ幸いです!

https://herp.careers/v1/finatexthd/vZWzSlI_B-qk
https://herp.careers/v1/finatexthd/KhEf95X_TKvD

Discussion