您现在的位置是:首页 > 技术教程 正文

【NLP】特征提取: 广泛指南和 3 个操作教程 [Python、CNN、BERT]

admin 阅读: 2024-03-20
后台-插件-广告管理-内容页头部广告(手机)

什么是机器学习中的特征提取?

特征提取是数据分析和机器学习中的基本概念,是将原始数据转换为更适合分析或建模的格式过程中的关键步骤。特征,也称为变量或属性,是我们用来进行预测、对对象进行分类或从数据中获取见解的数据点的特定特征或属性。

本质上,特征提取涉及以增强给定任务的数据质量和相关性的方式选择、转换或创建这些特征。

它是干什么用的?

由于多种原因,它是一项不可或缺的技术:

  • 降维:在许多数据集中,可能存在许多特征,这可能导致一种称为维数灾难的现象。高维数据可能具有挑战性,并可能导致机器学习模型过度拟合。特征提取技术有助于减少维数,同时保留基本信息。
  • 降噪:原始数据通常包含噪声或不相关的信息,可能会影响模型的准确性。特征提取方法旨在滤除噪声并突出数据中最有意义的方面。
  • 可解释性:通过特征提取简化数据可以使分析更具可解释性。它帮助我们关注最重要的变量并理解它们的关系。
  • 提高模型性能:有效的特征提取可以通过为机器学习算法提供更清晰、信息更丰富的输入来增强模型性能。这在分类、回归和聚类等任务中尤其重要。

特征提取方法有多种形式,从用于降维的主成分分析 (PCA) 等统计技术,到从文本、图像或其他数据类型中提取相关信息的特定领域方法。

特征提取的简单示例

让我们从使用词袋(BoW)技术进行特征提取的简单的基于文本的示例开始。

基于文本的猫和狗特征提取示例

输入文本数据:假设您有三个短文本文档的集合:

  1. “I like cats and dogs.”
  2. “Dogs are great pets.”
  3. “I prefer cats over dogs.”

第 1 步:Tokenization

通过将文本分解为单独的单词或标记来对文本进行标记。标记化后,您将得到一个单词列表:

  1. [“I”, “like”, “cats”, “and”, “dogs.”]
  2.  [“Dogs”, “are”, “great”, “pets.”]
  3.  [“I”, “prefer”, “cats”, “over”, “dogs.”]

第 2 步:创建词汇表

通过识别整个文档集合中的唯一单词来创建词汇表:

词汇:[“I”, “like”, “cats”, “and”, “dogs”, “are”, “great”, “pets”, “prefer”, “over”]

步骤 3:文档-术语矩阵(特征提取)

构建文档术语矩阵 (DTM) 或词袋表示,其中每行对应一个文档,每列对应词汇表中的一个单词。DTM 中的值表示各个文档中每个单词的频率:

DocumentIlikecatsanddogsaregreatpetspreferover
Document 11111200000
Document 20000111100
Document 31010100011

第四步:特征表示

文档术语矩阵 (DTM) 是您的特征表示。每个文档现在都表示为词频向量。

例如,文档1可以表示为特征向量[1,1,1,1,2,0,0,0,0,0]。

这些特征向量可用于各种文本分析任务,例如文本分类、情感分析或聚类。BoW 技术将文本数据转换为数字表示,使其适合机器学习算法来处理和分析基于文本的信息。

机器学习中的 9 大特征提取技术和算法

特征提取包含多种技术,可大致分为降维方法和增强特征质量和相关性的策略。在这里,我们探讨了各种数据分析和机器学习应用程序中使用的一些最常见的特征提取技术:

1. 主成分分析(PCA):

  • 目的:  PCA 是一种降维技术,用于将数据集转换为新的坐标系,其中称为主成分的维度是正交的,并捕获数据中的最大方差。
  • 用例: 降低高维数据集的维数,同时保留尽可能多的信息。

2. 线性判别分析(LDA):

  • 目的:  LDA 是一种降维技术,专注于通过将数据投影到低维空间来最大化分类问题中类之间的可分离性。
  • 用例: 类别区分至关重要的分类任务的特征提取。

3. t-分布随机邻域嵌入(t-SNE):

  • 目的:  t-SNE 主要用于通过降低数据维数同时保留数据点之间的局部关系来进行可视化和特征提取。
  • 使用案例: 可视化高维数据,尤其是在聚类任务中。

