赞
踩
欢迎回到我们的 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中无监督学习的灵活性。该项目提供了从文本矢量化到揭示潜在主题的顺序过程的实际探索,为进入自然语言处理这一有趣领域的爱好者提供了宝贵的见解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。