【大语言模型】基础:如何处理文章,向量化与BoW

词袋模型(BoW)是自然语言处理(NLP)和机器学习中一种简单而广泛使用的文本表示方法。它将文本文档转换为数值特征向量,使得可以对文本数据执行数学和统计操作。词袋模型将文本视为无序的单词集合(或“袋”),忽略语法和单词顺序但保留重数。

我们研究两种类型的词袋向量:

  • 原始计数:实际计算文本中每个单词出现的次数
  • TF-IDF:调整原始计数,以偏好那些在少数文档中大量出现的单词,而不是那些在所有文档中广泛出现的单词

定义

文档语料库

  • 文档是您用例的最小文本单位
  • 语料库是您的文档集合
  • 用例:考虑您正在寻找答案的典型问题
  • 查询:您将用来在语料库中搜索的文本

分词器

分词器是一个程序,它接收文本并将其拆分成更小的单元。一本书可以被拆分成章节、段落、句子、单词。这些都是分词过程的例子。

一旦文本被分词成句子,您就可以将句子分词成单词。

句子

在自然语言中,文本由多个句子组成,句子之间通过如.这样的标点符号分隔。然而,将文本拆分成句子仍然是一个挑战,因为一些.表示缩写,例如。

单词

任何文本都是由单词组成的。有时它们通过空格或标点符号很好地分隔开来。如同句子一样,有些单词包含标点符号,比如U.S.A.to court-martial

词汇表:语料库中使用的独特单词列表。

下面我们用一些实例来演示如何讲一篇长文章进行分割并且将其中的单词向量化等。

import numpy as np
import math
import pandas as pd

1. 下载语料库

我们将使用某些来自阿瑟·柯南·道尔爵士的《波希米亚的丑闻》这一福尔摩斯故事的短片段。

我们将从这本书的第一段开始。

语料库(Corpus):《波希米亚的丑闻》中的所有句子

文档(Document):书中的1个句子

import requestsr = requests.get('https://sherlock-holm.es/stories/plain-text/scan.txt')assert r.status_code == 200with open('scandal_in_bohemia.txt', 'w') as out:out.write(r.content.decode('utf-8'))
lines = [txt for txt in open('scandal_in_bohemia.txt') if len(txt.strip()) > 0]print(lines[:20])# First Paragraph
par = ' '.join([x.strip() for x in lines[7:25]])import textwrap
print(textwrap.fill(par, width=80))

2. 引入NLK库

import nltk
nltk.download('punkt')

3. 引入sentence tokenizer讲一篇文章分割成句子

from nltk.tokenize import sent_tokenize
nltk_sentences = sent_tokenize(par)
nltk_sentences

3. 引入word tokenizer讲一个句子分割成单词

from nltk.tokenize import word_tokenize
nltk_tokens = word_tokenize(nltk_sentences[0])
nltk_tokens

我们也可以利用SpaCy进行类似的转换,代码如下:

import spacy
nlp = spacy.load('en_core_web_sm')
doc = nlp(par)spacy_sentences = list(doc.sents)
spacy_sentencesspacy_tokens = [x for x in spacy_sentences[0]]
spacy_tokens

4. 向量化

下面我们来定义一个function用来显示文章中的单词,方法的输入为向量器,可以是CountVectorizer :

#文字向量化
from sklearn.feature_extraction.text import CountVectorizerdef show_vocabulary(vectorizer):words = vectorizer.get_feature_names_out()print(f'Vocabulary size: {len(words)} words')# we can print ~10 words per linefor l in np.array_split(words, math.ceil(len(words) / 10)):print(''.join([f'{x:<15}' for x in l]))count_small = CountVectorizer(lowercase=False) #没有将单词转化成小写
count_small.fit(nltk_sentences)
show_vocabulary(count_small)输出结果:

  • words = vectorizer.get_feature_names_out(): 此行在向量器对象上调用方法 get_feature_names_out()。此方法返回向量器从数据中学到的特征名称(单词或符号)的数组。这些名称代表转换后的特征矩阵中的列。
  • 循环 for l in np.array_split(words, math.ceil(len(words) / 10)):words 数组分割成较小的块,目标是每块大约10个单词。np.array_split 是一个来自NumPy的函数,用于将数组划分成多个子数组。
  • math.ceil(len(words) / 10) 通过将单词总数除以10并向上取整来计算块的数量,以确保即使总数不是10的完美倍数也包括所有单词
  • ''.join([f'{x:<15}' for x in l]): 在循环内部,列表推导为块 l 中的每个单词生成一个格式化字符串。格式说明符 {x:<15} 为单词 x 添加填充,确保它至少占用15个字符,使输出整齐地排列成列。
  • ''.join(...) 将列表中的所有格式化字符串连接成一个字符串,然后打印。这导致每个单词块被打印在新行上,每个单词之间间隔均匀。

如果我们将lowercase=Ture,讲所有大写转化成小写;输出结果为:

