训练自己的中文word2vec(词向量)--skip-gram方法

9 篇文章 2 订阅
订阅专栏
本文详细介绍了如何使用skip-gram方法训练中文词向量,通过将三国演义第一章作为数据源,构建词表,然后利用PyTorch实现模型训练,最终得到词向量并保存。训练过程中涉及到了数据预处理、模型构建、损失计算和反向传播等步骤。
摘要由CSDN通过智能技术生成

训练自己的中文word2vec(词向量)–skip-gram方法

什么是词向量

​ 将单词映射/嵌入(Embedding)到一个新的空间,形成词向量,以此来表示词的语义信息,在这个新的空间中,语义相同的单词距离很近。

Skip-Gram方法(本次使用方法)

​ 以某个词为中心,分别计算该中心词前后可能出现其他词的各个概率,即给定input word来预测上下文。

Image Name

CBOW(Continous Bags Of Words,CBOW)

​ CBOW根据某个词前面的n个词、或者前后各n个连续的词,来计算某个词出现的概率,即给定上下文,来预测input word。相比Skip-Gram,CBOW更快一些。

本次使用 Skip-Gram方法和三国演义第一章作为数据,训练32维中文词向量。

数据代码下载链接见文末

导入库

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.utils.data import Dataset,DataLoader
import re
import collections
import numpy as np
import jieba
#指定设备
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(device)

导入数据

因为算力问题,我在此出只截取三国演义的第一章作为示例数据。

training_file = '/home/mw/input/sanguo5529/三国演义.txt'

#读取text文件,并选择第一章作为输入文本
def get_ch_lable(txt_file):  
    labels= ""
    with open(txt_file, 'rb') as f:
        for label in f:
            labels =labels+label.decode('utf-8')
        text = re.findall('第1章.*?第2章', labels,re.S)
    return text[0]
training_data =get_ch_lable(training_file)
# print(training_data)
print("总字数",len(training_data))

总字数 4945

分词

#jieba分词
def fenci(training_data):
    seg_list = jieba.cut(training_data)  # 默认是精确模式  
    training_ci = " ".join(seg_list)
    training_ci = training_ci.split()
    #以空格将字符串分开
    training_ci = np.array(training_ci)
    training_ci = np.reshape(training_ci, [-1, ])
    return training_ci
training_ci =fenci(training_data)
print("总词数",len(training_ci))

总词数 3053

构建词表

def build_dataset(words, n_words):
  count = [['UNK', -1]]
  count.extend(collections.Counter(words).most_common(n_words - 1))
  dictionary = dict()
  for word, _ in count:
    dictionary[word] = len(dictionary)
  data = list()
  unk_count = 0
  for word in words:
    if word in dictionary:
      index = dictionary[word]
    else:
      index = 0  # dictionary['UNK']
      unk_count += 1
    data.append(index)
  count[0][1] = unk_count
  reversed_dictionary = dict(zip(dictionary.values(), dictionary.keys()))
  
  return data, count, dictionary, reversed_dictionary

training_label, count, dictionary, words = build_dataset(training_ci, 3053)
#计算词频
word_count = np.array([freq for _,freq in count], dtype=np.float32)
word_freq = word_count / np.sum(word_count)#计算每个词的词频
word_freq = word_freq ** (3. / 4.)#词频变换
words_size = len(dictionary)
print("字典词数",words_size) 
print('Sample data', training_label[:10], [words[i] for i in training_label[:10]])

字典词数 1456
Sample data [100, 305, 140, 306, 67, 101, 307, 308, 46, 27]
[‘第’, ‘1’, ‘章’, ‘宴’, ‘桃园’, ‘豪杰’, ‘三’, ‘结义’, ‘斩’, ‘黄巾’]

制作数据集

C = 3 
num_sampled = 64  # 负采样个数   
BATCH_SIZE = 32  
EMBEDDING_SIZE = 32  #想要的词向量长度

class SkipGramDataset(Dataset):
    def __init__(self, training_label, word_to_idx, idx_to_word, word_freqs):
        super(SkipGramDataset, self).__init__()
        self.text_encoded = torch.Tensor(training_label).long()
        self.word_to_idx = word_to_idx
        self.idx_to_word = idx_to_word
        self.word_freqs = torch.Tensor(word_freqs)

    def __len__(self):
        return len(self.text_encoded)

    def __getitem__(self, idx):
        idx = min( max(idx,C),len(self.text_encoded)-2-C)#防止越界
        center_word = self.text_encoded[idx]
        pos_indices = list(range(idx-C, idx)) + list(range(idx+1, idx+1+C))
        pos_words = self.text_encoded[pos_indices] 
        #多项式分布采样,取出指定个数的高频词
        neg_words = torch.multinomial(self.word_freqs, num_sampled+2*C, False)#True)
        #去掉正向标签
        neg_words = torch.Tensor(np.setdiff1d(neg_words.numpy(),pos_words.numpy())[:num_sampled]).long()
        return center_word, pos_words, neg_words


print('制作数据集...')
train_dataset = SkipGramDataset(training_label, dictionary, words, word_freq)
dataloader = torch.utils.data.DataLoader(train_dataset, batch_size=BATCH_SIZE,drop_last=True, shuffle=True)

制作数据集…

#将数据集转化成迭代器
sample = iter(dataloader)	
#从迭代器中取出一批次样本				
center_word, pos_words, neg_words = sample.next()				
print(center_word[0],words[np.compat.long(center_word[0])],[words[i] for i in pos_words[0].numpy()])

模型构建

class Model(nn.Module):
    def __init__(self, vocab_size, embed_size):
        super(Model, self).__init__()
        self.vocab_size = vocab_size
        self.embed_size = embed_size

        initrange = 0.5 / self.embed_size
        self.in_embed = nn.Embedding(self.vocab_size, self.embed_size, sparse=False)
        self.in_embed.weight.data.uniform_(-initrange, initrange)

    def forward(self, input_labels, pos_labels, neg_labels):
        input_embedding = self.in_embed(input_labels)
                
        pos_embedding = self.in_embed(pos_labels)
        neg_embedding = self.in_embed(neg_labels)
        
        log_pos = torch.bmm(pos_embedding, input_embedding.unsqueeze(2)).squeeze()
        log_neg = torch.bmm(neg_embedding, -input_embedding.unsqueeze(2)).squeeze()

        log_pos = F.logsigmoid(log_pos).sum(1)
        log_neg = F.logsigmoid(log_neg).sum(1)
        loss = log_pos + log_neg
        return -loss

model = Model(words_size, EMBEDDING_SIZE).to(device)
model.train()

valid_size = 32
valid_window = words_size/2  # 取样数据的分布范围.
valid_examples = np.random.choice(int(valid_window), valid_size, replace=False)

optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
NUM_EPOCHS = 10

开始训练

for e in range(NUM_EPOCHS):
    for ei, (input_labels, pos_labels, neg_labels) in enumerate(dataloader):
        input_labels = input_labels.to(device)
        pos_labels = pos_labels.to(device)
        neg_labels = neg_labels.to(device)

        optimizer.zero_grad()
        loss = model(input_labels, pos_labels, neg_labels).mean()
        loss.backward()
        optimizer.step()

        if ei % 20 == 0:
            print("epoch: {}, iter: {}, loss: {}".format(e, ei, loss.item()))
    if e %40 == 0:           
        norm = torch.sum(model.in_embed.weight.data.pow(2),-1).sqrt().unsqueeze(1)
        normalized_embeddings = model.in_embed.weight.data / norm
        valid_embeddings = normalized_embeddings[valid_examples]
        
        similarity = torch.mm(valid_embeddings, normalized_embeddings.T)
        for i in range(valid_size):
            valid_word = words[valid_examples[i]]
            top_k = 8  # 取最近的排名前8的词
            nearest = (-similarity[i, :]).argsort()[1:top_k + 1]  #argsort函数返回的是数组值从小到大的索引值
            log_str = 'Nearest to %s:' % valid_word  
            for k in range(top_k):
                close_word = words[nearest[k].cpu().item()]
                log_str = '%s,%s' % (log_str, close_word)
            print(log_str)
epoch: 0, iter: 0, loss: 48.52019500732422
epoch: 0, iter: 20, loss: 48.51792526245117
epoch: 0, iter: 40, loss: 48.50772476196289
epoch: 0, iter: 60, loss: 48.50897979736328
epoch: 0, iter: 80, loss: 48.45783996582031
Nearest to 伏山:,,,,遥望,操忽心生,江渚上,,提刀
Nearest to 与:,,将次,盖地,,下文,,妖术,玄德
Nearest to 必获:,听调,直取,各处,一端,奏帝,必出,遥望,入帐
Nearest to 郭胜十人:,南华,因为,,贼战,告变,,,玄德遂
Nearest to 官军:,秀才,统兵,说起,军齐出,四散,放荡,一彪,云长
Nearest to 碧眼:,名备,刘焉然,大汉,卷入,大胜,老人,重枣,左有
Nearest to 天书:,泛溢,约期,而进,龚景,因起,车盖,遂解,震
Nearest to 转头:,近因,直取,,七尺,,备下,大汉,齐声
Nearest to 张宝:,侯览,惊告嵩,誓毕,帝惊,呼风唤雨,狂风,大将军,曾
Nearest to 玄德幼:,直取,近闻,刘焉令,几度,,临江仙,右有翼德,左右两
Nearest to 不祥:,无数,调兵,,刘备,玄德谢,原来,八尺,共
Nearest to 靖:,操忽心生,此病,赵忠,刘焉然,,庄田,,传至
Nearest to 五千:,岂可,丹凤眼,北行,听罢,,性命,,之囚
Nearest to 日非:,赵忠,,闻得,,破贼,早丧,书报,忽起
Nearest to 徐:,震怒,我气,卢植,,结为,,燕颔虎须,。
Nearest to 五百余:,帝惊,,本部,,神功,桓帝,滚滚,左右两
Nearest to 而:,转头,卷入,,近因,大商,,人公,天子
Nearest to 去:,封谞,夏恽,周末,,嵩信,广宗,人氏,民心
Nearest to 上:,,,陷邕,四年,关羽,直赶,九尺,伏山
Nearest to ::,,,,,兄弟,,来代,我答
Nearest to 后:,必获,阁下,,手起,祭礼,侍奉,各处,奏帝
Nearest to 因起:,帝览奏,,,汝可引,夺路,一把,是非成败,卷入
Nearest to 骤起:,挟恨,张宝称,明公宜,,一统天下,,,玄德请
Nearest to 汉室:,六月,临江仙,今汉运,手起,威力,抹额,讹言,提刀
Nearest to 云游四方:,背义忘恩,,渔樵,地公,扬鞭,,故冒姓,截住
Nearest to 桓:,,赵忠,刘焉然,左有,刘备,名备,二帝,游荡
Nearest to 二字于:,操故,,白土,左右两,张角本,赏劳,当时,梁上
Nearest to 人出:,,五十匹,,奏帝,梁上,九尺,六月,大汉
Nearest to 大浪:,卷入,临江仙,听调,汉武时,左有,束草,围城,及
Nearest to 青:,夺路,,贩马,师事,围城,卷入,大胜,客人
Nearest to 郎蔡邕:,浊酒,近闻,六月,角战于,中郎将,,转头,众大溃
Nearest to 二月:,马舞刀,国谯郡,只见,内外,郎蔡邕,,落到,汝得
epoch: 1, iter: 0, loss: 48.46757888793945
epoch: 1, iter: 20, loss: 48.42853546142578
epoch: 1, iter: 40, loss: 48.35804748535156
epoch: 1, iter: 60, loss: 48.083805084228516
epoch: 1, iter: 80, loss: 48.1635856628418
epoch: 2, iter: 0, loss: 47.89817428588867
epoch: 2, iter: 20, loss: 48.067501068115234
epoch: 2, iter: 40, loss: 48.6464729309082
epoch: 2, iter: 60, loss: 47.825260162353516
epoch: 2, iter: 80, loss: 48.07224655151367
epoch: 3, iter: 0, loss: 48.15058898925781
epoch: 3, iter: 20, loss: 47.26418685913086
epoch: 3, iter: 40, loss: 47.87504577636719
epoch: 3, iter: 60, loss: 48.74541473388672
epoch: 3, iter: 80, loss: 48.01288986206055
epoch: 4, iter: 0, loss: 47.257896423339844
epoch: 4, iter: 20, loss: 48.337745666503906
epoch: 4, iter: 40, loss: 47.70765686035156
epoch: 4, iter: 60, loss: 48.57493591308594
epoch: 4, iter: 80, loss: 48.206268310546875
epoch: 5, iter: 0, loss: 47.139137268066406
epoch: 5, iter: 20, loss: 48.70667266845703
epoch: 5, iter: 40, loss: 47.97750473022461
epoch: 5, iter: 60, loss: 48.098899841308594
epoch: 5, iter: 80, loss: 47.778892517089844
epoch: 6, iter: 0, loss: 47.86349105834961
epoch: 6, iter: 20, loss: 47.77979278564453
epoch: 6, iter: 40, loss: 48.67324447631836
epoch: 6, iter: 60, loss: 48.117042541503906
epoch: 6, iter: 80, loss: 48.69907760620117
epoch: 7, iter: 0, loss: 47.63265609741211
epoch: 7, iter: 20, loss: 47.82151794433594
epoch: 7, iter: 40, loss: 48.54405212402344
epoch: 7, iter: 60, loss: 48.06487274169922
epoch: 7, iter: 80, loss: 48.67494583129883
epoch: 8, iter: 0, loss: 48.053466796875
epoch: 8, iter: 20, loss: 47.872459411621094
epoch: 8, iter: 40, loss: 47.462432861328125
epoch: 8, iter: 60, loss: 48.10865783691406
epoch: 8, iter: 80, loss: 46.380184173583984
epoch: 9, iter: 0, loss: 47.2872314453125
epoch: 9, iter: 20, loss: 48.553428649902344
epoch: 9, iter: 40, loss: 47.00652313232422
epoch: 9, iter: 60, loss: 47.970741271972656
epoch: 9, iter: 80, loss: 48.159828186035156

查看训练好的词向量

final_embeddings = normalized_embeddings
labels = words[10]
print(labels)
print(final_embeddings[10])

玄德
tensor([-0.2620, 0.0660, 0.0464, 0.2948, -0.1974, 0.2471, -0.0893, 0.1720,
-0.1488, 0.0283, -0.1165, 0.2156, -0.1642, -0.2376, -0.0356, -0.0607,
0.1985, -0.2166, 0.2222, 0.2453, -0.1414, -0.0526, 0.1153, -0.1325,
-0.2964, 0.2775, -0.0637, -0.0716, 0.2672, 0.0539, 0.1697, 0.0489])

with open('skip-gram-sanguo.txt', 'a') as f:    
    for i in range(len(words)):
        f.write(words[i] + str(list(final_embeddings.numpy()[i])) + '\n')
f.close()
print('word vectors have written done.')

word vectors have written done.

按照路径/home/mw/project/skip-gram-sanguo.txt查看保存的文件,不一定要保存为txt,我们平常加载的词向量更多是vec格式

Image Name

数据代码下载链接

数据及代码右上角fork后可以免费获取

开始动手训练自己的词向量word2vec
zlhcsm的博客
03-28 3784
本文的主要工作如下: 1,中文分词 2,文本格式处理 3,使用gensim训练词向量模型 4,词向量模型的调用等
中文词向量word2vecskip-gram实现(不使用框架实现词向量模型)
Richard_Kim的博客
10-27 2172
介绍 在自然语言处理任务中,首先需要考虑词如何在计算机中表示。通常,有两种表示方式:one-hot representation和distribution representation。 1.离散表示(one-hot representation) 2.分布式表示(distribution representation) 两者区别和关于NLP的基础可以参考其他博客和论文 论文: ...
使用word2vec中文维基百科数据进行处理
最新发布
qq_20182781的博客
07-17 163
使用gensim中的wikicorpus解析提取xml中的内容。四.利用gensim中的word2vec训练分词后的文本。三.利用jieba对转换后的文本进行分词,去停词。二.利用opencc繁体转简体。一.下载中文维基百科数据。
中文把玩Google开源的Deep-Learning项目word2vec
weixin_33946605的博客
08-31 179
google最近新开放出word2vec项目,该项目使用deep-learning技术将term表示为向量,由此计算term之间的相似度,对term聚类等,该项目也支持phrase的自动识别,以及与term等同的计算。 word2vec项目首页:https://code.google.com/p/word2vec/,文档比较详尽,很容易上手。可能对于不同的系统和gcc版本,需要稍微改一下代码和m...
word2vec训练中文词向量
热门推荐
lilong117194的博客
09-26 8万+
词向量作为文本的基本结构——词的模型。良好的词向量可以达到语义相近的词在词向量空间里聚集在一起,这对后续的文本分类,文本聚类等等操作提供了便利,这里简单介绍词向量训练,主要是记录学习模型和词向量的保存及一些函数用法。 一、搜狐新闻 1. 中文语料库准备 本文采用的是搜狗实验室的搜狗新闻语料库,数据链接 http://www.sogou.com/labs/resource/cs.php 下载下来的...
【转】Gensim库详解
Dorisi_H_n_q的博客
09-17 1584
一、gensim介绍  gensim是一款强大的自然语言处理工具,里面包括N多常见模型: 基本的语料处理工具 - LSI - LDA - HDP - DTM - DIM - TF-IDF - word2vec、paragraph2vec 二、训练模型 1、训练 #encoding=utf-8 from gensim.models import word2vec # 参数:...
词向量-嵌入word2vec词向量的RNN+attention中文文本分类.zip
04-28
在本项目“词向量-嵌入word2vec词向量的RNN+attention中文文本分类”中,我们将探讨如何利用词向量进行中文文本的分类任务,特别地,采用了word2vec模型来生成词向量,并结合循环神经网络(RNN)与注意力机制...
词向量-嵌入word2vec词向量的cnn中文文本分类.zip
04-28
首先,Word2Vec是一种广泛使用词向量模型,主要分为两种算法:CBOW(Continuous Bag of Words)和Skip-gram。CBOW通过上下文单词预测目标单词,而Skip-gram则相反,通过目标单词预测上下文单词。这两种方法都旨在...
word2vec词向量训练中文文本相似度计算
01-27
本文主要介绍了Word2Vec词向量训练中文文本相似度计算中的应用。首先,文章对统计语言模型进行了简单的介绍,指出统计语言模型一般形式是给定一组已知词,求解下一个词的条件概率。然而,这种模型并没有充分利用...
词向量-基于tensorflow+word2vec实现中文词向量训练.zip
04-28
在这个项目中,我们将探讨如何使用TensorFlow框架结合Word2Vec模型来训练中文词向量。 首先,我们要理解TensorFlow。TensorFlow是由Google开发的一个开源库,用于各种机器学习和深度学习任务。它提供了一个灵活的...
一文弄懂Word2Vecskip-gram(含详细代码)
Python,数据分析,机器学习,深度学习
12-06 1万+
目录 前言 一、什么是Skip-gram算法 二、目标是什么 三、定义表示法 3.1 one-hot向量 3.2 词向量(word vector) 3.3 单词矩阵 3.4 单词相似度 3.5 softmax函数 3.6算法过程 3.7 求softmax 四、skipgram代码实现 4.1 如何把词转换为向量 4.2 CBOW和Skip-gram算法实现 Skip-gram的理想实现 Skip-gram的实际实现 4.3 使用Pytorch实现Skip-gram .
维基百科中文语料word2vec训练后结果
06-03
中文维基百科语料库,将其转换为文本文件后,进行繁体字转换为简体字,字符集转换,分词,然后训练得到模型以及向量。由于文件上传的大小限制是60MB,而训练后的所有文件大小有1G以上,所以这里只提供了下载链接,地址在网盘中。使用python中的gensim包进行训练得到的,运行时间较长,纯粹的维基百科中文语料训练后的结果,拿去可以直接使用
如何训练词向量 Skip Gram 算法 3.3 (莫烦Python NLP 自然语言处理教学)
08-30
如何训练词向量_Skip_Gram_算法_#3.3_(莫烦Python_NLP_自然语言处理教学)
word2vec中文词向量
09-28
使用gensim对维基百科作为预训练语料(约1.6G语料),生成词汇量约13000个词汇,维度为300,文件大小为45.6MB。使用方法,参考博客:https://blog.csdn.net/qq_36426650/article/details/87738919
自己动手训练word2vec模型
qq_39370495的博客
04-18 773
1.下载数据 http://www.sogou.com/labs/resource/cs.php 2.清洗数据 tar -zxvf news_sohusite_xml.full.tar.gz cat news_sohusite_xml.dat | iconv -f gb18030 -t utf-8 | grep "<content>" >news_sohusite.txt s...
自然语言处理|SkipGram训练中文词向量
IDE不报错的博客
08-06 1395
课程作业,训练语料是维基百科的中文语料,训练词向量计算两个词之间的余弦相似度。关于预处理网络上有不少教程,这里不再赘述,程序结构图里给出了对应步骤用到的库,可以借鉴。 1. 程序结构概览 2. 基于Word2Vec的实现 基于Word2Vec的实现直接调用了gensim库,调整了几个参数,调整情况如下,详细代码备注见SGNS_ginsim.py. 训练数据有362826条左右,选择了其中的360000条,分10批进行训练。 (1)调整参数使之满足模型要求: s...
词向量训练
LFZ的博客
11-18 1302
词向量训练
训练词向量
weixin_46556352的博客
04-28 1628
训练词向量
深入浅出Word2VecSkip-Gram模型原理
Word2VecSkip-Gram 模型详解 Word2Vec 是一种从大量文本语料中以无监督的方式学习语义知识的模型,广泛应用于自然语言处理(NLP)中。Word2Vec 通过学习文本来用词向量的方式表征词的语义信息,即通过一个嵌入...
写文章

