大概学了原理,简单实践一下发现了一些问题:
1.对于不同长度的诗句可能要用0来补齐向量长度
2.直接用两个句子的last_hidden_state向量计算余弦相似度时会报梯度相关的错误 不能计算。不很懂为什么。
用的是BERT-CCPoem 传送门
参考了 传送门 虽然不是中文的bert 但是基本的原理差不多,有些类型转换的细节要改一改

from transformers import BertModel,BertTokenizer
import torch
import numpy
from  sklearn.metrics.pairwise import cosine_similarity
tokenizer = BertTokenizer.from_pretrained('C:\\Users\\1323231\\Desktop\\BERT_CCPoem_v1')
model = BertModel.from_pretrained('C:\\Users\\1323231\\Desktop\\BERT_CCPoem_v1')
sentences = ["折断绿杨枝","无令长相忆","江柳共风烟","馀响入霜钟"]
tokens = {'input_ids':[],'attention_mask':[]}
for sentence in sentences:new_tokens = tokenizer.encode_plus(sentence)#print(new_tokens)tokens['input_ids'].append(torch.tensor(new_tokens['input_ids']))tokens['attention_mask'].append(torch.tensor(new_tokens['attention_mask']))
tokens['input_ids'] = torch.stack(tokens['input_ids'])
tokens['attention_mask']=torch.stack(tokens['attention_mask'])
outputs = model(**tokens)embeddings = outputs.last_hidden_state
attention_mask = tokens['attention_mask']
mask = attention_mask.unsqueeze(-1).expand(embeddings.size()).float()#全是1 在这里没什么用
masked_embeddings = embeddings * mask
summed = torch.sum(masked_embeddings,1)#维度1 求和
'''
j = torch.tensor([[1,2,3],[4,5,6]])
print(torch.sum(j,1))# [6,15]
print(torch.sum(j,0))# [5,7,9]
'''
summed_mask = torch.clamp(mask.sum(1),min=1e-9)
#print(summed_mask)# 7矩阵 首尾 2+5
mean_pooled = summed/summed_mask
mean_pooled = mean_pooled.detach().numpy()
cosine_similarity1 = cosine_similarity([mean_pooled[0]],mean_pooled[1:])
print(cosine_similarity1)

最后的结果是 [[0.33997473 0.46367866 0.25178596]]
看起来对于文本情感的分析效果不算好

BERT求古诗文本相似度相关推荐

  1. 使用BERT做中文文本相似度计算与文本分类

    转载请注明出处,原文地址: https://terrifyzhao.github.io/2018/11/29/使用BERT做中文文本相似度计算.html 简介 最近Google推出了NLP大杀器BER ...

  2. 【创新实训】BERT4EL,基于文本相似度的实体消歧实现

    任务描述 现有douban.mtime.maoyan三个来源的电影,包含名称.简介.导演.演员.类型等等属性. 需要相同的电影融合为一个电影条目,其中maoyan数量很少,可以合并到mtime中. 参 ...

  3. NLP——计算文本相似度的常用算法

    文章目录 一.绪论 二.余弦相似度 2.1 余弦相似度定义 2.2 计算相似度步骤 2.3 举例 2.4 改进方式 2.5 代码 三.TF-IDF计算 3.1 TF.IDE.TF-IDF的计算方法 3 ...

  4. 基于 TF-IDF 计算古诗之间的文本相似度

    步骤 对每一首古诗进行分词 计算每一个词的 tfidf 值 利用每首古诗的词向量计算两首古诗之间的余弦相似度 import pandas as pd import numpy as np import ...

  5. 千言数据集:文本相似度——BERT完成NSP任务

    以下学习笔记来源于 Coggle 30 Days of ML(22年1&2月) 链接:https://coggle.club/blog/30days-of-ml-202201 比赛链接:htt ...

  6. BERT中文实战(文本相似度)

    个人   github BERT本质上是一个两段式的NLP模型.第一个阶段叫做:Pre-training,跟WordEmbedding类似,利用现有无标记的语料训练一个语言模型.第二个阶段叫做:Fin ...

  7. python余弦定理求角_python实现的文本相似度算法(余弦定理)

    只对汉字进行相似度分析,以单个字为向量,然后每个字在章节中出现的次数,便是以此字向量的值.现在我们假设: 章节1中出现的字为:Z1c1,Z1c2,Z1c3,Z1c4--Z1cn:它们在章节中的个数为: ...

  8. 【打卡-Coggle竞赛学习2023年1月】文本相似度匹配

    文章目录 ## Part4 文本相似度匹配 ### 背景介绍 ### 数据说明 ### 评估方式 ### 学习打卡 - 任务1:数据集读取 - 任务2:文本数据分析 - 任务3:文本相似度(统计特征) ...

  9. 使用Word2Vec完成基于文本相似度的推荐

    使用 Word2Vec 完成基于文本相似度的推荐 之前的基于文本相似度的推荐使用的是one-hot的词向量,虽然可以使用稀疏向量来存储里面的非0值,但是以这种形式的词向量存在很多问题: 稀疏的向量表达 ...

最新文章

  1. Exchange Server 2013 DAG高可用部署(四)-服务器配置(上)
  2. android 一维数组遍历,$.each()循环遍历一维数组、二维数组、JSON数据和DOM元素
  3. mina 之IoService(翻译)
  4. java元婴期(31)----java进阶(springmvc(5)---数据回显数据交互拦截器)
  5. Linux 系统的备份恢复
  6. linux开发板加快开机速度,readahead加速Linux开机速度
  7. 20190408 Java中的Double类型计算
  8. JAVA面试题-小白
  9. linux mongo 服务器,如何用MongoDB在Linux服务器上创建大量连接和线程的记忆
  10. powerpc 汇编linux,PowerPc下的寻址模式
  11. Java堆溢出,虚拟机栈和本地方法栈溢出
  12. HTML5视频播放器
  13. linux/unix下telnet提示Escape character is '^]'的意义
  14. Java 遍历JsonNode
  15. Movielens/IMDB电影数据分析(一)
  16. 2021秋软工实践第一次个人编程作业
  17. 一个屌丝程序猿的人生(七)
  18. python抓取京东商品评价总数_python爬虫抓取和分析京东商城评价
  19. sqlserver2014数据导出与导入
  20. 学好C/C++编程,走遍天下都不怕

热门文章

  1. [从头读历史] 第288节 神之物语 赫拉克勒斯的后裔
  2. SpringBoot 微信小程序 二手汽车交易系统 二手手机交易系统
  3. 决策树与随机森林(DecisionTree_RandomForest)
  4. 2021年高压电工考试题及高压电工考试内容
  5. Node.js 使用详情
  6. 以“乌云网关闭”为视角,解读《网络安全漏洞管理规定(征求意见稿)》
  7. oracle设置用户密码永不过期
  8. 立宏TROAX围栏防护系列-智能组合安全围栏-张力围栏-电子围栏-感应围栏
  9. windows10 修改桌面右键新建菜单选项
  10. React Native 启动速度优化——Native 篇(内含源码分析)