OpenAI は最近、最新世代の埋め込みモデル embedding v3 のリリースを発表しました。これは、より高い多言語パフォーマンスを備えた最もパフォーマンスの高い埋め込みモデルであると主張しています。このモデルのバッチは、小さい text-embeddings-3-small と、より強力で大きい text-embeddings-3-large の 2 つのタイプに分類されます。
これらのモデルがどのように設計され、トレーニングされるかについてはほとんど情報が公開されておらず、モデルには有料 API を介してのみアクセスできます。オープンソースの組み込みモデルは数多くありますが、これらのオープンソース モデルは OpenAI のクローズド ソース モデルとどう違うのでしょうか?
この記事では、これらの新しいモデルのパフォーマンスをオープンソース モデルと実証的に比較します。私たちは、ユーザーのクエリに基づいてコーパスから最も関連性の高いドキュメントを見つけることが主要なタスクとなるデータ検索ワークフローを構築する予定です。
私たちのコーパスは欧州人工知能法であり、現在検証段階にあります。このコーパスは、人工知能に関連する世界初の法的枠組みであり、24 の言語で利用できるという点でユニークです。これにより、さまざまな言語背景でのデータ検索の精度を比較できるようになり、人工知能の異文化適用に重要なサポートが提供されます。
多言語テキスト コーパスを使用してカスタムの合成質問/回答データセットを作成し、このデータセットを使用して OpenAI を最新の状態と比較する予定です。 the-art オープンソースの埋め込みモデルの精度。私たちのアプローチは他のデータ コーパスにも簡単に適用できるため、完全なコードを共有します。
カスタム Q/A データ セットの生成
まず、カスタムの質問と回答 (Q/A) データを作成することから始めます。これを行う利点は、データ セットがモデル トレーニングのバイアス要因にならないようにし、MTEB などのベンチマーク参照で発生する可能性のある状況を回避できることです。さらに、カスタム データセットを生成することで、特定のデータ コーパスに合わせて評価プロセスを調整できます。これは、検索拡張アプリケーション (RAG) などのシナリオで重要になる可能性があります。
Llama Index ドキュメントで提案されている簡単なプロセスに従います。まず、コーパスがチャンクに分割されます。次に、ブロックごとに、大規模言語モデル (LLM) を使用して一連の合成質問を生成し、答えが対応するブロック内にあることを確認します。
Llama Index のような LLM データ フレームを使用してこの戦略を実装するのは、以下のコードに示すように非常に簡単です。
from llama_index.readers.web import SimpleWebPageReader from llama_index.core.node_parser import SentenceSplitter language = "EN" url_doc = "https://eur-lex.europa.eu/legal-content/"+language+"/TXT/HTML/?uri=CELEX:52021PC0206" documents = SimpleWebPageReader(html_to_text=True).load_data([url_doc]) parser = SentenceSplitter(chunk_size=1000) nodes = parser.get_nodes_from_documents(documents, show_progress=True)
コーパスは EU 人工知能法の英語版であり、この公式 URL を使用して Web から直接取得されます。最終バージョンはまだすべてのヨーロッパ言語で利用可能ではないため、この記事では 2021 年 4 月のドラフト バージョンを使用します。そのため、私たちが選択したバージョンでは、URL 内の言語を他の 23 の EU の公式言語に置き換えることができ、さまざまな言語 (ブルガリア語の BG、スペイン語の ES、チェコ語の CS など) でテキストを取得できます。
SentenceSplitter オブジェクトを使用して、ドキュメントを 1000 トークンごとのチャンクに分割します。英語の場合、これにより約 100 のチャンクが生成されます。各ブロックは、次のプロンプト (Llama Index ライブラリで提案されているデフォルトのプロンプト) へのコンテキストとして提供されます。
prompts={} prompts["EN"] = """\ Context information is below. --------------------- {context_str} --------------------- Given the context information and not prior knowledge, generate only questions based on the below query. You are a Teacher/ Professor. Your task is to setup {num_questions_per_chunk} questions for an upcoming quiz/examination. The questions should be diverse in nature across the document. Restrict the questions to the context information provided." """
このプロンプトでは、ドキュメントに関する質問が生成されます。ブロックでは、データ チャンクごとに生成する質問の数がパラメーター「num_questions_per_chunk」として渡され、これを 2 に設定します。その後、Llama Index ライブラリのgenerate_qa_embedding_pairsを呼び出すことで質問を生成できます:
from llama_index.llms import OpenAI from llama_index.legacy.finetuning import generate_qa_embedding_pairs qa_dataset = generate_qa_embedding_pairs(llm=OpenAI(model="gpt-3.5-turbo-0125",additional_kwargs={'seed':42}),nodes=nodes,qa_generate_prompt_tmpl = prompts[language],num_questions_per_chunk=2 )
我们依靠OpenAI的GPT-3.5-turbo-0125来完成这项任务,结果对象' qa_dataset '包含问题和答案(块)对。作为生成问题的示例,以下是前两个问题的结果(其中“答案”是文本的第一部分):
- What are the main objectives of the proposal for a Regulation laying down harmonised rules on artificial intelligence (Artificial Intelligence Act) according to the explanatory memorandum?
- How does the proposal for a Regulation on artificial intelligence aim to address the risks associated with the use of AI while promoting the uptake of AI in the European Union, as outlined in the context information?
OpenAI嵌入模型
评估函数也是遵循Llama Index文档:首先所有答案(文档块)的嵌入都存储在VectorStoreIndex中,以便有效检索。然后评估函数循环遍历所有查询,检索前k个最相似的文档,并根据MRR (Mean Reciprocal Rank)评估检索的准确性,代码如下:
def evaluate(dataset, embed_model, insert_batch_size=1000, top_k=5):# Get corpus, queries, and relevant documents from the qa_dataset objectcorpus = dataset.corpusqueries = dataset.queriesrelevant_docs = dataset.relevant_docs # Create TextNode objects for each document in the corpus and create a VectorStoreIndex to efficiently store and retrieve embeddingsnodes = [TextNode(id_=id_, text=text) for id_, text in corpus.items()]index = VectorStoreIndex(nodes, embed_model=embed_model, insert_batch_size=insert_batch_size)retriever = index.as_retriever(similarity_top_k=top_k) # Prepare to collect evaluation resultseval_results = [] # Iterate over each query in the dataset to evaluate retrieval performancefor query_id, query in tqdm(queries.items()):# Retrieve the top_k most similar documents for the current query and extract the IDs of the retrieved documentsretrieved_nodes = retriever.retrieve(query)retrieved_ids = [node.node.node_id for node in retrieved_nodes] # Check if the expected document was among the retrieved documentsexpected_id = relevant_docs[query_id][0]is_hit = expected_id in retrieved_ids # assume 1 relevant doc per query # Calculate the Mean Reciprocal Rank (MRR) and append to resultsif is_hit:rank = retrieved_ids.index(expected_id) + 1mrr = 1 / rankelse:mrr = 0eval_results.append(mrr) # Return the average MRR across all queries as the final evaluation metricreturn np.average(eval_results)
嵌入模型通过' embed_model '参数传递给评估函数,对于OpenAI模型,该参数是一个用模型名称和模型维度初始化的OpenAIEmbedding对象。
from llama_index.embeddings.openai import OpenAIEmbedding embed_model = OpenAIEmbedding(model=model_spec['model_name'],dimensinotallow=model_spec['dimensions'])
dimensions参数可以缩短嵌入(即从序列的末尾删除一些数字),而不会失去嵌入的概念表示属性。OpenAI在他们的公告中建议,在MTEB基准测试中,嵌入可以缩短到256大小,同时仍然优于未缩短的text-embedding-ada-002嵌入(大小为1536)。
我们在四种不同的嵌入模型上运行评估函数:
两个版本的text-embedding-3-large:一个具有最低可能维度(256),另一个具有最高可能维度(3072)。它们被称为“OAI-large-256”和“OAI-large-3072”。
OAI-small:text-embedding-3-small,维数为1536。
OAI-ada-002:传统的文本嵌入text-embedding-ada-002,维度为1536。
每个模型在四种不同的语言上进行评估:英语(EN),法语(FR),捷克语(CS)和匈牙利语(HU),分别涵盖日耳曼语,罗曼语,斯拉夫语和乌拉尔语的例子。
embeddings_model_spec = { } embeddings_model_spec['OAI-Large-256']={'model_name':'text-embedding-3-large','dimensions':256} embeddings_model_spec['OAI-Large-3072']={'model_name':'text-embedding-3-large','dimensions':3072} embeddings_model_spec['OAI-Small']={'model_name':'text-embedding-3-small','dimensions':1536} embeddings_model_spec['OAI-ada-002']={'model_name':'text-embedding-ada-002','dimensions':None} results = [] languages = ["EN", "FR", "CS", "HU"] # Loop through all languages for language in languages: # Load datasetfile_name=language+"_dataset.json"qa_dataset = EmbeddingQAFinetuneDataset.from_json(file_name) # Loop through all modelsfor model_name, model_spec in embeddings_model_spec.items(): # Get modelembed_model = OpenAIEmbedding(model=model_spec['model_name'],dimensinotallow=model_spec['dimensions']) # Assess embedding score (in terms of MRR)score = evaluate(qa_dataset, embed_model) results.append([language, model_name, score]) df_results = pd.DataFrame(results, columns = ["Language" ,"Embedding model", "MRR"])
MRR精度如下:
嵌入尺寸越大,性能越好。
开源嵌入模型
围绕嵌入的开源研究也是非常活跃的,Hugging Face 的 MTEB leaderboard会经常发布最新的嵌入模型。
为了在本文中进行比较,我们选择了一组最近发表的四个嵌入模型(2024)。选择的标准是他们在MTEB排行榜上的平均得分和他们处理多语言数据的能力。所选模型的主要特性摘要如下。
e5-mistral-7b-instruct:微软的这个E5嵌入模型是从Mistral-7B-v0.1初始化的,并在多语言混合数据集上进行微调。模型在MTEB排行榜上表现最好,但也是迄今为止最大的(14GB)。
multilingual-e5-large-instruct(ML-E5-large):微软的另一个E5模型,可以更好地处理多语言数据。它从xlm-roberta-large初始化,并在多语言数据集的混合上进行训练。它比E5-Mistral小得多(10倍),上下文大小也小得多(514)。
BGE-M3:该模型由北京人工智能研究院设计,是他们最先进的多语言数据嵌入模型,支持100多种工作语言。截至2024年2月22日,它还没有进入MTEB排行榜。
nomic-embed-text-v1 (Nomic- embed):该模型由Nomic设计,其性能优于OpenAI Ada-002和text-embedding-3-small,而且大小仅为0.55GB。该模型是第一个完全可复制和可审计的(开放数据和开源训练代码)的模型。
用于评估这些开源模型的代码类似于用于OpenAI模型的代码。主要的变化在于模型参数:
embeddings_model_spec = { } embeddings_model_spec['E5-mistral-7b']={'model_name':'intfloat/e5-mistral-7b-instruct','max_length':32768, 'pooling_type':'last_token', 'normalize': True, 'batch_size':1, 'kwargs': {'load_in_4bit':True, 'bnb_4bit_compute_dtype':torch.float16}} embeddings_model_spec['ML-E5-large']={'model_name':'intfloat/multilingual-e5-large','max_length':512, 'pooling_type':'mean', 'normalize': True, 'batch_size':1, 'kwargs': {'device_map': 'cuda', 'torch_dtype':torch.float16}} embeddings_model_spec['BGE-M3']={'model_name':'BAAI/bge-m3','max_length':8192, 'pooling_type':'cls', 'normalize': True, 'batch_size':1, 'kwargs': {'device_map': 'cuda', 'torch_dtype':torch.float16}} embeddings_model_spec['Nomic-Embed']={'model_name':'nomic-ai/nomic-embed-text-v1','max_length':8192, 'pooling_type':'mean', 'normalize': True, 'batch_size':1, 'kwargs': {'device_map': 'cuda', 'trust_remote_code' : True}} results = [] languages = ["EN", "FR", "CS", "HU"] # Loop through all models for model_name, model_spec in embeddings_model_spec.items(): print("Processing model : "+str(model_spec)) # Get modeltokenizer = AutoTokenizer.from_pretrained(model_spec['model_name'])embed_model = AutoModel.from_pretrained(model_spec['model_name'], **model_spec['kwargs']) if model_name=="Nomic-Embed":embed_model.to('cuda') # Loop through all languagesfor language in languages: # Load datasetfile_name=language+"_dataset.json"qa_dataset = EmbeddingQAFinetuneDataset.from_json(file_name) start_time_assessment=time.time() # Assess embedding score (in terms of hit rate at k=5)score = evaluate(qa_dataset, tokenizer, embed_model, model_spec['normalize'], model_spec['max_length'], model_spec['pooling_type']) # Get duration of score assessmentduration_assessment = time.time()-start_time_assessment results.append([language, model_name, score, duration_assessment]) df_results = pd.DataFrame(results, columns = ["Language" ,"Embedding model", "MRR", "Duration"])
結果は次のとおりです。
BGE-M3 が最高のパフォーマンスを示し、次に ML-E5-Large、E5- が続きました。 misstral-7b および Nomic-Embed。 BGE-M3 モデルはまだ MTEB ランキングでベンチマークされておらず、当社の結果は他のモデルよりも上位にランクされる可能性があることを示しています。 BGE-M3 は多言語データ用に最適化されていますが、英語でも他のモデルよりも優れたパフォーマンスを発揮します。
オープンソース モデルは一般にローカルで実行する必要があるため、各組み込みモデルの処理時間も意図的に記録しました。
E5-mistral-7b は他のモデルに比べて 10 倍以上大きいため、最も遅いのが通常です
概要
すべての結果を要約します
オープンソース モデルを使用して取得しました最高のパフォーマンスを得るには、BGE-M3 モデルが最高のパフォーマンスを発揮しました。このモデルは OpenAI モデルと同じコンテキスト長 (8K) を持ち、サイズは 2.2GB です。
OpenAI のラージ (3072)、スモール、ADA モデルのパフォーマンスは非常に似ています。大きい (256) の埋め込みサイズを減らすとパフォーマンスが低下し、OpenAI が言うほどの ada ほど良くありません。
ほぼすべてのモデル (ML-E5-large を除く) は英語で最高のパフォーマンスを発揮します。チェコ語やハンガリー語などの言語では、おそらくトレーニングするデータが少ないため、パフォーマンスに大きな違いがあります。
OpenAI のサブスクリプションにお金を払うべきですか、それともオープンソースの組み込みモデルをホストするべきですか?
OpenAI の最近の価格調整により、API がより手頃な価格になりました。現在のコストは 100 万トークンあたり 0.13 ドルです。 1 か月あたり 100 万件のクエリを処理する場合 (各クエリに約 1,000 トークンが含まれると仮定)、コストは約 130 ドルになります。したがって、実際のニーズに基づいて、オープンソースの埋め込みモデルをホストするかどうかを選択できます。
もちろん、考慮すべき点は費用対効果だけではありません。遅延、プライバシー、データ処理ワークフローの制御などの他の要素も考慮する必要がある場合があります。オープンソース モデルには、完全なデータ制御、プライバシーの強化、カスタマイズという利点があります。
レイテンシと言えば、OpenAI の API にもレイテンシの問題があり、応答時間が長くなる場合があるため、OpenAI の API が必ずしも最速の選択肢であるとは限りません。
つまり、オープンソース モデルと OpenAI のような独自のソリューションのどちらを選択するかは、簡単な答えではありません。オープンソースの埋め込みは、パフォーマンスとデータのより優れた制御を組み合わせる優れたオプションを提供します。そして、特にプライバシーへの懸念が二の次である場合、OpenAIの製品は利便性を優先する人々にとって依然として魅力的である可能性がある。
この記事のコード: https://github.com/Yannael/multilingual-embeddings
以上がデータに最適なエンベディング モデルの選択: OpenAI とオープンソースの多言語エンベディングの比較テストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ジョン・ロールズの独創的な1971年の著書「正義の理論」で、彼は私たちが今日のAIデザインの核となり、意思決定を使用するべきであるという思考実験を提案しました:無知のベール。この哲学は、公平性を理解するための簡単なツールを提供し、リーダーがこの理解を使用してAIを公平に設計および実装するための青写真を提供します。 あなたが新しい社会のルールを作っていると想像してください。しかし、前提があります。この社会でどのような役割を果たすかは事前にわかりません。過半数または限界少数派に属している、金持ちまたは貧弱、健康、または障害者になることがあります。この「無知のベール」の下で活動することで、ルールメーカーが自分自身に利益をもたらす決定を下すことができません。それどころか、人々はより公衆を策定する意欲があります

