Hub Python Library documentation
Model Kartları oluşturun ve paylaşın
Model Kartları oluşturun ve paylaşın
huggingface_hub kütüphanesi, Model Card'ları oluşturmak, paylaşmak ve güncellemek için bir Python arayüzü sağlar.
Hub'daki Model Card'ların ne olduğunu ve altyapıda nasıl çalıştığını daha derinlemesine incelemek için özel dokümantasyon sayfasını ziyaret edin.
Hub'dan Bir Model Kartı Yükle
Hub'dan mevcut bir kartı yüklemek için ModelCard.load() işlevini kullanabilirsiniz. Burada, kartı nateraw/vit-base-beans adresinden yüklüyoruz.
from huggingface_hub import ModelCard
card = ModelCard.load('nateraw/vit-base-beans')Bu kart, erişmek veya kullanmak isteyebileceğiniz bazı faydalı özniteliklere sahiptir:
card.data: Model kartının meta verilerini içeren bir ModelCardData örneği döndürür. Bu örneğin sözlük temsilini almak için.to_dict()çağrısını yapın.card.text: Kartın metnini döndürür, meta veri başlığı hariç.card.content: Kartın metin içeriğini, meta veri başlığı dahil olmak üzere döndürür.
Model Kartları Oluşturma
Metinden
Bir Model Card'ı metinden başlatmak için, kartın metin içeriğini başlatma sırasında ModelCard'a iletmeniz yeterlidir.
content = """
---
language: en
license: mit
---
# My Model Card
"""
card = ModelCard(content)
card.data.to_dict() == {'language': 'en', 'license': 'mit'} # TrueBunu yapmak isteyebileceğiniz bir başka yöntem f-strings kullanmaktır. Aşağıdaki örnekte, biz:
- Tanımladığımız metadata'yi YAML'e dönüştürmek ve model kartına YAML bloğunu eklemek için ModelCardData.to_yaml() kullanın.
- Bir şablon değişkenini Python f-dizgileri (f-strings) aracılığıyla nasıl kullanabileceğinizi gösterin.
card_data = ModelCardData(language='en', license='mit', library='timm')
example_template_var = 'nateraw'
content = f"""
---
{ card_data.to_yaml() }
---
# My Model Card
This model created by [@{example_template_var}](https://github.com/{example_template_var})
"""
card = ModelCard(content)
print(card)Yukarıdaki örnek, bize aşağıdaki gibi görünen bir kart bırakacaktır:
---
language: en
license: mit
library: timm
---
# My Model Card
This model created by [@nateraw](https://github.com/nateraw)Bir Jinja Şablonundan
Jinja2 yüklüyse, bir jinja şablon dosyasından Model Kartları oluşturabilirsiniz. Temel bir örneğe bakalım:
from pathlib import Path
from huggingface_hub import ModelCard, ModelCardData
# Define your jinja template
template_text = """
---
{{ card_data }}
---
# Model Card for MyCoolModel
This model does this and that.
This model was created by [@{{ author }}](https://hf.co/{{author}}).
""".strip()
# Write the template to a file
Path('custom_template.md').write_text(template_text)
# Define card metadata
card_data = ModelCardData(language='en', license='mit', library_name='keras')
# Create card from template, passing it any jinja template variables you want.
# In our case, we'll pass author
card = ModelCard.from_template(card_data, template_path='custom_template.md', author='nateraw')
card.save('my_model_card_1.md')
print(card)Oluşturulan kartın markdown görünümü şu şekildedir:
---
language: en
license: mit
library_name: keras
---
# Model Card for MyCoolModel
This model does this and that.
This model was created by [@nateraw](https://hf.co/nateraw).Herhangi bir card.data öğesini güncellerseniz, değişiklik kartın kendisinde yansıtılır.
card.data.library_name = 'timm'
card.data.language = 'fr'
card.data.license = 'apache-2.0'
print(card)Şimdi görebileceğiniz gibi, meta veri başlığı güncellenmiştir:
---
language: fr
license: apache-2.0
library_name: timm
---
# Model Card for MyCoolModel
This model does this and that.
This model was created by [@nateraw](https://hf.co/nateraw).Kart verilerini güncelleyirken, ModelCard.validate() çağrısı yaparak kartın Hugging Face Hub üzerinde hâlâ geçerli olup olmadığını doğrulayabilirsiniz. Bu, kartın Hugging Face Hub üzerinde tanımlanmış tüm doğrulama kurallarını karşıladığından emin olmanızı sağlar.
Varsayılan Şablon
Kendi şablonunuzu kullanmak yerine, doldurmak isteyebileceğiniz birçok bölüme sahip, tam donanımlı bir model kartı olan varsayılan şablonu da kullanabilirsiniz. Arka planda, bir şablon dosyasını doldurmak için Jinja2 kullanır.
from_templatekullanmak için Jinja2'nin yüklü olması gerekir. Bunupip install Jinja2ile yapabilirsiniz.
card_data = ModelCardData(language='en', license='mit', library_name='keras')
card = ModelCard.from_template(
card_data,
model_id='my-cool-model',
model_description="this model does this and that",
developers="Nate Raw",
repo="https://github.com/huggingface/huggingface_hub",
)
card.save('my_model_card_2.md')
print(card)Model Kartlarını Paylaş
Hugging Face Hub ile kimlik doğrulamanız yapıldıysa (hf auth login veya login() kullanarak), kartları Hub'a göndermek için yalnızca ModelCard.push_to_hub() çağrısı yapmanız yeterlidir. Bunu nasıl yapacağımıza bir bakalım…
Öncelikle, kimliği doğrulanmış kullanıcının ad alanı altında ‘hf-hub-modelcards-pr-test’ adında yeni bir depo oluşturacağız:
from huggingface_hub import whoami, create_repo
user = whoami()['name']
repo_id = f'{user}/hf-hub-modelcards-pr-test'
url = create_repo(repo_id, exist_ok=True)Ardından, varsayılan şablonu kullanarak bir kart oluşturacağız (yukarıdaki bölümde tanımlananla aynı):
card_data = ModelCardData(language='en', license='mit', library_name='keras')
card = ModelCard.from_template(
card_data,
model_id='my-cool-model',
model_description="this model does this and that",
developers="Nate Raw",
repo="https://github.com/huggingface/huggingface_hub",
)Son olarak, bunu hub'a yükleyeceğiz
card.push_to_hub(repo_id)
Oluşturulan kartı burada inceleyebilirsiniz.
Bunun yerine bir kartı bir çekme isteği olarak göndermek istiyorsanız, push_to_hub çağrılırken create_pr=True demeniz yeterlidir:
card.push_to_hub(repo_id, create_pr=True)Bu komutla oluşturulan sonuç PR'si burada görülebilir.
Üst verileri güncelle
Bu bölümde, depo kartlarında hangi meta verilerin bulunduğunu ve bunların nasıl güncelleneceğini göreceğiz.
metadata, bir model, veri seti veya Space hakkında bazı yüksek düzeyde bilgiler sağlayan bir hash map (anahtar-değer) bağlamına atıfta bulunur. Bu bilgiler, modelin pipeline type, model_id veya model_description gibi ayrıntıları içerebilir. Daha fazla ayrıntı için şu kılavuzlara göz atabilirsiniz: Model Card, Dataset Card ve Spaces Settings.
Şimdi bu metadata'ları nasıl güncelleyeceğimize dair bazı örnekleri inceleyelim.
İlk bir örnekle başlayalım:
>>> from huggingface_hub import metadata_update
>>> metadata_update("username/my-cool-model", {"pipeline_tag": "image-classification"})Bu iki satır kodla, yeni bir pipeline_tag ayarlamak için meta verileri güncelleyeceksiniz.
Varsayılan olarak, kartta zaten mevcut olan bir anahtarı güncelleyemezsiniz. Bunu yapmak istiyorsanız, overwrite=True parametresini açıkça iletmeniz gerekir:
>>> from huggingface_hub import metadata_update
>>> metadata_update("username/my-cool-model", {"pipeline_tag": "text-generation"}, overwrite=True)Bir depoda yazma izniniz olmamasına rağmen o depoya bazı değişiklikler önermek istediğiniz durumlar sıkça yaşanır. Bunu, o depoda bir PR oluşturarak yapabilirsiniz; bu sayede depoyu yönetenler önerilerinizi inceleyip birleştirebilir.
>>> from huggingface_hub import metadata_update
>>> metadata_update("someone/model", {"pipeline_tag": "text-classification"}, create_pr=True)Değerlendirme Sonuçlarını Dahil Et
model-index meta verilerine değerlendirme sonuçlarını dahil etmek için, ilgili değerlendirme sonuçlarınızla birlikte bir EvalResult veya EvalResult listesi geçebilirsiniz. Arka planda, card.data.to_dict() çağrıldığında model-index oluşturulur. Bu işleyişin nasıl çalıştığına dair daha fazla bilgi için Hub belgelerindeki bu bölümü inceleyebilirsiniz.
Bu işlevi kullanmak için ModelCardData içinde
model_nameözniteliğini dahil etmeniz gerektiğini unutmayın.
card_data = ModelCardData(
language='en',
license='mit',
model_name='my-cool-model',
eval_results = EvalResult(
task_type='image-classification',
dataset_type='beans',
dataset_name='Beans',
metric_type='accuracy',
metric_value=0.7
)
)
card = ModelCard.from_template(card_data)
print(card.data)Oluşturulan card.data aşağıdaki gibi görünmelidir:
language: en
license: mit
model-index:
- name: my-cool-model
results:
- task:
type: image-classification
dataset:
name: Beans
type: beans
metrics:
- type: accuracy
value: 0.7Paylaşmak istediğiniz birden fazla değerlendirme sonucu varsa, bir EvalResult listesi geçmeniz yeterlidir:
card_data = ModelCardData(
language='en',
license='mit',
model_name='my-cool-model',
eval_results = [
EvalResult(
task_type='image-classification',
dataset_type='beans',
dataset_name='Beans',
metric_type='accuracy',
metric_value=0.7
),
EvalResult(
task_type='image-classification',
dataset_type='beans',
dataset_name='Beans',
metric_type='f1',
metric_value=0.65
)
]
)
card = ModelCard.from_template(card_data)
card.dataBunun sonucunda aşağıdaki card.data ile kalmanız gerekir:
language: en
license: mit
model-index:
- name: my-cool-model
results:
- task:
type: image-classification
dataset:
name: Beans
type: beans
metrics:
- type: accuracy
value: 0.7
- type: f1
value: 0.65