热门文章

  • python解决报错ImportError: Bad git executable. 15376
  • python按照行来读取txt文件全部内容 ,去除空行,处理掉\t,\n后,以列表方式返回 12656
  • DataFrame取值操作总结(取指定列指定值的行) 10065
  • lightgbm使用手册——参数篇 9330
  • 【已解决】paddleocr:ERROR: Could not build wheels for lanms-neo, which is required to install pyproject 8621

分类专栏

  • Pandas和Numpy 4篇
  • 机器学习记录 7篇
  • 数据分析与建模 4篇
  • 深度学习-过程记录 18篇
  • 跨模态检索 3篇
  • 偶尔用到的小技巧 10篇
  • 报错解决 3篇
  • 风控学习笔记 3篇
  • 联邦学习 3篇
  • 比赛实践 2篇
  • NLP学习笔记 9篇

最新评论

  • python解决报错ImportError: Bad git executable.

    PARA_Trew: 这个为什么能有用呀

  • LSTM介绍

    weixin_70466112: 这是那篇文章呀

  • 训练自己的中文word2vec(词向量)--skip-gram方法

    weixin_41068476: 请问下训练过程中,loss没有明显减少,是样本太少了吗?还是已经训练好了?

  • R3:基于lstm的天气预测

    薛云豪: 这个是lstm模型预测么?

  • TextCNN新闻真假分类-pytorch版本

    大地之灯: 感谢大佬学到了

