【如何用大语言模型快速深度学习系列】开篇+文本匹配系列

news2024/9/21 0:35:41

开篇

很久没有更新啦!这个系列其实是自己的一个学习笔记啦!这个系列的特色就是我们不再通过看视频的方式入门深度学习。

开篇的时候(2023.07.01),我想的是围绕自然语言处理的一些基础方法(代码方面,先for 循环、if判断实现,再利用 pytorch框架实现,最后达到能根据论文方法写代码;同理,在理论上,从简单模型的评价指标:查全率、查准率到复杂模型、数据集上),逐步深度学习

手边我有一本《动手学深度学习》,会参考其中的学习任务等。
大语言模型,我使用的是星火大模型(默认)或其他大模型(标注),代码部分会让模型写一部分,然后我们在读懂的基础上,进行二次修改,主打的就是一个

我建立了一个在线表格里面建立了学习的路径,因为我是想学什么就去试试。接近一年没有写代码了,估计都快忘光咯!

第一章 文本匹配系列

文本匹配的个人理解:文本a与文本b的关系问题,有哪里相似【*主要为相似度】、有哪里不同、有哪里相关…

第一节 词袋模型

基本概念

词袋模型的概念
利用费曼学习法将大语言模型告诉自己的内容将给别人听:通过大模型的讲解,我们了解了词袋模型的概念,将每个词都看成是独立的,这里的词在英文是每个单词,但对应中文的是每个词语。

  • 我喜欢看电影。
    用单词出现次数来表示:【“我”:1.“喜欢”:1,“看”:1,“电影”,1】
  • 我喜欢看电影,尤其好看电影。
    用单词出现次数来表示:【“我”:1,“喜欢”:1,“看”:1,“电影”:2,尤其:1,“好看的”:1】

探索性思考:

  1. “看”和"好看的"在人来分很简单,但是使用什么样的方法,让一句话可以分成这样一个个的词汇呢?这个在英文里很简单,将一句话拆成一个个单词就实现了,而在中文里,能有效将一句话分成“期待的词汇”是怎么做的呢?
  2. 将这些句子用单词出现次数来表示后,该怎么应用呢?

1. 分词工具

词汇jieba介绍
详细 jieba文档介绍
看了四篇,选了一篇,大模型提供了以下案例,提要求,每行加注释:

import jieba  # 导入jieba库

text = "我爱自然语言处理技术"  # 定义一个字符串变量text,存储需要分词的文本
seg_list = jieba.cut(text, cut_all=False)  # 调用jieba.cut()函数对text进行分词,cut_all参数表示是否使用精确模式,默认为False
print(" / ".join(seg_list))  # 将分词结果用" / "连接成一个字符串并打印出来

输出:我 / 爱 / 自然语言 / 处理 / 技术

明日更新预告:jieba库的学习与使用

2. 应用举例

文本匹配案例
讲解:
比较“我喜欢看电影“”与“我喜欢看电影,尤其好看的电影”两句话有许多词汇是重复的,我们定义
[‘我’,‘喜欢’,‘看’,‘电影’,‘尤其’,‘好看的’]
文档1的向量表示[1,1,1,1,0,0]
文档2的向量表示[1,1,1,2,1,1]
余弦相似度
算了,懒得写了,让大模型算吧
计算结果
综上,我们在原理层面已经学会了词袋模型的最初含义,它不仅仅在文本匹配中应用、在自然语言中应用,还在计算机视觉中有相当多的应用。

代码填空:

利用词袋模型构建向量,再使用余弦相似度计算两个文本相似程度(余弦相似度已经写好啦,转换为向量部分需要手写)
input:文本1
input:文本2
output:相似度

# 天黑了,想回去躺平,明天补一下!


# 2023.7.1 23:00 第一天还是更新一波吧
import jieba

