文章目錄
- 前言
- 環境配置
- 一、MATLAB NLP 工具箱概述
- 二、核心功能與 API
- 1. 文本數據準備
- 2. 特征提取
- 3. 文本分類(傳統機器學習)
- 4. 深度學習文本分類(LSTM)
- 三、實戰案例:情感分析
- 四、高級應用
- 1. 命名實體識別(NER)
- 2. 主題模型(LDA)
前言
以下是 MATLAB 自然語言處理 (NLP) 的入門教程,涵蓋基礎概念、核心功能。
環境配置
MATLAB下載安裝教程:https://blog.csdn.net/tyatyatya/article/details/147879353
MATLAB下載地址鏈接:https://pan.quark.cn/s/364584a880f7
一、MATLAB NLP 工具箱概述
MATLAB 提供了完整的 NLP 工具鏈,支持文本處理、特征提取、分類和生成等任務:
- 文本預處理:分詞、停用詞過濾、詞干提取、詞性標注。
- 特征工程:詞袋模型 (BOW)、TF-IDF、詞嵌入 (Word2Vec、GloVe)。
- 分類與聚類:支持向量機、深度學習網絡 (CNN、LSTM)。
- 高級應用:情感分析、命名實體識別 (NER)、主題模型 (LDA)。
- 預訓練模型:BERT、GPT 等,支持遷移學習。
二、核心功能與 API
1. 文本數據準備
% 創建文本數據存儲
documents = importdata('text_data.txt');
tbl = table(documents, 'VariableNames', {'Text'});% 創建詞袋模型
bag = bagOfWords(tbl.Text);% 移除停用詞
cleanBag = removeStopWords(bag);% 詞干提取
stemmedBag = stemWords(cleanBag);
2. 特征提取
% TF-IDF特征
tfidf = tfidf(bag);% 加載預訓練詞向量
embedding = wordEmbedding('glove-100d');% 文本向量化
docVectors = transform(embedding, tbl.Text);
3. 文本分類(傳統機器學習)
% 加載IMDB影評數據集
tbl = readtable('imdb_reviews.csv');% 創建詞袋模型
bag = bagOfWords(tbl.Review);% 劃分訓練集和測試集
cv = cvpartition(height(tbl), 'HoldOut', 0.2);
idxTrain = training(cv);
idxTest = test(cv);% 訓練分類器
classifier = trainDocumentClassifier(bag(idxTrain), tbl.Sentiment(idxTrain), ...'Classifier', 'svm', ...'TextRepresentation', 'tfidf');% 評估性能
YPred = classify(classifier, bag(idxTest));
accuracy = mean(YPred == tbl.Sentiment(idxTest));
fprintf('分類準確率: %.2f%%\n', accuracy*100);
4. 深度學習文本分類(LSTM)
% 加載數據
tbl = readtable('twitter_sentiment.csv');% 創建詞向量
embedding = wordEmbedding(tbl.Text, 'NumDimensions', 100);% 準備序列數據
maxSequenceLength = 100;
tokenizedData = tokenizedDocument(tbl.Text);
sequences = paddedSequence(tokenizedData, maxSequenceLength);% 創建LSTM網絡
layers = [sequenceInputLayer(maxSequenceLength)embeddingLayer(vocabSize(embedding), 100, 'Embedding', embedding)lstmLayer(64, 'OutputMode', 'last')fullyConnectedLayer(3) % 3分類問題softmaxLayerclassificationLayer
];% 訓練網絡
options = trainingOptions('adam', ...'MaxEpochs', 10, ...'MiniBatchSize', 64, ...'ValidationData', {sequences(idxTest), tbl.Sentiment(idxTest)}, ...'Verbose', false, ...'Plots', 'training-progress');net = trainNetwork(sequences(idxTrain), tbl.Sentiment(idxTrain), layers, options);
三、實戰案例:情感分析
% 加載Twitter情感數據集
tbl = readtable('twitter_sentiment.csv');% 數據預處理
documents = tokenizedDocument(tbl.Text);
documents = removeStopWords(documents);
documents = stemWords(documents);% 創建詞袋模型
bag = bagOfWords(documents);% 特征提取
tfidf = tfidf(bag);% 劃分數據集
cv = cvpartition(height(tbl), 'KFold', 5);% 訓練并評估模型
accuracies = zeros(cv.NumTestSets, 1);
for i = 1:cv.NumTestSetsidxTrain = training(cv, i);idxTest = test(cv, i);% 訓練SVM分類器classifier = fitcsvm(tfidf(idxTrain,:), tbl.Sentiment(idxTrain));% 預測YPred = predict(classifier, tfidf(idxTest,:));% 計算準確率accuracies(i) = mean(YPred == tbl.Sentiment(idxTest));
end% 輸出平均準確率
fprintf('交叉驗證平均準確率: %.2f%%\n', mean(accuracies)*100);% 可視化混淆矩陣
cm = confusionmat(tbl.Sentiment(idxTest), YPred);
figure
imagesc(cm)
colorbar
xticklabels({'負面', '中性', '正面'})
yticklabels({'負面', '中性', '正面'})
title('情感分析混淆矩陣')
四、高級應用
1. 命名實體識別(NER)
% 加載預訓練NER模型
net = nerNetwork('english');% 示例文本
text = "Apple is looking at buying U.K. startup for $1 billion";% 識別實體
entities = recognizeNamedEntities(net, text);% 輸出結果
disp(entities);
2. 主題模型(LDA)
% 加載新聞數據集
tbl = readtable('news_articles.csv');% 創建詞袋模型
bag = bagOfWords(tbl.Text);% 訓練LDA模型
numTopics = 5;
ldaModel = trainLDA(bag, numTopics);% 顯示每個主題的關鍵詞
topicWords = topicWords(ldaModel, 10); % 每個主題10個關鍵詞
for i = 1:numTopicsfprintf('主題 %d: %s\n', i, join(topicWords(:,i), ', '));
end