Deeplearning for NLP (简介)

本文源自17年牛津大学的NLP课程,介绍了深度学习如何应用于NLP任务,涵盖词的表示、文本分类、文本生成等。讨论了词典中的OOV问题,强调了词向量(如Word2vec)的重要性。还探讨了动态计算图和静态计算图在深度学习框架中的区别,推荐NLP初学者学习PyTorch。
部署运行你感兴趣的模型镜像

开篇

过目就忘说的可能就是在下了,所以现在所有的学习内容我都会写成博客,不成博客的就是过目就忘啦。这是系列不算挖坑,前面写了几篇Tensorflow的文章,词向量这篇一直处于难产中,拖延症比较严重。争取这两天能够写出来。下面开始我们的正题,这篇博客的内容主要来源于17年牛津大学的NLP课程,这边放出课程oxford-cs-deepnlp的github地址和网易云课堂课程的视频链接,夸一下网易,很有担当的课程,算是给了我们这些听力一般的学生一条求学之路,虽然它拒了我加入申请。
下面开始我们的正题,简单说一下这门课程的主要内容,课程是以各种NLP任务为主要单元来呈现的,而我这篇博客主要来源于第二周的课程,希望能够大家一个轮廓,知道DeepLearning可以做哪些NLP任务,这些任务我后续都会TensorFlow去实现,这里不给自己挖坑了,不定期更新。本课程基本涵盖了大部分的热门NLP任务,对初入NLP领域的人有一个很好的引导作用,但是理论可能就不会太过深究,毕竟一节课也就两个小时,要把一个子领域的任务讲清楚已近相当难得了。我可能不太会去使用课程中的数据集去完成相应的任务,但是任务内容肯定是一致的。

Deeplearning for NLP

这部分主要过一下课程里面的基本任务,细节不多提。首先是词的表示,这是NLP所有任务的基础,这边贴出课程ppt上的内容,看看我们在实践中会遇到哪些问题,这些以后都会一一给出解决方案。

这边稍微提一下什么是oov,全称叫做out of vocabulary,就是字面上的意思,超出词典的单词,为什么会出现这样的情况呢,看过我之前博客的同学,会发现,我们在生成词典的时候是会考虑词频高的单词的,这样的话有些词频低的词我们就不会放入词典里面,这样做的原因是我们的计算资源确实有限,不可能覆盖到全部的单词,但是这样确实会给很多NLP任务带来很多的问题,举一个简单的例子,比如我们要做文本生成的任务,语料中有很多的人名,但是他们出现的频率很一般,我们没有考虑把他们放到词典里面,这样我们生成文本的时候去词典里面去搜索单词的时候就不会有,那样我们生成的文本就不会这些人名(文本的生成是依赖相应的词典构建的,后面我们会多次提到相应的问题)。
回到词的表示,现在最流行的就是使用下上文的一些语义来表示我们的词向量,也就是我们熟知的Word2vec。不多提,会有博客专门讲它的实现。

这边列出了常见的任务,包括文本分类,文本生成,相信你看完上图的分类会很清楚他们各自都是干什么的。

更加高级的就是文本理解,不幸我做的基本任务就是文本理解里面的,为自己默哀三分钟。

数据集

课程中的数据集,这里不多讲,大家看ppt里面的简介就知道了,很清楚

一个数据集就足以诠释课程中全部的任务

深度学习框架

这边就讲一下静态计算图和动态计算图的区别。

依据采用动态计算或是静态计算的不同,可以将这些众多的深度学习框架划分成两大阵营,当然也有些框架同时具有动态计算和静态计算两种机制(比如 MxNet 和最新的 TensorFlow)。动态计算意味着程序将按照我们编写命令的顺序进行执行。这种机制将使得调试更加容易,并且也使得我们将大脑中的想法转化为实际代码变得更加容易。而静态计算则意味着程序在编译执行时将先生成神经网络的结构,然后再执行相应操作。从理论上讲,静态计算这样的机制允许编译器进行更大程度的优化,但是这也意味着你所期望的程序与编译器实际执行之间存在着更多的代沟。这也意味着,代码中的错误将更加难以发现(比如,如果计算图的结构出现问题,你可能只有在代码执行到相应操作的时候才能发现它)。尽管理论上而言,静态计算图比动态计算图具有更好的性能,但是在实践中我们经常发现并不是这样的。

老实说动态计算图bug会更加容易调,比较适合nlp,同时代码也更加容易理解,但是无奈的是,我已经入坑tf,大家有机会还是去学习一下pytorch。

ps:学习是带有仪式感的活动,大家加油。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### 深度学习在智能新闻分类中的应用 深度学习技术已经在多个领域取得了显著的成果,包括自然语言处理(NLP)、计算机视觉和语音识别等。在新闻分类任务中,深度学习方法因其强大的特征提取能力而被广泛采用。以下是一些常用的方法和技术,以及实现这些方法的教程和代码示例。 #### 1. 数据预处理 在进行新闻分类之前,数据预处理是一个关键步骤。这包括文本清洗、分词、去除停用词等操作。此外,还需要将文本转换为数值形式以便输入到深度学习模型中。常用的文本表示方法包括词袋模型(Bag of Words, BoW)、TF-IDF 和词嵌入(Word Embedding)[^1]。 ```python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer # 加载数据集 data = pd.read_csv('news_dataset.csv') # 分割数据集 X_train, X_test, y_train, y_test = train_test_split(data['text'], data['label'], test_size=0.2, random_state=42) # 使用TF-IDF向量化文本 vectorizer = TfidfVectorizer(max_features=5000) X_train_tfidf = vectorizer.fit_transform(X_train) X_test_tfidf = vectorizer.transform(X_test) ``` #### 2. 模型选择 对于新闻分类任务,常用的深度学习模型包括卷积神经网络(CNN)、循环神经网络(RNN)及其变体如长短期记忆网络(LSTM)和门控循环单元(GRU)。此外,近年来基于Transformer架构的模型如BERT也表现出了优异的性能[^2]。 - **卷积神经网络(CNN)**:适用于捕捉局部特征。 - **循环神经网络(RNN)**:擅长处理序列数据。 - **Transformer模型(如BERT)**:能够更好地理解上下文信息。 ```python from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Embedding, Conv1D, GlobalMaxPooling1D, Dense # 构建CNN模型 model = Sequential() model.add(Embedding(input_dim=5000, output_dim=128, input_length=500)) model.add(Conv1D(filters=128, kernel_size=5, activation='relu')) model.add(GlobalMaxPooling1D()) model.add(Dense(64, activation='relu')) model.add(Dense(10, activation='softmax')) model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.summary() ``` #### 3. 模型训练与评估 在完成数据预处理和模型构建后,可以开始训练模型并评估其性能。通常使用准确率(Accuracy)、精确率(Precision)、召回率(Recall)和F1分数等指标来衡量模型的表现[^3]。 ```python # 训练模型 model.fit(X_train_tfidf.toarray(), y_train, epochs=10, batch_size=32, validation_data=(X_test_tfidf.toarray(), y_test)) # 评估模型 loss, accuracy = model.evaluate(X_test_tfidf.toarray(), y_test) print(f'Test Accuracy: {accuracy:.4f}') ``` #### 4. 进一步优化 为了提高模型的性能,可以尝试以下几种方法: - 调整超参数,例如学习率、批量大小和隐藏层大小等。 - 使用更复杂的模型结构,如堆叠多层RNN或结合CNN和RNN。 - 引入注意力机制以增强模型对重要特征的关注度。 - 利用迁移学习,通过预训练的模型(如BERT)进行微调以适应特定任务。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值