【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

评论已关闭

推荐阅读

Vue中使用mind-map实现在线思维导图
2024年08月04日
VUE
Web前端最全Vue实现免密登录跳转的方式_vue怎么样不登录返回首页,最强技术实现
2024年08月04日
VUE
vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)
2024年08月04日
VUE
Vue-颜色选择器实现方案——>Vue-Color( 实战*1+ Demo*7)
2024年08月04日
VUE
Vue项目卡顿慢加载?这些优化技巧告诉你!_vue数据多渲染卡顿
2024年08月04日
VUE
vue中的keep-alive详解与应用场景
2024年08月04日
VUE
Vue、React实现excel导出功能(三种实现方式保姆级讲解)
2024年08月04日
vue-office/docx插件实现docx文件预览
2024年08月04日
VUE
java调用js文件的两种方法(支持V8引擎)
2024年08月04日
JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js
2024年08月04日
两周从爬虫小白变大神 _yjs_js_security_passport
2024年08月04日
JS笔记(对象、函数、数组)
2024年08月04日
Markdown.js:强大的纯JavaScript Markdown解析器
2024年08月04日
Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。
2024年08月04日
vue 父组件怎么获取子组件里面的data数据
2024年08月04日
VUE
个人开发实现AI套壳网站快速搭建(Vue+elementUI+SpringBoot)
2024年08月04日
el-table 表格封装并改造实现单元格可编辑
2024年08月04日
none
nodejs环境下创建vue项目、SSH密钥登陆!!!
2024年08月04日
vue+quill+element-ui实现视频、图片上传及缩放保姆级教程,轻松使用富文本
2024年08月04日
【three.js】22. Imported Models导入模型
2024年08月04日