Heim Technologie-Peripheriegeräte KI Implementierung von OpenAI CLIP für benutzerdefinierte Datensätze

Implementierung von OpenAI CLIP für benutzerdefinierte Datensätze

Sep 14, 2023 am 11:57 AM
openai 数据集

Im Januar 2021 kündigte OpenAI zwei neue Modelle an: DALL-E und CLIP. Bei beiden Modellen handelt es sich um multimodale Modelle, die Text und Bilder auf irgendeine Weise verbinden. Der vollständige Name von CLIP lautet Contrastive Language-Image Pre-training (Contrastive Language-Image Pre-training), eine Vortrainingsmethode, die auf kontrastierenden Text-Bild-Paaren basiert. Warum CLIP einführen? Denn die derzeit beliebte Stable Diffusion ist kein einzelnes Modell, sondern besteht aus mehreren Modellen. Eine der Schlüsselkomponenten ist der Text-Encoder, der zum Codieren der Texteingabe des Benutzers verwendet wird. Dieser Text-Encoder ist der Text-Encoder im CLIP-Modell

Wenn das CLIP-Modell trainiert ist, können Sie ihm einen Eingabesatz geben und extrahieren Sie die relevantesten Bilder dazu. CLIP lernt die Beziehung zwischen einem vollständigen Satz und dem Bild, das er beschreibt. Das heißt, es wird auf vollständige Sätze trainiert und nicht auf einzelne Kategorien wie „Auto“, „Hund“ usw. Dies ist für die Anwendung von entscheidender Bedeutung. Wenn das Modell anhand vollständiger Phrasen trainiert wird, kann es mehr lernen und Muster zwischen Fotos und Text erkennen. Sie zeigten auch, dass das Modell als Klassifikator funktioniert, wenn es mit einem umfangreichen Datensatz aus Fotos und entsprechenden Sätzen trainiert wird. Als CLIP veröffentlicht wurde, übertraf seine Klassifizierungsleistung im ImageNet-Datensatz nach der Feinabstimmung ohne Feinabstimmung (Zero-Shot) die von ResNets-50, was bedeutet, dass es sehr nützlich ist.

在自定义数据集上实现OpenAI CLIP

In diesem Artikel werden wir also PyTorch verwenden, um das CLIP-Modell von Grund auf zu implementieren, damit wir CLIP besser verstehen können

Sie müssen hier zwei Bibliotheken verwenden: timm und Transformers, Let's Importieren Sie zuerst den Code

import os import cv2 import gc import numpy as np import pandas as pd import itertools from tqdm.autonotebook import tqdm import albumentations as A import matplotlib.pyplot as plt  import torch from torch import nn import torch.nn.functional as F import timm from transformers import DistilBertModel, DistilBertConfig, DistilBertTokenizer
Nach dem Login kopieren

Der nächste Schritt besteht darin, die Daten und die allgemeine Konfigurationskonfiguration vorzuverarbeiten. config ist eine gewöhnliche Python-Datei, in die wir alle Hyperparameter einfügen. Bei Verwendung von Jupyter Notebook handelt es sich um eine Klasse, die am Anfang von Notebook definiert wird.

class CFG:debug = Falseimage_path = "../input/flickr-image-dataset/flickr30k_images/flickr30k_images"captions_path = "."batch_size = 32num_workers = 4head_lr = 1e-3image_encoder_lr = 1e-4text_encoder_lr = 1e-5weight_decay = 1e-3patience = 1factor = 0.8epochs = 2device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model_name = 'resnet50'image_embedding = 2048text_encoder_model = "distilbert-base-uncased"text_embedding = 768text_tokenizer = "distilbert-base-uncased"max_length = 200 pretrained = True # for both image encoder and text encodertrainable = True # for both image encoder and text encodertemperature = 1.0 # image sizesize = 224 # for projection head; used for both image and text encodersnum_projection_layers = 1projection_dim = 256 dropout = 0.1
Nach dem Login kopieren