4. 特征缩放和标准化:

  • 目的: 缩放和标准化特征可确保不同特征具有可比较的尺度,这对于许多机器学习算法至关重要。
  • 使用案例: 预处理数据以避免对特征尺度敏感的模型出现偏差,例如KNN和SVM。

5. 特征工程:

  • 目的: 特征工程涉及创建新特征或转换现有特征以增强模型可用的信息。这可以包括数学运算、特定领域的知识或交互术语。
  • 用例: 针对特定问题定制功能并提高模型性能。

6. 非负矩阵分解(NMF):

  • 目的:  NMF 将数据矩阵分解为两个低维矩阵,通常表示部分及其组合。它有助于找到可解释的特征。
  • 使用案例: 文本数据、图像分割和信号处理中的主题建模。

7. 独立成分分析(ICA):

  • 目的:  ICA 将多变量信号分离为可加的独立分量。它通常用于分离混合信号。
  • 使用案例: 信号处理和一些生物医学应用中的盲源分离。

8.小波变换:

  • 目的: 小波变换将数据分解为多个尺度的不同频率分量,揭示不同分辨率下的特征。
  • 使用案例: 图像和信号处理、时频分析中的特征提取。

9.自编码器:

  • 目的: 自动编码器是学习将数据编码为低维表示的神经网络架构。网络的编码器部分充当特征提取机制。
  • 使用案例: 通用降维和特征提取,通常用于深度学习。

这些常见的特征提取技术为数据科学家和机器学习从业者提供了一个工具箱,可以根据项目的具体要求有效地预处理数据、降低维度并提高特征质量。技术的选择应以数据的性质以及分析或建模任务的目标为指导。

深度学习特征提取

深度学习特征提取是指使用预先训练的深度神经网络从原始数据(通常是图像、文本或其他类型的高维数据)中自动提取信息特征。深度学习模型,特别是用于图像数据的卷积神经网络 (CNN) 和用于文本等序列数据的循环神经网络 (RNN),可以学习数据中复杂的模式和表示。

以下是深度学习特征提取及其应用的概述:

1.用于图像特征提取的卷积神经网络(CNN):

  • 在图像方面,CNN 通过自动学习分层和空间相关特征,彻底改变了特征提取。
  • VGG、ResNet 和 Inception 等深度 CNN 架构在包含数百万张图像的大型图像数据集(例如 ImageNet)上预先训练了模型。这些模型可以进行微调或用作特定图像相关任务的特征提取器。
  • 这些网络的最后一层通常包含可用作通用图像表示的高级特征,并且这些特征可以输入到其他机器学习模型中。

2.用于文本特征提取的循环神经网络(RNN):

  • RNN,特别是长短期记忆(LSTM)和门控循环单元(GRU)网络已广泛用于文本数据。
  • 预训练的 RNN 模型(例如Word2Vec、GloVe)和基于Transformer的模型(例如 BERT)用于从文本数据中提取特征。这些模型从文本文档中捕获语义和上下文信息。
  • 从这些模型中提取的特征可用于各种自然语言处理 (NLP) 任务,例如情感分析、命名实体识别或文本分类。

3. 特征提取的迁移学习:

  • 迁移学习是深度学习中的一种广泛使用的技术,其中预训练的模型针对特定任务进行了微调。特征提取可能是迁移学习的重要组成部分。
  • 使用预先训练的模型作为特征提取器,即使您的数据集很小或特定,您也可以利用从大型且多样化的数据集中学到的知识。
  • 针对新任务微调预训练模型的最后几层,同时保持较低层固定是一种常见的方法。

深度学习在特征提取中的应用

  • 图像分类:深度学习特征提取用于图像分类任务,其中提取的特征被传递到分类器以区分对象或场景。
  • 对象检测:深度学习模型提取特征来检测和定位图像中的对象。
  • 文本分类:对于垃圾邮件检测或情感分析等任务,从文本数据中提取深度学习特征至关重要。
  • 异常检测:从原始数据中提取的深层特征可以帮助识别各个领域的异常或异常值,例如欺诈检测或质量控制。

深度学习特征提取很有价值,因为它允许数据科学家和机器学习从业者利用深度神经网络的暗示能力,即使他们从头开始训练模型的数据或资源有限。通过使用预先训练的模型,您可以节省时间和资源,同时在各种任务中实现最先进的性能。

十大 NLP 文本特征提取技术

自然语言处理 (NLP) 中的特征提取涉及将文本数据转换为可输入机器学习模型的数字表示。NLP 特征提取对于广泛的 NLP 任务至关重要,例如文本分类、情感分析、命名实体识别和机器翻译。以下是 NLP 特征提取的一些常用技术:

1. 词袋(BoW):

  • BoW 将文档表示为词频或二进制值的向量。它丢弃文本的顺序和结构,但捕获特定单词的存在或不存在。
  • BoW 可以扩展为包含n元语法(n 个单词的序列)来捕获一些本地上下文。

2. 词频-逆文本频率(TF-IDF):

  • TF-IDF 是一种数值统计量,反映文档中单词相对于文档集合(语料库)的重要性。
  • 它为文档中频繁出现但在语料库中罕见的单词分配更高的分数。

3. 词嵌入:

  • 词嵌入将词表示为固定维空间中的密集、连续值向量。常用的技术有 Word2Vec、GloVe 和 FastText。
  • 词嵌入捕获词之间的语义关系,并可用于通过聚合词向量(例如求平均或加权和)来导出文档的向量表示。

4. 预训练语言模型:

  • 预训练语言模型,如 BERT、GPT-2 和 RoBERTa,因 NLP 特征提取而闻名。
  • 这些模型提供上下文嵌入,考虑到周围的单词,并且能够捕获复杂的语义和句法信息。

5. 词性(POS)标记:

  • 词性标注识别句子中每个单词的语法类别,例如名词、动词、形容词等。这些信息可以用作各种 NLP 任务中的特征。

6.命名实体识别(NER):

  • NER 从文本中提取实体(例如人名、组织、位置),识别出的实体可以用作特征。

7.情感分析:

  • 情感分析的功能通常包括情感词典,它提供单词列表及其相关的情感分数。
  • 还可以提取与否定、强化词和情绪转变相关的特征。

8. 用词频或序列长度表示文本:

  • 基本特征,例如文档中的单词数量或特定单词或短语的频率,可以用作特定 NLP 任务的特征。

9.基于语法的特征:

  • 从文本句法结构派生的特征(例如解析树或语法关系)可用于涉及语法或句法分析的任务。

10. 文档嵌入:

  • Doc2vec这样的技术可以通过考虑文档中单词的上下文来获取整个文档的向量表示。

NLP 中特征提取技术的选择取决于具体任务、数据集和可用资源。尝试不同的技术并执行特征工程来提高 NLP 模型的性能是很常见的。此外,随着 NLP 研究的不断发展,预训练的语言模型因其提供丰富的上下文嵌入的能力而受到欢迎,并显着提高了各种 NLP 任务的现有技术水平。

9 大自动特征提取技术

自动特征提取,通常称为自动特征工程或特征学习,是让机器学习算法或模型从原始数据中发现并生成相关特征而无需人工干预的过程。当处理高维数据或难以用手工特征捕获的复杂模式时,这种方法非常有利。自动特征提取方法包括:

1.特征学习的深度学习

深度神经网络,特别是深度自动编码器和卷积神经网络(CNN)可以自动从原始数据中学习特征。自动编码器通过将数据编码到低维空间然后将其解码回来来学习紧凑的表示。CNN 从图像中学习分层特征,这对于各种计算机视觉任务很有帮助。

2.迁移学习

迁移学习利用预训练模型(例如,BERT ResNet 等预训练深度学习模型)从新数据集或领域中提取特征。这些模型在大量数据集上学习到的特征可以针对特定任务进行微调。

3. 主成分分析(PCA)

PCA 是一种降维技术,可将数据转换为新的坐标系,其中维度(主成分)捕获最大方差。它可以被认为是一种在保留基本信息的同时降低维度的自动特征提取方法。

4.非负矩阵分解(NMF)

NMF 将数据矩阵分解为两个低维矩阵,表示部分及其组合。它提取可解释且对各种应用程序有用的特征。

5.独立成分分析(ICA)

