【NLP】特征提取: 广泛指南和 3 个操作教程 [Python、CNN、BERT]

在自然语言处理(NLP)中,特征提取是将原始文本数据转换为可用于机器学习模型的数值特征的过程。以下是使用Python进行特征提取的几种常见方法:

  1. 使用n-gram:



from nltk import ngrams
from nltk.tokenize import word_tokenize
 
text = "自然语言处理是人工智能的重要部分"
tokens = word_tokenize(text)
bigrams = ngrams(tokens, 2)
 
for bigram in bigrams:
    print(' '.join(bigram))
  1. 使用Tf-Idf:



from sklearn.feature_extraction.text import TfidfVectorizer
 
corpus = ["我爱编程", "我爱音乐", "编程乐趣"]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
terms = vectorizer.get_feature_names_out()
 
for i in range(len(X)):
    print("Index %d: %s" % (i, " ".join([terms[ind] for ind in X[i].indices])))
  1. 使用CNN(卷积神经网络)进行文本分类:



import numpy as np
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.layers import Conv1D, MaxPooling1D, Embedding
from keras.models import Sequential
 
# 示例数据
texts = ["我爱编程", "我爱音乐", "编程乐趣"]
num_words = 10000
 
# 文本处理
tokenizer = Tokenizer(num_words=num_words)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
 
# 转换为one-hot编码的矩阵
one_hot_results = tokenizer.texts_to_matrix(texts, mode='binary')
 
# 使用CNN建立模型
model = Sequential()
model.add(Embedding(num_words, 10, input_length=None))
model.add(Conv1D(filters=64, kernel_size=5, padding='valid', activation='relu', strides=1))
model.add(MaxPooling1D(pool_size=2))
model.add(Conv1D(filters=32, kernel_size=3, padding='valid', activation='relu', strides=1))
model.add(MaxPooling1D(pool_size=2))
model.add(Conv1D(filters=16, kernel_size=3, padding='valid', activation='relu', strides=1))
model.add(GlobalMaxPooling1D())
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
 
# 模型训练
model.fit(one_hot_results, np.array(labels), epochs=10, batch_size=32)
  1. 使用预训练的BERT模型进行特征提取:



from transformers import BertTokenizer, BertModel
import torch
 
# 加载预训练模型和分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
 
# 示例文本
text = "自然语言处理是人工智能的重要部分"
 
# 文本处理
encoded_input = tokenizer(text, return_tensors='pt', padding=True)
 
# 获取特征
with torch.no_grad():
    last_hidden_states = model(**encoded_input)
    # 使用最后一个隐藏状态作为文本的特征表示
最后修改于:2024年08月17日 20:13

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日