【 文本到上下文 #4】NLP 与 ML

一、说明

        欢迎回到我们的 NLP 博客系列!当我们进入第四部分时,焦点转移到机器学习 (ML) 和自然语言处理 (NLP) 之间的动态相互作用上。在本章中,我们将深入探讨 ML 和 NLP 的迷人协同作用,解开理论概念和实际应用。

        AI、ML 和 NLP 虽然经常互换使用,但具有特定的作用。人工智能模拟人类智能,而NLP允许机器理解和解释语言。机器学习在人工智能的保护伞下,实现了自主学习和改进。这种协同作用使 NLP 任务自动化,提高了准确性和效率。

        以下是本章中您可以期待的内容:

  1. 了解 NLP 中的监督学习和无监督学习: 本节将阐明监督学习和无监督学习在 NLP 背景下的核心区别和独特应用。通过了解这些基本的 ML 方法,您将深入了解它们如何驱动各种 NLP 任务和应用程序。
  2. 情感分析:(监督)ML在NLP中的实际应用:深入研究情感分析的世界,其中监督式 ML 技术用于解释和分类文本数据中的情感。本节将展示如何训练和应用监督学习模型以从文本中提取有意义的见解,强调它们在 NLP 中的实际效用。
  3. 主题建模:(无监督)ML在NLP中的实际应用:探索主题建模,这是一种无监督 ML 应用程序,可发现大型文本语料库中隐藏的主题结构。本部分将演示无监督学习算法如何检测模式和主题,为了解大量文本数据集中存在的潜在主题提供一个窗口。

二、了解 NLP 中的监督学习和无监督学习

        在机器学习领域,有两种基本范式:监督学习和无监督学习。 监督学习涉及在标记数据集上训练模型,其中算法学习将输入数据映射到相应的输出标签。另一方面,无监督学习处理未标记的数据,旨在发现信息中隐藏的模式或分组。

        对于自然语言处理 (NLP) 来说,机器学习就像语言侦探一样——帮助我们理解单词和短语。想象一下,教计算机理解电影评论是在竖起大拇指还是竖起大拇指。这就是我们在NLP中对监督学习所做的。另一方面,无监督学习就像一个熟练的探索者,帮助我们在一堆没有任何标签的文本中找到隐藏的模式。可以把它想象成在一堆文章中揭示主要主题。

        让我们直接进入有趣的区域,从情感分析的快感开始,然后进入主题建模的迷人世界。准备好冒险了吗?让编码奇迹开始吧! 

三、情感分析:(监督)ML在NLP中的实际应用

        ML 在 NLP 中最普遍和最实际的应用之一是情感分析。此任务涉及确定一段文本中表达的情绪,无论是积极的、消极的还是中性的。想象一下,当大规模自动分析情绪时,可以从客户评论、社交媒体帖子或产品反馈中收集到丰富的见解。

        IMDB评论:使用代码进行情感分析

        为了将这些概念变为现实,让我们开始一个现实世界的项目——为 IMDB 评论构建情感分析模型。在此示例中,我们将使用流行的 ML 框架和库(例如 sci-kit learn、pandas)来指导您完成该过程的每个步骤。

