Azure Machine Learning-adathalmazok létrehozása
A KÖVETKEZŐKRE VONATKOZIK: Python SDK azureml v1
Ebből a cikkből megtudhatja, hogyan hozhat létre Azure Machine Learning-adatkészleteket az Azure Machine Learning Python SDK-val végzett helyi vagy távoli kísérletek adatainak eléréséhez. Az adathalmazok az Azure Machine Learning általános adatelérési munkafolyamatában való illeszkedéséről a Biztonságosan hozzáférés adatcikkben talál további információt.
Amikor létrehoz egy adathalmazt, az adatforrás helyére mutató hivatkozást és annak metaadatainak másolatát hozza létre. Mivel az adatok a meglévő helyen maradnak, nincs többlet tárolási költség, és nem kockáztatja az adatforrások integritását. Emellett az adathalmazok lazán kiértékelésre kerülnek, ami segít a munkafolyamatok teljesítményének javítására. Adatkészleteket adattárakból, nyilvános URL-címekből és Azure Open Datasetekből hozhat létre. Az alacsony kódszámú felülettel kapcsolatos információkért látogasson el az Azure Machine Learning-adathalmazok létrehozása az Azure Machine Learning Studióval.
Az Azure Machine Learning-adatkészletekkel a következőket teheti:
Az adathalmazok által hivatkozott adatok egyetlen másolatának tárolása a tárban
Zökkenőmentesen elérheti az adatokat a modell betanítása során anélkül, hogy a kapcsolati sztring vagy az adatútvonalak miatt kellene aggódnia. Az adathalmazok betanításával kapcsolatos további információkért tekintse meg az adathalmazok betanításával kapcsolatos további tudnivalókat
Adatok megosztása és együttműködés más felhasználókkal
Fontos
A cikkben "előzetes verzióként" megjelölt elemek jelenleg nyilvános előzetes verzióban érhetők el. Az előzetes verzió szolgáltatásszint-szerződés nélkül érhető el, és éles számítási feladatokhoz nem ajánlott. Előfordulhat, hogy néhány funkció nem támogatott, vagy korlátozott képességekkel rendelkezik. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.
Előfeltételek
Az adathalmazok létrehozásához és használatához a következőkre van szükség:
Azure-előfizetés. Ha még nincs előfizetése, hozzon létre egy ingyenes fiókot, mielőtt hozzákezd. Az Azure Machine Learning ingyenes vagy fizetős verziójának kipróbálása
Telepítve van a Pythonhoz készült Azure Machine Learning SDK, amely tartalmazza az azureml-datasets csomagot
Hozzon létre egy Azure Machine Learning számítási példányt, egy teljes mértékben konfigurált és felügyelt fejlesztési környezetet, amely integrált jegyzetfüzeteket és már telepített SDK-t tartalmaz
VAGY
Saját Jupyter-jegyzetfüzet használata és az SDK saját telepítése
Feljegyzés
Egyes adathalmazosztályok függőségekkel rendelkeznek az azureml-dataprep csomaghoz, amely csak a 64 bites Pythonnal kompatibilis. Ha Linuxon fejleszt, ezek az osztályok a .NET Core 2.1-en alapulnak, és csak bizonyos disztribúciók támogatják őket. A támogatott disztribúciókkal kapcsolatos további információkért olvassa el a .NET Core 2.1 oszlopot a .NET telepítése Linuxon című cikkben.
Fontos
Bár a csomag a Linux disztribúciók régebbi verzióin is működik, nem javasoljuk, hogy olyan disztribúciót használjon, amely nincs általános támogatásban. Az általános támogatáson kívüli disztribúciók biztonsági résekkel rendelkezhetnek, mivel nem kapják meg a legújabb frissítéseket. Javasoljuk, hogy a disztribúció legújabb támogatott verzióját használja, amely kompatibilis a következővel: .
Számítási méretre vonatkozó útmutató
Adathalmaz létrehozásakor tekintse át a számítási feldolgozási teljesítményt és az adatok méretét a memóriában. A tárolóban lévő adatok mérete nem azonos az adatkeretben lévő adatok méretével. A CSV-fájlok adatai például akár 10-szer is kibővülhetnek egy adatkeretben, így egy 1 GB-os CSV-fájl 10 GB-ra nőhet egy adatkeretben.
A tömörített adatok tovább bővülhetnek. A tömörített parkettaformátumban tárolt húsz GB viszonylag ritka adat ~800 GB memóriára bővülhet. Mivel a Parquet-fájlok oszlopos formátumban tárolják az adatokat, ha csak az oszlopok felét szeretné, akkor csak ~400 GB memóriát kell betöltenie.
További információkért tekintse meg az Azure Machine Learning adatfeldolgozásának optimalizálásával kapcsolatos további tudnivalókat.
Adathalmaz-típusok
Két adathalmaztípus létezik, amelyek alapján a felhasználók hogyan használnak adathalmazokat a betanítás során: FileDatasets és TabularDatasets. Az Azure Machine Learning betanítási munkafolyamatai, amelyekbe becslők, AutoML, hyperDrive és folyamatok tartoznak, mindkét típust használhatják.
FileDataset
A FileDataset egy vagy több fájlra hivatkozik az adattárakban vagy a nyilvános URL-címeken. Ha az adatokat már megtisztították, és készen állnak a betanítási kísérletekben való használatra, letöltheti vagy csatlakoztathatja a fájlokat a számításhoz FileDataset-objektumként.
A gépi tanulási munkafolyamatokhoz javasoljuk a FileDatasets használatát, mert a forrásfájlok bármilyen formátumban lehetnek. Ez a gépi tanulási forgatókönyvek szélesebb körét teszi lehetővé, beleértve a mély tanulást is.
Hozzon létre egy FileDatasetet a Python SDK-val vagy az Azure Machine Learning Studióval.
TabularDataset
A TabularDataset a megadott fájlt vagy fájllistát elemzi, hogy táblázatos formátumban ábrázolja az adatokat. Ezt követően a pandas vagy a Spark DataFrame használatával már jól ismert adatelőkészítési és betanítási kódtárakkal dolgozhat, miközben a jegyzetfüzetben marad. Objektumot TabularDataset
.csv, .tsv, .parquet, .json sorfájlokból és SQL-lekérdezési eredményekből hozhat létre.
A TabularDatasets használatával időbélyeget adhat meg az adatok egy oszlopából vagy az elérésiút-minta adatainak tárolásának helyéről, hogy lehetővé tegye az idősorozat-tulajdonságokat. Ez a specifikáció lehetővé teszi az egyszerű és hatékony szűrést idő szerint. Például látogasson el a Tabular time series-hez kapcsolódó API-bemutatóra NOAA időjárási adatokkal.
TabularDataset létrehozása a Python SDK-val vagy az Azure Machine Learning Studióval.
Feljegyzés
Az Azure Machine Learning Studióban létrehozott automatizált gépi tanulási munkafolyamatok jelenleg csak a TabularDatasetseteket támogatják.
Emellett az SQL-lekérdezés eredményeiből létrehozott TabularDatasets függvények esetében a T-SQL (pl. "WITH" al lekérdezés) vagy az ismétlődő oszlopnevek nem támogatottak. Az összetett T-SQL-lekérdezések teljesítményproblémákat okozhatnak. Az adathalmaz ismétlődő oszlopnevei kétértelműségi problémákat okozhatnak.
Adathalmazok elérése virtuális hálózaton
Ha a munkaterület egy virtuális hálózaton található, úgy kell konfigurálnia az adathalmazt, hogy kihagyja az érvényesítést. Az adattárak és adathalmazok virtuális hálózatokban való használatával kapcsolatos további információkért látogasson el a Munkaterület és a kapcsolódó erőforrások biztonságossá tételéhez.
Adatkészletek létrehozása adattárakból
Ahhoz, hogy az adatok elérhetők legyenek az Azure Machine Learningben, webes URL-címek vagy Azure Machine Learning-adattárak elérési útjaiból kell adatkészleteket létrehoznia.
Tipp.
Az adatkészleteket közvetlenül a tárolási URL-címekről hozhatja létre identitásalapú adathozzáféréssel. További információ: Connect to Storage with identity-based data access.
Adathalmazok létrehozása egy adattárból a Python SDK-val:
Ellenőrizze, hogy rendelkezik-e vagy
owner
hozzáféréssel rendelkezik-econtributor
a regisztrált Azure Machine Learning-adattár mögöttes tárolási szolgáltatásához. Ellenőrizze a tárfiók engedélyeit az Azure Portalon.Hozza létre az adathalmazt az adattár elérési útjaira való hivatkozással. Több adattárban több elérési útból is létrehozhat adathalmazt. Nincs korlátozva a fájlok vagy adatméretek száma, amelyekből adatkészletet hozhat létre.
Feljegyzés
Minden adatelérési út esetében a rendszer néhány kérést küld a tárolási szolgáltatásnak annak ellenőrzéséhez, hogy az egy fájlra vagy mappára mutat-e. Ez a többletterhelés teljesítménycsökkenéshez vagy meghibásodáshoz vezethet. Egy 1000 fájllal rendelkező mappára hivatkozó adathalmaz egy adatútvonalra hivatkozik. Az optimális teljesítmény érdekében javasoljuk, hogy olyan adathalmazokat hozzon létre, amelyek 100-nál kevesebb elérési útra hivatkoznak az adattárakban.
FileDataset létrehozása
Az osztály metódusával from_files()
FileDatasetFactory
bármilyen formátumban betölthet fájlokat, és létrehozhat egy nem regisztrált FileDatasetet.
Ha a tároló virtuális hálózat vagy tűzfal mögött található, adja meg a paramétert validate=False
a from_files()
metódusban. Ez megfelel a kezdeti érvényesítési lépésnek, és biztosítja, hogy ezekből a biztonságos fájlokból hozza létre az adathalmazt. További információkért látogasson el a virtuális hálózatban található adattárak és adatkészletek használatára.
from azureml.core import Workspace, Datastore, Dataset
# create a FileDataset recursively pointing to files in 'animals' folder and its subfolder
datastore_paths = [(datastore, 'animals')]
animal_ds = Dataset.File.from_files(path=datastore_paths)
# create a FileDataset from image and label files behind public web urls
web_paths = ['https://azureopendatastorage.blob.core.windows.net/mnist/train-images-idx3-ubyte.gz',
'https://azureopendatastorage.blob.core.windows.net/mnist/train-labels-idx1-ubyte.gz']
mnist_ds = Dataset.File.from_files(path=web_paths)
Ha az összes fájlt egy helyi könyvtárból szeretné feltölteni, hozzon létre egy FileDatasetet egyetlen metódussal a következővel upload_directory()
: . Ez a módszer feltölti az adatokat a mögöttes tárolóba, és emiatt tárolási költségek merülnek fel.
from azureml.core import Workspace, Datastore, Dataset
from azureml.data.datapath import DataPath
ws = Workspace.from_config()
datastore = Datastore.get(ws, '<name of your datastore>')
ds = Dataset.File.upload_directory(src_dir='<path to you data>',
target=DataPath(datastore, '<path on the datastore>'),
show_progress=True)
Ha újra szeretné használni és megosztani az adathalmazokat a munkaterületen lévő kísérletek között, regisztrálja az adathalmazt.
TabularDataset létrehozása
Az osztály metódusával from_delimited_files()
TabularDatasetFactory
.csv vagy .tsv formátumban olvashat fájlokat, és létrehozhat egy nem regisztrált TabularDatasetet. Ha formátumból .parquet
szeretne fájlokat olvasni, használja a metódust from_parquet_files()
. Ha több fájlból olvas, az eredmények egyetlen táblázatos ábrázolásba lesznek összesítve.
A támogatott fájlformátumokkal kapcsolatos információkért tekintse meg a TabularDatasetFactory referenciadokumentációját, valamint a szintaxissal és a tervezési mintákkal, például a többsoros támogatással kapcsolatos információkat.
Ha a tároló virtuális hálózat vagy tűzfal mögött található, adja meg a paramétert validate=False
a from_delimited_files()
metódusban. Ez megfelel a kezdeti érvényesítési lépésnek, és biztosítja, hogy ezekből a biztonságos fájlokból hozza létre az adathalmazt. A virtuális hálózat vagy tűzfal mögötti adattárolási erőforrásokról további információt a virtuális hálózaton található adattárakban és adatkészletekben talál.
Ez a kód név alapján lekéri a meglévő munkaterületet és a kívánt adattárat. Ezután átadja az adattárat és a fájlhelyeket a path
paraméternek, hogy létrehozhasson egy új TabularDataset nevűt weather_ds
:
from azureml.core import Workspace, Datastore, Dataset
datastore_name = 'your datastore name'
# get existing workspace
workspace = Workspace.from_config()
# retrieve an existing datastore in the workspace by name
datastore = Datastore.get(workspace, datastore_name)
# create a TabularDataset from 3 file paths in datastore
datastore_paths = [(datastore, 'weather/2018/11.csv'),
(datastore, 'weather/2018/12.csv'),
(datastore, 'weather/2019/*.csv')]
weather_ds = Dataset.Tabular.from_delimited_files(path=datastore_paths)
Adatséma beállítása
TabularDataset létrehozásakor az oszlop adattípusai alapértelmezés szerint automatikusan következtetnek. Ha a kikövetkeztetett típusok nem felelnek meg az elvárásainak, az adatkészlet frissítéséhez az alábbi kóddal megadhatja az oszloptípusokat. A paraméter infer_column_type
csak a tagolt fájlokból létrehozott adathalmazokra vonatkozik. További információ: További információ a támogatott adattípusokról.
from azureml.core import Dataset
from azureml.data.dataset_factory import DataType
# create a TabularDataset from a delimited file behind a public web url and convert column "Survived" to boolean
web_path ='https://dprepdata.blob.core.windows.net/demo/Titanic.csv'
titanic_ds = Dataset.Tabular.from_delimited_files(path=web_path, set_column_types={'Survived': DataType.to_bool()})
# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Index) | Utasazonosító | Túlélte | Pclass | Név | Nem | Kor | SibSp | Aszal | Jegy | Boldogul | Utastér | Behajózva |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | Hamis | 3 | Braund, Mr. Owen Harris | male | 22,0 | 0 | 0 | A/5 21171 | 7.2500 | V | |
0 | 2 | Igaz | 0 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 0 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 3 | Igaz | 3 | Heikkinen, Miss. Laina | female | 26,0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | V |
Ha újra szeretné használni és megosztani az adathalmazokat a munkaterületen lévő kísérletek között, regisztrálja az adathalmazt.
Adatok átfésülése
Miután létrehozta és regisztrálta az adathalmazt, a modell betanítása előtt betöltheti az adathalmazt a jegyzetfüzetbe adatkonvergálás és -feltárás céljából. Előfordulhat, hogy nem kell adattovábbítást vagy -feltárást végeznie. Ebben az esetben az ml-kísérletek beküldéséhez használt betanítási szkriptekben lévő adathalmazok felhasználásával kapcsolatos további információkért látogasson el a Betanítás adathalmazokkal című témakörbe.
Adathalmazok szűrése (előzetes verzió)
A szűrési képességek az adathalmaz típusától függenek.
Fontos
Az adathalmazok előzetes verziós módszerrel történő filter()
szűrése kísérleti előzetes verziójú funkció, amely bármikor változhat.
TabularDatasets esetén a keep_columns() és drop_columns() metódusokkal megtarthatja vagy eltávolíthatja az oszlopokat.
Ha egy TabularDataset adott oszlopértéke alapján szeretné kiszűrni a sorokat, használja a filter() metódust (előzetes verzió).
Ezek a példák egy nem regisztrált adatkészletet ad vissza a megadott kifejezések alapján:
# TabularDataset that only contains records where the age column value is greater than 15
tabular_dataset = tabular_dataset.filter(tabular_dataset['age'] > 15)
# TabularDataset that contains records where the name column value contains 'Bri' and the age column value is greater than 15
tabular_dataset = tabular_dataset.filter((tabular_dataset['name'].contains('Bri')) & (tabular_dataset['age'] > 15))
A FileDatasetsben minden sor egy fájl elérési útjának felel meg, ezért az oszlopérték szerinti szűrés nem segít. A sorokat azonban metaadatok alapján is szűrheti ( például CreationTime, Size stb. Ezek a példák egy nem regisztrált adatkészletet ad vissza a megadott kifejezések alapján:
# FileDataset that only contains files where Size is less than 100000
file_dataset = file_dataset.filter(file_dataset.file_metadata['Size'] < 100000)
# FileDataset that only contains files that were either created prior to Jan 1, 2020 or where
file_dataset = file_dataset.filter((file_dataset.file_metadata['CreatedTime'] < datetime(2020,1,1)) | (file_dataset.file_metadata['CanSeek'] == False))
A képfeliratozási projektekből létrehozott címkézett adathalmazok különleges esetnek számítanak. Ezek az adathalmazok képfájlokból álló TabularDataset típusúak. Ezekhez az adathalmazokhoz metaadatok image_details
label
, valamint oszlopértékek alapján szűrheti a képeket.
# Dataset that only contains records where the label column value is dog
labeled_dataset = labeled_dataset.filter(labeled_dataset['label'] == 'dog')
# Dataset that only contains records where the label and isCrowd columns are True and where the file size is larger than 100000
labeled_dataset = labeled_dataset.filter((labeled_dataset['label']['isCrowd'] == True) & (labeled_dataset.file_metadata['Size'] > 100000))
Partícióadatok
Adathalmaz particionálásához adja meg a partitions_format
paramétert a TabularDataset vagy a FileDataset létrehozásakor.
Adathalmaz particionálásakor az egyes fájlelérési utak partícióadatai a megadott formátum alapján oszlopokba lesznek kinyerve. A formátumnak az első partíciókulcs helyétől kell kezdődnie, és a fájl elérési útjának végéig kell folytatódnia.
Ha például az elérési út ../Accounts/2019/01/01/data.jsonl
alapján a partíció részlegnév és idő szerint van megadva, a partition_format='/{Department}/{PartitionDate:yyyy/MM/dd}/data.jsonl'
rendszer létrehoz egy "Részleg" sztringoszlopot a "Fiókok" értékkel, és egy "PartitionDate" datetime oszlopot az értékkel 2019-01-01
.
Ha az adatok már tartalmaznak meglévő partíciókat, és meg szeretné őrizni ezt a formátumot, adja meg a paramétert a partitioned_format
from_files()
metódusban egy FileDataset létrehozásához.
A meglévő partíciókat megőrző TabularDataset létrehozásához adja meg a partitioned_format
paramétert a metódusban vagy a from_parquet_files()
from_delimited_files()
metódusban.
Ez a példa
- FileDataset létrehozása particionált fájlokból
- A partíciókulcsok lekérdezése
- Új, indexelt FileDataset létrehozása
file_dataset = Dataset.File.from_files(data_paths, partition_format = '{userid}/*.wav')
ds.register(name='speech_dataset')
# access partition_keys
indexes = file_dataset.partition_keys # ['userid']
# get all partition key value pairs should return [{'userid': 'user1'}, {'userid': 'user2'}]
partitions = file_dataset.get_partition_key_values()
partitions = file_dataset.get_partition_key_values(['userid'])
# return [{'userid': 'user1'}, {'userid': 'user2'}]
# filter API, this will only download data from user1/ folder
new_file_dataset = file_dataset.filter(ds['userid'] == 'user1').download()
A TabularDatasets új partícióstruktúráját is létrehozhatja a partition_by() metódussal.
dataset = Dataset.get_by_name('test') # indexed by country, state, partition_date
# call partition_by locally
new_dataset = ds.partition_by(name="repartitioned_ds", partition_keys=['country'], target=DataPath(datastore, "repartition"))
partition_keys = new_dataset.partition_keys # ['country']
Adatok megismerése
Az adatok átrendezése után regisztrálhatja az adathalmazt, majd betöltheti őket a jegyzetfüzetbe adatfeltáráshoz a modell betanítása előtt.
FileDatasets esetén csatlakoztathatja vagy letöltheti az adathalmazt, és alkalmazhatja az adatfeltáráshoz általában használt Python-kódtárakat. További információ: További információ a csatlakoztatásról és a letöltésről.
# download the dataset
dataset.download(target_path='.', overwrite=False)
# mount dataset to the temp directory at `mounted_path`
import tempfile
mounted_path = tempfile.mkdtemp()
mount_context = dataset.mount(mounted_path)
mount_context.start()
TabularDatasets esetén használja a to_pandas_dataframe()
metódust az adatok adatkeretben való megtekintésére.
# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Index) | Utasazonosító | Túlélte | Pclass | Név | Nem | Kor | SibSp | Aszal | Jegy | Boldogul | Utastér | Behajózva |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | Hamis | 3 | Braund, Mr. Owen Harris | male | 22,0 | 0 | 0 | A/5 21171 | 7.2500 | V | |
0 | 2 | Igaz | 0 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 0 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 3 | Igaz | 3 | Heikkinen, Miss. Laina | female | 26,0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | V |
Adatkészlet létrehozása pandas-adatkeretből
TabularDataset memóriabeli pandas-adatkeretből való létrehozásához használja a metódust register_pandas_dataframe()
. Ez a módszer regisztrálja a TabularDatasetet a munkaterületen, és feltölti az adatokat a mögöttes tárolóba. Ez a folyamat tárolási költségeket von maga után.
from azureml.core import Workspace, Datastore, Dataset
import pandas as pd
pandas_df = pd.read_csv('<path to your csv file>')
ws = Workspace.from_config()
datastore = Datastore.get(ws, '<name of your datastore>')
dataset = Dataset.Tabular.register_pandas_dataframe(pandas_df, datastore, "dataset_from_pandas_df", show_progress=True)
Tipp.
Hozzon létre és regisztráljon egy TabularDatasetet egy memóriabeli Spark-adatkeretből vagy egy dask-adatkeretből a nyilvános előzetes verziós metódusokkal, register_spark_dataframe()
és register_dask_dataframe()
. Ezek a módszerek kísérleti előzetes verziójú funkciók, és bármikor változhatnak.
Ezek a módszerek adatokat töltenek fel a mögöttes tárolóba, és emiatt tárolási költségekkel járnak.
Adathalmazok regisztrálása
A létrehozási folyamat befejezéséhez regisztrálja az adathalmazokat egy munkaterületen. Ezzel a register()
módszerrel regisztrálhatja az adathalmazokat a munkaterületén, megoszthatja őket másokkal, és újra felhasználhatja őket a munkaterületen végzett kísérletek során:
titanic_ds = titanic_ds.register(workspace=workspace,
name='titanic_ds',
description='titanic training data')
Adatkészletek létrehozása az Azure Resource Managerrel
A microsoft.machinelearningservices webhelyen számos olyan sablon található, amelyek adathalmazok létrehozásához használhatók.
Ezekről a sablonokról az Azure Resource Manager-sablon használatával hozhat létre munkaterületet az Azure Machine Learninghez.
Betanítás adathalmazok használatával
Az adathalmazokat gépi tanulási kísérletekben használhatja az ML-modellek betanításához. További információ az adathalmazok betanításairól.
Verzióadatkészletek
Új verzió létrehozásával új adathalmazt regisztrálhat ugyanazzal a névvel. Az adathalmazok verziója könyvjelzővel láthatja el az adatok állapotát, így az adathalmaz egy adott verzióját alkalmazhatja kísérletezésre vagy későbbi többszörözésre. További információkért látogasson el az adathalmaz verzióira.
# create a TabularDataset from Titanic training data
web_paths = ['https://dprepdata.blob.core.windows.net/demo/Titanic.csv',
'https://dprepdata.blob.core.windows.net/demo/Titanic2.csv']
titanic_ds = Dataset.Tabular.from_delimited_files(path=web_paths)
# create a new version of titanic_ds
titanic_ds = titanic_ds.register(workspace = workspace,
name = 'titanic_ds',
description = 'new titanic training data',
create_new_version = True)
Következő lépések
- Ismerje meg , hogyan taníthat be adathalmazokkal
- Automatizált gépi tanulás használata TabularDatasets betanítása
- További adathalmaz-betanítási példákért tekintse meg a mintajegyzetfüzeteket
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: