位置: IT常识 - 正文

Transformers 库的基本使用(transformers document)

编辑:rootadmin
Transformers 库的基本使用

推荐整理分享Transformers 库的基本使用(transformers document),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:fractions库,transformer library,fractions库,transformers document,transformer.transform,transformers库fine tune,transformers库的安装,transformers库的安装,内容如对您有帮助,希望把文章链接给更多的朋友!

  本内容主要介绍 Transformers 库 的基本使用。

1.1 Transformers 库简介

  Transformers 库是一个开源库,其提供的所有预训练模型都是基于 transformer 模型结构的。

1.1.1 Transformers 库

  我们可以使用 Transformers 库提供的 API 轻松下载和训练最先进的预训练模型。使用预训练模型可以降低计算成本,以及节省从头开始训练模型的时间。这些模型可用于不同模态的任务,例如:

文本:文本分类、信息抽取、问答系统、文本摘要、机器翻译和文本生成。图像:图像分类、目标检测和图像分割。音频:语音识别和音频分类。多模态:表格问答系统、OCR、扫描文档信息抽取、视频分类和视觉问答。

  Transformers 库支持三个最流行的深度学习库(PyTorch、TensorFlow 和 JAX)。

  相关资源对应网址如下:

网址库的 GitHub 地址https://github.com/huggingface/transformers官方开发文档https://huggingface.co/docs/transformers/index预训练模型下载地址https://huggingface.co/models

1.1.2 Transformers 库支持的模型和框架

  以下表格展示了当前 Transformers 库对各模型的支持情况:

ModelTokenizer slowTokenizer fastPyTorch supportTensorFlow supportFlax supportALBERT✅✅✅✅✅BART✅✅✅✅✅BEiT❌❌✅❌✅BERT✅✅✅✅✅Bert Generation✅❌✅❌❌BigBird✅✅✅❌✅BigBirdPegasus❌❌✅❌❌Blenderbot✅✅✅✅✅BlenderbotSmall✅✅✅✅✅CamemBERT✅✅✅✅❌Canine✅❌✅❌❌CLIP✅✅✅✅✅ConvBERT✅✅✅✅❌ConvNext❌❌✅✅❌CTRL✅❌✅✅❌Data2VecAudio❌❌✅❌❌Data2VecText❌❌✅❌❌Data2VecVision❌❌✅✅❌DeBERTa✅✅✅✅❌DeBERTa-v2✅✅✅✅❌Decision Transformer❌❌✅❌❌DeiT❌❌✅❌❌DETR❌❌✅❌❌DistilBERT✅✅✅✅✅DPR✅✅✅✅❌DPT❌❌✅❌❌ELECTRA✅✅✅✅✅Encoder decoder❌❌✅✅✅FairSeq Machine-Translation✅❌✅❌❌FlauBERT✅❌✅✅❌Flava❌❌✅❌❌FNet✅✅✅❌❌Funnel Transformer✅✅✅✅❌GLPN❌❌✅❌❌GPT Neo❌❌✅❌✅GPT-J❌❌✅✅✅Hubert❌❌✅✅❌I-BERT❌❌✅❌❌ImageGPT❌❌✅❌❌LayoutLM✅✅✅✅❌LayoutLMv2✅✅✅❌❌LED✅✅✅✅❌Longformer✅✅✅✅❌LUKE✅❌✅❌❌LXMERT✅✅✅✅❌M2M100✅❌✅❌❌Marian✅❌✅✅✅MaskFormer❌❌✅❌❌mBART✅✅✅✅✅MegatronBert❌❌✅❌❌MobileBERT✅✅✅✅❌MPNet✅✅✅✅❌mT5✅✅✅✅✅Nystromformer❌❌✅❌❌OpenAI GPT✅✅✅✅❌OpenAI GPT-2✅✅✅✅✅OPT❌❌✅❌❌Pegasus✅✅✅✅✅Perceiver✅❌✅❌❌PLBart✅❌✅❌❌PoolFormer❌❌✅❌❌ProphetNet✅❌✅❌❌QDQBert❌❌✅❌❌RAG✅❌✅✅❌Realm✅✅✅❌❌Reformer✅✅✅❌❌RegNet❌❌✅❌❌RemBERT✅✅✅✅❌ResNet❌❌✅❌❌RetriBERT✅✅✅❌❌RoBERTa✅✅✅✅✅RoFormer✅✅✅✅✅SegFormer❌❌✅❌❌SEW❌❌✅❌❌SEW-D❌❌✅❌❌Speech Encoder decoder❌❌✅❌✅Speech2Text✅❌✅✅❌Speech2Text2✅❌❌❌❌Splinter✅✅✅❌❌SqueezeBERT✅✅✅❌❌Swin❌❌✅❌❌T5✅✅✅✅✅TAPAS✅❌✅✅❌TAPEX✅✅✅✅✅Transformer-XL✅❌✅✅❌TrOCR❌❌✅❌❌UniSpeech❌❌✅❌❌UniSpeechSat❌❌✅❌❌VAN❌❌✅❌❌ViLT❌❌✅❌❌Vision Encoder decoder❌❌✅✅✅VisionTextDualEncoder❌❌✅❌✅VisualBert❌❌✅❌❌ViT❌❌✅✅✅ViTMAE❌❌✅✅❌Wav2Vec2✅❌✅✅✅WavLM❌❌✅❌❌XGLM✅✅✅❌✅XLM✅❌✅✅❌XLM-RoBERTa✅✅✅✅✅XLM-RoBERTa-XL❌❌✅❌❌XLMProphetNet✅❌✅❌❌XLNet✅✅✅✅❌YOLOS❌❌✅❌❌

