当前位置: 首页 > news >正文

毕业设计团购网站建设医生在网站上做自我宣传

毕业设计团购网站建设,医生在网站上做自我宣传,网站宝的作用,厦门外贸网站建预训练模型 1. 预训练模型介绍 1.1. ELMo1.2. GPT1.3. BERT 2. Seq2Seq 2.1. T52.2. BART 3. Tokenization 1. 预训练模型介绍 在预训练语言模型出现之前#xff0c;统计语言模型#xff08;如N-gram模型#xff09;是主流方法。这些模型利用统计方法来预测文本中的下一个… 预训练模型 1. 预训练模型介绍 1.1. ELMo1.2. GPT1.3. BERT 2. Seq2Seq 2.1. T52.2. BART 3. Tokenization 1. 预训练模型介绍 在预训练语言模型出现之前统计语言模型如N-gram模型是主流方法。这些模型利用统计方法来预测文本中的下一个词但它们对长距离依赖和上下文理解能力有限。 2013年Google提出的Word2Vec模型利用神经网络来学习词的分布式表示词向量使得相似词在向量空间中彼此接近。这是预训练词嵌入技术的开端。斯坦福大学提出的GloVe(Global Vectors for Word Representation)模型通过结合全局词共现统计信息来生成词向量进一步提升了词表示的质量。 2018年ELMo(Embeddings from Language Models)由AllenNLP团队提出它通过双向LSTM来生成上下文感知的词表示。这标志着从静态词向量到动态上下文词向量的转变。2017年Google提出的Transformer模型引入了自注意力机制极大地提升了处理长距离依赖和并行计算的能力为后续的大规模预训练模型奠定了基础。2018年Google提出BERT(Bidirectional Encoder Representations from Transformers)它是首个双向Transformer模型能够利用句子中所有词的上下文信息进行预训练。BERT在多项NLP任务中取得了显著的效果。2018年OpenAI提出的GPT(Generative Pre-trained Transformer)采用了单向Transformer结构通过生成式任务进行预训练。GPT-2(2019)和GPT-3(2020)进一步扩大了模型规模展示了预训练模型在生成任务中的强大能力。2019Google提出的T5(Text-To-Text Transfer Transformer)将各种NLP任务统一为文本到文本的格式展示了预训练模型在多任务学习中的潜力。 1.1. ELMo 相关论文 Deep contextualized word representations ELMo(Embeddings from Language Models)是由AllenNLP团队在2018年提出的一种预训练语言模型。它是首个通过上下文感知的词嵌入来显著提升自然语言处理任务性能的模型之一。 ELMo的核心思想是生成上下文感知的词表示这意味着同一个词在不同的上下文中会有不同的表示。传统的词嵌入方法如Word2Vec和GloVe生成的是固定的词向量而ELMo则通过考虑句子的上下文使得词表示更加动态和灵活。 ELMo的训练过程包括以下步骤 预训练ELMo在大规模语料库上预训练双向语言模型通过最大化前向和后向语言模型的对数似然估计来学习参数。ELMo使用双向LSTM(Long Short-Term Memory)作为基础结构分别从前向和后向两个方向处理句子。前向LSTM从句子的开头到结尾逐词处理后向LSTM则从句子的结尾到开头逐词处理。通过双向LSTMELMo生成了每个词在不同上下文中的表示。每个词的最终表示是由不同层的表示加权和得到的。特征提取和微调在特定任务中预训练的ELMo模型可以作为特征提取器使用生成上下文感知的词嵌入。可以进一步对特定任务的训练数据进行微调以提升性能。 双向语言模型 p ( t 1 , t 2 , ⋯ , t N ) ∑ k 1 N p ( t k ∣ t 1 , t 2 , ⋯ , t k − 1 ) p ( t 1 , t 2 , ⋯ , t N ) ∑ k 1 N p ( t k ∣ t k 1 , t t 2 , ⋯ , t N ) \begin{aligned} p(t_1, t_2, \cdots, t_N) \sum_{k1}^N p(t_k | t_1, t_2, \cdots, t_{k-1}) \\ p(t_1, t_2, \cdots, t_N) \sum_{k1}^N p(t_k | t_{k1}, t_{t2}, \cdots, t_N) \\ \end{aligned} p(t1​,t2​,⋯,tN​)p(t1​,t2​,⋯,tN​)​k1∑N​p(tk​∣t1​,t2​,⋯,tk−1​)k1∑N​p(tk​∣tk1​,tt2​,⋯,tN​)​ 目标函数 ∑ k 1 N ( log ⁡ p ( t k ∣ t 1 , ⋯ , t k − 1 ; Θ x , Θ → L S T M , Θ s ) log ⁡ p ( t k ∣ t k 1 , ⋯ , t N ; Θ x , Θ ← L S T M , Θ s ) ) \begin{aligned} \sum_{k1}^N \left( \log p(t_k | t_1, \cdots, t_{k-1}; \Theta_x, \overrightarrow{\Theta}_{LSTM}, \Theta_s) \log p(t_k | t_{k1}, \cdots, t_{N}; \Theta_x, \overleftarrow{\Theta}_{LSTM}, \Theta_s)\right) \end{aligned} k1∑N​(logp(tk​∣t1​,⋯,tk−1​;Θx​,Θ LSTM​,Θs​)logp(tk​∣tk1​,⋯,tN​;Θx​,Θ LSTM​,Θs​))​ ELMo 的计算流程 R k { x k L M , h → k j L M , h ← k j L M ∣ j 1 , ⋯ , L } { h k , j L M ∣ j 1 , ⋯ , L } \begin{aligned} R_k \{ x_k^{LM}, \overrightarrow{h}_{kj}^{LM}, \overleftarrow{h}_{kj}^{LM} | j1, \cdots, L \} \\ \{ h_{k,j}^{LM} | j1, \cdots, L \} \\ \end{aligned} Rk​​{xkLM​,h kjLM​,h kjLM​∣j1,⋯,L}{hk,jLM​∣j1,⋯,L}​ ELMo k t a s k E ( R k ; Θ t a s k ) γ t a s k ∑ j 0 L s j t a s k h k , j L M \begin{aligned} \text{ELMo}_k^{task} E(R_k; \Theta^{task}) \gamma^{task} \sum_{j0}^L s_j^{task} h_{k,j}^{LM} \end{aligned} ELMoktask​​E(Rk​;Θtask)γtaskj0∑L​sjtask​hk,jLM​​ ELMo的优势 上下文感知ELMo生成的词表示能够捕捉词在不同上下文中的意义变化提高了对多义词和同义词的处理能力。动态表示相比于静态词嵌入ELMo的词表示是动态的能够更好地适应复杂的语言现象。 1.2. GPT 相关论文 Improving Language Understanding by Generative Pre-Training GPT(Generative Pre-trained Transformer)是由OpenAI提出的一系列预训练语言模型这些模型在自然语言生成和理解任务中表现出了卓越的能力。GPT系列包括GPT、GPT-2、GPT-3和GPT-4每一代都在规模和性能上有显著提升。 GPT模型的核心架构基于Transformer的解码器部分专注于生成式任务。与BERT不同GPT采用单向的自回归方法即在生成当前词时仅依赖于左侧的上下文。GPT的预训练任务是语言建模即通过预测序列中的下一个词来训练模型。这种自回归的方法使得GPT能够生成连贯和上下文相关的文本。 GPT的架构特点如下 单向自回归GPT是单向的即在生成每个词时仅考虑它之前的词。这使得GPT特别适合生成任务如文本生成、对话生成等。Transformer解码器GPT使用多层的Transformer解码器每层包括多头自注意力机制和前馈神经网络。 GPT的训练分为两个阶段 预训练GPT使用了BooksCorpus数据集进行预训练。BooksCorpus包含了约7000本未标注的英语书籍总共约8亿词。预训练任务是语言建模即通过预测序列中的下一个词来训练模型。这种自回归方法使得模型能够生成连贯的文本。损失函数是标准的最大似然估计(Maximum Likelihood Estimation, MLE)即最大化训练数据的对数似然。微调在微调阶段使用特定任务的数据集。例如对于文本分类任务使用标注了类别标签的数据集。将任务数据转换为适合模型输入的格式。例如对于分类任务输入格式可能是“[CLS] 文本 [SEP]”其中[CLS]表示分类标记[SEP]表示分隔符。在预训练模型的顶部添加一个任务特定的输出层。例如对于分类任务添加一个全连接层用于预测类别标签。 预训练阶段损失函数 L 1 ( U ) ∑ i log ⁡ P ( u i ∣ u i − k , ⋯ , u i − 1 ; Θ ) L_1(\mathcal{U}) \sum_i \log P(u_i | u_{i-k}, \cdots, u_{i-1}; \Theta) L1​(U)i∑​logP(ui​∣ui−k​,⋯,ui−1​;Θ) GPT的前向计算过程 h 0 U W e W p h l transformer_block ( h i − 1 ) , ∀ i ∈ [ 1 , n ] P ( u ) softmax ( h n W e T ) \begin{aligned} h_0 U W_e W_p \\ h_l \text{transformer\_block}(h_{i-1}), \forall i \in [1,n] \\ P(u) \text{softmax}(h_n W_e^T) \end{aligned} h0​hl​P(u)​UWe​Wp​transformer_block(hi−1​),∀i∈[1,n]softmax(hn​WeT​)​ GPT微调的前向计算需要在最后一层隐藏层再额外增加一层线性层 P ( y ∣ x 1 , ⋯ , x m ) softmax ( h l m W y ) P(y|x^1, \cdots, x^m) \text{softmax}(h_l^m W_y) P(y∣x1,⋯,xm)softmax(hlm​Wy​) 微调阶段损失函数 L 2 ( C ) ∑ ( x , y ) log ⁡ P ( y ∣ x 1 , ⋯ , x m ) L_2(\mathcal{C}) \sum_{(x,y)} \log P(y|x^1, \cdots, x^m) L2​(C)(x,y)∑​logP(y∣x1,⋯,xm) 实验发现将语言建模作为模型微调的辅助目标可以改善监督模型的泛化能力即在未见过的数据上表现更好并且可以加快模型的收敛速度。即新的目标函数集合了预训练和微调两个阶段的损失函数 L 3 ( C ) L 2 ( C ) λ L 1 ( C ) L_3(\mathcal{C}) L_2(\mathcal{C}) \lambda L_1(\mathcal{C}) L3​(C)L2​(C)λL1​(C) GPT的优势 生成能力强GPT在生成连贯、上下文相关的文本方面表现出色。适应性强通过微调GPT可以适应多种NLP任务。大规模预训练利用大规模预训练数据GPT能够捕捉丰富的语言特征和模式。 GPT的限制 单向性GPT的单向自回归方法限制了其上下文理解能力无法像双向模型如BERT那样同时考虑词汇的前后文。规模限制相较于后续的GPT-2和GPT-3GPT的模型参数量和预训练数据规模较小性能和生成能力有限。 1.3. BERT 相关论文 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding BERT(Bidirectional Encoder Representations from Transformers)是由Google在2018年提出的一种预训练语言模型它在自然语言处理任务中引入了革命性的进步。BERT的设计使得它能够在多种NLP任务上实现显著的性能提升。 BERT的核心创新是其双向Transformer架构这使得模型可以同时考虑上下文中的前后信息从而生成更加准确和丰富的词表示。BERT的架构基于Transformer的编码器部分具体特点如下 双向性与之前的单向语言模型如GPT不同BERT是双向的即它在预训练过程中同时从左到右和从右到左读取文本。这种双向性使得BERT能够更好地理解单词的上下文。Transformer编码器BERT使用多层的Transformer编码器通常有BERT-Base和BERT-Large两种配置分别有12层和24层编码器。每层包含多头自注意力机制和前馈神经网络。 BERT通过两个主要任务进行预训练 Masked Language Model (MLM)在输入文本中随机掩盖mask一些词模型的任务是预测这些被掩盖的词。这种方法允许模型在训练过程中利用双向上下文信息。Next Sentence Prediction (NSP)给定两个句子A和B模型需要判断B是否是A的下一个句子。这种任务帮助模型理解句子间的关系有利于问答和自然语言推理等任务。 BERT的训练分为两个阶段 预训练在大规模无标注语料库如Wikipedia和BooksCorpus上进行预训练通过MLM和NSP任务学习通用的语言表示。微调在特定任务的数据集上进行微调只需在预训练模型的基础上添加一个简单的分类层并在该任务的数据上进行进一步训练即可。 BERT的优势: 双向上下文理解BERT能够同时考虑词汇的前后文信息生成更准确的词表示。通用性强预训练后BERT可以通过微调适用于各种NLP任务包括文本分类、命名实体识别、问答系统等。性能优秀在多个基准测试如GLUE、SQuAD等中BERT都取得了领先的性能。 BERT的影响: 推动了预训练模型的发展BERT的成功激励了大量后续工作如RoBERTa、ALBERT、DistilBERT等它们在BERT的基础上进行了改进和优化。标准化微调方法BERT展示了预训练-微调范式的有效性这一方法已成为NLP模型开发的标准流程。 2. Seq2Seq 相关论文 Sequence to Sequence Learning with Neural Networks Seq2Seq(Sequence to Sequence序列到序列)模型是一类用于处理序列数据的模型特别适用于需要将一个序列转换为另一个序列的任务。该模型最初由Ilya Sutskever等人在2014年提出广泛应用于机器翻译、文本摘要、对话系统等领域。 Seq2Seq模型主要由两个部分组成编码器(Encoder)和解码器(Decoder)。 编码器的作用是将输入序列编码成一个固定长度的上下文向量(context vector)。编码器通常采用RNN如LSTM或GRU。其过程如下 输入序列依次输入到编码器的RNN单元中。每个时间步都会更新隐藏状态。最终的隐藏状态被视为整个输入序列的上下文向量。 解码器的任务是根据上下文向量生成目标序列。解码器同样采用RNN结构其过程如下 初始化解码器的隐藏状态为上下文向量。解码器在每个时间步生成一个输出并将该输出作为下一个时间步的输入。直到生成结束标志或达到预定义的序列长度。 早期的Seq2Seq模型存在一个问题即只能依赖固定长度的上下文向量这在处理长序列时效果不佳。为了解决这个问题Bahdanau等人在2015年引入了注意力机制。注意力机制允许解码器在生成每个输出时动态地关注输入序列的不同部分。具体来说对于解码器的每个时间步计算一组注意力权重这些权重表示当前时间步应关注编码器输出的哪些部分。使用这些权重计算一个加权和作为当前时间步的上下文向量。 seq2seq模型的 pytorch 实现 import torch import torch.nn as nn import torch.optim as optim import numpy as npclass Seq2Seq(nn.Module):def __init__(self, input_dim, output_dim, hidden_dim, n_layers):super(Seq2Seq, self).__init__()self.encoder nn.LSTM(input_dim, hidden_dim, n_layers, batch_firstTrue)self.decoder nn.LSTM(output_dim, hidden_dim, n_layers, batch_firstTrue)self.fc nn.Linear(hidden_dim, output_dim)def forward(self, src, tgt):# 编码器_, (hidden, cell) self.encoder(src)# 解码器outputs, _ self.decoder(tgt, (hidden, cell))# 全连接层predictions self.fc(outputs)return predictions# 超参数 input_dim 10 # 输入的特征维度 output_dim 10 # 输出的特征维度 hidden_dim 16 # 隐藏层维度 n_layers 2 # LSTM层数 seq_len 5 # 序列长度 batch_size 2 # 批次大小# 创建示例数据随机生成 np.random.seed(0) torch.manual_seed(0)src_data torch.randn(batch_size, seq_len, input_dim) # 输入序列 tgt_data torch.randn(batch_size, seq_len, output_dim) # 目标序列# 打印数据形状 print(Source data shape:, src_data.shape) print(Target data shape:, tgt_data.shape)# 初始化模型、损失函数和优化器 model Seq2Seq(input_dim, output_dim, hidden_dim, n_layers) criterion nn.MSELoss() optimizer optim.Adam(model.parameters(), lr0.001)# 训练模型 n_epochs 100 for epoch in range(n_epochs):model.train()optimizer.zero_grad()output model(src_data, tgt_data)loss criterion(output, tgt_data)loss.backward()optimizer.step()if (epoch 1) % 10 0:print(fEpoch [{epoch 1}/{n_epochs}], Loss: {loss.item():.4f})2.1. T5 相关论文 Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer T5(Text-To-Text Transfer Transformer)是由Google Research提出的一种基于Transformer架构的预训练模型旨在统一处理各种自然语言处理NLP任务。T5的核心理念是将所有的NLP任务都视为一个文本到文本的转换问题这样可以使用同一个模型框架处理不同的任务比如机器翻译、文本摘要、问答系统等。 T5模型的一个重要特点是将所有任务都转换为文本到文本的形式。例如 机器翻译输入为“translate English to German: The house is wonderful.”输出为“Das Haus ist wunderbar.”文本摘要输入为“summarize: The quick brown fox jumps over the lazy dog.”输出为“quick fox jumps over lazy dog.”问答系统输入为“question: What is the capital of France? context: France’s capital is Paris.”输出为“Paris.” T5基于标准的Transformer模型采用了全连接的自注意力机制可以高效地处理序列数据。Transformer模型包括编码器和解码器两个部分T5使用的是完整的编码器-解码器架构。T5在一个名为C4(Colossal Clean Crawled Corpus)的数据集上进行了大规模的预训练。C4数据集包含了从互联网收集的大量文本经过清洗和过滤后用于模型训练。T5的预训练任务是“填空”(fill-in-the-blank)即在输入文本中随机遮蔽部分单词并让模型预测这些被遮蔽的单词。在预训练之后T5通过多任务学习对多个下游任务进行微调。每个任务都被转换为文本到文本的形式并通过统一的损失函数进行优化。 基于 transformers 的 t5 使用 from transformers import T5Tokenizer, T5ForConditionalGeneration# 加载T5模型和分词器 model_name t5-small tokenizer T5Tokenizer.from_pretrained(model_name) model T5ForConditionalGeneration.from_pretrained(model_name)# 输入文本 text It is reported that a major fire broke out in Victoria Harbor in Hong Kong on December 12, which injured 100 people and caused 10 billion yuan in damage# 将任务和输入文本结合 input_text summarize: text# 编码输入文本 input_ids tokenizer.encode(input_text, return_tensorspt)# 生成摘要 summary_ids model.generate(input_ids, max_length50, num_beams2, early_stoppingTrue)# 解码生成的摘要 summary tokenizer.decode(summary_ids[0], skip_special_tokensTrue)print(Summary:, summary)2.2. BART 相关论文 BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension BART(Bidirectional and Auto-Regressive Transformers)是由Facebook AI Research(FAIR)提出的一种序列到序列(Seq2Seq)模型。BART结合了BERT(Bidirectional Encoder Representations from Transformers)和GPT(Generative Pre-trained Transformer)的优点通过双向编码器和自回归解码器进行预训练和微调。BART在文本生成任务如文本摘要、机器翻译和文本生成以及其他NLP任务上表现出色。 BART的架构基于标准的Transformer编码器-解码器架构但它在设计上具有一些独特之处 编码器(Encoder)BART的编码器类似于BERT使用双向注意力机制来编码输入序列。这意味着编码器可以同时考虑输入序列中每个位置的上下文信息。解码器(Decoder)BART的解码器类似于GPT使用自回归的方式生成输出序列。这意味着解码器在生成每个标记时只能访问之前生成的标记。 BART的预训练任务旨在让模型学习如何恢复被破坏的输入序列。具体来说BART采用了一种“去噪自编码器”(Denoising Autoencoder)的预训练方法模型需要从损坏的输入中恢复原始文本。预训练任务包括 文本填空(Token Masking)随机遮蔽输入序列中的部分标记模型需要预测这些被遮蔽的标记。文本删除(Token Deletion)随机删除输入序列中的部分标记模型需要恢复这些被删除的标记。句子重排序(Sentence Permutation)随机打乱输入序列中的句子顺序模型需要恢复正确的句子顺序。文本旋转(Document Rotation)将输入序列随机旋转一个位置模型需要恢复原始顺序。文本替换(Text Infilling)随机选择若干连续的标记并将其替换为一个特殊标记模型需要恢复这些被替换的标记。 3. Tokenization 相关论文 Neural Machine Translation of Rare Words with Subword Units Byte Pair Encoding is Suboptimal for Language Model Pretraining Tokenization分词是将输入文本转换为模型可以处理的格式的关键步骤。Tokenization的好坏直接影响模型的性能和效果。 Tokenization是将输入的自然语言文本拆分为更小的单位(token)这些单位可以是单词、子词或字符等。对于大多数现代大模型而言tokenization过程包括以下步骤 文本规范化将输入文本转换为统一的格式例如将所有字符转换为小写、去除多余的空格等。分词将规范化的文本切分为一个个token。编码将token转换为整数索引以便模型能够处理。 常见的Tokenization方法 Word-level Tokenization这种方法将文本直接分成单词。虽然简单但对于处理未见过的单词或罕见单词时效果较差。 text The quick brown fox jumps over the lazy dog. tokens text.split() # [The, quick, brown, fox, jumps, over, the, lazy, dog]Character-level Tokenization这种方法将文本分成单个字符。这种方法可以处理所有可能的输入但生成的序列可能会非常长。 text hello tokens list(text) # [h, e, l, l, o]Subword Tokenization这种方法结合了word-level和character-level tokenization的优点通过将单词拆分为更小的子词单元来处理未见过的单词。常见的子词分词方法包括Byte Pair EncodingWordPieceUnigram。 BPE(Byte Pair Encoding)是一种基于频率的子词分词算法。BPE通过逐步合并出现频率最高的字符对来创建子词单元从而生成子词词典。BPE将文本拆分为子词单元这些子词单元可以是字符、部分单词或整个单词。这种方法可以有效地处理未见过的词汇提高模型的泛化能力。BPE通过逐步合并出现频率最高的字符对来生成子词单元。每次合并后频率最高的字符对变成一个新的子词单元直到达到预定的词汇表大小。 BPE算法步骤 准备包含大量文本的语料库。将每个单词初始化为其字符序列。例如单词 hello 会被表示为 h e l l o。统计频率统计所有字符对的出现频率。选择最高频选择频率最高的字符对进行合并。更新词典将合并后的新子词加入词典并更新文本中的出现。重复步骤重复上述过程直到达到预定的词汇表大小或不再有频率高的字符对。 WordPiece和BPE的流程几乎一致主要的区别在于BPE每次按照出现频数最高这一原则来选取pair而WordPiece则是按照能够最大 限度提升语言模型概率这一原则来选取pair。 BPE和WordPiece都是从一个小的基础词表开始不断去扩充这个词表表而Unigram则与之相反Unigram会先初始化一个大的词表然后 不断从中删去子词直至词表达到指定的大小。Unigram初始化词表的方式有很多种例如我们可以在预分词的结果上应用BPE算法并设置较大的merges以获得初始词表或者计算预分词结果的所有严格子串并从中选取一些出现频率最高的子串作为初始词表。 SentencePiece是一个通用的文本分词和子词化库它结合了BPE和WordPiece的优点并支持多种分词算法。SentencePiece可以根据任务需求选择合适的分词方法包括BPE、Unigram等。它提供了一个统一的接口使得使用不同的分词方法变得更加方便和灵活。SentencePiece还支持自定义的标记化规则和训练参数可以适应各种语言和文本类型的需求。 模型的tokenization过程通常包括一些特殊token用于处理特定任务和文本边界 [CLS]用于表示整个序列的特殊标记例如在BERT中用于分类任务。[SEP]用于分隔两个句子的特殊标记例如在BERT的下一句预测任务中。[PAD]用于填充短于最大长度的序列以保持批处理的一致性。[MASK]用于掩盖某些tokens以进行掩码语言模型训练例如在BERT中。 基于 transformers 实现 BERT 的 tokenization 过程 from transformers import BertTokenizer# 加载BERT分词器 tokenizer BertTokenizer.from_pretrained(bert-base-uncased)# 输入文本 text The quick brown fox jumps over the lazy dog.# 分词 tokens tokenizer.tokenize(text) print(tokens) # [the, quick, brown, fox, jumps, over, the, lazy, dog, .]# 编码 input_ids tokenizer.encode(text, add_special_tokensTrue) print(input_ids) # [101, 1996, 4248, 2829, 4419, 2169, 2058, 1996, 13971, 3899, 1012, 102]
http://www.w-s-a.com/news/366393/

相关文章:

  • 廊坊建设网站的公司wordpress清理无用缩略图
  • 桓台网站建设公司首钢建设二建设公司网站
  • 网站建设添加背景命令前端如何优化网站性能
  • 设置网站域名中山画册设计公司
  • 三更app下载网站东莞网站制作公
  • 做图书馆网站模板网站建设文化策划方案
  • 惠州城乡住房建设厅网站服装设计自学零基础
  • 网站建设常态化工作机制广州骏域网络
  • h5婚纱摄影网站模板wordpress 显示下列项目
  • 广告网站推广销售北京最新消息发布
  • 完整网站源码asp拨打12355可以找团员密码吗
  • 北京有多少家网站怎么自己在百度上做网站
  • 怎样围绕网站专题发展来做ppt网站建设回龙观
  • 网站配置服务Wordpress红色网站源码
  • 外贸网站建设内容包括软件开发公司流程
  • 做中医药网站有前景吗企业网站优化公司
  • 四川建设设计公司网站海南澄迈县
  • 邳州做网站梵克雅宝项链官网价格图片
  • dede网站收录滦平县建设局网站
  • 上海网站建设开发公注册公司要求什么条件
  • 安徽汽车网网站建设wordpress 知乎
  • 网站建设的功能都需要有哪些在线平台
  • 湖南岳阳网站开发网络公司石家庄做网站的公司哪个好
  • 西安市做网站的公司门户网站对应序号是什么
  • 太原网站域名开发什么是网页界面设计
  • 做产品类网站有哪些做一百度网站吗
  • 在线视频网站建设国外最新创意产品网站有哪些方面
  • 在一个网站下建设多个子网站宣传册画册设计公司
  • 潍坊网站建设公司排名网站建设预付
  • 手机和wap网站建设crm客户管理系统模板