BERT求古诗文本相似度
大概学了原理,简单实践一下发现了一些问题:
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求古诗文本相似度相关推荐
- 使用BERT做中文文本相似度计算与文本分类
转载请注明出处,原文地址: https://terrifyzhao.github.io/2018/11/29/使用BERT做中文文本相似度计算.html 简介 最近Google推出了NLP大杀器BER ...
- 【创新实训】BERT4EL,基于文本相似度的实体消歧实现
任务描述 现有douban.mtime.maoyan三个来源的电影,包含名称.简介.导演.演员.类型等等属性. 需要相同的电影融合为一个电影条目,其中maoyan数量很少,可以合并到mtime中. 参 ...
- NLP——计算文本相似度的常用算法
文章目录 一.绪论 二.余弦相似度 2.1 余弦相似度定义 2.2 计算相似度步骤 2.3 举例 2.4 改进方式 2.5 代码 三.TF-IDF计算 3.1 TF.IDE.TF-IDF的计算方法 3 ...
- 基于 TF-IDF 计算古诗之间的文本相似度
步骤 对每一首古诗进行分词 计算每一个词的 tfidf 值 利用每首古诗的词向量计算两首古诗之间的余弦相似度 import pandas as pd import numpy as np import ...
- 千言数据集:文本相似度——BERT完成NSP任务
以下学习笔记来源于 Coggle 30 Days of ML(22年1&2月) 链接:https://coggle.club/blog/30days-of-ml-202201 比赛链接:htt ...
- BERT中文实战(文本相似度)
个人 github BERT本质上是一个两段式的NLP模型.第一个阶段叫做:Pre-training,跟WordEmbedding类似,利用现有无标记的语料训练一个语言模型.第二个阶段叫做:Fin ...
- python余弦定理求角_python实现的文本相似度算法(余弦定理)
只对汉字进行相似度分析,以单个字为向量,然后每个字在章节中出现的次数,便是以此字向量的值.现在我们假设: 章节1中出现的字为:Z1c1,Z1c2,Z1c3,Z1c4--Z1cn:它们在章节中的个数为: ...
- 【打卡-Coggle竞赛学习2023年1月】文本相似度匹配
文章目录 ## Part4 文本相似度匹配 ### 背景介绍 ### 数据说明 ### 评估方式 ### 学习打卡 - 任务1:数据集读取 - 任务2:文本数据分析 - 任务3:文本相似度(统计特征) ...
- 使用Word2Vec完成基于文本相似度的推荐
使用 Word2Vec 完成基于文本相似度的推荐 之前的基于文本相似度的推荐使用的是one-hot的词向量,虽然可以使用稀疏向量来存储里面的非0值,但是以这种形式的词向量存在很多问题: 稀疏的向量表达 ...
最新文章
- Exchange Server 2013 DAG高可用部署(四)-服务器配置(上)
- android 一维数组遍历,$.each()循环遍历一维数组、二维数组、JSON数据和DOM元素
- mina 之IoService(翻译)
- java元婴期(31)----java进阶(springmvc(5)---数据回显数据交互拦截器)
- Linux 系统的备份恢复
- linux开发板加快开机速度,readahead加速Linux开机速度
- 20190408 Java中的Double类型计算
- JAVA面试题-小白
- linux mongo 服务器,如何用MongoDB在Linux服务器上创建大量连接和线程的记忆
- powerpc 汇编linux,PowerPc下的寻址模式
- Java堆溢出,虚拟机栈和本地方法栈溢出
- HTML5视频播放器
- linux/unix下telnet提示Escape character is '^]'的意义
- Java 遍历JsonNode
- Movielens/IMDB电影数据分析(一)
- 2021秋软工实践第一次个人编程作业
- 一个屌丝程序猿的人生(七)
- python抓取京东商品评价总数_python爬虫抓取和分析京东商城评价
- sqlserver2014数据导出与导入
- 学好C/C++编程,走遍天下都不怕
热门文章
- [从头读历史] 第288节 神之物语 赫拉克勒斯的后裔
- SpringBoot 微信小程序 二手汽车交易系统 二手手机交易系统
- 决策树与随机森林(DecisionTree_RandomForest)
- 2021年高压电工考试题及高压电工考试内容
- Node.js 使用详情
- 以“乌云网关闭”为视角,解读《网络安全漏洞管理规定(征求意见稿)》
- oracle设置用户密码永不过期
- 立宏TROAX围栏防护系列-智能组合安全围栏-张力围栏-电子围栏-感应围栏
- windows10 修改桌面右键新建菜单选项
- React Native 启动速度优化——Native 篇(内含源码分析)