注意:Tokenizer slow:使用 Python 实现 tokenization 过程。Tokenizer fast:基于 Rust 库 Tokenizers 进行实现。

1.2 Pipeline

  pipeline() 的作用是使用预训练模型进行推断,它支持从 这里 下载的所有模型。

1.2.1 Pipeline 支持的任务类型

  pipeline() 支持许多常见任务:

文本

情感分析(Sentiment analysis)文本生成(Text generation)命名实体识别(Name entity recognition,NER):问答系统(Question answering)掩码恢复(Fill-mask)文本摘要(Summarization)机器翻译(Translation)特征提取(Feature extraction)图像

图像分类(Image classification)图像分割(Image segmentation)目标检测(Object detection)音频

音频分类(Audio classification)自动语音识别(Automatic speech recognition,ASR)

注意:可以在 Transformers 库的源码(查看 Transformers/pipelines/__init__.py 中的 SUPPORTED_TASKS 定义)中查看其支持的任务,不同版本支持的类型会存在差异。

1.2.2 Pipeline 使用(1)简单使用

  例如,当前我们需要进行一个情感分析的推断任务。我们可以直接使用如下代码:

from transformers import pipelineclassifier = pipeline("sentiment-analysis")result = classifier("We are very happy to show you the 🤗 Transformers library.")print(result)

将输出以下结果:

[{'label': 'POSITIVE', 'score': 0.9997795224189758}]

  上面代码中的 pipeline("sentiment-analysis") 将下载并缓存一个默认的情感分析的预训练模型和加载对应的 tokenizer。针对不同类型的任务,对应的参数名称可查看 pipeline 的参数 task 的说明(这里);不同类型的任务所下载的默认预训练模型可以在 Transformers 库的源码(查看 Transformers/pipelines/__init__.py 中的 SUPPORTED_TASKS 定义)中查看。

  当我们需要一次推理多个句子时,可以使用 list 形式作为参数传入:

from transformers import pipelineclassifier = pipeline("sentiment-analysis")results = classifier(["We are very happy to show you the 🤗 Transformers library.", "We hope you don't hate it."])print(results)

将输出以下结果:

[{'label': 'POSITIVE', 'score': 0.9997795224189758}, {'label': 'NEGATIVE', 'score': 0.5308570265769958}](2)选择模型

  上面部分,在进行推理时,使用的是对应任务的默认模型。但是有时候我们希望使用指定的模型,可以通过指定 pipeline() 的参数 model 来实现。

  第一种方法:

from transformers import pipelineclassifier = pipeline("sentiment-analysis", model="IDEA-CCNL/Erlangshen-Roberta-110M-Sentiment")result = classifier("今天心情很好")print(result)

将输出以下结果:

[{'label': 'Positive', 'score': 0.9374911785125732}]

  第二种方法:(和上面的方法,加载的是相同的模型。不过这种方法可以使用本地模型进行推理。)

from transformers import AutoModelForSequenceClassificationfrom transformers import AutoTokenizerfrom transformers import pipelinemodel_path = r"../pretrained_model/IDEA-CCNL(Erlangshen-Roberta-110M-Sentiment)"model = AutoModelForSequenceClassification.from_pretrained(model_path)tokenizer = AutoTokenizer.from_pretrained(model_path)classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)result = classifier("今天心情很好")print(result)

将输出以下结果:

[{'label': 'Positive', 'score': 0.9374911785125732}]

总结:上面部分介绍了使用 pipeline() 对文本分类任务的推断的方法。针对文本其他类型任务、图像和音频的任务,使用方法基本一致,详细可参照 这里。

1.3 加载模型

  下面我们将介绍加载模型的一些方法。

1.3.1 随机初始化模型权值

  有时候,需要随机初始化模型权值(比如使用自己的数据进行预训练)。首先我们需要初始化一个 config 对象,然后将这个 config 对象作为参数传给模型:

from transformers import BertConfigfrom transformers import BertModelconfig = BertConfig()model = BertModel(config)

  上面的 config 使用的是默认值,不过根据需要,我们可以修改对应的参数。当然,我们也可以使用 AutoConfig.from_pretrained() 加载其他模型的 config:

from transformers import AutoConfigfrom transformers import AutoModelmodel_path = r"../pretrained_model/IDEA-CCNL(Erlangshen-Roberta-110M-Sentiment)"config = AutoConfig.from_pretrained(model_path)model = AutoModel.from_config(config)

1.3.2 使用预训练权值初始化模型权值

  有时候,需要从预训练模型中加载权值。一般使用 AutoModelForXXX.from_pretrained() 加载对应任务的预训练模型,这里之所以使用 XXX,是因为不同类型的任务所使用的类是不一样的。例如,我们需要加载一个文本序列分类模型,需要使用 AutoModelForSequenceClassification。

from transformers import AutoModelForSequenceClassificationmodel = AutoModelForSequenceClassification.from_pretrained( "IDEA-CCNL/Erlangshen-Roberta-110M-Sentiment")

  AutoModelForSequenceClassification.from_pretrained() 的第一个参数 pretrained_model_name_or_path 可以是一个字符串,也可以是一个文件夹路径。

from transformers import AutoModelForSequenceClassificationmodel_path = r"../pretrained_model/IDEA-CCNL(Erlangshen-Roberta-110M-Sentiment)"model = AutoModelForSequenceClassification.from_pretrained(model_path)

  我们也可以使用具体的模型类,比如下面的 BertForSequenceClassification:

from transformers import BertForSequenceClassificationmodel_path = r"../pretrained_model/IDEA-CCNL(Erlangshen-Roberta-110M-Sentiment)"model = BertForSequenceClassification.from_pretrained(model_path)

注意:上面的模型类型都是针对 PyTorch 模型的。如果我们使用 TensorFlow 模型,其类名需要在 PyTorch 模型类名的前面加上 TF。比如 BertForSequenceClassification 对应的 TF 模型类名是 TFBertForSequenceClassification

总结:官方推荐使用 AutoModelForXXX 和 TFAutoModelXXX 加载预训练模型。官方认为这样将确保每次都能加载正确的框架。

1.4 预处理

  因为模型本身是无法理解原始文本、图像或者音频的。所以需要先将数据转换成模型可以接受的形式,然后再传入模型中。

1.4.1 NLP:AutoTokenizer

  处理文本数据的主要工具为 tokenizer。首先,tokenizer 会根据一组规则将文本拆分为 token。然后,将这些 token 转换为数值(根据词表,即 vocab),这些数值会被构建成张量并作为模型的输入。模型所需要的其他输入也是由 tokenizer 添加。

Transformers 库的基本使用(transformers document)

当我们使用预训练模型时,一定要使用对应的预训练 tokenizer。只有这样,才能确保文本以预训练语料库相同的方式进行分割,并使用相同的对应 token 索引(即 vocab)。

(1)Tokenize

  使用 AutoTokenizer.from_pretrained() 加载一个预训练 tokenizer,并将文本传入 tokenizer:

from transformers import AutoTokenizermodel_path = r"../pretrained_model/IDEA-CCNL(Erlangshen-Roberta-110M-Sentiment)"tokenizer = AutoTokenizer.from_pretrained(model_path)encoded_input = tokenizer("今天心情很好")print(encoded_input)

将输出以下结果:

{'input_ids': [101, 791, 1921, 1921, 3698, 4696, 1962, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1]}

  可以看到上面的输出包含三个部分:

input_ids:对应于句子中每个 token 的索引。token_type_ids:当存在多个序列时,标识 token 属于那个序列。attention_mask:表明对应的 token 是否需要被注意(1 表示需要被注意,0 表示不需要被注意。涉及到注意力机制)。

  我们还可以使用 tokenizer 将 input_ids 解码为原始输入:

decoded_input = tokenizer.decode(encoded_input["input_ids"])print(decoded_input)

将输出以下结果:

[CLS] 今 天 天 气 真 好 [SEP]

  我们可以看到上面的输出,相比原始文本多了 [CLS] 和 [SEP],它们是在 BERT 等模型中添加一些特殊 token。

  如果需要同时处理多个句子,可以将多个文本以 list 的形式输入到 tokenizer 中。

(2)填充(Pad)

  当我们处理一批句子时,它们的长度并不总是相同的。但是模型的输入需要具有统一的形状(shape)。填充是实现此需求的一种策略,即为 token 较少的句子添加特殊的填充 token。

  给 tokenizer() 传入参数 padding=True:

batch_sentences = ["今天天气真好", "今天天气真好,适合出游"]encoded_inputs = tokenizer(batch_sentences, padding=True)print(encoded_inputs)

将输出以下结果:

{'input_ids': [[101, 791, 1921, 1921, 3698, 4696, 1962, 102, 0, 0, 0, 0, 0], [101, 791, 1921, 1921, 3698, 4696, 1962, 8024, 6844, 1394, 1139, 3952, 102]], 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]}

  可以看到 tokenizer 使用 0 对第一个句子进行了一些填充。

(3)截断(Truncation)

  当句子太短时,可以采用填充的策略。但有时候,句子可能太长,模型无法处理。在这种情况下,可以将句子进行截断。

  给 tokenizer() 传入参数 truncation=True 即可实现。

  如果想了解 tokenizer() 中更多关于参数 padding 和 truncation 的信息,可以参照 这里

(4)构建张量(Build tensors)

  最终,如果我们想要 tokenizer 返回传入模型中的实际张量。需要设置参数 return_tensors。如果是传入 PyTorch 模型,将其设置为 pt;如果是传入 TensorFlow 模型,将其设置为 tf。

batch_sentences = ["今天天气真好", "今天天气真好,适合出游"]encoded_inputs = tokenizer(batch_sentences, padding=True, truncation=True, return_tensors="pt")print(encoded_inputs)

将输出以下结果:

{'input_ids': tensor([[ 101, 791, 1921, 1921, 3698, 4696, 1962, 102, 0, 0, 0, 0, 0], [ 101, 791, 1921, 1921, 3698, 4696, 1962, 8024, 6844, 1394, 1139, 3952, 102]]),'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}

1.4.2 其他

  针对音频数据,预处理主要包括重采样(Resample)、特征提取(Feature Extractor)、填充(pad)和截断(Truncate),详细信息请参照 这里。针对图像数据,预处理主要包括特征提取(Feature Extractor)和数据增强,详细信息请参照 这里。针对多模态数据,不同类型的数据使用前面介绍的对应预处理方法详细信息请参照 这里。虽然每种数据的预处理方法不完全一样,但是最终的目的都是一致的:将原始数据转换为模型可以接受的形式。

1.5 微调预训练模型

  下面将以一个文本多分类的例子,简单介绍如何使用我们自己的数据训练一个分类模型。

1.5.1 准备数据

  在微调预训练模型之前,我们需要先准备数据。我们可以使用 Datasets 库的 load_dataset 加载数据集:

from datasets import load_dataset# 第 1 步:准备数据# 从文件中获取原始数据datasets = load_dataset(f'./my_dataset.py')# 输出训练集中的第一条数据print(datasets["train"][0])

  在这里需要注意一下,因为我们是使用自己的数据进行模型训练,所以上面 load_dataset 传入的参数是一个 py 文件的路径。这个 py 文件按照 Datasets 库的规则读取文件并返回训练数据,如果想了解更多信息,可以参照 这里。

  如果我们只是想简单学习 Transformers 库的使用,可以使用 Datasets 这个库预置的一些数据集,这个时候 load_dataset 传入的参数是一些字符串(比如,load_dataset("imdb")),然后会自动下载对应数据集。

1.5.2 预处理

  在将数据喂给模型之前,需要将数据进行预处理(Tokenize、填充、截断等)。

from transformers import AutoTokenizer# 第 2 步:预处理数据# 2.1 加载 tokenizertokenizer = AutoTokenizer.from_pretrained(configure["model_path"])def tokenize_function(examples):return tokenizer(examples["text"], padding="max_length", truncation=True)# 2.2 得到经过 tokenization 后的数据tokenized_datasets = datasets.map(tokenize_function, batched=True)print(tokenized_datasets["train"][0])

  首先,加载 tokenizer;然后,使用 datasets.map() 生成经过预处理后的数据。因为数据经过 tokenizer() 处理后的不再是 dataset 格式,所以需要使用 datasets.map() 进行处理。

1.5.3 加载模型

  在前面的部分,已经介绍过模型加载的方法,可以使用 AutoModelXXX.from_pretrained 加载模型:

from transformers import AutoModelForSequenceClassification# 第 3 步:加载模型classification_model = AutoModelForSequenceClassification.from_pretrained( configure["model_path"], num_labels=get_num_labels())

  与前面部分不同的地方在于:上面的代码中有一个 num_labels 参数,需要给这个参数传入我们的数据集中的类别数量。

1.5.4 设定度量指标

  在模型训练过程中,我们希望能够输出模型的性能指标(比如准确率、精确率、召回率、F1 值等)以便了解模型的训练情况。我们可以通过 Datasets 库提供的 load_metric() 来实现。下面的代码中实现了准确率计算:

import numpy as npfrom datasets import load_metric# 第 4 步:设定度量指标metric = load_metric("./accuracy.py")def compute_metrics(eval_pred): logits, labels = eval_pred predictions = np.argmax(logits, axis=-1) return metric.compute(predictions=predictions, references=labels)

  如果想了解更多信息,可以参照 这里。

1.5.5 设置训练超参数

  在进行模型训练时,还需要设置一些超参数,Transformers 库提供了 TrainingArguments 类。

from transformers import TrainingArguments# 第 5 步:设置训练超参数training_args = TrainingArguments(output_dir=configure["output_dir"], evaluation_strategy="epoch")

  在上面的代码中,我们设置了两个参数:output_dir 指定保存模型的输出路径;evaluation_strategy 决定什么时候对模型进行评估,设置的参数 epoch 表明每训练完一个 epoch 后进行一次评估,评估内容即上一步设定的度量指标。

  如果想了解更多参数的设置和具体含义,可以参照 这里。

1.5.6 训练和保存模型

  经过前面一系列的步骤后,我们终于可以开始进行模型训练了。Transformers 库提供了 Trainer 类,可以很简单方便地进行模型训练。首先,创建一个 Trainer,然后调用 train() 函数,就开始进行模型训练了。当模型训练完毕后,调用 save_model() 保存模型。

# 第 6 步:开始训练模型trainer = Trainer(model=classification_model, args=training_args, train_dataset=tokenized_datasets["train"], eval_dataset=tokenized_datasets["validation"], tokenizer=tokenizer, compute_metrics=compute_metrics)trainer.train()# 保存模型trainer.save_model()

  有时候,我们需要调试模型,就需要自己编写模型训练循环,详细方法,可以参照 这里。

1.5.7 总结

  经过前面的介绍,现在我们就可以开始动手训练我们自己的文本多分类模型了。

  不过,前面是以一个文本多分类的例子介绍了如何使用 Transformers 库微调预训练模型。针对其他类型的任务,相比文本分类任务会存在一些差异,具体指导,可以参照以下链接:

任务类型参考链接文本分类(Text classification)https://huggingface.co/docs/transformers/tasks/sequence_classificationToken classification(例如 NER)https://huggingface.co/docs/transformers/tasks/token_classification问答系统(Question answering)https://huggingface.co/docs/transformers/tasks/question_answering语言模型(Language modeling)https://huggingface.co/docs/transformers/tasks/language_modeling机器翻译(Translation)https://huggingface.co/docs/transformers/tasks/translation文本摘要(Sumarization)https://huggingface.co/docs/transformers/tasks/summarization多项选择(Multiple choice)https://huggingface.co/docs/transformers/tasks/multiple_choice音频分类(Audio classification)https://huggingface.co/docs/transformers/tasks/audio_classification自动语音识别(ASR)https://huggingface.co/docs/transformers/tasks/asr图像分类(Image classification)https://huggingface.co/docs/transformers/tasks/image_classification

参考:

[1] Github 地址

[2] 官方开发文档

[3] transformers 教程

[4] https://github.com/nlp-with-transformers/notebooks

[5] https://github.com/datawhalechina/learn-nlp-with-transformers

本文链接地址:https://www.jiuchutong.com/zhishi/292397.html 转载请保留说明!

上一篇:陶尔米纳古剧院,意大利西西里岛 (© Antonino Bartuccio/eStock Photo)(陶尔米纳电影节)

下一篇:微前端-qiankun:vue3-vite 接入 vue3、nuxt3、vue2、nuxt2等子应用(微前端的好处和缺陷)

  • iqoo8怎么设置快捷启动(iqoo8怎么设置快捷健康码)

    iqoo8怎么设置快捷启动(iqoo8怎么设置快捷健康码)

  • 拼多多我的好友在哪(拼多多我的好友在哪里删除)

    拼多多我的好友在哪(拼多多我的好友在哪里删除)

  • 小米10至尊纪念版跑分是多少(小米10至尊纪念版换电池)

    小米10至尊纪念版跑分是多少(小米10至尊纪念版换电池)

  • 微博私信发红包不见了(微博私信发红包对方没收到)

    微博私信发红包不见了(微博私信发红包对方没收到)

  • 微信字体怎么设置大小(微信字体怎么设置好看的字体)

    微信字体怎么设置大小(微信字体怎么设置好看的字体)

  • wmiproviderhost是什么进程(wmi providerhost)

    wmiproviderhost是什么进程(wmi providerhost)

  • u盘重装系统无法检测c盘(U盘重装系统无法创建文件夹,系统找不到指定的路径)

    u盘重装系统无法检测c盘(U盘重装系统无法创建文件夹,系统找不到指定的路径)

  • 微信小号和大号互通吗(微信小号和大号会共享信息吗)

    微信小号和大号互通吗(微信小号和大号会共享信息吗)

  • 苹果蓝牙耳机没电了有提示吗(苹果蓝牙耳机没有声音是怎么回事)

    苹果蓝牙耳机没电了有提示吗(苹果蓝牙耳机没有声音是怎么回事)

  • 抖音能录制多长的视频(抖音能录制多长时间的歌)

    抖音能录制多长的视频(抖音能录制多长时间的歌)

  • 苹果11控制中心怎么调出来(苹果11控制中心怎么设置从下面划出来)

    苹果11控制中心怎么调出来(苹果11控制中心怎么设置从下面划出来)

  • 移动4g接入点哪个快(移动4g接入点怎么设置网速快)

    移动4g接入点哪个快(移动4g接入点怎么设置网速快)

  • 手机能设置自动关机吗(手机能设置自动抢红包吗)

    手机能设置自动关机吗(手机能设置自动抢红包吗)

  • wifi静态什么意思(wifi 静态)

    wifi静态什么意思(wifi 静态)

  • 抖音视频可以下载吗(抖音视频可以下载到相册吗)

    抖音视频可以下载吗(抖音视频可以下载到相册吗)

  • iphone11是什么处理器(iphone11是什么)

    iphone11是什么处理器(iphone11是什么)

  • 爱奇艺怎么关注用户(爱奇艺怎么关注其他用户)

    爱奇艺怎么关注用户(爱奇艺怎么关注其他用户)

  • 苹果11的充电器可以充苹果X吗(苹果11的充电器头14能用吗)

    苹果11的充电器可以充苹果X吗(苹果11的充电器头14能用吗)

  • 华为mate30pro辅助圆点在哪里(华为mate30pro辅助触控怎么关闭)

    华为mate30pro辅助圆点在哪里(华为mate30pro辅助触控怎么关闭)

  • qqlive异地登录啥意思(qq频道异地登录)

    qqlive异地登录啥意思(qq频道异地登录)

  • ios实况图怎么发给别人(iphone 实况照片怎么发)

    ios实况图怎么发给别人(iphone 实况照片怎么发)

  • ps崩了文件去哪找回(ps崩溃了如何找回文件)

    ps崩了文件去哪找回(ps崩溃了如何找回文件)

  • 显卡供电不足的表现(显卡供电不足的表现游戏)

    显卡供电不足的表现(显卡供电不足的表现游戏)

  • 解决日志文件写入被禁止,宽带连接错误651(日志文件的名称和位置是什么)

    解决日志文件写入被禁止,宽带连接错误651(日志文件的名称和位置是什么)

  • python使用pop删除元素(python3.9怎么删除)

    python使用pop删除元素(python3.9怎么删除)

  • 超率累进税率有哪些税种呢怎么算
  • 调整企业银行存款账面余额的记账依据是什么
  • 增值税免退税计算方法
  • 无形资产减值准备
  • 投资款多投了怎么办
  • 水产养殖公司的经营范围_问答
  • 即征即退的增值税需要缴纳附加税吗
  • 增值税减免税款科目怎么结转
  • 企业开具咨询费的发票
  • 税率税额是星号什么意思
  • 金蝶的币别和汇率怎么取消
  • 季报小微企业不包括哪些
  • 企业外籍个人子女教育补贴
  • 房地产开发企业所得税管理办法
  • 劳务报酬个税计算公式表
  • 微软surfacepro3上市时间
  • 预计负债账务处理会计分录
  • 费用发票可以抵扣吗
  • 递延收益的会计科目
  • u盘装机大师怎么用
  • windows update更新错误
  • 苹果15手机价格和图片颜色
  • win10重装系统后网卡没了
  • vue实现导出
  • 远期外汇交易会有风险吗
  • 土地增值税属于财产税吗
  • php linux常用命令
  • 黑沙滩是什么意思
  • 收到退回的以前年度的劳务费怎么入账
  • php常用命令
  • 增值税专票跨月怎么冲红
  • 身份证号码的正确读法
  • pytorch torch
  • 增值税普通发票和专用发票有什么区别
  • 土建工程怎么入账
  • 信用卡收款怎么查询
  • 现金银行本票的签发人是谁
  • 劳务外经证预缴税款
  • okhttp源码
  • 什么时候计提所得税费用会计分录
  • 缴纳税收的凭证怎么打印
  • 调减加计抵减额什么意思
  • sql2008附加数据库
  • 业务招待费的抵扣限额
  • 软件属于哪种无形资产
  • 应税销售额什么意思
  • 装潢装修费用属于营改增
  • 房地产项目开发的基本流程是什么
  • 开红字发票购买方和销货方有哪些操作不同?
  • 无形资产计提折旧可以转回吗
  • 制单的基本要求是什么
  • 企业的投资公司 私募
  • win10安装mysql初始化失败原因
  • mysql数据库全量备份
  • Windows Server 2016技术预览版第四版系统截图曝光 编号10565
  • 盗版win8 1升级win10
  • mac电脑快速查询
  • 服务器centos6.8安装教程
  • freebsd查看硬盘信息
  • WinCtlAdAlt.exe - WinCtlAdAlt是什么进程
  • win平板装ubuntu
  • scair.exe是什么程序
  • centos fedora
  • redhat磁盘挂载
  • linux下scp远程拷贝包含空格的目录或者文件的解决方法
  • win10 屏幕键盘
  • linux shell find
  • linux虚拟机怎么查看目录
  • win7系统连不了蓝牙
  • linux的命令行指的是什么
  • perl匹配空行
  • android 图片
  • python中用input()函数接收到的数据为
  • NGUI之UITab Bar的不能将Sprite与SelectedSprite设置成相同的精灵
  • unity后期
  • jquery 异步加载
  • 湖南地税网上办税服务厅
  • 民办学校需要交工会经费吗
  • 企业所得税一年算几次
  • 大管家多少集
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设