ロボットプロセスオートメーション(RPA)を専門とする多くの企業は、繰り返しタスクを自動化するためのボットを提供しています。 一方、プロセスマイニング、オーケストレーション、インテリジェントドキュメント処理スペシャル

AIの未来は、単純な単語の予測と会話シミュレーションを超えて動いています。 AIエージェントは出現しており、独立したアクションとタスクの完了が可能です。 このシフトは、AnthropicのClaudeのようなツールですでに明らかです。 AIエージェント:研究a

急速な技術の進歩は、仕事の未来に関する将来の見通しの視点を必要とします。 AIが単なる生産性向上を超えて、私たちの社会構造の形成を開始するとどうなりますか? Topher McDougalの今後の本、Gaia Wakes:

多くの場合、Harmonized System(HS)などのシステムからの「HS 8471.30」などの複雑なコードを含む製品分類は、国際貿易と国内販売に不可欠です。 これらのコードは、すべてのINVに影響を与える正しい税申請を保証します

データセンターと気候技術投資におけるエネルギー消費の将来 この記事では、AIが推進するデータセンターのエネルギー消費の急増と気候変動への影響を調査し、この課題に対処するための革新的なソリューションと政策の推奨事項を分析します。 エネルギー需要の課題:大規模で超大規模なデータセンターは、数十万の普通の北米の家族の合計に匹敵する巨大な力を消費し、新たなAIの超大規模なセンターは、これよりも数十倍の力を消費します。 2024年の最初の8か月で、Microsoft、Meta、Google、Amazonは、AIデータセンターの建設と運用に約1,250億米ドルを投資しました(JP Morgan、2024)(表1)。 エネルギー需要の成長は、挑戦と機会の両方です。カナリアメディアによると、迫り来る電気

生成AIは、映画とテレビの制作に革命をもたらしています。 LumaのRay 2モデル、滑走路のGen-4、OpenaiのSora、GoogleのVEO、その他の新しいモデルは、前例のない速度で生成されたビデオの品質を向上させています。これらのモデルは、複雑な特殊効果と現実的なシーンを簡単に作成できます。短いビデオクリップやカメラ認知モーション効果も達成されています。これらのツールの操作と一貫性を改善する必要がありますが、進歩の速度は驚くべきものです。 生成ビデオは独立した媒体になりつつあります。アニメーション制作が得意なモデルもあれば、実写画像が得意なモデルもあります。 AdobeのFireflyとMoonvalleyのMAであることは注目に値します

ChatGptユーザーエクスペリエンスは低下します:それはモデルの劣化ですか、それともユーザーの期待ですか? 最近、多数のCHATGPT有料ユーザーがパフォーマンスの劣化について不満を述べています。 ユーザーは、モデルへの応答が遅く、答えが短い、助けの欠如、さらに多くの幻覚を報告しました。一部のユーザーは、ソーシャルメディアに不満を表明し、ChatGptは「お世辞になりすぎて」、重要なフィードバックを提供するのではなく、ユーザービューを検証する傾向があることを指摘しています。 これは、ユーザーエクスペリエンスに影響を与えるだけでなく、生産性の低下やコンピューティングリソースの無駄など、企業の顧客に実際の損失をもたらします。 パフォーマンスの劣化の証拠 多くのユーザーは、特にGPT-4などの古いモデル(今月末にサービスから廃止される)で、ChatGPTパフォーマンスの大幅な分解を報告しています。 これ


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ホットトピック









