96SEO 2026-02-23 13:28 0
。

但是该示例代码中的短文本是用的英文短句#xff0c;其实SimCSE模型也可以用于中文短文本的特征提取用来提取短文本的特征然后计算特征相似度最终达到文本匹配的目的。
但是该示例代码中的短文本是用的英文短句其实SimCSE模型也可以用于中文短文本的特征提取本篇博客就基于苏沐剑发表于科学空间的中文任务还是SOTA吗我们给SimCSE补充了一些实验博客中使用到的代码来记录一下代码梳理的笔记并且使用自己的数据集在这篇代码上进行训练。
另外关于这个模型的原理细节等可以参考别的博主写的内容还有就是作者的论文这些会附在最后的参考链接。
数据导入部分的代码主要有三个步骤1从txt中读取文本数据常规操作这里没什么可说的
maxlen64):转换文本数据为id形式a_token_ids,
maxlenmaxlen)[0]a_token_ids.append(token_ids)token_ids
maxlenmaxlen)[0]b_token_ids.append(token_ids)labels.append(d[2])a_token_ids
sequence_padding(a_token_ids)b_token_ids
sequence_padding(b_token_ids)return
labels3第三步则是写了一个class使用了一个生成器完成数据batch读取。
这里需要注意的是每个batch中同一个文本数据输入了两次一个batch中的两个一样的文本输入由于模型最后一层的加入了dropout模型输出结果是有些许差别的这样有差别的输出则可以互为label这也是SimCSE模型巧妙的地方。
data_generator(DataGenerator):训练语料生成器def
self.sample(random):batch_token_ids.append(token_ids)
##同一条文本输入两次batch_token_ids.append(token_ids)
sequence_padding(batch_token_ids)batch_segment_ids
np.zeros_like(batch_token_ids)batch_labels
np.zeros_like(batch_token_ids[:,
这个模型的定义其实很简单就是用bert作为特征提取的基础模型然后再bert模型输出的基础上加上一个dropout操作就是代码中的pooling层核心代码就是下面几行
build_transformer_model(config_path,checkpoint_path,modelmodel,with_poollinear,dropout_ratedropout_rate)
bert.get_layer(Transformer-%d-FeedForward-Norm
count).outputoutputs.append(output)count
模型的损失函数是所有代码中最难理解的部分虽然代码只有十几行但是最需要花费时间去理解的。
在阐述这个SimCSE模型的损失函数代码之前首先要搞清楚这个模型是要解决什么问题其目的主要是为了提取短文本的特征使得相似的句子提取出来的特征距离更近不同语义的句子特征距离越远这样使得提取出来的文本特征更具有辨识度和人脸识别原理很类似这就是对比学习模型系列想要达到的目的。
K.shape(y_pred)[0])这行代码就是模型输出的一个维度模型输入的batchsize构建一个索引比如模型输入batchsize为6那idxs则就是[0,1,2,3,4,5]
:]这就是给idxs增加一个维度使其变成[[0,1,2,3,4,5]]
None]这行代码比较关键目的是让idxs向量中数值是奇数的赋值为它的前一个数数值为偶数的则赋值为它后一个索引值这个一前一后的赋值就是它相似度最大的索引值排除自己。
这里需要解释一下的是这里每个索引值背后代表的是SimCSE模型输出的一个个的提取到的文本特征向量维度是1*738和bert模型输出应该是一样的维度。
而这里为什么要取一前一后的赋值索引这因为数据导入时候在每个batch里面同一条文本被相邻的导入了两次那么这两个相邻的文本经过SimCSE模型提取到的特征也是最为相似的其相似度要接近1而每个batch里面不相邻的模型输出则应该是0这样模型才能达到收敛的效果
K.floatx())这两行代码就是可以将y_true变成一个batchsize
batchsize大小的相似度矩阵相似度的规则和上面描述的一样
20这几行代码就是计算SimCSE模型预测出来每个batch里的每个文本特征之间的相似度特征越相似K.dot(y_pred,
K.transpose(y_pred))特征向量点乘越接近1similarities
1e12则是为了消除相似度矩阵对角线上的元素即同一条特征自身与自身点乘的结果。
K.categorical_crossentropy(y_true,
from_logitsTrue)最后用交叉熵损失来定义模型最后的输出损失
接着就是下载预训练模型bert的模型下载之后修改eval.py中的数据集和预训练模型的路径将其修改成自己的路径
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback