当前位置: 首页 > article >正文

中文NLP with fastai - Fastai Part4

使用fastai进行自然语言处理

在之前的教程中,我们已经了解了如何利用预训练模型并对其进行微调,以执行图像分类任务(MNIST)。应用于图像的迁移学习原理同样也可以应用于NLP任务。在本教程中,我们将使用名为AWD_LSTM的预训练模型来对中文电影评论进行分类。AWD_LSTM是LSTM的一种变体。LSTM是一种循环神经网络(RNN),专为处理长文本序列而设计。我们将在后续教程中详细讨论RNN。

使用fastai进行中文自然语言处理:实用示例

中文语言处理是一项具有挑战性的任务,因为大多数NLP模型都是用英语等西方语言训练的。与英语不同,中文不使用空格来分隔单词,这使得分词更具挑战性。幸运的是,有像jieba这样的库可以进行中文分词。Jieba和pkuseg是两个专为有效处理中文分词而设计的库。只要是在中文语料库上训练的,可以使用预训练的词嵌入,如Word2Vec、Glove或FastText。在本指南的最后,我将向您展示如何使用Google的BERT变体——中文BERT来捕捉中文文本中的上下文。XLM-RoBERTa是另一个在中文文本上表现良好的多语言模型。除了中文BERT外,还有许多本土模型,如百度的ERNIE(Enhanced Representation through kNowledge IntEgration)和PaddleNLP,阿里巴巴的FastBERT和AliceMind,以及腾讯的TecentPretrain和Chinese Word Vectors。

处理流程

广义上讲,NLP任务有两个基本模块:文本预处理和文本分类。

在文本预处理中,我们希望以计算机能够解释的方式准备文本。即使对于RNN来说,解释文本的上下文含义也是一项非常复杂的任务。Transformer和自注意力机制在这一领域取得了突破(因此在最后有transformer的例子)。为了简单起见,我们现在将主要关注分词词嵌入步骤。

分词

分词是将文本转换为"标记"的操作,这些标记可以是字符(“a”、“b”、“c”,…)或单词(“hello”、“world”,…),甚至是子字符串,取决于模型的粒度。这就是中文语言变得有趣的地方,因为与英语或基于字母的语言不同,即使是中文字符(我,喜,欢,爱,中)本身也带有含义!因此,中文的词分割变成了一项更艰巨的任务,因为与英语不同,英语中的单词是由空格分隔的,中国人必须通过阅读和记忆来学习如何识别词的边界。因此,需要特殊的算法来分割中文文本。此外,中文文本中的外来词、数字和符号需要特殊处理。

词嵌入

词嵌入是一种将单词表示为向量的方法。在上一个教程中,我们看到了如何将MNIST数据集(灰度图像)转换为3D向量(高度、宽度、颜色)。我们在这里做的概念上也很相似。这些向量的特殊之处在于它们是从大量文本中学习的,那些含义相似的词在高维向量空间中彼此接近(物以类聚)。在本教程中,我们将创建一个自定义的fastai DataBlockChineseTextBlock,用于分词和嵌入中文文本。

文本分类

文本分类是为一段文本分配标签的任务。例如,我们可以将电影评论分类为正面或负面。我们将使用fastai的数据加载器和AWD_LSTM来构建一个文本分类器。

设置和导入

# 如果需要,安装所需的包
# !pip install fastai jieba
from fastai.text.all import *
import jieba
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

中文文本示例

为了演示目的,我们将创建一个小型中文电影评论数据集。在实际应用中,您将加载自己的数据集。

# 中文电影评论示例(正面和负面)
positive_reviews = ["这部电影非常精彩,演员的表演令人印象深刻。","剧情紧凑,特效惊人,是今年最好看的电影之一。","导演的手法很独特,将故事讲述得引人入胜。","音乐配乐恰到好处,为电影增添了不少气氛。","这是一部让人回味无穷的佳作,值得一看。"
]negative_reviews = ["情节拖沓,演员表演生硬,浪费了我的时间。","特效做得很差,剧情漏洞百出,非常失望。","导演似乎不知道自己想要表达什么,整部电影混乱不堪。","对白尴尬,角色塑造单薄,完全不推荐。","这部电影毫无亮点,是我今年看过最差的一部。"
]# 创建数据框
reviews = positive_reviews + negative_reviews
labels = ['positive'] * len(positive_reviews) + ['negative'] * len(negative_reviews)df = pd.DataFrame({'text': reviews, 'label': labels})
df = df.sample(frac=1).reset_index(drop=True)  # 打乱数据df.head()
textlabel
0这是一部让人回味无穷的佳作,值得一看。positive
1剧情紧凑,特效惊人,是今年最好看的电影之一。positive
2导演的手法很独特,将故事讲述得引人入胜。positive
3特效做得很差,剧情漏洞百出,非常失望。negative
4音乐配乐恰到好处,为电影增添了不少气氛。positive

中文文本分词

让我们探索中文文本的不同分词方法。

1. 使用Jieba进行词级分词

我们需要区分在中文NLP上下文中"词"的含义。中文词由提供含义的汉字组成。例如,词"中国"由两个汉字"中"和"国"组成。词"中国"与"中国是一个伟大的国家"中的"中国"含义不同(中国是一个伟大的国家)。后一句中的"中国"是一个名词短语,而前一句中的"中国"是一个名词。前一句中的"中国"是一个单词,而后一句中的"中国"是两个词。前一句中的"中国"是一个单独的标记,而后一句中的"中国"是两个标记。
然而在英语中,一个词就是一个词,比如"China"。所以中文NLP中的词在概念上更类似于英语中的"子词"。

def chinese_word_tokenizer(text):"""使用Jieba进行中文词分割"""# 处理Path对象,通过读取文件if hasattr(text, 'read_text'):text = text.read_text(encoding='utf-8')elif hasattr(text, 'open'):text = text.open(encoding='utf-8').read()# 如果有混合的英文文本,转换为小写text = str(text).lower()# 使用Jieba分割词words = jieba.cut(text)return list(words)

相关文章:

中文NLP with fastai - Fastai Part4

使用fastai进行自然语言处理 在之前的教程中,我们已经了解了如何利用预训练模型并对其进行微调,以执行图像分类任务(MNIST)。应用于图像的迁移学习原理同样也可以应用于NLP任务。在本教程中,我们将使用名为AWD_LSTM的预训练模型来对中文电影评论进行分类。AWD_LSTM是LSTM…...

oracle goldengate实现远程抽取postgresql 到 postgresql的实时同步【绝对无坑版,亲测流程验证】

oracle goldengate实现postgresql 到 postgresql的实时同步 源端:postgresql1 -> postgresql2 流复制主备同步 目标端:postgresql 数据库版本:postgresql 12.14 ogg版本:21.3 架构图: 数据库安装以及流复制主备…...

【MYSQL】索引篇(一)

1.为什么要有索引 索引的本质是一种数据结构,她的作用其实就是更好更快的帮我们找到数据库中存储的数据,就好比一本书,你想要找到指定的内容,但是如果在没有目录的情况下,你只能一页页的进行寻找,这样效率…...

ISCC-2025-web-wp

web 校赛 校赛靠着ENOCH师傅发力,也是一路躺进了区域赛,E师傅不好意思发这抽象比赛的wp(这比赛确实啥必到让人大开眼界,反正明年我是肯定不会打了),我就顺手要过来连着区域赛的一起发了 web 150分 按照提示进入/includes/fla…...

鸿蒙分辨率

鸿蒙手机App界面开发,UI元素应该以什么哪种屏幕尺寸为基准?换言之,做鸿蒙手机APP UI设计时,应该以哪种屏 PX转VP 华为开发者问答 | 华为开发者联盟 各单位换算API 华为开发者问答 | 华为开发者联盟 开源鸿蒙更改DPI 如何在Op…...

@Docker Compose 部署 Pushgateway

文章目录 Docker Compose 部署 Pushgateway1. 目的2. 适用范围3. 先决条件4. 部署步骤4.1 创建项目目录4.2 创建 docker-compose.yml 文件4.3 启动 Pushgateway 服务4.4 验证服务运行状态4.5 测试 Pushgateway 访问 5. 配置 Prometheus 采集 Pushgateway 数据6. 日常维护6.1 查…...

