数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
一、基本概念
Datasets
是一个用于轻松地访问和共享数据集的库,这些数据集是关于音频、计算机视觉、以及自然语言处理等领域。Datasets
可以通过一行来加载一个数据集,并且可以使用Hugging Face
强大的数据处理方法来快速准备好你的数据集。在Apache Arrow
格式的支持下,通过zero-copy read
来处理大型数据集,而没有任何内存限制,从而实现最佳速度和效率。Arrow
是一种特定的数据格式,以列式的memory layout
存储数据。这提供了几个显著的优势:Arrow
的标准格式允许zero-copy read
,这实际上是消除了所有的序列化开销。Arrow
是语言无关的,它支持不同的编程语言。Arrow
是面向列的,因此在查询和处理数据切片或列时,它的速度更快。Arrow
允许copy-free
地移交给标准的机器学习工具,如Numpy, Pandas, PyTorch, TensorFlow
。Arrow
支持多种列类型(可能是嵌套类型)。
Datasets
使用Arrow
作为它的局部缓存系统,这允许datasets
由on-disk cache
来支持,这是用于fast lookup
的内存映射。这种架构允许在设备内存相对较小的机器上使用大型数据集。import os import psutil import timeit from datasets import load_dataset # Process.memory_info 为字节,因此需要转换为 MB mem_before = psutil.Process(os.getpid()).memory_info().rss / (1024 * 1024) wiki = load_dataset("wikipedia", "20220301.en", split="train") mem_after = psutil.Process(os.getpid()).memory_info().rss / (1024 * 1024) print(f"RAM memory used: {(mem_after - mem_before)} MB") # RAM memory used: 50 MB
Arrow
数据实际上是从磁盘进行内存映射的,而不是加载到内存中。内存映射允许访问磁盘上的数据,并利用虚拟内存功能进行fast lookup
。xxxxxxxxxx
s = """batch_size = 1000 for i in range(0, len(wiki), batch_size): batch = wiki[i:i + batch_size] """ time = timeit.timeit(stmt=s, number=1, globals=globals()) print(f"Time to iterate over the {wiki.dataset_size >> 30} GB dataset: {time:.1f} sec, ie. {float(wiki.dataset_size >> 27)/time:.1f} Gb/s") # Time to iterate over the 18 GB dataset: 70.5 sec, ie. 2.1 Gb/s在使用
Arrow
的内存映射数据集上进行迭代,速度很快。安装:
xxxxxxxxxx
pip install datasets conda install -c huggingface -c conda-forge datasets如果希望安装
Audio
特性,执行命令:xxxxxxxxxx
pip install datasets[audio] sudo apt-get install libsndfile1 # 手动安装 libsndfile pip install 'torchaudio<0.12.0' # 对 MP3 的支持 sudo apt-get install sox # 对 MP3 的支持如果希望安装
Image
特性,执行命令:xxxxxxxxxx
pip install datasets[vision]音频数据集就像文本数据集一样被加载。然而,音频数据集的预处理略有不同。你需要一个
feature extractor
,而不是一个tokenizer
。音频输入也可能需要重新采样其采样率,从而匹配你正在使用的预训练模型的采样率。例如:
xxxxxxxxxx
from datasets import load_dataset, Audio from transformers import AutoFeatureExtractor #### feature extractor feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base") def preprocess_function(examples): audio_arrays = [x["array"] for x in examples["audio"]] inputs = feature_extractor( audio_arrays, sampling_rate=16000, padding=True, max_length=100000, truncation=True, ) return inputs dataset = load_dataset("PolyAI/minds14", "en-US", split="train") dataset = dataset.cast_column("audio", Audio(sampling_rate=16000)) # 重新采样 dataset = dataset.map(preprocess_function, batched=True) # 逐样本地抽取特征 dataset = dataset.rename_column("intent_class", "labels") #### Pytorch from torch.utils.data import DataLoader dataset.set_format(type="torch", columns=["input_values", "labels"]) dataloader = DataLoader(dataset, batch_size=4) #### TensorFlow import tensorflow as tf tf_dataset = dataset.to_tf_dataset( columns=["input_values"], label_cols=["labels"], batch_size=4, shuffle=True)同样地,图像数据集就像文本数据集一样被加载。图像数据集也需要一个
feature extractor
,而不是一个tokenizer
。对图像进行数据增强在计算机视觉中很常见,你可以随意使用任何数据增强的库。例如:
xxxxxxxxxx
from datasets import load_dataset, Image from torchvision.transforms import Compose, ColorJitter, ToTensor #### 数据增强 jitter = Compose([ColorJitter(brightness=0.5, hue=0.5), ToTensor()]) def transforms(examples): examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]] return examples dataset = load_dataset("beans", split="train") dataset = dataset.with_transform(transforms) #### Pytorch from torch.utils.data import DataLoader def collate_fn(examples): images = [] labels = [] for example in examples: images.append((example["pixel_values"])) labels.append(example["labels"]) pixel_values = torch.stack(images) labels = torch.tensor(labels) return {"pixel_values": pixel_values, "labels": labels} dataloader = DataLoader(dataset, collate_fn=collate_fn, batch_size=4)文本数据集需要一个
tokenizer
。例如:
xxxxxxxxxx
from datasets import load_dataset from transformers import AutoTokenizer dataset = load_dataset("glue", "mrpc", split="train") tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased") #### 编码 def encode(examples): return tokenizer(examples["sentence1"], examples["sentence2"], truncation=True, padding="max_length") dataset = dataset.map(encode, batched=True) dataset = dataset.map(lambda examples: {"labels": examples["label"]}, batched=True) #### Pytorch import torch dataset.set_format(type="torch", columns=["input_ids", "token_type_ids", "attention_mask", "labels"]) dataloader = torch.utils.data.DataLoader(dataset, batch_size=32) #### TensorFlow import tensorflow as tf from transformers import DataCollatorWithPadding data_collator = DataCollatorWithPadding(tokenizer=tokenizer, return_tensors="tf") tf_dataset = dataset.to_tf_dataset( columns=["input_ids", "token_type_ids", "attention_mask"], label_cols=["labels"], batch_size=2, collate_fn=data_collator, shuffle=True)Hugging Face Hub
包含了很多数据集,我们可以从Hub
上下载和上传数据集。下载数据集:
xxxxxxxxxx
from datasets import load_dataset dataset = load_dataset("glue", "mrpc")上传数据集:
首先安装必要的库:
xxxxxxxxxx
pip install huggingface_hub然后再命令行中登录
Hugging Face
账户:xxxxxxxxxx
huggingface-cli login最后在代码中上传数据集:
xxxxxxxxxx
dataset.push_to_hub("huaxz/dataset_demo")
Datasets
会存储以前下载和处理的数据集,因此当你需要再次使用它们时,可以直接从cache
中重新加载它们。这避免了重新下载数据集或重新应用处理函数。Datasets
为cache
文件分配一个指纹fingerprint
。指纹跟踪数据集的当前状态。初始指纹是使用来自Arrow table
的哈希、或Arrow files
的哈希 (如果数据集在磁盘上)来计算的。通过组合前一状态的指纹、以及哈希最近应用的变换,从而计算随后的指纹。xxxxxxxxxx
from datasets import Datasets dataset1 = Datasets.from_dict({"a": [0, 1, 2]}) dataset2 = dataset1.map(lambda x: {"a": x["a"] + 1}) print(dataset1._fingerprint) # 85ad8fa07d5f63f5 print(dataset2._fingerprint) # 3761ff563081e590注意,需要确保所有的
transform
是可以pickle
序列化或dill
序列化的,否则Datasets
使用一个随机的指纹并且抛出一个警告(此时transformer
是不可哈希的)。当禁用缓存时,
Datasets
会重新计算所有的内容。此时,每次都会生成缓存文件并将它们写入临时目录。Python session
结束时,临时目录中的缓存文件将被删除。Features
定义为数据集的内部结构,它用于指定底层的序列化格式。Features
包含了从列名和类型到ClassLabel
的所有高级信息,因此可以视为是数据集的backbone
。Features
的格式很简单:dict[column_name, column_type]
。它是列名和列类型的字典。xxxxxxxxxx
from datasets import load_dataset dataset = load_dataset('glue', 'mrpc', split='train') print(dataset.features) # {'sentence1': Value(dtype='string',># 'sentence2': Value(dtype='string',>
# 'label': ClassLabel(names=['not_equivalent', 'equivalent'],>
# 'idx': Value(dtype='int32',>
其中:
-
Value
特征表明idx
数据类型为int32
、sentence1/sentence2
数据类型为string
。 -
label
特征表明label
包含两个类别:'not_equivalent', 'equivalent'
。我们可以通过ClassLabel.int2str()
以及ClassLabel.str2int()
对label
执行整数和字符串之间的转换。xxxxxxxxxx
print(dataset.features['label'].int2str(0)) # 'not_equivalent' print(dataset.features['label'].str2int('equivalent')) # 1
另外还有一些有用的特征类型:
-
Sequence
:包含多个特征。xxxxxxxxxx
from datasets import load_dataset dataset = load_dataset('squad', split='train') print(dataset.features['answers']) # Sequence(feature={'text': Value(dtype='string',> -
Array2D/Array3D/...
:包含可变长度的数据。xxxxxxxxxx
from datasets import Features, Array2D features = Features({'a': Array2D(shape=(None, None), dtype='int32')}) print(features) # {'a': Array2D(shape=(None, None), dtype='int32',> -
Audio
:包含音频类型的数据,该特征具有三个重要的字段:array
:存放解码的音频数据,以一维的array
来表示。path
:所下载的音频文件的路径。sampling_rate
:音频文件的采样率。
xxxxxxxxxx
from datasets import load_dataset, Audio dataset = load_dataset("PolyAI/minds14", "en-US", split="train") print(dataset[0]["audio"]) # {'array': array([ 0., 0.00024414, -0.00024414, ..., -0.00024414, 0., 0.], dtype=float32), # 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav', # 'sampling_rate': 8000}
-
Batch mapping
:以batch mode
来执行Dataset.map()
是非常强大的,可以加速数据预处理过程,并自由地控制生成的数据集的规模。但是,注意
batch
中每一列的行数应该相同:xxxxxxxxxx
from datasets import Dataset dataset = Dataset.from_dict({"a": [0, 1, 2]}) # batch 中, 新的列 b 有 6 行,而旧的列 a 有 3 行, 抛出异常 dataset.map(lambda batch: {"b": batch["a"] * 2}, batched=True) # ArrowInvalid: Column 1 named b expected length 3 but got length 6' dataset_with_duplicates = dataset.map(lambda batch: {"b": batch["a"] * 2}, remove_columns=["a"], batched=True)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论