Es gibt auch einige Hilfsklassen für unsere benutzerdefinierten Indikatoren

class AvgMeter:def __init__(self, name="Metric"):self.name = nameself.reset() def reset(self):self.avg, self.sum, self.count = [0] * 3 def update(self, val, count=1):self.count += countself.sum += val * countself.avg = self.sum / self.count def __repr__(self):text = f"{self.name}: {self.avg:.4f}"return text  def get_lr(optimizer):for param_group in optimizer.param_groups:return param_group["lr"]
Nach dem Login kopieren

Unser Ziel ist es, Bilder und Sätze zu beschreiben. Der Datensatz muss also sowohl Sätze als auch Bilder zurückgeben. Sie müssen also den DistilBERT-Tagger verwenden, um den Satz (Titel) zu markieren, und dann DistilBERT die Tag-ID (input_ids) und die Aufmerksamkeitsmaske bereitstellen. DistilBERT ist kleiner als das BERT-Modell, aber die Ergebnisse der Modelle sind ähnlich, daher haben wir uns für die Verwendung entschieden.

Der nächste Schritt ist die Tokenisierung mit dem HuggingFace-Tokenizer. Das in __init__ erhaltene Tokenizer-Objekt wird geladen, wenn das Modell ausgeführt wird. Der Titel wird aufgefüllt und auf eine vorgegebene maximale Länge gekürzt. Bevor wir das relevante Bild laden, laden wir eine codierte Beschriftung in __getitem__, einem Wörterbuch mit den Schlüsseln input_ids und Attention_mask, und transformieren und erweitern sie (falls vorhanden). Verwandeln Sie es dann in einen Tensor und speichern Sie ihn in einem Wörterbuch mit „image“ als Schlüssel. Abschließend tragen wir den Originaltext des Titels zusammen mit dem Schlüsselwort „Titel“ in das Wörterbuch ein.

class CLIPDataset(torch.utils.data.Dataset):def __init__(self, image_filenames, captions, tokenizer, transforms):"""image_filenames and cpations must have the same length; so, if there aremultiple captions for each image, the image_filenames must have repetitivefile names """ self.image_filenames = image_filenamesself.captions = list(captions)self.encoded_captions = tokenizer(list(captions), padding=True, truncatinotallow=True, max_length=CFG.max_length)self.transforms = transforms def __getitem__(self, idx):item = {key: torch.tensor(values[idx])for key, values in self.encoded_captions.items()} image = cv2.imread(f"{CFG.image_path}/{self.image_filenames[idx]}")image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)image = self.transforms(image=image)['image']item['image'] = torch.tensor(image).permute(2, 0, 1).float()item['caption'] = self.captions[idx] return item  def __len__(self):return len(self.captions)    def get_transforms(mode="train"):if mode == "train":return A.Compose([A.Resize(CFG.size, CFG.size, always_apply=True),A.Normalize(max_pixel_value=255.0, always_apply=True),])else:return A.Compose([A.Resize(CFG.size, CFG.size, always_apply=True),A.Normalize(max_pixel_value=255.0, always_apply=True),])
Nach dem Login kopieren

Bild- und Text-Encoder: Wir werden ResNet50 als Bild-Encoder verwenden.

class ImageEncoder(nn.Module):"""Encode images to a fixed size vector""" def __init__(self, model_name=CFG.model_name, pretrained=CFG.pretrained, trainable=CFG.trainable):super().__init__()self.model = timm.create_model(model_name, pretrained, num_classes=0, global_pool="avg")for p in self.model.parameters():p.requires_grad = trainable def forward(self, x):return self.model(x)
Nach dem Login kopieren

Verwenden Sie DistilBERT als Textencoder. Verwenden Sie die endgültige Darstellung des CLS-Tokens, um die gesamte Darstellung des Satzes zu erhalten.

class TextEncoder(nn.Module):def __init__(self, model_name=CFG.text_encoder_model, pretrained=CFG.pretrained, trainable=CFG.trainable):super().__init__()if pretrained:self.model = DistilBertModel.from_pretrained(model_name)else:self.model = DistilBertModel(cnotallow=DistilBertConfig()) for p in self.model.parameters():p.requires_grad = trainable # we are using the CLS token hidden representation as the sentence's embeddingself.target_token_idx = 0 def forward(self, input_ids, attention_mask):output = self.model(input_ids=input_ids, attention_mask=attention_mask)last_hidden_state = output.last_hidden_statereturn last_hidden_state[:, self.target_token_idx, :]
Nach dem Login kopieren

Der obige Code hat das Bild und den Text in Vektoren fester Größe codiert (Bild 2048, Text 768). Wir benötigen, dass Bild und Text ähnliche Abmessungen haben, um sie vergleichen zu können, also setzen wir die Dimension 2048 und 768 Dimensionsvektoren Projiziert auf 256 Dimensionen (projection_dim), können wir sie nur vergleichen, wenn die Dimensionen gleich sind.

class ProjectionHead(nn.Module):def __init__(self,embedding_dim,projection_dim=CFG.projection_dim,dropout=CFG.dropout):super().__init__()self.projection = nn.Linear(embedding_dim, projection_dim)self.gelu = nn.GELU()self.fc = nn.Linear(projection_dim, projection_dim)self.dropout = nn.Dropout(dropout)self.layer_norm = nn.LayerNorm(projection_dim) def forward(self, x):projected = self.projection(x)x = self.gelu(projected)x = self.fc(x)x = self.dropout(x)x = x + projectedx = self.layer_norm(x)return x
Nach dem Login kopieren

Unser endgültiges CLIP-Modell sieht also so aus:

class CLIPModel(nn.Module):def __init__(self,temperature=CFG.temperature,image_embedding=CFG.image_embedding,text_embedding=CFG.text_embedding,):super().__init__()self.image_encoder = ImageEncoder()self.text_encoder = TextEncoder()self.image_projection = ProjectionHead(embedding_dim=image_embedding)self.text_projection = ProjectionHead(embedding_dim=text_embedding)self.temperature = temperature def forward(self, batch):# Getting Image and Text Featuresimage_features = self.image_encoder(batch["image"])text_features = self.text_encoder(input_ids=batch["input_ids"], attention_mask=batch["attention_mask"])# Getting Image and Text Embeddings (with same dimension)image_embeddings = self.image_projection(image_features)text_embeddings = self.text_projection(text_features) # Calculating the Losslogits = (text_embeddings @ image_embeddings.T) / self.temperatureimages_similarity = image_embeddings @ image_embeddings.Ttexts_similarity = text_embeddings @ text_embeddings.Ttargets = F.softmax((images_similarity + texts_similarity) / 2 * self.temperature, dim=-1)texts_loss = cross_entropy(logits, targets, reductinotallow='none')images_loss = cross_entropy(logits.T, targets.T, reductinotallow='none')loss = (images_loss + texts_loss) / 2.0 # shape: (batch_size)return loss.mean()  #这里还加了一个交叉熵函数 def cross_entropy(preds, targets, reductinotallow='none'):log_softmax = nn.LogSoftmax(dim=-1)loss = (-targets * log_softmax(preds)).sum(1)if reduction == "none":return losselif reduction == "mean":return loss.mean()
Nach dem Login kopieren

Hier muss erklärt werden, dass CLIP symmetrische Kreuzentropie als Verlustfunktion verwendet, was den Einfluss von Rauschen reduzieren und die Robustheit des Modells verbessern kann Der Einfachheit halber verwenden wir einfach die Kreuzentropie.

Wir können Folgendes testen:

# A simple Example  batch_size = 4 dim = 256 embeddings = torch.randn(batch_size, dim) out = embeddings @ embeddings.T print(F.softmax(out, dim=-1))
Nach dem Login kopieren

Der nächste Schritt ist das Training. Es gibt einige Funktionen, die uns beim Laden des Trainings- und Verifizierungsdatenladers helfen können Das ist alles

def make_train_valid_dfs():dataframe = pd.read_csv(f"{CFG.captions_path}/captions.csv")max_id = dataframe["id"].max() + 1 if not CFG.debug else 100image_ids = np.arange(0, max_id)np.random.seed(42)valid_ids = np.random.choice(image_ids, size=int(0.2 * len(image_ids)), replace=False)train_ids = [id_ for id_ in image_ids if id_ not in valid_ids]train_dataframe = dataframe[dataframe["id"].isin(train_ids)].reset_index(drop=True)valid_dataframe = dataframe[dataframe["id"].isin(valid_ids)].reset_index(drop=True)return train_dataframe, valid_dataframe   def build_loaders(dataframe, tokenizer, mode):transforms = get_transforms(mode=mode)dataset = CLIPDataset(dataframe["image"].values,dataframe["caption"].values,tokenizer=tokenizer,transforms=transforms,)dataloader = torch.utils.data.DataLoader(dataset,batch_size=CFG.batch_size,num_workers=CFG.num_workers,shuffle=True if mode == "train" else False,)return dataloader
Nach dem Login kopieren

App: Bilder einbetten und Übereinstimmungen finden.

Wie kann man es nach Abschluss der Schulung in der Praxis anwenden? Wir müssen eine Funktion schreiben, die das trainierte Modell lädt, es mit Bildern aus dem Validierungssatz versorgt und die Form (valid_set_size, 256) und die image_embeddings des Modells selbst zurückgibt. Die Aufrufmethode von

def train_epoch(model, train_loader, optimizer, lr_scheduler, step):loss_meter = AvgMeter()tqdm_object = tqdm(train_loader, total=len(train_loader))for batch in tqdm_object:batch = {k: v.to(CFG.device) for k, v in batch.items() if k != "caption"}loss = model(batch)optimizer.zero_grad()loss.backward()optimizer.step()if step == "batch":lr_scheduler.step() count = batch["image"].size(0)loss_meter.update(loss.item(), count) tqdm_object.set_postfix(train_loss=loss_meter.avg, lr=get_lr(optimizer))return loss_meter   def valid_epoch(model, valid_loader):loss_meter = AvgMeter() tqdm_object = tqdm(valid_loader, total=len(valid_loader))for batch in tqdm_object:batch = {k: v.to(CFG.device) for k, v in batch.items() if k != "caption"}loss = model(batch) count = batch["image"].size(0)loss_meter.update(loss.item(), count) tqdm_object.set_postfix(valid_loss=loss_meter.avg)return loss_meter
Nach dem Login kopieren

lautet wie folgt:

def main():train_df, valid_df = make_train_valid_dfs()tokenizer = DistilBertTokenizer.from_pretrained(CFG.text_tokenizer)train_loader = build_loaders(train_df, tokenizer, mode="train")valid_loader = build_loaders(valid_df, tokenizer, mode="valid")  model = CLIPModel().to(CFG.device)params = [{"params": model.image_encoder.parameters(), "lr": CFG.image_encoder_lr},{"params": model.text_encoder.parameters(), "lr": CFG.text_encoder_lr},{"params": itertools.chain(model.image_projection.parameters(), model.text_projection.parameters()), "lr": CFG.head_lr, "weight_decay": CFG.weight_decay}]optimizer = torch.optim.AdamW(params, weight_decay=0.)lr_scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode="min", patience=CFG.patience, factor=CFG.factor)step = "epoch" best_loss = float('inf')for epoch in range(CFG.epochs):print(f"Epoch: {epoch + 1}")model.train()train_loss = train_epoch(model, train_loader, optimizer, lr_scheduler, step)model.eval()with torch.no_grad():valid_loss = valid_epoch(model, valid_loader) if valid_loss.avg <p><span></span></p><p> Wir können sehen, dass der Effekt unserer Anpassung gut ist (aber auf dem Bild ist eine Katze, haha). Mit anderen Worten: Die CLIP-Methode kann auch an kleine Datensätze angepasst werden<span></span></p><p style="text-align:center;">Das Folgende ist der Code und Datensatz dieses Artikels:<img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/887/227/169466383022304.png" class="lazy" alt="在自定义数据集上实现OpenAI CLIP"></p><p>https://www.kaggle.com/code/jyotidabas/simple -openai-clip-implementierung<span></span></p>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonImplementierung von OpenAI CLIP für benutzerdefinierte Datensätze. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Feb 01, 2024 pm 09:18 PM

Im Jahr 2023 ist die KI-Technologie zu einem heißen Thema geworden und hat enorme Auswirkungen auf verschiedene Branchen, insbesondere im Programmierbereich. Die Bedeutung der KI-Technologie wird den Menschen zunehmend bewusst, und die Spring-Community bildet da keine Ausnahme. Mit der kontinuierlichen Weiterentwicklung der GenAI-Technologie (General Artificial Intelligence) ist es entscheidend und dringend geworden, die Erstellung von Anwendungen mit KI-Funktionen zu vereinfachen. Vor diesem Hintergrund entstand „SpringAI“ mit dem Ziel, den Prozess der Entwicklung von KI-Funktionsanwendungen zu vereinfachen, ihn einfach und intuitiv zu gestalten und unnötige Komplexität zu vermeiden. Durch „SpringAI“ können Entwickler einfacher Anwendungen mit KI-Funktionen erstellen, wodurch diese einfacher zu verwenden und zu bedienen sind.

Wählen Sie das Einbettungsmodell, das am besten zu Ihren Daten passt: Ein Vergleichstest von OpenAI und mehrsprachigen Open-Source-Einbettungen Wählen Sie das Einbettungsmodell, das am besten zu Ihren Daten passt: Ein Vergleichstest von OpenAI und mehrsprachigen Open-Source-Einbettungen Feb 26, 2024 pm 06:10 PM

OpenAI kündigte kürzlich die Einführung seines Einbettungsmodells embeddingv3 der neuesten Generation an, das seiner Meinung nach das leistungsstärkste Einbettungsmodell mit höherer Mehrsprachenleistung ist. Diese Reihe von Modellen ist in zwei Typen unterteilt: das kleinere Text-Embeddings-3-Small und das leistungsfähigere und größere Text-Embeddings-3-Large. Es werden nur wenige Informationen darüber offengelegt, wie diese Modelle entworfen und trainiert werden, und auf die Modelle kann nur über kostenpflichtige APIs zugegriffen werden. Es gab also viele Open-Source-Einbettungsmodelle. Aber wie schneiden diese Open-Source-Modelle im Vergleich zum Closed-Source-Modell von OpenAI ab? In diesem Artikel wird die Leistung dieser neuen Modelle empirisch mit Open-Source-Modellen verglichen. Wir planen, Daten zu erstellen

Posthume Arbeit des OpenAI Super Alignment Teams: Zwei große Modelle spielen ein Spiel und die Ausgabe wird verständlicher Posthume Arbeit des OpenAI Super Alignment Teams: Zwei große Modelle spielen ein Spiel und die Ausgabe wird verständlicher Jul 19, 2024 am 01:29 AM

