【 文本到上下文 #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 data
    text, label = load_data()

    # Step 2: Preprocess data
    X_train, X_test, y_train, y_test = preprocess_data(text, label)

    # Step 3: Vectorize text data
    X_train_vec, X_test_vec, vectorizer = vectorize_text(X_train, X_test)  # Capture the vectorizer

    # Step 4: Train the model
    classifier = train_model(X_train_vec, y_train)

    # Step 5: Evaluate the model
    accuracy, report = evaluate_model(classifier, X_test_vec, y_test)

    # Display results
    print(f"Accuracy: {accuracy:.2f}")
    print("Classification Report:\n", report)

    # Test random text with the trained model
    test_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   support

           0       0.83      0.89      0.86      3966
           1       0.88      0.82      0.85      4034

    accuracy                           0.85      8000
   macro avg       0.85      0.85      0.85      8000
weighted avg       0.85      0.85      0.85      8000


Test 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 TfidfVectorizer
    X_vec, vectorizer = vectorize_text_tfidf(text)
    
    # Step 2: Train a Latent Dirichlet Allocation (LDA) model
    lda_model = train_lda_model(X_vec, num_topics)
    
    # Step 3: Display the top words for each topic
    feature_names = vectorizer.get_feature_names_out()
    topics = display_topics(lda_model, feature_names, num_top_words)
    
    # Display the topics
    print(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.mfbz.cn/a/330654.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PLSQL 把多个字段转为json格式

PLSQL 把多个字段转为json格式 sql Select cc.bm, cc.xm, json_arrayagg(cc.hb) jgFrom (Select aa.bm, aa.xm, json_object(aa.ksbh, aa.wjmc) hbFrom (Select 001 bm, 老六 xm, 0001 ksbh, 文具盒 wjmcFrom dual tUnion AllSelect 001 bm, 老六 xm, 0002 ksbh, 毛笔 wjmcFr…

LabVIEW精确测量产品中按键力和行程

项目背景 传统的按键测试方法涉及手工操作,导致不一致和效率低下。在汽车行业中,带有实体按键的控制面板非常常见,确保一致的按键质量至关重要。制造商经常在这些组件的大规模、准确测试中遇到困难。显然,需要一个更自动化、精确…

Modbus协议学习第三篇之协议通信规则

导语 本篇博客将深入介绍Modbus协议的一些内容,主要包括通讯方式和通讯模型的介绍 Modbus通讯方式 Modbus协议是单主机、多从机的通信协议,即同一时间,总线上只能有一个主设备,但可以有一个或者多个从设备(最多好像是2…

基于springboot+vue的校园管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

贵阳贵安推进“数字活市”战略成效明显

作者:黄玉叶 近年来,贵阳贵安将数字经济确立为高质量发展的主路径之一,把推进“数字活市”作为实施主战略、实现主定位,特别是建设“数字经济发展创新区核心区”的重要抓手,从改革、发展、民生三个维度纵深推进“数字活…

未来的NAS:连接您的数字生活

未来的NAS:连接您的数字生活 引言 网络附加存储(Network Attached Storage,简称NAS)是一种通过网络连接的存储设备,用于集中存储和共享数据。传统的NAS设备通常包含一个或多个硬盘驱动器,可以通过局域网连…

数据结构和算法的部分例题(力扣)

1.数组 1.1 合并一个数组的两个有序区间 public class MargTwo {public static void main(String[] args) {int[] arr1{1,5,6,2,4,10,11};int[] arr2new int[arr1.length];marg2(arr1,0,2,3,6,arr2);}private static void marg2(int[]arr1,int iStar,int iEnd,int jStar,int j…

【机组】通用寄存器单元实验的解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《机组 | 模块单元实验》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 ​ 目录 🌺一、 实验目…

广和通AI解决方案“智”赋室外机器人迈向新天地!

大模型趋势下,行业机器人将具备更完善的交互与自主能力,逐步迈向AI 2.0时代,成为人工智能技术全面爆发的重要基础。随着行业智能化,更多机器人应用将从“室内”走向“室外”,承担更多高风险、高智能工作。复杂的室外环…

阿里云国外服务器价格表

阿里云国外服务器优惠活动「全球云服务器精选特惠」,国外服务器租用价格24元一个月起,免备案适合搭建网站,部署独立站等业务场景,阿里云服务器网aliyunfuwuqi.com分享阿里云国外服务器优惠活动: 全球云服务器精选特惠…

Linux网络引导自动安装centos7

目录 一、部署PXE远程安装服务 1. 系统装机的三种引导方式 2. pxe概述 3. 实现过程 4. 搭建过程中服务介绍 4.1 TFTP服务 4.2 vsftp:安装系统镜像文件获取方式 4.3 syslinux 4.4 DHCP服务 5. 操作过程 二、实现Kickstart无人值守安装 1. 安装Kickstart图…

Codeforce s Round 920 (Div. 3) G题 旋转矩阵,斜缀和,平移

Problem - G - Codeforces 目录 题意: 思路: 总思路: 旋转矩阵: 前缀和预处理: 平移的处理,尤其是越界的处理: 核心代码: 题意: 给你个n*m的矩阵,里…

【论文解读】用于代码处理的语言模型综述

目录 1.简要介绍 2.代码处理的语言模型的评估 3.通用语言模型 4.用于代码处理的特定语言模型 5.语言模型的代码特性 6.软件开发中的LLM 7.结论与挑战 ​​​​​​​1.简要介绍 在这项工作中,论文系统地回顾了在代码处理方面的最新进展,包括50个模…

Elasticsearch各种高级文档操作2

本文来记录下Elasticsearch各种文档操作 文章目录 初始化文档数据 初始化文档数据 在进行各种文档操作之前,我们先进行初始化文档数据的工作

【MySQL】权限控制

DCL-权限控制 查询权限 show grants for 用户名主机名;授予权限 grant 权限列表 on 数据库名.表名 to 用户名主机名;grant all on test.* to user%; %是通配符,表示任意主机。撤销权限 revoke 权限列表 on 数据库名.表名 from 用户名主机名;revoke all on test.*…

10- OpenCV:基本阈值操作(Threshold)

目录 1、图像阈值 2、阈值类型 3、代码演示 1、图像阈值 (1)图像阈值(threshold)含义:是将图像中的像素值划分为不同类别的一种处理方法。通过设定一个特定的阈值,将像素值与阈值进行比较,根…

【代码随想录07】344.反转字符串 541. 反转字符串II 05.替换空格 151.翻转字符串里的单词 55. 右旋转字符串

目录 344. 反转字符串题目描述做题思路参考代码 541. 反转字符串 II题目描述参考代码 05. 替换数字题目描述参考代码 151. 反转字符串中的单词题目描述参考代码 55. 右旋转字符串题目描述参考代码 344. 反转字符串 题目描述 编写一个函数,其作用是将输入的字符串反…

指向未来: 量子纠缠的本质是一个指针

指向未来: 量子纠缠的本质是一个指针 概述基本概念理解量子纠缠PythonJavaC 理解波粒二象性PythonJavaC 理解量子隧穿理解宇宙常量PythonJavaC 概述 量子纠缠 (Quantum Entanglement) 是量子系统重两个或多个粒子间的一种特殊连接, 这种连接使得即使相隔很远, 这些粒子的状态也…

Git怎么将文件夹上传至github,全过程

小白建议参考github文件上传全流程-新手入门系列(超详细!!!) 中间可能会有报错 $ ssh -T gitgithub.com ssh: connect to host github.com port 22: Connection timed out 这时,参考,如何解决&a…

视频美颜SDK技术解析与技术对比

当下,各类应用和服务纷纷采用视频美颜SDK,以提供更加令人满意的视觉效果。本文将深入探讨视频美颜SDK的技术原理,同时对比不同SDK的特性,为开发者和决策者提供全面的技术参考。 一、技术原理解析 1.图像处理基础 视频美颜SDK基…
最新文章