AI学习记录 - 本地知识库实现的相关知识

news2024/9/24 7:21:41

在公司内部实现了个知识库,由于保密吗,只介绍在实现知识库的过程中用到的知识(虽然知识库也是个烂大街的东西了hehehehe)

1、分词器

先分词,中文可以使用jieba分词
在这里插入图片描述

2、构造数据集

将词汇向量化是自然语言处理中的重要任务,它可以将文本数据转化为计算机能够理解和处理的向量形式。以下是一些常用的词汇向量化方法:

One-Hot 编码: 这是最简单的向量化方法之一。对于每个词汇,创建一个由 0 和 1 组成的向量,其中向量的长度等于词汇表的大小,而对应词汇的位置置为 1,其他位置为 0。这种方法简单,但无法捕捉词汇之间的语义关系。
词嵌入(Word Embeddings): 词嵌入是一种将词汇映射到连续向量空间的方法,能够捕捉词汇之间的语义关系。Word2Vec、GloVe 和 FastText 等模型可以生成这种词嵌入。这些向量表示可以通过预训练模型获取,也可以在特定任务上进行微调。

BERT(Bidirectional Encoder Representations from Transformers): BERT 是一种预训练的语言模型,它能够生成上下文感知的词汇表示。你可以使用 BERT 模型或其变体来为词汇生成向量,这些向量会考虑词汇在上下文中的含义。
Transformer 编码器输出: 如果你有一个训练有素的 Transformer 编码器(如 BERT、GPT 等),你可以将文本输入编码器,然后使用编码器的输出作为文本的向量表示。

如果目标词汇是 “apple”,上下文是 [“juicy”, “fruit”],那么训练样本可以是 (“apple”, “juicy”) 和 (“apple”, “fruit”)。

3、利用神经网络训练词向量

在使用word2vec将词向量传入神经网络训练的时候,词向量会发生改变,神经网络的权重也会发生改变。

使用Word2Vec预训练的词向量作为初始输入,然后将它们传入神经网络进行进一步的训练,通常会涉及两个部分的权重更新:词向量权重和神经网络权重。

词向量权重更新: 当使用预训练的Word2Vec词向量作为初始输入时,这些词向量本身可以被看作是一种初始的表示。在训练过程中,这些词向量也会发生微小的调整,以更好地适应特定任务。这种微小的调整有时被称为“微调”。这意味着,预训练的词向量可能会在训练期间进行轻微的优化,以更好地捕捉语义信息和任务特定的上下文。
神经网络权重更新: 神经网络的权重包括各种层(例如,全连接层、卷积层等)的权重以及可能的偏置项。当将预训练的词向量传入神经网络进行训练时,神经网络的权重会在反向传播的过程中进行更新,以使网络能够适应特定的任务。这些权重的更新取决于损失函数、优化算法(如随机梯度下降或其变体)、学习率等。

词向量分别是4个,假设a和b相似度为0.8,0.8是人为定义的,假设a=[0.2, 0.3, 0.4, 0.5],b=[0.1,0.9,0.6,0.5]
那数据集应该是[[0.2, 0.3, 0.4, 0.5],[0.1,0.9,0.6,0.5],0.8],所以我们的神经网络应该如下:
在这里插入图片描述

训练好的词向量
打印词汇表中的dirty对应的向量
在这里插入图片描述

4、怎么求两个词向量的相似度

假如有两个词向量,a=[0.2, 0.3, 0.4, 0.5],b=[0.1,0.9,0.6,0.5]
在这里插入图片描述

5、词向量通过什么方法组成段落向量

词向量 通过一定算法组成 句向量
句向量 通过一定算法组成 段落向量
段落向量 通过一定算法组成 文章向量

每一步的算法都可以使用如下算法:
1、求平均值或加权平均值: 可以对段落中的所有句子向量进行平均或加权平均,得到段落向量。这是一种简单的方法,但可能无法很好地处理句子之间的关系。
2、循环神经网络 (RNN) 或 Transformer 编码器: 类似于生成句子向量的方式,可以使用RNN或Transformer编码器来处理句子向量序列,生成一个表示整个段落的向量。
3、层次化注意力: 可以使用注意力机制来捕捉段落内句子之间的关系。例如,可以使用自注意力机制来为句子赋予不同的权重,然后加权平均句子向量以生成段落向量。
4、递归神经网络 (Recursive Neural Network): 这种神经网络结构允许在树状结构中捕捉句子之间的层次关系,从而生成段落向量。
5、文档级预训练模型: 一些预训练模型(如DocBERT、Longformer等)专门设计用于生成文档级别的嵌入。这些模型可以直接用于生成段落向量。

上面提到的算法当中,我举例一个最简单的算法,就是直接把向量相加.
在这里插入图片描述

7、使用词向量实现对文章分类的简单功能

在这里插入图片描述

假设我们已经拥有了所有水果词汇的向量,我们可以对文章进行分类,分类的简单方式如下
假设将所有红色向量加起来,得到了一个粗红色的向量,我们将红色的向量在我们的分类库里面查找,找到最相似分类红色粗线,水果分类是蓝色粗线,根据余弦相似度计算红色粗线和蓝色粗线,证明我们这篇文章是关于水果的,而不是蔬菜的。
在这里插入图片描述
上面的通过关键词的向量相加,能够提取的信息只是一篇文章的相关关键词的数量信息,但是无法提取一篇文章的关键词的顺序信息。假设有向量a,b,c,他们之间相加的先后顺序不影响最终结果,如a + b + c = b + a + c = c + a + b。所以假设有两篇文章,一篇讲的是男生喜欢女生的情感心理活动,一篇讲的是女生喜欢男生的情感心理活动。关键词“男生”“喜欢”“女生”,男生喜欢女生 和 女生喜欢男生 是不一样的,所以这种相加方式无法区分出这种顺序特征,所以可以利用一些更加复杂的算法是生成,复杂的算法代表了更加耗费训练时间。

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

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

相关文章

OpenHarmony 开发

本心、输入输出、结果 文章目录 OpenHarmony 开发前言JonathanOpenHarmony 并不是 AndroidOpenHarmony 应用迁移OpenHarmony 的开发流程OpenHarmony 开发 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 如果觉得本文对你有帮助,欢迎点赞、收藏、评…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十七章 字符设备和杂项设备总结回顾

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

vim gcc

vim 使用 vs filename 分屏 ctrl ww 切窗口 shift zz 快速提出vim vim配置 vim启动时自动读取当前用户的家目录的.vimrc文件 vim配置只影响本用户 其他用户观看同一文件不受影响 gcc指令 & c文件编译过程 动态库 静态库 & 链接方式 有相应库才能进行…

数据传输安全--IPSEC

目录 IPSEC IPSEC可以提供的安全服务 IPSEC 协议簇 两种工作模式 传输模式 隧道模式 两个通信保护协议(两个安全协议) AH(鉴别头协议) 可以提供的安全服务 报头 安全索引参数SPI 序列号 认证数据 AH保护范围 传输模…

深入浅出WebRTC—LossBasedBweV2

WebRTC 同时使用基于丢包的带宽估计算法和基于延迟的带宽估计算法那,能够实现更加全面和准确的带宽评估和控制。基于丢包的带宽估计算法主要依据网络中的丢包情况来动态调整带宽估计,以适应网络状况的变化。本文主要讲解最新 LossBasedBweV2 的实现。 1…

SSIS_SQLITE

1.安装 SQLite ODBC 驱动程序 2.添加SQLite数据源 在“用户DSN”或“系统DSN”选项卡中,点击“添加”。选择“SQLite3 ODBC Driver”,然后点击“完成”。在弹出的配置窗口中,设置数据源名称(DSN),并指定S…

python实现特征检测算法4

python实现Richardson-Lucy 反卷积算法 Richardson-Lucy 反卷积算法算法原理Python实现详细解释Richardson-Lucy算法的优缺点应用领域Richardson-Lucy 反卷积算法 Richardson-Lucy反卷积算法是一种迭代算法,用于恢复因成像系统中的点扩散函数(PSF)导致的模糊图像。该算法最…

Spring MVC 应用分层

1. 类名使⽤⼤驼峰⻛格,但以下情形例外:DO/BO/DTO/VO/AO 2. ⽅法名、参数名、成员变量、局部变量统⼀使⽤⼩驼峰⻛格 3. 包名统⼀使⽤⼩写,点分隔符之间有且仅有⼀个⾃然语义的英语单词. 常⻅命名命名⻛格介绍 ⼤驼峰: 所有单词⾸字⺟…

【LLM-推理】Self-Refine:使用feedback迭代修正LLM的Output

来源: https://selfrefine.info/ 1.论文速读(摘要引言) 本文主要提出了Self-Refine策略,旨在通过一个LLM不断refine修正LLM的输出,使其在无需额外训练的情况下,在下游任务产生更好的效果。 该方法的直观Insight:我们…

7.23 字符串简单中等 520 125 14 34

520 Detect Capital 思路: 题目:判定word :if the usage of capitals in it is right.遍历所有的string: 两种情况: 首字母capitals–>判定第二个字母是否大写–>所有字母大写 otherwise 除第一个以外全部小写&a…

Github Desktop 关于将本地文件夹设置为新仓库的 使用笔记

实际要达到的结果: 将UE5工程同步到Github,工程太大,我们只需要将必要的工程文件夹同步即可,缓存等一些不必要的文件夹则不需要同步 最终效果预览: 1. 将本地文件夹设置为新仓库 将本地文件夹作为仓库一般你是没有这个仓库的,所以你需要新建一个仓库 如果忽略某些不必要的文…

视触觉传感器在矿物/岩石识别中的应用探索

人工智能推动矿物/岩石自动识别技术的发展,该技术减少了人工成本和对个人经验的依赖。随着仪器仪表的数字化,图像识别发挥着越来越重要的作用。清华大学联合中国地质大学近期在期刊Advanced Intelligent Systems(JCR Q1, 影响因子7.4&#xf…

JAVA.4.继承

1.特点 java只支持单继承,一个儿子继承一个父亲 但可以多层继承,a继承b,b继承c b是a的直接父类,c是a的间接父类 每个类都直接或者简介继承Object,不写继承就默认继承它 2.注意事项 构造方法 父类的构造方法&#…

生成式 AI 的发展方向:Chat 还是 Agent?

生成式 AI 的发展方向,是 Chat 还是 Agent? 随着生成式 AI 技术的不断进步,关于其未来发展方向的讨论也愈发激烈。究竟生成式 AI 的未来是在对话系统(Chat)中展现智慧,还是在自主代理(Agent&am…

GO内存分配详解

文章目录 GO内存分配详解一. 物理内存(Physical Memory)和虚拟内存(Virtual Memory)二. 内存分配器三. TCMalloc线程内存(thread memory)页堆(page heap)四. Go内存分配器mspanmcachemcentralmheap五. 对象分配流程六. Go虚拟内存ArenaGO内存分配详解 这篇文章中我将抽丝剥茧,…

LINUX之MMC子系统分析

目录 1. 概念1.1 MMC卡1.2 SD卡1.3 SDIO 2. 总线协议2.1 协议2.2 一般协议2.3 写数据2.4 读数据2.5 卡模式2.5.1 SD卡模式2.5.2 eMMC模式 2.6 命令2.6.1 命令类2.6.2 详细命令 2.7 应答2.8 寄存器2.8.1 OCR2.8.2 CID2.8.3 CSD2.8.4 RCA2.8.5 扩展CSD 3. 关键结构3.1 struct sdh…

Llama 3.1要来啦?!测试性能战胜GPT-4o

哎呀,Meta声称将于今晚发布的Llama 3.1,数小时前就在Hugging Face上泄露出来了?泄露的人很有可能是Meta员工? 还是先来看泄露出来的llama3.1吧。新的Llama 3.1模型包括8B、70B、405B三个版本。 而经过网友测试,该base…

K8s 核心组件——API Server

1. Kubernetes API Server 概述 1.1 基本概念 Kubernetes API Server(API Server)是 Kubernetes 的核心组件之一,负责暴露 Kubernetes API 给用户和客户端,接收和处理来自客户端的请求,并将其存储到 etcd 中。Kubern…

Unity3D之TextMeshPro使用

文章目录 1. TextMeshPro简介2. TextMeshPro创建3. TextMeshPro脚本中调用4. TextMeshPro字体设置及中文支持过程中出现的一些问题 1. TextMeshPro简介 【官网文档】https://docs.unity.cn/cn/2020.3/Manual/com.unity.textmeshpro.html TextMeshPro 是 Unity 的最终文本解决…

java 集合框架-collection(单列集合)

在编程语言中,我们必然少不了存储数据的容器,虽然我们有数组,但是数组是连续的开辟处一块连续的内存空间,如果数据过大会无法存储完,数据量小,会浪费空间,所以我们需要使用集合存储数据&#xf…