大家在看

  • 基于云开发的在线词典小程序的设计与实现-2025计算机毕业设计
  • C语言深入理解指针(四) 971
  • 图片切换示例2【JavaScript】
  • 第六天旅游线路预览——从天池到马牙山
  • 基于Java的农业大棚管理系统的设计与实现-2025计算机毕业设计

最新文章

  • 数字医疗算法应用创新大赛-食品与疾病关系预测算法赛道top5方案分享
  • ChatGPT全面升级,GPT4支持多模态数据。
  • lightgbm使用手册——参数篇
2023年15篇
2022年44篇
2021年5篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱挠静香的下巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家呈贡玻璃钢雕塑加工厂家哪里有邵阳玻璃钢雕塑定制东莞玻璃钢革命人物雕塑台州景观玻璃钢雕塑定做价格南京玻璃钢花盆价格上海户外商场美陈批发商场美陈绿植景观设计蒙自玻璃钢烤漆雕塑厂家厦门玻璃钢卡通雕塑咨询问价商场美陈男装春季濮阳玻璃钢名人肖像雕塑加工定制景观玻璃钢雕塑人物深圳周边商场美陈销售厂家玻璃钢采耳雕塑绥化玻璃钢商场美陈新郑玻璃钢景观雕塑定做价格安徽高架玻璃钢花盆安徽花钵玻璃钢雕塑定做佛山玻璃钢景观雕塑价格广东玻璃钢景观雕塑商场室内美陈春天渔猎文化玻璃钢雕塑汕头玻璃钢卡通人物雕塑厂家地址文山商场美陈雕塑厂家周口标牌玻璃钢仿铜雕塑西城春节商场美陈梅州人物玻璃钢雕塑图片苏州玻璃钢广场雕塑价格人物玻璃钢雕塑加工乌鲁木齐玻璃钢雕塑价格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化