Wenn die Antwort des KI-Modells überhaupt unverständlich ist, würden Sie es wagen, sie zu verwenden? Da maschinelle Lernsysteme in immer wichtigeren Bereichen eingesetzt werden, wird es immer wichtiger zu zeigen, warum wir ihren Ergebnissen vertrauen können und wann wir ihnen nicht vertrauen sollten. Eine Möglichkeit, Vertrauen in die Ausgabe eines komplexen Systems zu gewinnen, besteht darin, vom System zu verlangen, dass es eine Interpretation seiner Ausgabe erstellt, die für einen Menschen oder ein anderes vertrauenswürdiges System lesbar ist, d. h. so vollständig verständlich, dass mögliche Fehler erkannt werden können gefunden. Um beispielsweise Vertrauen in das Justizsystem aufzubauen, verlangen wir von den Gerichten, dass sie klare und lesbare schriftliche Stellungnahmen abgeben, die ihre Entscheidungen erläutern und stützen. Für große Sprachmodelle können wir auch einen ähnlichen Ansatz verfolgen. Stellen Sie bei diesem Ansatz jedoch sicher, dass das Sprachmodell generiert wird

Der Rust-basierte Zed-Editor ist Open Source und bietet integrierte Unterstützung für OpenAI und GitHub Copilot Der Rust-basierte Zed-Editor ist Open Source und bietet integrierte Unterstützung für OpenAI und GitHub Copilot Feb 01, 2024 pm 02:51 PM

Autor丨Zusammengestellt von TimAnderson丨Produziert von Noah|51CTO Technology Stack (WeChat-ID: blog51cto) Das Zed-Editor-Projekt befindet sich noch in der Vorabversionsphase und wurde unter AGPL-, GPL- und Apache-Lizenzen als Open Source bereitgestellt. Der Editor zeichnet sich durch hohe Leistung und mehrere KI-gestützte Optionen aus, ist jedoch derzeit nur auf der Mac-Plattform verfügbar. Nathan Sobo erklärte in einem Beitrag, dass in der Codebasis des Zed-Projekts auf GitHub der Editor-Teil unter der GPL lizenziert ist, die serverseitigen Komponenten unter der AGPL lizenziert sind und der GPUI-Teil (GPU Accelerated User) die Schnittstelle übernimmt Apache2.0-Lizenz. GPUI ist ein vom Zed-Team entwickeltes Produkt

Warten Sie nicht auf OpenAI, sondern darauf, dass Open-Sora vollständig Open Source ist Warten Sie nicht auf OpenAI, sondern darauf, dass Open-Sora vollständig Open Source ist Mar 18, 2024 pm 08:40 PM

Vor nicht allzu langer Zeit wurde OpenAISora mit seinen erstaunlichen Videogenerierungseffekten schnell populär und stach aus der Masse der literarischen Videomodelle hervor und rückte in den Mittelpunkt der weltweiten Aufmerksamkeit. Nach der Einführung des Sora-Trainings-Inferenzreproduktionsprozesses mit einer Kostenreduzierung von 46 % vor zwei Wochen hat das Colossal-AI-Team das weltweit erste Sora-ähnliche Architektur-Videogenerierungsmodell „Open-Sora1.0“ vollständig als Open-Source-Lösung bereitgestellt, das das gesamte Spektrum abdeckt Lernen Sie den Trainingsprozess, einschließlich der Datenverarbeitung, aller Trainingsdetails und Modellgewichte, kennen und schließen Sie sich mit globalen KI-Enthusiasten zusammen, um eine neue Ära der Videoerstellung voranzutreiben. Schauen wir uns für einen kleinen Vorgeschmack ein Video einer geschäftigen Stadt an, das mit dem vom Colossal-AI-Team veröffentlichten Modell „Open-Sora1.0“ erstellt wurde. Open-Sora1.0

Um ein neues wissenschaftliches und komplexes Frage-Antwort-Benchmark- und Bewertungssystem für große Modelle bereitzustellen, haben UNSW, Argonne, die University of Chicago und andere Institutionen gemeinsam das SciQAG-Framework eingeführt Um ein neues wissenschaftliches und komplexes Frage-Antwort-Benchmark- und Bewertungssystem für große Modelle bereitzustellen, haben UNSW, Argonne, die University of Chicago und andere Institutionen gemeinsam das SciQAG-Framework eingeführt Jul 25, 2024 am 06:42 AM

Herausgeber | Der Frage-Antwort-Datensatz (QA) von ScienceAI spielt eine entscheidende Rolle bei der Förderung der Forschung zur Verarbeitung natürlicher Sprache (NLP). Hochwertige QS-Datensätze können nicht nur zur Feinabstimmung von Modellen verwendet werden, sondern auch effektiv die Fähigkeiten großer Sprachmodelle (LLMs) bewerten, insbesondere die Fähigkeit, wissenschaftliche Erkenntnisse zu verstehen und zu begründen. Obwohl es derzeit viele wissenschaftliche QS-Datensätze aus den Bereichen Medizin, Chemie, Biologie und anderen Bereichen gibt, weisen diese Datensätze immer noch einige Mängel auf. Erstens ist das Datenformular relativ einfach, die meisten davon sind Multiple-Choice-Fragen. Sie sind leicht auszuwerten, schränken jedoch den Antwortauswahlbereich des Modells ein und können die Fähigkeit des Modells zur Beantwortung wissenschaftlicher Fragen nicht vollständig testen. Im Gegensatz dazu offene Fragen und Antworten

Microsoft und OpenAI planen, 100 Millionen US-Dollar in humanoide Roboter zu investieren! Internetnutzer rufen Musk an Microsoft und OpenAI planen, 100 Millionen US-Dollar in humanoide Roboter zu investieren! Internetnutzer rufen Musk an Feb 01, 2024 am 11:18 AM

Anfang des Jahres wurde bekannt, dass Microsoft und OpenAI große Geldsummen in ein Startup für humanoide Roboter investieren. Unter anderem plant Microsoft, 95 Millionen US-Dollar zu investieren, und OpenAI wird 5 Millionen US-Dollar investieren. Laut Bloomberg wird das Unternehmen in dieser Runde voraussichtlich insgesamt 500 Millionen US-Dollar einsammeln, und seine Pre-Money-Bewertung könnte 1,9 Milliarden US-Dollar erreichen. Was zieht sie an? Werfen wir zunächst einen Blick auf die Robotik-Erfolge dieses Unternehmens. Dieser Roboter ist ganz in Silber und Schwarz gehalten und ähnelt in seinem Aussehen dem Abbild eines Roboters in einem Hollywood-Science-Fiction-Blockbuster: Jetzt steckt er eine Kaffeekapsel in die Kaffeemaschine: Wenn sie nicht richtig platziert ist, passt sie sich von selbst an menschliche Fernbedienung: Nach einer Weile kann jedoch eine Tasse Kaffee mitgenommen und genossen werden: Haben Sie Familienmitglieder, die es erkannt haben? Ja, dieser Roboter wurde vor einiger Zeit erstellt.

Die lokale Ausführungsleistung des Embedding-Dienstes übertrifft die von OpenAI Text-Embedding-Ada-002, was sehr praktisch ist! Die lokale Ausführungsleistung des Embedding-Dienstes übertrifft die von OpenAI Text-Embedding-Ada-002, was sehr praktisch ist! Apr 15, 2024 am 09:01 AM

Ollama ist ein superpraktisches Tool, mit dem Sie Open-Source-Modelle wie Llama2, Mistral und Gemma problemlos lokal ausführen können. In diesem Artikel werde ich vorstellen, wie man Ollama zum Vektorisieren von Text verwendet. Wenn Sie Ollama nicht lokal installiert haben, können Sie diesen Artikel lesen. In diesem Artikel verwenden wir das Modell nomic-embed-text[2]. Es handelt sich um einen Text-Encoder, der OpenAI text-embedding-ada-002 und text-embedding-3-small bei kurzen und langen Kontextaufgaben übertrifft. Starten Sie den nomic-embed-text-Dienst, wenn Sie o erfolgreich installiert haben

See all articles