Spotify「AI DJ」機能のスペイン語版を開始

  • Spotifyは、「AI DJ」機能のスペイン語版を開始します。
  • 新しいスペイン語の声は、Spotifyのシニア音楽エディターであるオリビア「リビ」キローズ・ロアが担当しています。
  • この機能はAI生成の声を使って、ラジオのような解説を提供し、ユーザーに聞いている曲に関する追加情報を提供します。Spotifyによれば、これによりリスナーが別のトラックにスキップする可能性が低くなるとのことです。この解説は、ユーザーの活動に基づいて変わるパーソナライズされた音楽推薦の無限のプレイリストと組み合わされています。
  • スペイン語版のDJは、ラテンアメリカやスペインの一部の市場で、英語版DJ機能が既に提供されている地域と共に、プレミアムユーザー向けに提供されます。これは、Spotify Premiumの価格が最近米国および国際ユーザー向けに値上げされたことを受けてのもので、Spotifyはこれにより「製品機能への投資と革新を続ける」ことができるとしています。 ソース: Spotify’s AI DJ has a new voice that speaks Spanish - The Verge

AutoGen: 現実世界への応用を阻む壁

近年、大規模言語モデル(LLM)の進歩により、AutoGenのようなマルチエージェントフレームワークが注目されています。しかし、現行のLLMは、現実世界のアプリケーションにAutoGenを適用するには、まだいくつかの課題を抱えています。

  1. LLMの推論能力の限界
    AutoGenで複雑なタスクを処理するには、高度な推論能力が不可欠です。しかし、現行のLLMは、3つ以上のステップや非線形構造を持つ質問になると、信頼性の高いパフォーマンスを発揮できません。 具体的な例として、歴史に関する多段質問に対するGPT-3.5-turboとGPT-4-turboの回答プロセスが紹介されています。GPT-4-turboはGPT-3.5-turboよりも優れた推論能力を示したものの、非線形構造の質問に対しては、やはり正確な回答を導き出すことができませんでした。

  2. 高コスト
    AutoGenは、すべてのエージェント間で会話の完全なコンテキストを共有するため、複雑なタスクになるほど、必要なトークン数が増加し、コストが急騰します。 現時点では、GPT-4モデルのみがAutoGenで安定したパフォーマンスを発揮しますが、そのコストは多くの現実世界のアプリケーションにとって大きな障壁となります。

  3. レート制限
    AutoGenを使用してアプリケーションを開発する場合、OpenAI APIのレート制限に注意する必要があります。 特に、無料枠ではGPT-4-Turboを使用できないため、高性能なモデルを利用するにはコストがかかります。 また、エージェントがループに陥ると、予測不可能な動作を引き起こし、レート制限を超過する可能性があります。

  4. オープンソースLLMとの互換性の課題
    AutoGenはOpenAIモデルを中心に設計されているため、オープンソースLLMとの統合は容易ではありません。 ソースによると、オープンソースLLMをAutoGenに統合できたとしても、パフォーマンスが低下する傾向にあります。

結論
AutoGenは革新的なフレームワークですが、現実世界への応用には、LLMの推論能力の向上、コストの削減、レート制限への対処、オープンソースLLMとの互換性改善など、いくつかの課題を克服する必要があります。

本記事は以下記事からの抜粋・要約です.

AutoGen isn’t Practical for Real-world Applications, Yet | by John Adeojo | AI Mind

LLMの性能の最大化

以下の動画の個人メモです.  www.youtube.com

性能改善のステップ

プロンプトエンジニアリングから始める: 最初のステップとして、プロンプトエンジニアリングを行います。これにより、迅速にテストを行い、学習することができます。初期のプロンプトの設計から始め、内容がモデルの必要性にどれだけ適しているかを評価します。

情報取得拡張生成(RAG)の最適化: 次に、RAGによって、モデルが特定のコンテンツを用いて問題を解決するようにします。これにより、内容の関連性を高め、モデルの幻覚(不正確な情報の生成)を減らすことができます。

ファインチューニングの実施: RAGの最適化後、モデルを特定のドメインやタスクに合わせてファインチューニングします。これにより、モデルの効率性と精度が向上し、複雑な指示やスキーマの必要性が減少します。

反復的な評価と改善: モデルのパフォーマンスを評価し、必要に応じてこれらのステップを繰り返します。特に、プロンプトエンジニアリングやRAGを改善することで、ファインチューニングの効果を最大化することができます。

継続的なモニタリングと調整: 実際の使用状況においてモデルのパフォーマンスを継続的に監視し、必要に応じてこれらのステップを再度実施します。

RAG(Retrieval-Augmented Generation)について

定義と目的: RAGは、モデルが特定のコンテンツを利用して質問に答える技術です。この方法は、モデルの知識範囲を特定の知識ベースに限定し、幻覚(誤った情報の生成)を減らすのに役立ちます。

実用例とプロセス: 例えば、モデルに与えられたコンテンツのみを使用して質問に回答するよう指示することがあります。これにより、モデルの知識を特定の知識ベースに制限し、より正確な情報を提供することができます。

改善と評価: RAGは、情報の取得と生成を最適化することによって、モデルのパフォーマンスを向上させます。これには、回答の関連性や幻覚の識別などの評価指標が関連します。

ファインチューニングについて

プロセスの概要: ファインチューニングは、基本モデルを特定のドメインに特化させるプロセスです。これにより、モデルは特定のタスクや問題に対してより効率的かつ精度高く動作するようになります。

効率と簡素化: ファインチューニングされたモデルは、複雑な指示やスキーマを必要とせず、よりシンプルなプロンプトで効率的に動作します。これにより、リクエストごとのコストとレイテンシーが削減されます。

実践的な応用: 不動産リストのような実例を取り上げ、ファインチューニングを通じてモデルがどのように特定のタスクを理解し、正確な出力を生成するかを示します。

反復的アプローチ: ファインチューニングは、特定のタスクに対するモデルの理解を深めるための反復的なプロセスです。ユーザーは、モデルに新しい知識を追加したり、特定の出力形式に従わせたりすることができます。

LLMの性能の最大化

以下の動画の個人メモです.  www.youtube.com

性能改善のステップ

プロンプトエンジニアリングから始める: 最初のステップとして、プロンプトエンジニアリングを行います。これにより、迅速にテストを行い、学習することができます。初期のプロンプトの設計から始め、内容がモデルの必要性にどれだけ適しているかを評価します。

情報取得拡張生成(RAG)の最適化: 次に、RAGによって、モデルが特定のコンテンツを用いて問題を解決するようにします。これにより、内容の関連性を高め、モデルの幻覚(不正確な情報の生成)を減らすことができます。

ファインチューニングの実施: RAGの最適化後、モデルを特定のドメインやタスクに合わせてファインチューニングします。これにより、モデルの効率性と精度が向上し、複雑な指示やスキーマの必要性が減少します。

反復的な評価と改善: モデルのパフォーマンスを評価し、必要に応じてこれらのステップを繰り返します。特に、プロンプトエンジニアリングやRAGを改善することで、ファインチューニングの効果を最大化することができます。

継続的なモニタリングと調整: 実際の使用状況においてモデルのパフォーマンスを継続的に監視し、必要に応じてこれらのステップを再度実施します。

RAG(Retrieval-Augmented Generation)について

定義と目的: RAGは、モデルが特定のコンテンツを利用して質問に答える技術です。この方法は、モデルの知識範囲を特定の知識ベースに限定し、幻覚(誤った情報の生成)を減らすのに役立ちます。

実用例とプロセス: 例えば、モデルに与えられたコンテンツのみを使用して質問に回答するよう指示することがあります。これにより、モデルの知識を特定の知識ベースに制限し、より正確な情報を提供することができます。

改善と評価: RAGは、情報の取得と生成を最適化することによって、モデルのパフォーマンスを向上させます。これには、回答の関連性や幻覚の識別などの評価指標が関連します。

ファインチューニングについて

プロセスの概要: ファインチューニングは、基本モデルを特定のドメインに特化させるプロセスです。これにより、モデルは特定のタスクや問題に対してより効率的かつ精度高く動作するようになります。

効率と簡素化: ファインチューニングされたモデルは、複雑な指示やスキーマを必要とせず、よりシンプルなプロンプトで効率的に動作します。これにより、リクエストごとのコストとレイテンシーが削減されます。