count_small = CountVectorizer(lowercase=True)
count_small.fit(nltk_sentences)
show_vocabulary(count_small)

下面定义另外一个function用来显示向量化的结果:

import os
os.environ["FORCE_COLOR"] = "1"#termcolor 是一个用于给终端文本上色的Python模块。
#此导入对于下面定义的输出函数的视觉方面至关重要。
from termcolor import coloreddef show_bow(vectorizer, bow):words = vectorizer.get_feature_names_out()# we can print ~8 words + coefs per linefor l in np.array_split(list(zip(words, bow)), math.ceil(len(words) / 8)):print(' | '.join([colored(f'{w:<15}:{n:>2}', 'grey') if int(n) == 0 else colored(f'{w:<15}:{n:>2}', on_color='on_yellow', attrs=['bold']) for w, n in l ]))def show_bow_float(vectorizer, bow):words = vectorizer.get_feature_names_out()# we can print ~6 words + coefs per linefor l in np.array_split(list(zip(words, bow)), math.ceil(len(words) / 6)):print(' | '.join([colored(f'{w:<15}:{float(n):>0.2f}', 'grey') if float(n) == 0 else colored(f'{w:<15}:{float(n):>0.2f}', on_color='on_yellow', attrs=['bold']) for w, n in l ]))s = nltk_sentences[0]print(f'Text: "{s}"')
bow = count_small.transform([s])
print(f'BoW Shape: {bow.shape}')
bow = bow.toarray()   # From sparse matrix to dense matrix (Careful with MEMORY)
print(f'BoW Vector: {bow}')show_bow(count_small, bow[0])

函数 show_bow(vectorizer, bow)

  • 目的:显示整数计数的词袋向量。
  • 参数
    • vectorizer:一个向量器对象,具有 get_feature_names_out() 等方法,通常来自诸如scikit-learn(例如,CountVectorizer)的库。
    • bow:一个词袋向量(通常是一个稀疏数组或列表),包含由向量器确定的每个单词的频率计数。
  • 过程
    • 从向量器中检索词汇,并将每个单词与其在 bow 中对应的计数配对。
    • 将单词和计数配对在一起,然后将它们分成每行大约8对。
    • 打印每个单词及其计数,突出显示非零计数(用黄色加粗显示),以便它们在灰色显示的零计数中脱颖而出。

函数 show_bow_float(vectorizer, bow)

  • 目的:显示浮点系数的词袋向量(BoW),适用于如TF-IDF这样的情况,其中计数已标准化。
  • 参数
    • show_bow 类似,但预期 bow 向量包含浮点数。
  • 过程
    • show_bow 类似,但将数字格式化为浮点数,并调整显示以适应每行约6对的格式,因为浮点表示需要额外的空间。

运行结果:

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

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

相关文章

React 集成三方登录按钮样式的插件库

按钮不提供任何社交逻辑。 效果如下&#xff1a; 原地址&#xff1a;https://www.npmjs.com/package/react-social-login-buttons 时小记&#xff0c;终有成。

【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;C❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、拷贝构造函数 1、概念 2、特征 二、赋值运算符重载 1、运算符重载 2、赋值运算符重载 3、前置…

G2D图像处理硬件调用和测试-基于米尔-全志T113-i开发板

本篇测评由电子工程世界的优秀测评者“jf_99374259”提供。 本文将介绍基于米尔电子MYD-YT113i开发板的G2D图像处理硬件调用和测试。 MYC-YT113i核心板及开发板 真正的国产核心板&#xff0c;100%国产物料认证 国产T113-i处理器配备2*Cortex-A71.2GHz &#xff0c;RISC-V 外置…

SpringBoot启动流程分析之准备应用上下文refreshContext()

文章目录 源码入口1、准备刷新1.1、子类prepareRefresh()方法1.2 父类prepareRefresh&#xff08;&#xff09;方法 2、通知子类刷新内部bean工厂3、准备bean工厂4、允许上下文子类对bean工厂进行后置处理 源码入口 org.springframework.boot.SpringApplication#run(java.lang…

若依vue中关于字典的使用

文章目录 字典管理页面列表点击某个字典类型展示具体字典数据修改某一条字典数据 字典的应用一般用于select多选框中代码实现根据字典Dict的value获取Label&#xff0c;类似于通过key获得value 源码解析 字典管理页面 列表 点击某个字典类型展示具体字典数据 修改某一条字典数…

Zookeeper集群+消息队列Kafka

一. Zookeeper 集群的相关知识 1. zookeeper的概念 ZooKeeper 是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的…

C++修炼之路之list模拟实现--C++中的双向循环链表

目录 引言 一&#xff1a;STL源代码中关于list的成员变量的介绍 二&#xff1a;模拟实现list 1.基本结构 2.普通迭代器 const迭代器的结合 3.构造拷贝构造析构赋值重载 清空 4.inserterase头尾插入删除 5.打印不同数据类型的数据《使用模板加容器来完成》 三&#xf…

