pytorch处理文本数据代码-处理文本相似度数据

【文本分析学习】Anaconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码) NLTK 文本分析学习之 Anadconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码) 阅读详情

pytorch处理文本数据代码版本1-处理文本相似度数据

下面的代码,相比于版本2的代码,并没有使用gensim,而且处理的时候针对的是每一个样本,也就是每一行,也就是
sentence1和sentence2并没有拆开来处理。

整体代码是我自己完全整理出来的,比较整齐


"""
@author: DASOU
@time: 20200726
"""
import torch
import os
import pickle as pkl

## 读取原始数据,生成对应的word2index
def get_word_voc(config_base):
    train_path=config_base.train_path
    file=open(train_path,'r')
    lines=file.readlines()
    min_freq,max_size,UNK,PAD=config_base.min_freq,config_base.max_size,config_base.UNK,config_base.PAD
    vocab_dic={}
    for line in lines:
        try:
            line=line.strip().split('\t')
        except:
            print('The data formate is not correct,please correct it as example data')
            exit()
        try:
            if len(line)==3:
                sen=line[0]+line[1]
                tokenizer = lambda x: [y for y in x]
                for word in tokenizer(sen):
                    vocab_dic[word] = vocab_dic.get(word, 0) + 1 ## 为了计算出每个单词的词频,为之后过滤低频词汇做准备
        except:
            print('The data formate is not correct,please correct it as example data')
            exit()
    file.close()
    vocab_list = sorted([_ for _ in vocab_dic.items() if _[1] >= min_freq], key=lambda x: x[1], reverse=True)[:max_size]## 是为了计算每个单词的词频
    vocab_dic = {word_count[0]: idx for idx, word_count in enumerate(vocab_list)}## 过滤掉低频词汇之后我们按照顺序来word-index的映射
    vocab_dic.update({UNK: len(vocab_dic), PAD: len(vocab_dic) + 1}) ## 补充unkonw和pad字符对应的数字
    return vocab_dic


def load_data(cate,vocab_dic,config_base):
    if cate=='train':
        data_path=config_base.train_path
    elif cate=='dev':
        data_path = config_base.dev_path
    else:
        data_path = config_base.test_path
    file=open(data_path,'r')
    contents=[]
    for line in file.readlines():
        words_line1=[]
        words_line2=[]
        line=line.strip().split('\t')
        sen1,sen2,label=line[0],line[1],line[2]
        tokenizer = lambda x: [y for y in x]
        token_sen1=tokenizer(sen1)
        token_sen2 = tokenizer(sen2)
        sen1_len = len(token_sen1)
        sen2_len = len(token_sen2)

        if config_base.pad_size:
            if len(token_sen1) < config_base.pad_size:
                token_sen1.extend([config_base.PAD] * (config_base.pad_size - len(token_sen1)))
            else:
                token_sen1 = token_sen1[:config_base.pad_size]

            if len(token_sen2) < config_base.pad_size:
                token_sen2.extend([config_base.PAD] * (config_base.pad_size - len(token_sen2)))
            else:
                token_sen2 = token_sen2[:config_base.pad_size]
        for word1 in token_sen1:
            words_line1.append(vocab_dic.get(word1, vocab_dic.get(config_base.UNK)))

        for word2 in token_sen2:
            words_line2.append(vocab_dic.get(word2, vocab_dic.get(config_base.UNK)))
        contents.append((words_line1,words_line2,int(label)))
    return contents

# 导入/训练对应的word2index
def get_w2i(config_base):

    if not os.path.exists(config_base.w2i_path):
        print('There is not a pre word2index,now is to process data for geting word2index')
        vocab_dic = get_word_voc(config_base)
        pkl.dump(vocab_dic, open(config_base.w2i_path, 'wb'))
        vord_size = len(vocab_dic)
    else:
        print('There is pre word2index, now is to load the pre infomation')
        vocab_dic = pkl.load(open(config_base.w2i_path, 'rb'), encoding='utf-8')
        vord_size = len(vocab_dic)
    return vocab_dic,vord_size

class DatasetIterater():
    def __init__(self, batches, config_base):
        self.batch_size = config_base.batch_size
        self.batches = batches
        self.n_batches = len(batches) // config_base.batch_size
        self.residue = False  # 记录batch数量是否为整数
        if len(batches) % self.n_batches != 0:
            self.residue = True
        self.index = 0
        self.device = config_base.device

    def _to_tensor(self, datas):
        x1 = torch.LongTensor([_[0] for _ in datas]).to(self.device)
        x2 = torch.LongTensor([_[1] for _ in datas]).to(self.device)
        y = torch.LongTensor([_[2] for _ in datas]).to(self.device)

        return (x1, x2), y

    def __next__(self):
        if self.residue and self.index == self.n_batches:
            batches = self.batches[self.index * self.batch_size: len(self.batches)]
            self.index += 1
            batches = self._to_tensor(batches)
            return batches

        elif self.index >= self.n_batches:
            self.index = 0
            raise StopIteration
        else:
            batches = self.batches[self.index * self.batch_size: (self.index + 1) * self.batch_size]
            self.index += 1
            batches = self._to_tensor(batches)
            return batches

    def __iter__(self):
        return self

    def __len__(self):
        if self.residue:
            return self.n_batches + 1
        else:
            return self.n_batches

def build_iterator(dataset,config_base):
    iter = DatasetIterater(dataset,config_base)
    return iter

使用PyTorch张量运算高效实现中文文本批次余弦相似度计算 本方法已成功应用于文本去重、聚类、检索以及推荐系统等多种场景。例如,在新闻推荐中,可以实时计算用户当前阅读文章与候选文章集的余弦相似度,从而推送相关内容。相比传统方法,基于PyTorch张量运算的批量余弦相似度计算实现了数量级的速度提升,尤其在大规模数据处理中优势显著。这种向量化思维方式是深度学习编程的核心,掌握它对于高效解决各类机器学习问题至关重要。 阅读详情

相关推荐

基于Pytorch的中文问题相似度实战

本项目使用的是科大讯飞中文问题相似度挑战赛数据集数据集下载链接。输入层:输入层负责读入两个语句信息嵌入层:使用embedding将句子进行嵌入表达表示层:采用lstm获取语义信息,使用最后一个隐层进行表达语义信息匹配层:使用余弦相似度计算两个表示层向量的相似度得分层:使用全连接层将相似度向量映射成概率。

优快云 精品推荐 2348

知识融合中几种计算文本相似度的方法(代码)

1.余弦相似度 import numpy as np import jieba #读取停用词 def stopwordslist(filepath): stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()] return stopwords # 加载停用词 stopwords = stopwordslist("cn_stopwords.txt") def cosi

每天都要进步的博客 1668

基于pytorch使用LSTM实现文本匹配任务

本项目使用的是2018年蚂蚁金服的文本匹配竞赛数据集数据集来自text matching。输入层:输入层负责读入两个语句信息嵌入层:使用embedding将句子进行嵌入表达表示层:采用lstm获取语义信息,使用最后一个隐层进行表达语义信息匹配层:使用余弦相似度计算两个表示层向量的相似度得分层:使用全连接层将相似度向量映射成概率。

优快云 精品推荐 4013

文本相似度几种计算方法及代码python实现

文本相似度的计算广泛的运用在信息检索,搜索引擎, 文档复制等处: 因此在各种不同的情况与任务中,有不同的文本相似度计算。 方法1 编辑距离 编辑距离又称Levenshtein距离,是指将一个字符串转为另一个字符串所需的字符编辑次数,包括以下三种操作: 插入 - 在任意位置插入一个字符 删除 - 将任意一个字符删除 替换 - 将任意一个字符替换为另一个字符 编辑距离可以用来计算两个字符串的相似度,它的应用场景很多,其中之一是拼写纠正(spell correction)。 编辑距离的定义是给定两个字符串str1

总裁余(余登武)博客 1万+

pytorch-fsim:Pytorch中特征相似性指标度量的可微实现

pytorch-fsim Pytorch中特征相似性指标度量的可微实现

TextMatch:基于Pytorch的,中文语义相似度匹配模型(ABCNN,Albert,Bert,BIMPM,DecomposableAttention,DistilBert,ESIM,RE2,Roberta,SiaGRU,XlNet)