ICA 将混合信号分离成独立的分量,可用于各种应用,包括信号处理中的盲源分离。

6.词嵌入和语言模型

在自然语言处理 (NLP) 中,词嵌入(例如 Word2Vec、GloVe)捕获单词之间的语义关系,允许模型自动学习单词的向量表示。预训练的语言模型(例如 BERT、GPT)可以学习上下文嵌入并从文本数据中提取特征。

7.进化算法

进化算法,例如遗传编程,可以进化数学表达式或特征组合来优化特定的目标函数。

8. AutoML 平台

TPOT和Auto-Sklearn等自动机器学习 (AutoML) 平台可自动执行特征选择和工程过程,使用各种技术来识别给定机器学习任务的信息最丰富的特征。

9.深度特征选择:

深度特征选择方法使用神经网络从输入数据中排序或选择最相关的特征,针对特定任务对其进行优化。

自动特征提取可以显着减少对领域专业知识和手动特征工程的需求,这使得在涉及大型、复杂数据集时特别有价值。它允许机器学习模型发现和利用数据中的复杂模式,从而提高各种任务的性能。

如何在Python示例中实现特征提取

让我们考虑使用流行的 CIFAR-10 数据集在图像数据上下文中进行特征提取的实际示例。CIFAR-10 数据集由 10 个不同类别的 60,000 张 32×32 彩色图像组成,每个类别有 6,000 张图像。在这里,我们将使用主成分分析 (PCA) 执行图像分类的特征提取:

第 1 步:数据预处理

首先,您将加载并预处理图像数据。对于 CIFAR-10,您需要读取图像并将其转换为合适的格式(例如,NumPy 数组)。您还可以对像素值进行标准化,以确保它们在同一范围内(例如,[0, 1])。

第 2 步:使用 PCA 进行特征提取

对图像数据应用主成分分析。PCA 旨在找到信息最丰富的正交方向(主成分),沿着该方向数据方差最大化。这有效地降低了数据的维度。

  1. import numpy as np
  2. from sklearn.decomposition import PCA
  3. # Assuming 'X' is your preprocessed image data
  4. X = X.reshape(X.shape[0], -1) # Flatten images into 1D arrays
  5. # Specify the number of principal components you want to retain
  6. n_components = 100 # You can choose the number based on your needs
  7. # Apply PCA
  8. pca = PCA(n_components=n_components)
  9. X_pca = pca.fit_transform(X)

应用 PCA 后,  X_pca 将包含转换为低维表示的图像数据,每个图像由一组减少的特征表示。这些特征是原始像素值的线性组合,捕获数据中最显着的变化。

第 3 步:模型训练和评估

您可以使用简化的特征表示 ( X_pca ) 来训练图像分类的机器学习模型。例如,您可以使用支持向量机 (SVM) 或神经网络等分类器将图像分类到各自的类别中。

  1. from sklearn.model_selection import train_test_split
  2. from sklearn.svm import SVC
  3. from sklearn.metrics import accuracy_score
  4. # Split the data into training and testing sets
  5. X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42)
  6. # Train a Support Vector Machine (SVM) classifier
  7. svm_classifier = SVC()
  8. svm_classifier.fit(X_train, y_train)
  9. # Make predictions on the test set
  10. y_pred = svm_classifier.predict(X_test)
  11. # Evaluate the model's accuracy
  12. accuracy = accuracy_score(y_test, y_pred)
  13. print(f"Accuracy: {accuracy * 100:.2f}%")

在此示例中,PCA 用于降低图像数据的维度,同时保留最重要的信息。然后使用通过 PCA 获得的低维特征来训练用于图像分类的机器学习模型。这只是特征提取的一个实例;相同的概念可以应用于各种数据类型和任务。

如何在 BERT 中实现特征提取

BERT(来自 Transformers 的双向编码器表示)是 Google 开发的强大的预训练语言模型,可用于广泛的自然语言处理 (NLP) 任务。BERT 捕获上下文信息和单词之间的关系,使其成为从文本中提取特征的宝贵工具。要从 BERT 中提取特征,可以按照以下步骤操作:

1、预处理:

在从 BERT 中提取特征之前,您需要准备文本数据。使用 BERT 预训练期间使用的相同分词器将文本分词为子词。大多数 BERT 模型都带有分词器。

2. 使用预训练的 BERT 模型:

选择适合您任务的预训练 BERT 模型。“bert-base-uncased”和“bert-large-uncased”等模型通常用于英语文本。

3.加载BERT模型:

您可以使用流行的 NLP 库(例如 Python 中的 Hugging Face 的 Transformers 库)来加载预训练的 BERT 模型。例如:

  1. from transformers import BertModel, BertTokenizer
  2. model_name = "bert-base-uncased"
  3. tokenizer = BertTokenizer.from_pretrained(model_name)
  4. model = BertModel.from_pretrained(model_name)

4. 代币化:

使用 BERT 分词器对文本数据进行分词。这会将您的文本转换为 BERT 可以理解的标记。

  1. text = "Your text goes here."
  2. tokens = tokenizer(text, padding=True, truncation=True, return_tensors="pt")

5.特征提取:

通过 BERT 模型传递标记化输入以获得嵌入或特征。BertModel  将返回隐藏状态,在某些情况下,还会返回池表示对于特征提取,您通常可以使用隐藏状态。下面是如何从 BERT 获取特征的示例:

  1. with torch.no_grad():
  2. output = model(**tokens)
  3. hidden_states = output.last_hidden_state

hidden_​​states 包含输入文本中每个标记的上下文嵌入。您可以通过对这些嵌入进行平均或池化或根据任务需要选择特定层或标记来提取特征。

6、后处理:

根据您的具体用例,您可能需要对功能进行后处理。例如,您可以对嵌入进行平均或池化以获得整个输入文本的单个向量表示。

7. 功能使用:

您可以将提取的特征用于各种 NLP 任务,例如文本分类、情感分析、命名实体识别等。

请记住,BERT 是一个具有多层的深度神经网络,从不同层获得的特征可能会捕获文本的其他方面。尝试使用层和技术来提取最适合您的特定 NLP 任务的特征。此外,Hugging Face Transformers 库为 BERT 和其他预训练模型提供了方便的接口,使特征提取更加容易。

如何在 CNN 中实现特征提取

卷积神经网络 (CNN) 主要设计用于图像处理任务,但它们也可用于从图像中提取特征。CNN 在学习图像中的层次和空间相关特征方面特别有效。以下是使用 CNN 执行特征提取的方法:

1、预处理:

通过调整大小、标准化和预处理来准备图像数据。您可以使用 OpenCV 或 PIL 等库来加载和操作图像。

2.加载预训练的CNN模型:

选择适合您的特征提取需求的预训练 CNN 模型。常见的选择包括 VGG、ResNet、Inception 或 MobileNet 等模型。这些模型已经在大型图像数据集上进行了训练,可以从图像中提取信息特征。

3. 加载模型并删除顶层:

使用 TensorFlow 或 PyTorch 等深度学习库加载预训练的 CNN 模型。从模型中删除完全连接的层(顶层),因为您只需要特征提取部分。

例如,如果您使用 TensorFlow 和 VGG16 模型:

  1. from tensorflow.keras.applications import VGG16
  2. from tensorflow.keras.applications.vgg16 import preprocess_input
  3. base_model = VGG16(weights='imagenet', include_top=False)

4.特征提取:

将图像数据传递给 CNN 模型,以从中间层之一提取特征。这些层在完全连接的层之前捕获分层和抽象特征。

  1. # Assuming 'images' is a list of preprocessed image data
  2. features = []
  3. for image in images:
  4. image = np.expand_dims(image, axis=0)
  5. image = preprocess_input(image)
  6. feature = base_model.predict(image)
  7. features.append(feature)

5、后处理:

根据您的具体任务,您可以展平、平均或池化提取的特征。您还可以对它们进行标准化,以确保它们处于一致的范围内。

6. 功能使用:

提取的特征可用于各种计算机视觉任务,例如图像分类、对象检测或图像相似性分析。

通过使用预先训练的 CNN 模型进行特征提取,您可以受益于该模型自动学习和捕获信息丰富的图像特征的能力。如果您的标记数据数量有限或想要利用从大量图像数据集中学到的知识,这尤其有用。用于特征提取的特定 CNN 架构和层的选择取决于您的任务和数据的性质。尝试不同的模型和层,找到最适合您的应用程序的功能。

挑战和考虑因素

特征提取是数据预处理和机器学习的基本步骤,但它也带来了挑战和考虑因素。了解这些挑战对于在特征提取过程中做出明智的决策至关重要。以下是一些常见的挑战和重要的考虑因素:

1.维度诅咒

高维数据可能导致计算效率低下、内存使用增加以及数据可视化和解释困难。解决这一挑战通常需要使用 PCA 等降维技术。

2. 数据质量

输入数据的质量直接影响特征提取。嘈杂或不一致的数据可能导致提取不相关或误导性的特征。数据预处理和清理对于缓解这一挑战至关重要。

3. 特征相关性

确定哪些特征与问题相关可能具有挑战性。提取太多或不相关的特征可能会导致过度拟合,而缺少相关部分可能会导致欠拟合。

4. 特征工程复杂性

创建和设计功能可能是一个耗时且迭代的过程。设计有效的功能通常需要领域知识和创造力,这使得这个过程变得更加复杂。

5. 数据分发

数据的分布会影响特征提取。某些技术可能更适合具有特定分布的数据,并且应考虑有关数据分布的假设。

6. 可解释性与复杂性

虽然复杂的特征提取技术可以产生较高的预测性能,但它们可能会降低模型的可解释性。根据用例,在模型复杂性和可解释性之间取得平衡至关重要。

7. 数据不平衡

在分类任务中,不平衡的类别分布可能会带来挑战。特征提取可能需要考虑解决数据不平衡和防止模型偏差的策略。

8. 缩放

某些特征提取技术可能无法很好地适应大型数据集。考虑处理大数据时特征提取所需的计算资源。

9. 异构数据

处理异构数据类型,例如文本、图像和结构化数据,可能需要多种特征提取技术和不同来源的集成。

10. 跨域泛化

从一个领域提取的特征可能无法很好地推广到另一个领域。将从一种环境中学到的特征应用于不同环境时要小心。

11. 模型依赖

机器学习模型的选择可能会影响特征提取的有效性。为一种模型提取的特征对于另一种模型可能没有那么丰富的信息。

12.计算资源

特征提取,尤其是深度学习模型的特征提取,计算成本可能很高。选择特征提取技术时请考虑可用的硬件和计算资源。

13. 评估功能影响

了解各个特征对模型性能的实际影响可能具有挑战性。特征重要性分析等技术可以提供帮助,但它们并不总是那么简单。

14. 实验

特征提取通常是一个涉及实验和微调的迭代过程。准备好探索多种技术并验证其有效性。

在特征提取过程中应对这些挑战并考虑这些因素对于提高特征质量并最终提高机器学习模型的性能和可解释性至关重要。特征提取是从原始数据到可操作的见解的关键一步,深思熟虑这些挑战对于其成功至关重要。

结论

总之,特征提取是数据预处理和机器学习的基本步骤,在提高模型的质量、可解释性和性能方面发挥着至关重要的作用。从原始数据中提取相关且信息丰富的特征是一项关键任务,需要仔细考虑各种技术、领域知识和具体挑战。以下是关键要点的摘要:

  • 特征提取是从原始数据中选择、转换或创建相关特征,以提高机器学习模型的效率和准确性。
  • 常见的特征提取技术包括降维(例如 PCA)、词嵌入(例如 Word2Vec)、预训练语言模型(例如 BERT)和图像 CNN。
  • 特征提取在高维数据、具有复杂模式的数据以及利用特定领域的知识来增强特征集时尤其有价值。
  • 特征提取的最佳实践包括理解问题域、数据预处理、降维和特征工程。
  • 特征提取的挑战包括维数灾难、数据质量、特征相关性以及可解释性和复杂性之间的权衡。
  • 考虑因素包括数据分布、不平衡、计算资源和模型依赖性。
  • 特征提取是一个迭代过程,通常需要实验和验证。

在实践中,有效的特征提取可以提高模型性能、模型可解释性和更准确的预测。它是更广泛的机器学习管道的重要组成部分,用于从原始数据中获取可行的见解。通过遵循最佳实践并考虑挑战和注意事项,数据科学家和机器学习从业者可以释放数据的潜力并构建更强大和更准确的模型。

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