python之gmsh划分网格

Gmsh&#xff08;Geometry Modeling and Meshing Suite&#xff09;是一个开源的三维有限元网格生成器&#xff0c;它集成了内置的CAD引擎和后处理器。Gmsh的设计目标是提供一个快速、轻量级且用户友好的网格工具&#xff0c;同时具备参数化输入和高级可视化能力。Gmsh围绕几何…

数据治理项目——深铁集团数据治理规划

目录 一、前言 二、数据治理内容与主要措施 2.1 实施背景 2.2 主要举措 2.2.1 制定数据战略目标 2.2.2 绘制数据治理蓝图 2.2.3 绘制数据治理制度 2.2.4 梳理数据资产目录 三、 应用效果 3.1 数据资产可视化管理 3.2 数据标准治理 3.3 集团大数据平台优化建设 一、…

Windows10为Git Bash添加文件传输命令rsync(详细图文配置)

文章目录 1. 安装git bash2. 下载所需要的4个包3. 下载解压包的软件4. 复制每个包下面的usr到git安装目录下4.1 所遇问题4.2 解决 5. 安装完成6. 需要注意 Windows上要使用 rsync命令上传或下载文件&#xff0c;需要使用git bash&#xff0c;git bash没有rsync&#xff0c;需要…

zabbix监控服务

一、监控软件的作用 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果和网站的健康状态 利用一个优秀的监控软件&#xff0c;我们可以&#xff1a; 对系统不间断实时监控实时反馈系统当前状态保…

游戏实践:扫雷

一.游戏介绍 虽然很多人玩过这个游戏&#xff0c;但还是介绍一下。在下面的格子里&#xff0c;埋的有10颗雷&#xff0c;我们通过鼠标点击的方式&#xff0c;点出你认为不是雷的地方&#xff0c;等到把所有没有雷的格子点完之后&#xff0c;及视为游戏胜利。 上面的数字的意思…

华院计算参编《金融业人工智能平台技术要求》标准

随着人工智能技术的迅猛发展&#xff0c;金融机构正在从业务场景化向企业智能化演进&#xff0c;金融业对智能化的需求愈加迫切。为引导产业有序发展、规范行业自律、加快金融行业智能化转型&#xff0c;中国信通院依托中国人工智能产业发展联盟&#xff08;AIIA&#xff09;及…

CommunityToolkit.Mvvm笔记---Ioc

使用MVVM模式提高应用程序代码库中的模块化程度的最常用模式是使用某种形式的反转控制&#xff08;Ioc&#xff09;。其中最常见的解决方案是使用依赖关系注入&#xff0c;该解决方案存在于创建多个注入后端类的服务&#xff08;即以参数的形式传递给 viewmodel 构造函数&#…

ELK+Filebeat日志分析系统

一、ELK基本介绍&#xff1a; 1.ELK 简介: ELK平台是一套完整的日志集中处理解决方案(日志系统)。 将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 ELK --> ELFK --> ELFKMQ2.ELK组件介绍…

IDEA创建jsp文件具体步骤

1. 创建普通项目 2.文件->项目结构->模块&#xff0c;点击号&#xff0c;选择web 点击确认 3.配置工件 4.配置tomcat 点击确定 5.创建jsp文件&#xff0c;注意创建位置 6.然后换调试位置 注意此时不能有其他的web项目运行,否则就选不了路径 完成后运行即可

Python代码打包成exe程序

国内镜像源 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple阿里云 https://mirrors.aliyun.com/pypi/simple/豆瓣 https://pypi.douban.com/simple/ 百度云 https://mirror.baidu.com/pypi/simple/中科大 https://pypi.mirrors.ustc.edu.cn/simple/华为云 https://mirror…

MySQL 使用C语言

一般使用MySQL很少用命令行&#xff0c;一般都是通过程序内部使用&#xff0c;MySQL也为不同的语言定制了不同的头文件和库函数&#xff0c;可以在自己的程序中通过包含头文件和编译时候链接库函数来使用MySQL。 现在一般安装MySQL的时候就会自动给你安装库函数和头文件。 可…

数据资产管理制度探索——浙江篇

在行政事业单位数据资产管理领域&#xff0c;浙江省以创新性思维与高质量发展的战略眼光&#xff0c;积极探索并构建了具有前瞻性和实效性的数据资产管理制度。作为财政部数据资产管理试点省份&#xff0c;浙江省财政厅与省标准化研究院强强联合&#xff0c;充分运用数据溯源、…

【报错】TypeError: Cannot read property ‘meta‘ of undefined

&#x1f608;解决思路 首先这里很明显我们能看到是缺少该参数&#xff1a;meta。 但是经过查找后发现和该参数无关。 &#x1f608;解决方法 后来我上网搜了下&#xff0c;网上的回答大部分偏向于是package.json这个文件中的tabBar.list数组对象只有一条的问题。 网上的大…