# Import necessary libraries
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report# Function to load IMDb dataset
def load_data():df = pd.read_csv('data/movie.csv')return df['text'], df['label']# Function to preprocess data (split into training and testing sets)
def preprocess_data(text, label):X_train, X_test, y_train, y_test = train_test_split(text, label, test_size=0.2, random_state=42)return X_train, X_test, y_train, y_test# Function to vectorize text data using CountVectorizer
def vectorize_text(X_train, X_test):vectorizer = CountVectorizer()X_train_vec = vectorizer.fit_transform(X_train)X_test_vec = vectorizer.transform(X_test)return X_train_vec, X_test_vec, vectorizer  # Return the vectorizer as well to test random text # Function to train a Naive Bayes classifier
def train_model(X_train_vec, y_train):classifier = MultinomialNB()classifier.fit(X_train_vec, y_train)return classifier# Function to evaluate the trained model
def evaluate_model(classifier, X_test_vec, y_test):y_pred = classifier.predict(X_test_vec)accuracy = accuracy_score(y_test, y_pred)report = classification_report(y_test, y_pred)return accuracy, report# Main function
def main():# Step 1: Load datatext, label = load_data()# Step 2: Preprocess dataX_train, X_test, y_train, y_test = preprocess_data(text, label)# Step 3: Vectorize text dataX_train_vec, X_test_vec, vectorizer = vectorize_text(X_train, X_test)  # Capture the vectorizer# Step 4: Train the modelclassifier = train_model(X_train_vec, y_train)# Step 5: Evaluate the modelaccuracy, report = evaluate_model(classifier, X_test_vec, y_test)# Display resultsprint(f"Accuracy: {accuracy:.2f}")print("Classification Report:\n", report)# Test random text with the trained modeltest_text = ["This movie was fantastic!", "I didn't like the plot."]test_text_vec = vectorizer.transform(test_text)predictions = classifier.predict(test_text_vec)print("\nTest Text Predictions:", predictions)if __name__ == "__main__":main()
Accuracy: 0.85
Classification Report:precision    recall  f1-score   support0       0.83      0.89      0.86      39661       0.88      0.82      0.85      4034accuracy                           0.85      8000macro avg       0.85      0.85      0.85      8000
weighted avg       0.85      0.85      0.85      8000Test Text Predictions: [1 0]

        项目步骤:

  1. 加载 IMDb 数据集:我们首先加载我们的 IMDb 数据集,该数据集由电影评论和相应的情感标签(正面或负面)组成。
  2. 数据预处理: 然后,通过使用 scikit-learn 库将数据拆分为训练集和测试集,对数据进行预处理。这一步对于训练和评估模型的性能至关重要。
  3. 文本矢量化:使用 scikit-learn 的 CountVectorizer 将电影评论文本转换为数字特征。此过程将原始文本数据转换为适合机器学习算法的格式。
  4. 训练模型:我们使用 scikit-learn 中的 MultinomialNB 类训练朴素贝叶斯分类器,这是文本分类任务的常用选择。此步骤涉及教导模型识别矢量化文本数据中的模式。
  5. 模型评估:在测试集上对经过训练的模型进行评估,以评估其准确性和性能。我们使用准确性分数和分类报告等指标来衡量模型对看不见的数据的泛化程度。
  6. 使用随机文本进行测试:为了证明该模型在现实世界中的适用性,我们用随机的电影评论文本对其进行了测试。这展示了我们的情感分析模型在训练数据之外进行预测的灵活性。

        建立IMDB情感分析模型不仅可以深入了解电影评论中表达的情感,还可以作为NLP和文本分类的极好介绍。该项目演示了准备数据、训练模型和评估其性能的分步过程,为那些涉足令人兴奋的自然语言处理领域的人们提供了一个实际示例。

四、主题建模:(无监督)ML在NLP中的实际应用

        在自然语言处理 (NLP) 中的无监督学习领域,主题建模仍然是一个迷人的应用程序。这种技术使我们能够在文本文档集合中挖掘潜在的主题,在不依赖预定义标签的情况下揭示潜在的主题。

        使用代码对研究文章进行主题建模

        现在,让我们深入研究我们的第二个 NLP 项目——为研究文章制作主题建模工作。在本例中,我们将采用无监督学习技术来提取非结构化文本中的隐藏对话,重点关注“TITLE”和“ABSTRACT”列。

# Import necessary libraries
from sklearn.decomposition import LatentDirichletAllocation
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd# Function to load research articles dataset
def load_data():df = pd.read_csv('data/research_articles.csv')return df['TITLE'] + ' ' + df['ABSTRACT']# Function to vectorize text data using TfidfVectorizer
def vectorize_text_tfidf(text):vectorizer = TfidfVectorizer(max_df=0.95, min_df=2, stop_words='english')X_vec = vectorizer.fit_transform(text)return X_vec, vectorizer# Function to train a Latent Dirichlet Allocation (LDA) model
def train_lda_model(X_vec, num_topics):lda_model = LatentDirichletAllocation(n_components=num_topics, random_state=42)lda_model.fit(X_vec)return lda_model# Function to display the top words for each topic
def display_topics(model, feature_names, num_top_words):topics = {}for topic_idx, topic in enumerate(model.components_):topics[f"Topic {topic_idx+1}"] = [feature_names[i] for i in topic.argsort()[:-num_top_words - 1:-1]]return topics# Main function for Topic Modeling
def main_topic_modeling(text, num_topics=5, num_top_words=10):# Step 1: Vectorize text data using TfidfVectorizerX_vec, vectorizer = vectorize_text_tfidf(text)# Step 2: Train a Latent Dirichlet Allocation (LDA) modellda_model = train_lda_model(X_vec, num_topics)# Step 3: Display the top words for each topicfeature_names = vectorizer.get_feature_names_out()topics = display_topics(lda_model, feature_names, num_top_words)# Display the topicsprint(f"\nTop {num_top_words} words for each topic:")for topic, words in topics.items():print(f"{topic}: {', '.join(words)}")if __name__ == "__main__":text_data = load_data()main_topic_modeling(text_data, num_topics=5, num_top_words=10)
Top 10 words for each topic:
Topic 1: quantum, energy, spin, model, magnetic, phase, field, time, temperature, wave
Topic 2: learning, data, model, network, networks, based, algorithm, models, neural, problem
Topic 3: mn, doping, floquet, fese, t_c, soc, kitaev, semimetals, mos2, verma
Topic 4: qa, nmf, hedging, opioid, password, gerrymandering, hashtags, triad, fuzzing, sequent
Topic 5: mathbb, prove, group, mathcal, finite, groups, theorem, spaces, algebra, space

        项目步骤:

  1. 加载研究文章数据集:首先加载包含研究文章的数据集,重点关注“TITLE”和“ABSTRACT”列。
  2. 使用 TfidfVectorizer 进行文本矢量化:使用 TfidfVectorizer 将研究文章文本转换为数字特征,同时考虑每个文档中单词的重要性。
  3. 训练潜在狄利克雷分配 (LDA) 模型:使用 LDA 算法来揭示研究文章中隐藏的主题。LDA 假定每个文档都是主题的混合体,并且每个主题都是单词的混合体(有关更多信息,请访问链接)。
  4. 显示每个主题的热门词:通过展示与每个发现的主题相关的热门词来可视化结果。

        冒险进行研究文章的主题建模项目不仅可以增强我们对文章内容的理解,还可以强调NLP中无监督学习的灵活性。该项目提供了从文本矢量化到揭示潜在主题的顺序过程的实际探索,为进入自然语言处理这一有趣领域的爱好者提供了宝贵的见解。

五、结论

        总之,我们对机器学习(ML)和自然语言处理(NLP)的探索已经阐明了它们的不同作用。ML 作为更广泛的 AI 的一个子集,为自主学习提供动力,而 NLP 则解释和理解语言。

        通过监督学习,我们解开了情感分析,从IMDB评论中提取情感。过渡到无监督学习,主题建模揭示了研究文章中隐藏的主题。

        最后,我们的旅程延伸到 NLP 的深度学习基础。请继续关注我们对神经网络、递归神经网络 (RNN) 和长短期记忆 (LSTM) 网络的探索——这是我们正在进行的 NLP 与 ML 探索的激动人心的篇章。

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

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

相关文章

CGAL::Plane_3<K>平面结构

CGAL::Plane_3<K> 是 CGAL&#xff08;Computational Geometry Algorithms Library&#xff09;中的一个类&#xff0c;代表三维空间中的一个平面。在这个类中&#xff0c;K 是一个内核类型参数&#xff0c;通常代表了一组几何对象的类型和操作&#xff0c;比如点、向量、…

【Linux】Shell 命令以及运行原理

Shell 命令以及运行原理 当用户登录 Linux 系统的时候&#xff0c;系统会给用户创建一个新的进程&#xff0c;一般叫做 bash&#xff08;命令行解释器&#xff09;。 Linux 严格意义上说的是一个操作系统&#xff0c;我们称之为 “核心&#xff08; kernel &#xff09;” &…

如何在 Linux 服务器上设置定时任务?

定时任务&#xff0c;也称为计划任务或cron作业&#xff0c;是在指定的时间间隔内自动执行特定任务的一种方法。在Linux服务器上设置定时任务可以帮助您自动化许多常见的系统管理任务&#xff0c;例如备份数据、清理日志文件、发送通知等。下面是在Linux服务器上设置定时任务的…

Leetcode 3013. Divide an Array Into Subarrays With Minimum Cost II

Leetcode 3013. Divide an Array Into Subarrays With Minimum Cost II 1. 解题思路2. 代码实现 题目链接&#xff1a;3013. Divide an Array Into Subarrays With Minimum Cost II 1. 解题思路 这一题的话思路上的话我一开始是想着偷懒直接用动态规划&#xff0c;结果果然还…

Kafka 问题排查

订单宽表数据不同步 事情的起因是专员在 ze app 上查不到订单了&#xff0c;而订单数据是从 mysql 的 order_search_info 查询的&#xff0c;order_search_info 表的数据是从 oracel 的 BZ_ORDER_INFO 表同步过来的&#xff0c;查不到说明同步有问题 首先重启&#xff0c;同步…

ICMP控制消息 汇总

控制消息由 类型 字段中的值标识。代码 字段给出了消息的附加上下文信息。自协议首次引入以来&#xff0c;一些控制消息已被弃用。 重要的ICMP Control Message控制信息 类型码状态描述0 –回声回复&#xff1a;140回声回复&#xff08;用于ping&#xff09;1和2未分配已预留3 …

0004.电脑开机提示按F1

常用的电脑主板不知道什么原因&#xff0c;莫名其妙的启动不了了。尝试了很多方法&#xff0c;没有奏效。没有办法我就只能把硬盘拆了下来&#xff0c;装到了另一台电脑上面。但是开机以后却提示F1&#xff0c;如下图&#xff1a; 根据上面的提示&#xff0c;应该是驱动有问题…