基于Pytorch的中文语义相似度匹配模型 基于Pytorch的中文语义相似度匹配模型 本项目将持续更新,对比目前业界主流文本匹配模型在中文的效果 运行环境:python3.7,pytorch1.2,transformers2.5.1 数据集采用LCQMC数据(将一个句子对进行分类,判断两个句子的语义是否相同(二分类任务)),因数据存在涉嫌嫌疑,故不提供下载,需要者可向官方提出数据申请 ,将数据解压到数据文件夹即可。模型评价指标为:ACC,AUC以及预测总计耗时。 嵌入:本项目输入都统一采用分字策略,故通过维基百科中文语料,训练了字向量作为嵌入。训练语料,矢量模型以及词表,可通过百度网盘下载。链接: : 提取码:s830 模型文件:本项目训练的模型文件(不一定最优,可通过超参继续调优),也可通过网盘下载。链接: : 提取码:s830 测试集结果对比: 模型 行政协调会 AUC 耗时(s

4.2 文本相似度(三)

文本相似度评估,双塔。

qq_28611929的博客 864

基于Pytorch的Bert应用,包括命名实体识别、情感分析、文本分类以及文本相似度等

基于Pytorch的Bert应用,包括命名实体识别、情感分析、文本分类以及文本相似度等(后续更新其他方向相关模块),并有相关数据与深度训练优化方式api。各个子项目大都为开源工作,本项目仅做相应处理以及提供一个已训练的预测接口,方便需求者进行快速的使用。本项目仅作为学习与研究使用,若存在侵权行为,请原作者务必联系我进行协商处理。

【无标题】

本周开始研究多模态,为开题做准备

yuanshi985的博客 508

PVE(Proxmox VE)添加VMware Esxi并迁移虚拟机

跨平台迁移虚拟机:从VMware虚拟化平台迁移虚拟机到PVE平台。

VEGETA的博客 7720

边缘计算【智能+安全检测】系列教程--使用OpenCV+GStreamer实现真正的硬解码,完全消除马赛克

通过现有博客的GStreamer的解码方式解码,大多情况应该存在上图马赛克的问题,请勿紧张,其实上述url并没有调用硬件解码,后面有调用硬件解码的ULR,我们来在接下来的介绍中释获。通过RTSP协议连接海康威视摄像头将图片送入AI推理,发现OpenCV的VideoCapture使用的是软解码大量消耗了cpu的资源,并无法做到实时数据处理存在5秒钟的延时。只能把解码这部分送到硬件解码器去处理分摊掉cpu的压力,

Starry-SkyJing的博客 2428

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

以下学习笔记来源于 Coggle 30 Days of ML(22年1&2月) 链接:https://coggle.club/blog/30days-of-ml-202201 比赛链接:https://aistudio.baidu.com/aistudio/competition/detail/45/0/task-definition 了解BERT和NSP BERT BERT的全称为Bidirectional Encoder Representation from Transformers,是一个预

zxc123qwer的博客 9724

ARM芯片内部的高速公路:手把手教你用AMBA Designer配置NIC-400互连控制器

本文详细介绍了如何使用AMBA Designer工具配置ARM芯片中的NIC-400互连控制器,涵盖从基础拓扑构建到高级QoS设置的完整流程。通过实际案例演示,帮助开发者掌握AXI协议下的高效片上网络设计,提升SoC性能与能效比。

weixin_26750481的博客 315

pytorch计算余弦相似度

在pytorch中,可以使用torch.cosine_similarity函数对两个向量或者张量计算余弦相似度。先看一下pytorch源码对该函数的定义: class CosineSimilarity(Module): r"""Returns cosine similarity between :math:`x_1` and :math:`x_2`, computed ...

tszupup的博客 7万+

64.企业级案例(上)-金融行业DDD落地全流程支付系统-附架构演进图

本文以金融支付系统为例,完整展示了DDD在企业级项目中的落地流程。首先通过事件风暴识别核心业务领域,包括交易、渠道、账务等限界上下文。在战略设计中划分上下文边界,确定交易上下文为核心域。战术设计聚焦交易上下文,详细设计了支付单聚合、值对象和支付路由服务。架构实现采用CQRS+EDA模式,通过命令端处理交易,查询端异步更新读模型,并利用防腐层隔离外部渠道。案例展示了DDD从业务探索到架构实现的全过程,体现了其在复杂业务系统中的价值。

yonggeit的博客 3042

关闭搜狗输入法右下角广告的解决方案

本文主要介绍了关闭搜狗输入法右下角广告的解决方案,希望能对使用搜狗输入法的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

语义文本相似度基准(Semantic Textual Similarity Benchmark, STS-B)数据集

语义文本相似度(Semantic Textual Similarity, STS)任务是自然语言处理(NLP)中的一个重要任务,旨在衡量两个文本之间的语义相似度。STS-B(Semantic Textual Similarity Benchmark)是GLUE(General Language Understanding Evaluation)基准测试中的一个子任务,被广泛用于评估NLP模型在文本语义匹配方面的能力。语义相似度得分范围是0到5,0表示完全不同,5表示完全相同。主要评估指标是皮尔逊相关系数(P

彬彬侠的博客 3580

Python3实现基于ARIMA模型来预测茅台股票价格趋势

ARIMA(Autoregressive Integrated Moving Average)模型是一种广泛使用的时间序列分析方法,它可以用于对未来的数据进行预测。ARIMA模型由自回归模型(AR模型)、差分整合模型(I模型)和移动平均模型(MA模型)组成,因此也被称为ARIMA(p,d,q)模型。其中,p表示自回归阶数,d表示差分阶数,q表示移动平均阶数。具体来说,ARIMA模型可以通过以下步骤进行建模:数据预处理:对时间序列进行平稳性检验,如果不满足平稳性,则进行差分操作。

m0_64336780的博客 2万+

余弦相似度计算的实现方式

自己手写实现一个,numpy、sklearn、scipy.spatial等 当数据量大了以后就得采用其他的方法了,faiss库和GGNN-graph-based GPU nearest neighbor search 先做调研

HUSTHY的博客 1万+

Python爬虫实战:全自动采集银行理财产品收益率数据

本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助!

2201_76125261的博客 1158

RT-DETR改进前必看 - Ultralytics调参 1:1还原RT-DETR官方版本实验环境,更方便改进

的项目文件中集成了YOLOv3v5v6v8v9v10rt-detr11以及其中不同大小的模型结构,更方便我们学习和使用。的参数配置在路径下,其中中设置了模型在训练Train验证Val/Test预测Predict可视化Visualize导出Export超参数Hyperparameters、以及跟踪Tracker的相关参数。在调参过程中主要涉及训练Train和超参数Hyperparameters。下面主要介绍一下初始超参数Hyperparameters。

Limiiiing的博客 7971

pytorch孪生网络识别面部相似度代码解读

本文章记录最近看的一个孪生网络实现人脸面部相似度的代码实例,关于孪生网络的定义,可以点击这里,该项目所使用的的网络架构为标准的卷积神经网络架构,在每个卷积层之后使用批量归一化(batch normolization),然后进行dropout。 孪生网络架构的代码片段: class SiameseNetwork(nn.Module): def __init__(self): ...

tiantiandashi的博客 5675

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

计算文本相似度_利用python进行文本相似度测量

在自然语言处理(Natural Language Processing, NLP)中,经常会涉及到如何度量两个文本的相似度问题。在诸如对话系统(Dialog system)和信息检索(Information retrieval)等的问题中,如何度量句子或者短语之间的相似度尤为重要。度量文本相似度包括如下三种方法:一是基于关键词匹配的传统方法,如N-gram相似度;二是将文...

weixin_35782148的博客 2014

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

余弦计算相似度度量

余弦计算相似度度量

jacke121的专栏 3900

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

自然语言处理中的文本对比学习与文本相似度

1.背景介绍 在自然语言处理(NLP)领域,文本对比学习(Text Contrastive Learning,TCL)是一种新兴的方法,用于学习文本表示,从而提高文本相似度检测和文本分类等任务的性能。本文将详细介绍文本对比学习的背景、核心概念、算法原理、最佳实践、应用场景、工具和资源推荐以及未来发展趋势。 1. 背景介绍 自然语言处理中的文本相似度检测是一项重要的任务,它广泛应用于信息检索、...

AI天才研究院 966
上一篇: Go基础语法:ring
下一篇: Pytorch中mask是如何实现的代码-阅读文本相似度模型
onnx
博客等级 码龄5年 1万+粉丝 416原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

onnx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值