我们来学mysql -- 从库重启,是否同步主库数据

从库重启后,通常不需要重新复制主库的全部数据,然后再开启复制。MySQL 的主从复制机制设计了优雅的恢复流程,可以在从库重启后继续从上次中断的位置继续复制,前提是相关的日志和状态信息完整。 以下是详细解释: 从库…...

King3399(ubuntu文件系统)iic(i2c)功能测试

0 引言 前面两篇博文简要介绍了板子上uart部分的内容,但在驱动开发时,我们遇到的外设更多的是以i2c或spi进行通信,本文将对king3399的i2c进行测试并对硬件电路、设备树与驱动程序进行分析 如果使用的i2c设备不是mma8452,建议先看…...

德思特新闻 | 德思特与es:saar正式建立合作伙伴关系

德思特新闻 2025年5月9日,德思特科技有限公司(以下简称“德思特”)与德国嵌入式系统专家es:saar GmbH正式达成合作伙伴关系。此次合作旨在将 es:saar 的先进嵌入式开发与测试工具引入中国及亚太市场,助力本地客户提升产品开发效率…...

基于原生JavaScript前端和 Flask 后端的Todo 应用

Demo地址:https://gitcode.com/rmbnetlife/todo-app-js-flask.git Python Todo 应用 这是一个使用Python Flask框架开发的简单待办事项(Todo)应用,采用前后端分离架构。本项目实现了待办事项的添加、删除、状态切换等基本功能,并提供了直观…...

一些Dify聊天系统组件流程图架构图

分享一些有助于深入理解Dify聊天模块的架构图 整体组件架构图 #mermaid-svg-0e2XalGLqrRbH1Jy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0e2XalGLqrRbH1Jy .error-icon{fill:#552222;}#mermaid-svg-0e2XalGLq…...

jq处理日志数据

介绍 jq 是一个轻量级且灵活的命令行 JSON 处理器。它允许你使用简单的过滤器来处理 JSON 数据,提取、操作和转换 JSON 文档。jq 是处理 JSON 数据的强大工具,特别适合在命令行环境中使用。 简单将就是:专门处理 json结构的字符串的工具 我…...

Matlab程序设计基础

matlab程序设计基础 程序设计函数文件1.函数文件的基本结构2.创建并使用函数文件的示例3.带多个输出的函数示例4.包含子函数的函数文件 流程控制1. if 条件语句2. switch 多分支选择语句3. try-catch 异常处理语句ME与lasterr 4. while 循环语句5. for 循环语句break和continue…...

MIT 6.S081 2020 Lab6 Copy-on-Write Fork for xv6 个人全流程

文章目录 零、写在前面一、Implement copy-on write1.1 说明1.2 实现1.2.1 延迟复制与释放1.2.2 写时复制 零、写在前面 可以阅读下 《xv6 book》 的第五章中断和设备驱动。 问题 在 xv6 中,fork() 系统调用会将父进程的整个用户空间内存复制到子进程中。**如果父…...

第304个Vulnhub靶场演练攻略:digital world.local:FALL

digital world.local:FALL Vulnhub 演练 FALL (digitalworld.local: FALL) 是 Donavan 为 Vulnhub 打造的一款中型机器。这款实验室非常适合经验丰富的 CTF 玩家,他们希望在这类环境中检验自己的技能。那么,让我们开始吧,看看如何…...

Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不…...

万字详解RTR RTSP SDP RTCP

目录 1 RTSP1.1 RTSP基本简介1.2 RSTP架构1.3 重点内容分析 2 RTR2.1 RTR简介2.2 RTP 封装 H.2642.3 RTP 解封装 H.2642.4 RTP封装 AAC2.5 RTP解封装AAC 3 SDP3.1 基础概念3.2 SDP协议示例解析3.3 重点知识 4 RTCP4.1 RTCP基础概念4.2 重点 5 总结 1 RTSP 1.1 RTSP基本简介 一…...

云服务器如何自动更新系统并保持安全?

云服务器自动更新系统是保障安全、修补漏洞的重要措施。下面是常见 Linux 系统(如 Ubuntu、Debian、CentOS)和 Windows 服务器自动更新的做法和建议: 1. Linux 云服务器自动更新及安全维护 Ubuntu / Debian 系统 手动更新命令 sudo apt up…...

训练中常见的运动强度分类

概述 有氧运动是耐力基础,乳酸阈值是耐力突破的关键,提升乳酸阈值可以延缓疲劳,无氧运动侧重速度和力量,混氧和最大摄氧量用于细化训练强度和评估潜力。 分类强度供能系统乳酸浓度训练目标有氧运动低(60%-80% HR&…...

java 递归地复制文件夹及其所有子文件夹和文件

java 递归地复制文件夹及其所有子文件夹和文件 根据你的需求,下面是一个 Java 代码示例,用于递归地复制文件夹及其所有子文件夹和文件。由于你提到文件夹是数据层面的,这里假设你可以通过 folderById 来获取文件夹的相关信息,并且…...

[paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型

使用PDX 3.0rc1 训练时序缺陷检测后导出的模型无法转换 Informations (please complete the following information): Inference engine for deployment: PD INFERENCE 3.0-->onnxruntime Why convert to onnx:在端侧设备上部署 Paddle2ONNX Version: 1.3.1 解…...

React项目在ios和安卓端要做一个渐变色背景,用css不支持,可使用react-native-linear-gradient

以上有个模块是灰色逐渐到白的背景色过渡 如果是css,以下代码就直接搞定 background: linear-gradient(180deg, #F6F6F6 0%, #FFF 100%);但是在RN中不支持这种写法,那应该写呢? 1.引入react-native-linear-gradient插件,我使用的是…...

【数据分析】特征工程-特征选择

【数据分析】特征工程-特征选择 (一)方差过滤法1.1 消除方差为0的特征1.2 保留一半的特征1.3 特征是二分类时 (二)相关性过滤法2.1 卡方过滤2.2 F检验2.3 互信息法 (三)其他3.1 包装法3.2 嵌入法3.3 衍生特…...

第4节 Node.js NPM 使用介绍

本文介绍了 Node.js 中 NPM 的使用,我们先来了解什么是 NPM。 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用。允许…...

RK3399 Android7.1增加应用安装白名单机制

通过设置应用包名白名单的方式限制未授权的应用软件安装。 diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java index af9a533..ca…...

uni-app 安卓消失的字符去哪里了?maxLength失效了!

前情提要 皮一下~这个标题我还蛮喜欢的嘿嘿嘿【附上一个自行思考的猥琐的笑容】 前段时间不是在开发uni-app的一个小应用嘛,然后今天测试发现,有一个地方在苹果是没有问题的,但是在安卓上出现了问题,附上安卓的截图 在这里我是有限制maxLength=50的,而且,赋值字符串到字…...

#AI短视频制作完整教程

目录 前期准备AI工具选择制作流程后期优化发布策略 前期准备 1. 确定视频主题和风格 内容定位:教育、娱乐、商业推广、个人分享目标受众:年龄、兴趣、平台偏好视频时长:15-60秒(根据平台调整)风格调性:…...

嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)

printf重定义: C语言里面的printf函数默认输出设备是显示器,如果要实现printf函数输出正在串口或者LCD显示屏上,必须要重定义标准库函数里调用的与输出设备相关的函数,比如printf输出到串口,需要将fputc里面的输出指向…...

【大模型】情绪对话模型项目研发

一、使用框架: Qwen大模型后端Open-webui前端实现使用LLamaFactory的STF微调数据集,vllm后端部署, 二、框架安装 下载千问大模型 安装魔塔社区库文件 pip install modelscope Download.py 内容 from modelscope import snapshot_downlo…...

Git 教程 | 如何将指定文件夹回滚到上一次或某次提交状态(命令详解)

在日常开发中,我们经常会遇到这样的情况: “我想把某个文件夹恢复到之前的状态,但又不想影响整个项目,怎么办?” 别担心!这篇文章就教你如何用 Git 把项目中某个特定文件夹(或文件)回…...