欢迎回到我们的 NLP 博客系列!当我们进入第四部分时,焦点转移到机器学习 (ML) 和自然语言处理 (NLP) 之间的动态相互作用上。在本章中,我们将深入探讨 ML 和 NLP 的迷人协同作用,解开理论概念和实际应用。
AI、ML 和 NLP 虽然经常互换使用,但具有特定的作用。人工智能模拟人类智能,而NLP允许机器理解和解释语言。机器学习在人工智能的保护伞下,实现了自主学习和改进。这种协同作用使 NLP 任务自动化,提高了准确性和效率。
以下是本章中您可以期待的内容:
在机器学习领域,有两种基本范式:监督学习和无监督学习。 监督学习涉及在标记数据集上训练模型,其中算法学习将输入数据映射到相应的输出标签。另一方面,无监督学习处理未标记的数据,旨在发现信息中隐藏的模式或分组。
对于自然语言处理 (NLP) 来说,机器学习就像语言侦探一样——帮助我们理解单词和短语。想象一下,教计算机理解电影评论是在竖起大拇指还是竖起大拇指。这就是我们在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]
项目步骤:
建立IMDB情感分析模型不仅可以深入了解电影评论中表达的情感,还可以作为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
项目步骤:
冒险进行研究文章的主题建模项目不仅可以增强我们对文章内容的理解,还可以强调NLP中无监督学习的灵活性。该项目提供了从文本矢量化到揭示潜在主题的顺序过程的实际探索,为进入自然语言处理这一有趣领域的爱好者提供了宝贵的见解。
总之,我们对机器学习(ML)和自然语言处理(NLP)的探索已经阐明了它们的不同作用。ML 作为更广泛的 AI 的一个子集,为自主学习提供动力,而 NLP 则解释和理解语言。
通过监督学习,我们解开了情感分析,从IMDB评论中提取情感。过渡到无监督学习,主题建模揭示了研究文章中隐藏的主题。
最后,我们的旅程延伸到 NLP 的深度学习基础。请继续关注我们对神经网络、递归神经网络 (RNN) 和长短期记忆 (LSTM) 网络的探索——这是我们正在进行的 NLP 与 ML 探索的激动人心的篇章。