SEO基础

SEO基础

Products

当前位置:首页 > SEO基础 >

如何在线制作WordPress网站的商标和Logo?

96SEO 2026-02-19 20:08 15


绘制词云图5.

竞赛的数据集中训练集有7613个样本测试集有3263个样本。

如何在线制作WordPress网站的商标和Logo?

训练集中的target用于标识推文是否属于灾难推文1表示灾难推文0表示非灾难推文最终任务是判断测试集中的推文样本是否为灾难推文评估指标是F1值详细竞赛信息见竞赛官网。

竞赛使用的模型是DistilBert由于DIstilBERT是

transformers

TensorFlow本文的代码基于PyTorch。

提交代码后最终评分F1值为0.82071排名242提交时间2024年10月24日。

所使用的代码已上传值Gitee点击直达。

准备工作

/usr/share/nltk_data/corpora/wordnet.zip

/usr/share/nltk_data/corpora/安装en_core_web_sm要求python版本需3.9

pip

https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.2.5/en_core_web_sm-2.2.5.tar.gzen_core_web_sm

spaCy

版本太高2.x导致不兼容的问题需降到1.x降到1.x之后又有问题报错如下

blis

incompatible.查阅后发现blis是spacy中的一个依赖库且我的spacy版本过高3.8.2需要降到2.3.5才行此时numpy1.24.4才能用。

资源导入

/usr/share/nltk_data/corpora/wordnet.zip

from

get_linear_schedule_with_warmup

from

warnings.filterwarnings(ignore)train

pd.read_csv(D:/Desktop/kaggle数据集/nlp-disaster/train.csv)

test

pd.read_csv(D:/Desktop/kaggle数据集/nlp-disaster/test.csv)

print(训练集大小{}.format(train.shape))