Spring Security工作原理(三)

在认证之间保存请求 如处理安全异常中所示,当请求没有认证且需要认证资源时,需要保存请求以便在认证成功后重新请求受保护的资源。在Spring Security中,这是通过使用RequestCache实现来保存HttpServletRequest来实现的。 RequestCache HttpServletRequest被保存在Request…

可替代Allegro A3901的国产GC3901 5V H 桥驱动器,驱动电流能力更强,且低成本,大电流

步进电机驱动的应用方案目前市场上大多选用国外品牌的电机驱动器&#xff0c;其中ALLEGRO的A3901在这一块的应用很广泛。但是由于市场越来越成熟&#xff0c;当前对于产品开发成本要求也越来越低&#xff0c;国产品牌也推出了相应的镜头驱动器&#xff0c;因此ALLEGRO的A3901已…

Redis和RediSearch的安装及使用

1. 安装要求 ReadiSearch要求Redis的版本在6.0以上RediSearch 要求使用 GNU Make 4.0 或更高版本 2. Redis的安装 查看redis的版本&#xff1a; redis-server --version或者&#xff0c;如果你已经启动了Redis服务器&#xff0c;你也可以使用redis-cli工具来获取版本信息&a…

Win10/11中VMware Workstation设置网络桥接模式

文章目录 一、添加VMware Bridge Protocol服务二、配置桥接参数1.启用系统Device Install Service服务2.配置VMware 需要确认物理网卡是否有添加VMware Bridge Protocol服务 添加VMware Bridge Protocol服务 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参…

枚举类型有着一篇足以

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 1.关键字enum的定义 enum是C语言中的一个关键字&#xff0c;enum叫枚举数据类型&#…

helm 一键部署

helm HPA rancher 安全机制 k8s的核心功能&#xff1a;组件功能 k8s的网络 命令行基本的增删改查 deployment statefulsets 挂载卷&#xff1a;emptyDir&#xff0c; hostPath&#xff0c; nfs pv pvc 动态pvc必问 configmap ingress hpa pod 的自动伸缩 helm 什么是hel…

python opencv 图片缺陷检测(讲解直方图以及相关系数对比法)

一、利用直方图的方式进行批量的图片缺陷检测&#xff08;方法简单&#xff09; 二、步骤&#xff08;完整代码见最后&#xff09; 2.1灰度转换&#xff08;将原图和要检测对比的图分开灰度化&#xff09; 灰度化的作用是因为后面的直方图比较需要以像素256为基准进行相关性比…

Vue2中CesiumV1.113.0加载离线地图

Vue2中CesiumV1.113.0加载离线地图&#xff0c;本文以天地图为例。 1.使用nodejs获取天地图 新建nodejsdownmap项目文件夹&#xff0c;初始化项目 npm init -y src/index.js // An highlighted block var Bagpipe require(bagpipe) var fs require("fs"); var r…

2024.1.21周报

目录 摘要 ABSTRACT 一、文献阅读 一、题目 二、摘要 三、Introduction 四、模型 一、连续时间模型 二、离散时间模型 五、结论 二、实验代码 Navier–Stokes equation 总结 摘要 本周我阅读了一篇题目为Physics-informed neural networks: A deep learning fra…

快速傅立叶变换FFT学习笔记

什么是FFT&#xff1f; FFT&#xff08;Fast Fourier Transformation&#xff09; 是离散傅氏变换&#xff08;DFT&#xff09;的快速算法&#xff0c;即快速傅氏变换。FFT使计算机计算离散傅里叶变换所需要的乘法次数大为减少&#xff0c;特别是被变换的抽样点数N越多&#x…

图像数据增广

目录 一、常用的图像增广方法 1、随机翻转 2、随机裁剪 3、随机颜色变换 二、图像代码实现 1、定义图像显示辅助函数 2、随机翻转 3、随机裁剪 4、随机颜色变换 5、结合多种图像增广方法 三、使用图像增广进行训练 1、下载数据集 2、读取图像并增广 3、多GPU训练 …

vue2面试题:对vue生命周期的理解

vue2面试题&#xff1a;对vue生命周期的理解 回答思路:生命周期是什么-->生命周期有哪些-->生命周期的总体流程-->数据请求在created和mouted的区别生命周期是什么生命周期有哪些生命周期的总体流程beforeCreate-->created:created&#xff1a;created-->before…

ctfshow-反序列化(web271-web276)

目录 web271 web272-273 web274 web275 web276 为什么不用分析具体为什么能成功 ,后面会有几个专题 会对php框架进行更深入的了解 这里面会专门的研究 为什么能够实现RCE 前面作为初步的熟悉 首先知道一下他的框架 知道框架的风格 知道啥版本可以用什么来打 首先先不用太研…