def wenben2vector(wenben):
    # 使用jieba将文本分为各个词
    seg_list = jieba.cut(wenben)
    # print(type(seg_list)) 没咋见过这个格式
    # 将文本转化为list格式
    wenben_list = list(seg_list)

    # 在代码中发现问题,这里的vector实际上是两段文本共同决定的,因此只能做到这步啦

    return wenben_list

def vector2similarity(list1,list2):
    # 将两个list拼接起来
    listnew = list1 + list2

    # list1.extend(list2)
    # 利用元组进行去重
    listnew_qvchong = list(set(listnew))

    # 获取向量长度
    length = len(listnew_qvchong)
    # print(listnew_qvchong)

    # list2vector
    vector1 = [0]*length
    vector2 = [0]*length

    for i in range(length):
        # vector 的 第i个 值 是 list1 中的去重数据第i个元素的个数
        vector1[i] = list1.count(listnew_qvchong[i])
        vector2[i] = list2.count(listnew_qvchong[i])
    # print(vector1)
    # print(vector2)


    # 公式: sum(a)* sum(b)/ 根号 (sum(a^2)x sum(b^2))

    # 分子:对应位置相乘 numpy 可以直接 dot点乘
    vector1_1 = [0]*length
    for j in range(length):
        vector1_1[j] = vector1[j] * vector2[j]

    x1 = sum(vector1_1)

    # 平方和计算
    vector1_2 = [0]*length
    vector2_2 = [0]*length
    for j in range(length):
        vector1_2[j] = vector1[j]**2
        vector2_2[j] = vector2[j]**2

    x2 = (sum(vector1_2)*sum(vector2_2))**(1/2)

    similarity = x1 / x2
    return similarity

def bow():
    wenben1 = input('请输入文本1')
    wenben2 = input('请输入文本2')
    # wenben1 = "我需要购买一个电视机"
    # wenben2 = "我购买了一个笔记本电脑"
    wenben_list1 = wenben2vector(wenben1)
    wenben_list2 = wenben2vector(wenben2)
    similarity = vector2similarity(wenben_list1,wenben_list2)
    print(similarity)

bow()

大模型给的参考1:

# 导入需要使用的库
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# 输入文本1和文本2
text1 = "我喜欢吃苹果"
text2 = "我不喜欢吃香蕉"

# 构建词袋模型,将文本转换为向量
vectorizer = CountVectorizer() # 创建CountVectorizer对象,用于将文本转换为向量
vec1 = vectorizer.fit_transform([text1]) # 将文本1转换为向量,并存储在vec1中
vec2 = vectorizer.transform([text2]) # 将文本2转换为向量,并存储在vec2中

# 计算余弦相似度
similarity = cosine_similarity(vec1, vec2) # 计算vec1和vec2之间的余弦相似度,结果存储在similarity中
print("相似度为:", similarity[0][0]) # 输出相似度值

参考案例2:

# 导入需要使用的库
import jieba

# 将文本转换为词袋向量
def wenben2vector(wenben):
    vec = [] # 创建一个空列表,用于存储词袋向量
    words = jieba.cut(wenben) # 使用jieba库将文本分词

    for word in words:
        if word not in stopwords: # 如果该词不是停用词,则将其添加到vec中
            vec.append(word)

    vec = list(set(vec)) # 将vec中的重复元素去除,并转换为列表类型
    vec.sort() # 对vec进行排序
    vector = [0] * len(vec) # 创建一个长度为vec长度的全零列表,用于存储词袋向量

    for i in range(len(vec)):
        vector[i] = vec.count(vec[i]) # 统计每个词在文本中出现的次数,并存储在vector中

    return vector # 返回词袋向量



# 计算两个词袋向量之间的余弦相似度
def vector2similarity(vector1,vector2):
    similarity = [] # 创建一个空列表,用于存储余弦相似度值

    for i in range(len(vector1)):
        similarity.append((vector1[i],vector2[i])) # 将两个词袋向量中对应位置的元素组成元组,存储在similarity中

    similarity = sorted(similarity,key=lambda x:x[0]) # 按照第一个元素的大小对similarity进行排序
    sum1 = sum([x[0] for x in similarity]) # 计算similarity中所有元素的第一个元素之和
    sum2 = sum([x[1] for x in similarity]) # 计算similarity中所有元素的第二个元素之和

    dot_product = sum1*sum2 # 计算similarity中所有元素的第一个元素与第二个元素的点积
    norm1 = math.sqrt(sum1) # 计算similarity中所有元素的第一个元素的平方和的平方根
    norm2 = math.sqrt(sum2) # 计算similarity中所有元素的第二个元素的平方和的平方根
    similarity = dot_product/(norm1*norm2) # 根据余弦相似度公式计算相似度值,并存储在similarity中
    return similarity # 返回余弦相似度值列表



# 从用户输入中获取文本1和文本2,并将它们转换为词袋向量,然后计算它们的余弦相似度

def bow():
    wenben1 = input('请输入文本1') # 从用户输入中获取文本1
    wenben2 = input('请输入文本2') # 从用户输入中获取文本2
    vector1 = wenben2vector(wenben1) # 将文本1转换为词袋向量,并存储在vector1中
    vector2 = wenben2vector(wenben2) # 将文本2转换为词袋向量,并存储在vector2中
    similarity = vector2similarity(vector1,vector2) # 计算vector1和vector2之间的余弦相似度,并存储在similarity中
    print("相似度为:",similarity[0][0]) # 输出相似度值

bow()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/708961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

带你用Python制作一个经典小游戏:扫雷

名字:阿玥的小东东 学习:Python、C/C 主页链接:阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 游戏界面尺寸 方块尺寸 雷的数量 游戏状态 最后,我们定义一个函数run()&#xff…

软件项目成本的计算

在《架构思维的六要素》中,列出的第一个要素就是成本,成本对项目设计和决策起着至关重要的作用。今天咱们就来看看直接成本、间接成本和总成本的关系。 直接成本 工作于服务的开发者工作于系统测试的测试者设计数据库的DBA设计界面和致力于优化用户体验的…

ROS学习篇之远程控制(七)-局域网内的控制

文章目录 一.pc与pc端二.手机与pc端(1)pc端:**步骤1:** 运行 roscore**步骤2:** 新开一个终端运行,运行 rosrun turtlesim turtlesim_node **步骤3:** 新建一个终端查看ip,运行ifcon…

基于matlab根据特征进行全景图像拼接(附源码)

一、前言 此示例演示如何使用基于特征的图像配准技术自动创建全景图。 特征检测和匹配是许多计算机视觉应用(如图像配准、跟踪和对象检测)中使用的强大技术。在此示例中,基于特征的技术用于自动拼接一组图像。图像拼接过程是基于特征的图像…

火车头采集:高效数据采集工具的介绍

火车头采集是一款基于Python语言开发的网络爬虫工具,用于快速高效地从互联网上采集数据并存储到本地或远程数据库。它简单易用且功能强大,在各行各业广泛应用。 1、设置chatgpt自定义key 添加网站 通过关键词批量生成原创文章 设置发布网站 发布成功 相…

Python GUI编程利器:Tkinker中的文本输入框和下拉菜单(4)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日目标 实现下面效果: 文本输入框(Entry类) 文本输入框,顾名思义,就是实现文本输入功能…

dnsServer搭建

一、dokcer安装 #下载文件:https://github.com/TechnitiumSoftware/DnsServer/blob/master/docker-compose.yml #另存到/root/docker-compose.yml cd /root docker-compose -f docker-compose.yml up -d #启动成功后,浏览器输入:http://192…

Airtest:Windows桌面应用自动化测试【AirtestIDE功能】

AirtestIDE功能 基础功能一、设备窗二、Airtest辅助窗三、Poco辅助窗3.1UI树常见问题:3.1.1为什么我选择了Poco模式后,没有成功刷出UI树3.1.2为什么接入了SDK、使用了原生App依然看不到UI树3.1.3UI树在一段时间后没有正确刷新 四、脚本编辑窗五、Log查看…

蓝牙HID与Android的通信--多点触摸问题

通过蓝牙HID上传鼠标,键盘,按键的事件基本已经比较成熟。并且功能比较好实现,基本参照网络上的配置都可以弄出来。但多点触摸功能却怎么弄都没有满意的结果。搜罗了网上的很多报告描述符的描写,试验了一段时间,竟然没有…

OpenCV:深入Feature2D组件——角点检测

角点检测 1 Harris角点检测1.1 兴趣点与角点1.2 角点检测1.3 harris角点检测1.4 实现harris角点检测:cornerHarris()函数1.5 综合案例:harris角点检测与测绘 2. Shi—Tomasi角点检测2.1Shi—Tomasi角点检测概述2.2 确定图像强角点:goodFeatur…

硬件基本常识杂记1

文章目录 电感(RL电路),电容(RC电路),(LRC电路)谐振(串联、并联)滤波器(高通RC、低通RC、高通RL、低通RL、带通、Π型)积分电路、微分电路截至频率w信号传输、…

Docker迁移与备份

容器保存为镜像 语法: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 为nginx创建镜像: docker commit -a "leq" -m "nginx的镜像" 10053cd47ebf nginx:v1.0 -a 提交的镜像作者 -m 提交时的说明文字 镜像备份 语法: docker save…

深入理解C语言对文件的包装与缓冲区

内存级文件操作的运用 1.模拟实现文件分装2. 深入理解缓冲区的概念 1.模拟实现文件分装 【目标】 以最简单的方式,理解FILE结构体的原理。 头文件:mystdio.h(定义了MY_FILE结构体,声明fopen,fwrite,fclos…

『手撕 Mybatis 源码』10 - 一级缓存

一级缓存 概述 一级缓存是 SqlSession 级别的缓存。在操作数据库时需要构造 SqlSession 对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的 SqlSession 之间的缓存数据区域(HashMap)是互相不影响的二级缓…

hive基于新浪微博的日志数据分析——项目及源码

有需要本项目的全套资源资源以及部署服务可以私信博主!!! 本系统旨在对新浪微博日志进行大数据分析,探究用户行为、内容传播、移动设备等多个方面的特征和趋势,为企业和个人的营销策略、产品设计、用户服务等提供有益的…

PN结、二极管、三极管、三极管放大电路、上拉电路/下拉电路

1、N型参杂 与 P型参杂 B站 视频地址 :https://www.bilibili.com/video/BV1fB4y147Gn 1)N型参杂 (N型半导体) : 4价硅 参杂 5价麟,多一个自由负电子(带负电) 2)P型参杂…

Linux性能学习(4.2):网络_为什么MTU是1500

文章目录 1 基本概念2 为什么MTU是15003 有效载荷最大是1500吗4 Linux下如何修改MTU 参考资料: 1. RFC894 2. 什么是MTU(Maximum Transmission Unit)? 1 基本概念 Maximum Transmission Unit,缩写MTU,即…

Python爬虫:Scrapy框架

🚀Python爬虫:Scrapy框架 🕷️ Scrapy介绍📦 Scrapy框架📁 Scrapy项目🔍 创建爬虫过程🕸️ 页面分析📑 提取信息🎉 完整代码📝 结语 在本篇博文中&#xff0c…

C++6.29思维,作业

有以下类定义&#xff0c;按要求实现剩余功能 #include <iostream> using namespace std;class Person { private:int age;int *p; public://无参构造Person():p(new int(89)){age 18;cout << "无参构造" << endl;}//有参构造Person(int age,int …

docker的容器

首先要关闭防火墙,不然会阻止连接 查询防火墙状态 systemctl status firewalld 如果是running的状态要关闭一下 关闭防火墙 systemctl stop firewalld 禁用防火墙(禁止开机启动) systemctl disable firewalld 容器的创建语句: docker run …