一、說明
????????歡迎回到我們的 NLP 博客系列!當我們進入第四部分時,焦點轉(zhuǎn)移到機器學習 (ML) 和自然語言處理 (NLP) 之間的動態(tài)相互作用上。在本章中,我們將深入探討 ML 和 NLP 的迷人協(xié)同作用,解開理論概念和實際應(yīng)用。
????????AI、ML 和 NLP 雖然經(jīng)?;Q使用,但具有特定的作用。人工智能模擬人類智能,而NLP允許機器理解和解釋語言。機器學習在人工智能的保護傘下,實現(xiàn)了自主學習和改進。這種協(xié)同作用使 NLP 任務(wù)自動化,提高了準確性和效率。
????????以下是本章中您可以期待的內(nèi)容:
- 了解 NLP 中的監(jiān)督學習和無監(jiān)督學習:?本節(jié)將闡明監(jiān)督學習和無監(jiān)督學習在 NLP 背景下的核心區(qū)別和獨特應(yīng)用。通過了解這些基本的 ML 方法,您將深入了解它們?nèi)绾悟?qū)動各種 NLP 任務(wù)和應(yīng)用程序。
- 情感分析:(監(jiān)督)ML在NLP中的實際應(yīng)用:深入研究情感分析的世界,其中監(jiān)督式 ML 技術(shù)用于解釋和分類文本數(shù)據(jù)中的情感。本節(jié)將展示如何訓練和應(yīng)用監(jiān)督學習模型以從文本中提取有意義的見解,強調(diào)它們在 NLP 中的實際效用。
- 主題建模:(無監(jiān)督)ML在NLP中的實際應(yīng)用:探索主題建模,這是一種無監(jiān)督 ML 應(yīng)用程序,可發(fā)現(xiàn)大型文本語料庫中隱藏的主題結(jié)構(gòu)。本部分將演示無監(jiān)督學習算法如何檢測模式和主題,為了解大量文本數(shù)據(jù)集中存在的潛在主題提供一個窗口。
二、了解 NLP 中的監(jiān)督學習和無監(jiān)督學習
????????在機器學習領(lǐng)域,有兩種基本范式:監(jiān)督學習和無監(jiān)督學習。?監(jiān)督學習涉及在標記數(shù)據(jù)集上訓練模型,其中算法學習將輸入數(shù)據(jù)映射到相應(yīng)的輸出標簽。另一方面,無監(jiān)督學習處理未標記的數(shù)據(jù),旨在發(fā)現(xiàn)信息中隱藏的模式或分組。
????????對于自然語言處理 (NLP) 來說,機器學習就像語言偵探一樣——幫助我們理解單詞和短語。想象一下,教計算機理解電影評論是在豎起大拇指還是豎起大拇指。這就是我們在NLP中對監(jiān)督學習所做的。另一方面,無監(jiān)督學習就像一個熟練的探索者,幫助我們在一堆沒有任何標簽的文本中找到隱藏的模式??梢园阉胂蟪稍谝欢盐恼轮薪沂局饕黝}。
????????讓我們直接進入有趣的區(qū)域,從情感分析的快感開始,然后進入主題建模的迷人世界。準備好冒險了嗎?讓編碼奇跡開始吧!?
三、情感分析:(監(jiān)督)ML在NLP中的實際應(yīng)用
????????ML 在 NLP 中最普遍和最實際的應(yīng)用之一是情感分析。此任務(wù)涉及確定一段文本中表達的情緒,無論是積極的、消極的還是中性的。想象一下,當大規(guī)模自動分析情緒時,可以從客戶評論、社交媒體帖子或產(chǎn)品反饋中收集到豐富的見解。
????????IMDB評論:使用代碼進行情感分析
????????為了將這些概念變?yōu)楝F(xiàn)實,讓我們開始一個現(xiàn)實世界的項目——為 IMDB 評論構(gòu)建情感分析模型。在此示例中,我們將使用流行的 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 數(shù)據(jù)集:我們首先加載我們的 IMDb 數(shù)據(jù)集,該數(shù)據(jù)集由電影評論和相應(yīng)的情感標簽(正面或負面)組成。
- 數(shù)據(jù)預處理:?然后,通過使用 scikit-learn 庫將數(shù)據(jù)拆分為訓練集和測試集,對數(shù)據(jù)進行預處理。這一步對于訓練和評估模型的性能至關(guān)重要。
- 文本矢量化:使用 scikit-learn 的 CountVectorizer 將電影評論文本轉(zhuǎn)換為數(shù)字特征。此過程將原始文本數(shù)據(jù)轉(zhuǎn)換為適合機器學習算法的格式。
- 訓練模型:我們使用 scikit-learn 中的 MultinomialNB 類訓練樸素貝葉斯分類器,這是文本分類任務(wù)的常用選擇。此步驟涉及教導模型識別矢量化文本數(shù)據(jù)中的模式。
- 模型評估:在測試集上對經(jīng)過訓練的模型進行評估,以評估其準確性和性能。我們使用準確性分數(shù)和分類報告等指標來衡量模型對看不見的數(shù)據(jù)的泛化程度。
- 使用隨機文本進行測試:為了證明該模型在現(xiàn)實世界中的適用性,我們用隨機的電影評論文本對其進行了測試。這展示了我們的情感分析模型在訓練數(shù)據(jù)之外進行預測的靈活性。
????????建立IMDB情感分析模型不僅可以深入了解電影評論中表達的情感,還可以作為NLP和文本分類的極好介紹。該項目演示了準備數(shù)據(jù)、訓練模型和評估其性能的分步過程,為那些涉足令人興奮的自然語言處理領(lǐng)域的人們提供了一個實際示例。
四、主題建模:(無監(jiān)督)ML在NLP中的實際應(yīng)用
????????在自然語言處理 (NLP) 中的無監(jiān)督學習領(lǐng)域,主題建模仍然是一個迷人的應(yīng)用程序。這種技術(shù)使我們能夠在文本文檔集合中挖掘潛在的主題,在不依賴預定義標簽的情況下揭示潛在的主題。
????????使用代碼對研究文章進行主題建模
????????現(xiàn)在,讓我們深入研究我們的第二個 NLP 項目——為研究文章制作主題建模工作。在本例中,我們將采用無監(jiān)督學習技術(shù)來提取非結(jié)構(gòu)化文本中的隱藏對話,重點關(guān)注“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
????????項目步驟:
- 加載研究文章數(shù)據(jù)集:首先加載包含研究文章的數(shù)據(jù)集,重點關(guān)注“TITLE”和“ABSTRACT”列。
- 使用 TfidfVectorizer 進行文本矢量化:使用 TfidfVectorizer 將研究文章文本轉(zhuǎn)換為數(shù)字特征,同時考慮每個文檔中單詞的重要性。
- 訓練潛在狄利克雷分配 (LDA) 模型:使用 LDA 算法來揭示研究文章中隱藏的主題。LDA 假定每個文檔都是主題的混合體,并且每個主題都是單詞的混合體(有關(guān)更多信息,請訪問鏈接)。
- 顯示每個主題的熱門詞:通過展示與每個發(fā)現(xiàn)的主題相關(guān)的熱門詞來可視化結(jié)果。
????????冒險進行研究文章的主題建模項目不僅可以增強我們對文章內(nèi)容的理解,還可以強調(diào)NLP中無監(jiān)督學習的靈活性。該項目提供了從文本矢量化到揭示潛在主題的順序過程的實際探索,為進入自然語言處理這一有趣領(lǐng)域的愛好者提供了寶貴的見解。
五、結(jié)論
????????總之,我們對機器學習(ML)和自然語言處理(NLP)的探索已經(jīng)闡明了它們的不同作用。ML 作為更廣泛的 AI 的一個子集,為自主學習提供動力,而 NLP 則解釋和理解語言。
????????通過監(jiān)督學習,我們解開了情感分析,從IMDB評論中提取情感。過渡到無監(jiān)督學習,主題建模揭示了研究文章中隱藏的主題。文章來源:http://www.zghlxwxcb.cn/news/detail-807047.html
????????最后,我們的旅程延伸到 NLP 的深度學習基礎(chǔ)。請繼續(xù)關(guān)注我們對神經(jīng)網(wǎng)絡(luò)、遞歸神經(jīng)網(wǎng)絡(luò) (RNN) 和長短期記憶 (LSTM) 網(wǎng)絡(luò)的探索——這是我們正在進行的 NLP 與 ML 探索的激動人心的篇章。文章來源地址http://www.zghlxwxcb.cn/news/detail-807047.html
到了這里,關(guān)于【 文本到上下文 #4】NLP 與 ML的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!