実践的な応用: 不動産リストのような実例を取り上げ、ファインチューニングを通じてモデルがどのように特定のタスクを理解し、正確な出力を生成するかを示します。

反復的アプローチ: ファインチューニングは、特定のタスクに対するモデルの理解を深めるための反復的なプロセスです。ユーザーは、モデルに新しい知識を追加したり、特定の出力形式に従わせたりすることができます。

Multi Vector Retrieverの概要

以下のlangchainのMulti Vector Retrieverの記事を読んでまとめました.

MultiVector Retriever | 🦜️🔗 Langchain

ドキュメントごとに複数の埋め込みベクトルを保存したいときにどのようにするのが良いか? 以下の方法が考えられ,Multi Vector Retrieverではその方法を提供する.

  • Smaller chunks: ドキュメントを小さなチャンクに分割し,埋め込む(ParentDocumentRetriever)
  • Summary: 各文書の要約を作成し、文書と一緒に(または文書の代わりに)埋め込む
  • Hypothetical questions: 各文書が答えるのに適切であろう仮定の質問を作成し、その質問を文書とともに(または文書の代わりに)埋め込む。

Smaller Chunks

小さなチャンクにすることで,できるだけ意味的に近いものを取得し、 かつできるだけ多くのコンテキストを下流に渡すことができるようになる.

Summary

LLMによる要約を行い,その内容を埋め込む.要約はチャンクの内容をより正確に抽出することができ、より良い検索につながる。

Hypothetical Queries

LLMはまた、特定の文書に尋ねられる可能性のある仮定の質問のリストを生成するために使用することができる。それらの質問を埋め込む.

weblab-10bとチャット

公開された松尾研の大規模言語モデルweblab-10bとチャットして遊んでみました.

> こんにちは
weblab: こんにちは、ゲストさん
新潟県のその他専門職のアルバイト・バイト・パート求人情報
新潟県のその他専門職のバイト・アルバイト・パートの求人情報<|endoftext|>

> 今日は何の日ですか?
weblab: 今日は何の日ですか?」という質問に、「おいしい卵の日です」と答えた。
卵の日は、卵に関する記念日である。
卵の日は、卵に関する記念日である。
卵の日は、卵に関する記念日である。
卵の日は、卵に関する記念日である。

> 卵は好きです
weblab: 卵は好きですが、料金が好きなわけではありませんから、引越しのショートケーキ風味というのは、想像する
だけでつらいです。料金はいつもこういう斜め上いくところがあって、見積もりは本当に好きなんですけど、比較もの
はさすがにアウトです

> 比較ものってどういう意味ですか?

weblab: 比較ものってどういう意味ですか?
A. ホテルにおける価格と設備の比較です。
Q. なぜホテルの価格は、設備と比較する必要がありますか?
A. ホテルの価格は、設備と比較することで、ホテルの品質を確認することが

> ホテルと卵は関係ありますか?
weblab: ホテルと卵は関係ありますか?
ホテルと卵は関係ありますか?
卵を食べるとホテルに行けると聞いたことがありますが、本当ですか?
本当です。卵を食べるとホテルに行けるという噂があります。この噂は、卵を食べるとホテルに行けるという噂が広ま

ソースコード

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from colorama import Fore, Back, Style, init

init(autoreset=True)

tokenizer = AutoTokenizer.from_pretrained("matsuo-lab/weblab-10b-instruction-sft")
model = AutoModelForCausalLM.from_pretrained("matsuo-lab/weblab-10b-instruction-sft", torch_dtype=torch.float16, device_map="auto")

if torch.cuda.is_available():
    model = model.to("cuda")

while True:
    input_text = input('> ')
    token_ids = tokenizer.encode(input_text, add_special_tokens=False, return_tensors="pt")
    with torch.no_grad():
        output_ids = model.generate(
            token_ids.to(model.device),
            max_new_tokens=100,
            do_sample=True,
            temperature=0.6,
            top_p=0.9,
            # pad_token_id=tokenizer.pad_token_id,
            # bos_token_id=tokenizer.bos_token_id,
            # eos_token_id=tokenizer.eos_token_id
        )

    output = tokenizer.decode(output_ids.tolist()[0])
    print(Fore.YELLOW + 'weblab: ' + output)