print(测试集大小{}.format(test.shape))训练集大小(7613,

测试集大小(3263,

定义函数数据处理函数包扩小写转换、移除停用词、移除网址、移除标点和特殊符号、词形还原。

统计词频发现amp;出现的频率很高且该符号仅表示html标签中的符所以需移除。

将词性转换为

get_wordnet_pos(word):#----------------------------------------------------------------------------------------##

pos_tag

最后将词性标签取其首字母并转换为大写#----------------------------------------------------------------------------------------#tag

nltk.pos_tag([word])[0][1][0].upper()tag_dict

{J:

wordnet.ADV}#----------------------------------------------------------------------------------------##

tag_dict.get(tag,

wordnet.NOUN名词#----------------------------------------------------------------------------------------#return

tag_dict.get(tag,

df[column].progress_apply(lambda

x.replace(amp;,

df[column].progress_apply(lambda

str(x).lower())#

.join(...)将经过过滤后的单词列表重新连接成一个字符串单词之间用空格分隔df[column]

df[column].progress_apply(lambda

.join([word

stop_words]))#----------------------------------------------------------------------------------------##

移除网址#

是要处理的文本#----------------------------------------------------------------------------------------#df[column]

df[column].progress_apply(lambda

x))#

df[column].progress_apply(lambda

re.sub(r[^a-zA-Z\s],

df[column].progress_apply(lambda

.join([lemmatizer.lemmatize(word,

for

text_preprocessing(train_cleaned,text)注由于初始安装的

ipywidgets

train_cleaned.loc[train_cleaned[target]

text])

表示生成的词云图的宽度和高度尽量与figsize保持比例一致避免出现图形的拉伸和压缩

wordcloud

background_colorwhite).generate(disaster_strings)

mask

np.array(Image.open(./twitter_mask.jpg))

not_disaster_strings

train_cleaned.loc[train_cleaned[target]

text])

#--------------------------------------------------------------------------------------------------------------------------------#

width

表示生成的词云图的宽度和高度尽量与figsize保持比例一致避免出现图形的拉伸和压缩

注意stopwords

#--------------------------------------------------------------------------------------------------------------------------------#

wordcloud

background_colorwhite,stopwordsset()).generate(not_disaster_strings)

plt.axis(off)5.

sns.boxplot(xtarget,ytrain_sent,datatrain,

plt.xlabel(Tweet

plt.show()由图可知灾难推文的字符整体上比非灾难推文的字符多这是因为灾难推文大多来自新闻机构所以推文编写更正式字数更长。

而非灾难推文大多来自个人用户内容较少且拼写错误较多。

map

train[text].str.split().map(lambda

len(x))

plt.show()灾难推文的词数比非灾难推文的词数略多一点点。

5.2

stop_word_count,mean_word_length,char_count]

Series用于标识灾难推文

enumerate(METAFEATURES):#----------------------------------------------------------------------------------------##

statdensity绘制概率密度分布比直方图更容易观察数据的分布聚集情况#

原使用

代替#----------------------------------------------------------------------------------------#sns.histplot(xtrain_data.loc[~DISASTER_TWEETS][feature],

labelNot

kdeTrue)sns.histplot(xtrain_data.loc[DISASTER_TWEETS][feature],

labelDisaster,

kdeTrue)sns.histplot(train_data[feature],

labelTraining,

statdensity)sns.histplot(test_data[feature],

labelTest,

range(2):axes[i][j].set_xlabel()axes[i][j].legend()axes[i][0].set_title(f{feature}

Distribution

Set)axes[i][1].set_title(f{feature}

Training

Distribution)plt.show()运行结果原图太长截取局部

由图可知词数、唯一词数量和平均词长度均大致服从正态分布。

且所有元特征在

train

print(f灾难推文数量{(train[target]1).sum()})

print(f非灾难推文数量{(train[target]0).sum()})fig,

axes

axes[0].pie(train_data.groupby(target).count()[id],

labels[Not

sns.countplot(xtrain_data[target],

axes[0].set_ylabel()

(3271)])axes[0].set_title(Target

Distribution

统计灾难推文和非灾难推文中出现频次较高的词Unigrams一元语法

from

[train_cleaned[train_cleaned[target]

0][text],train_cleaned[train_cleaned[target]

1][text]

new.values.tolist()#----------------------------------------------------------------------------------------##

外层循环

word#----------------------------------------------------------------------------------------#corpus

[word

most[:30]:x.append(word)y.append(count)sns.barplot(xy,

yx,

Tweets)axes[0].set_xlabel(Count)

fig.suptitle(Most

sklearn.feature_extraction.text

import

Paramsn需要统计的词组的次词数title统计图标题def

ngrams(n,

n),stop_wordsenglish)#----------------------------------------------------------------------------------------##

fit_transform()首先对传入的文本进行分词根据空格和标点符号将文本拆分为词汇#

阶段#

最后返回一个稀疏矩阵仅存储非零元素#----------------------------------------------------------------------------------------#bag_of_words

bag_of_words.sum(axis0)#----------------------------------------------------------------------------------------##

vocabulary_是一个字典包含了模型中识别的所有词单元或多元的映射。

#

这个字典的键是词或词组值是对应的列索引索引位置#----------------------------------------------------------------------------------------#words_freq

[(word,

vectorizer.vocabulary_.items()]#

words_freq

zip(*top_n_bigrams))sns.barplot(xy,

yx,

Tweets)axes[1].set_title(Disaster

Tweets)axes[0].set_xlabel(Count)axes[0].set_ylabel(Words)axes[1].set_xlabel(Count)axes[1].set_ylabel(Words)fig.suptitle(title,

fontsize24,

vabaseline)plt.subplots_adjust(wspace0.5)ngrams(2,

Most

NER是一种自然语言处理技术用于识别文本中具有特定意义的实体通常包括人名、地名、组织名、日期、时间、货币等。

import

_get_ner(i):#----------------------------------------------------------------------------------------##

处理输入文本

对象包含了对输入文本的各种分析和处理结果#----------------------------------------------------------------------------------------#doc

nlp(i)#

counter.most_common()[:15]#----------------------------------------------------------------------------------------##

count

将成为包含对应频率的列表#----------------------------------------------------------------------------------------#x,

map(list,

paletteplasma)axes[0].set_title(Non

Disaster

axes[0].set_ylabel(Named-Entity)

axes[1].set_ylabel(Named-Entity)

fig.suptitle(Common

#----------------------------------------------------------------------------------------#

bbox_to_anchor(1.05,

#----------------------------------------------------------------------------------------#

patch2,

borderaxespad0.)可以发现在灾难推文中GPE实体中的国家、城市、州比非灾难推文更常见。

此外国籍或宗教或政治团体名称更有可能在灾难推文中被提及。

推文主题提取

Frequency词频-逆文档频率是一种用于信息检索与数据挖掘的常用加权技。

TF-IDF

能够减少高频词的影响通过计算词频TF和逆文档频率IDF的乘积来评估一个词对于一个文档集或语料库的重要程度。

代码实现

NMF输出10个主题的前10个关键词主题的类型和内容由训练过程中的数据决定

输出的主题词数量按权重排序由大到小输出topic推文类型def

display_topics(text,

topic):#----------------------------------------------------------------------------------------##

TF-IDF

使用逆文档频率IDF加权#----------------------------------------------------------------------------------------#tfidf_vectorizer

min_df25,

tfidf_vectorizer.fit_transform(text)#

TfidfVectorizer

tfidf_vectorizer.get_feature_names_out()#----------------------------------------------------------------------------------------##

n_components:

使用非负奇异值分解作为初始化算法#----------------------------------------------------------------------------------------#nmf

NMF(n_components10,

random_state0,initnndsvd).fit(tfidf)print(topic)#----------------------------------------------------------------------------------------##

nmf.components_

-1切片的方向为从右到左#----------------------------------------------------------------------------------------#for

topic_idx,

enumerate(nmf.components_):print(Topic

%d:

mass由主题词可知灾难主题的关键词较为明显而非灾难主题则是更个人化的话题。

构建模型

Transformers双向编码器表征法是一种基于Transformer架构的预训练语言模型能够有效捕捉文本中的上下文关系理解句子的语义。

这里选择使用

DistilBERT

BERT指导较小的学生模型DistilBERT学习从而有效保留了大量的语言理解能力。

DistilBERT的参数比

bert-base-uncased

torch.cuda.device_count())print(We

will

DistilBertForSequenceClassification

model_name

DistilBertTokenizer.from_pretrained(model_name)

model

DistilBertForSequenceClassification.from_pretrained(model_name,

num_labels2)

#--------------------------------------------------------------------------------------------------------------------------------#

add_special_tokens:

#--------------------------------------------------------------------------------------------------------------------------------#

tokenizer(texttrain[text].tolist(),add_special_tokensTrue,max_length31,truncationTrue,paddingTrue,

return_tensorspt,return_token_type_ids

True,verbose

True)X[input_ids].shapetorch.Size([7613,

31])封装数据集时训练集中的shuffle参数设置为True随机打乱数据可以防止模型学习到数据的顺序从而提高模型的泛化能力验证集和测试集shuffle参数设置为False能够保证测试集预测结果的一致性和可比性。

from

torch.tensor(X[attention_mask])

labels

torch.tensor(train[target].values)

切分数据

print(f训练集大小{len(train_inputs)})

print(f验证集大小{len(val_inputs)})定义功能函数

计算准确率

str(datetime.timedelta(secondselapsed_rounded))

定义优化器

Returnsavg_train_loss本轮次遍历一遍训练集的平均损失avg_train_accuracy本轮次遍历一遍训练集准确率def

model_train(model,

设置模型为训练模式model.train()total_train_accuracy

0total_train_loss

enumerate(train_dataloader):b_input_ids

batch[0].to(device).to(torch.int64)b_input_mask

batch[1].to(device).to(torch.int64)b_labels

batch[2].to(device).to(torch.int64)#

清除上一次迭代的梯度信息防止梯度累积model.zero_grad()

#-------------------------------------------------------------------------------------------------##

loss

logits而一般的神经网络只有logits#-------------------------------------------------------------------------------------------------#outputs

model(b_input_ids,

loss.item()#-------------------------------------------------------------------------------------------------##

logits

instead.#-------------------------------------------------------------------------------------------------#logits

logits.detach().cpu().numpy()label_ids

b_labels.cpu().numpy()#-------------------------------------------------------------------------------------------------##

.grad

随后优化器会使用这些梯度来更新模型参数从而逐步最小化损失函数实现模型的训练#-------------------------------------------------------------------------------------------------#loss.backward()#

裁剪梯度防止梯度爆炸问题#

clip_grad_norm_(model.parameters(),

1.0)

1.0torch.nn.utils.clip_grad_norm_(model.parameters(),

1.0)#

计算该step的准确率total_train_accuracy

total_train_accuracy

len(train_dataloader)avg_train_loss

total_train_loss

Returnsavg_val_accuracy本轮次遍历一遍验证集的平均损失avg_val_loss本轮次遍历一遍验证集准确率avg_val_f1本轮次遍历一遍验证集的

值def

设置模型为测试模式model.eval()total_val_loss

0total_val_accuracy

validation_dataloader:b_input_ids

batch[0].to(device)b_input_mask

batch[2].to(device)#

#-------------------------------------------------------------------------------------------------##

loss

logits而一般的神经网络只有logits#-------------------------------------------------------------------------------------------------#outputs

model(b_input_ids,

loss.item()#-------------------------------------------------------------------------------------------------##

logits

CPU#-------------------------------------------------------------------------------------------------#logits

flat_f1(logits,

len(validation_dataloader)avg_val_f1

total_val_f1

len(validation_dataloader)avg_val_loss

total_val_loss

len(validation_dataloader)return

avg_val_accuracy,

get_linear_schedule_with_warmup(optimizer,

num_warmup_steps

optimizer)#-------------------------------------------------------------------------------------------------##

append():

将可迭代对象中的每个元素逐个添加到列表中#-------------------------------------------------------------------------------------------------#train_accuracies.append(train_accuracy)train_losses.append(train_loss)#

模型验证val_accuracy,

validation_dataloader)val_accuracies.append(val_accuracy)val_f1s.append(val_f1)val_losses.append(val_loss)print([第{}轮训练完成训练集中

Accuracy{:.3f},

val_accuracies):plt.figure(figsize(12,

4))plt.subplot(1,

Loss)plt.xlabel(Epoch)plt.ylabel(Loss)plt.legend()plt.subplot(1,

labelTrain

Accuracy)plt.plot(val_accuracies,

labelValidation

Accuracy)plt.xlabel(Epoch)plt.ylabel(Accuracy)plt.legend()loss_acc_plot(train_losses,

val_losses,

plt.ylabel(F1);注在本地CPU跑的F1值在0.77左右但是在kaggle中GPU跑的F1值在0.8左右原因未知。

绘制混淆矩阵

validation_dataloader:b_input_ids

batch[0].to(device)b_input_mask

batch[2].to(device)#

#-------------------------------------------------------------------------------------------------##

loss

logits而一般的神经网络只有logits#-------------------------------------------------------------------------------------------------#outputs

model(b_input_ids,

#-------------------------------------------------------------------------------------------------##

logits

CPU#-------------------------------------------------------------------------------------------------#logits

b_labels.cpu().numpy()all_labels.extend(label_ids)predicted

np.argmax(logits,

axis1).flatten()all_predictions.extend(predicted)cm

all_predictions)

Matrix);横轴为预测类别纵轴为实际类别。

对标线上的值表示模型正确预测的样本数量非对角线上的值表示模型错误预测的样本数量。

11.

tokenizer(texttest[text].tolist(),add_special_tokensTrue,max_length31,truncationTrue,paddingTrue,

return_tensorspt,return_token_type_ids

True,verbose

torch.tensor(X_test[input_ids])

attention_mask

torch.tensor(X_test[attention_mask])#

DataLoader

batch[0].to(device)b_input_mask

batch[1].to(device)#

#-------------------------------------------------------------------------------------------------##

loss

logits而一般的神经网络只有logits#-------------------------------------------------------------------------------------------------#outputs

model(b_input_ids,

attention_maskb_input_mask)loss

outputs.loss

axis1)all_test_pred.extend(np.argmax(logits,

axis1))生成提交文件

pd.read_csv(D:/Desktop/kaggle数据集/nlp-disaster/sample_submission.csv)

submission[target]

submission.to_csv(/kaggle/working/submission.csv,

indexFalse)



SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback