目录
- 一、NLP 基础
- 二、文本预处理
- 2.1、文本清洗
- 2.2、分词
- 2.3、去除停用词
- 2.4、词干提取
- 2.5、词形还原
- 2.6、词性标注
- 2.7、命名实体识别
- 三、特征提取
- 3.1、词袋模型(Bag of Words,BoW)
- 3.2、词嵌入(Word Embeddings)
- 四、模型训练
- 4.1、评估与应用
本文来源:极客时间vip课程笔记
注:后续技术类文章会同步到我的公众号里,搜索公众号小志的博客感兴趣的读友可以去找来看看。
一、NLP 基础
NLP是人工智能的一个重要分支,研究的目的是让计算机能够理解、解释和生成人类语言。NLP 结合了计算机、人工智能和语言学等多个学科的方法,尽可能缩小人类语言与计算机理解之间的差距。一般来说,包含四个步骤。
1、文本预处理:将原始文本转换成易于机器理解的格式。包括分词(将文本分解成单词或短语)、去除停用词、词干提取、词性标注等。
2、特征提取:从处理过的文本中提取特征,以便用于机器学习模型。这通常涉及将文本转换为数值形式,如词袋模型或词嵌入 Word Embedding,也就是向量化。
3、模型训练:使用提取的特征和相应的机器学习算法来训练模型,可能是分类器、回归模型、聚类算法等。
4、评估与应用:评估模型的性能,并在实际应用中使用模型来解释、生成或翻译文本。
NLP 的应用场景非常广泛,搜索引擎、语音转换、文本翻译、系统问答等几乎覆盖我们生活的方方面面。下面我们一步一步去学习一下相关的技术,首先就是文本预处理。
二、文本预处理
- 文本预处理是 NLP 中的一项基础且关键的步骤,目的是将原始文本转换成易于机器理解和处理的格式。这一步骤通常涉及多个不同的任务,具体包括以下几个步骤。
2.1、文本清洗
文本清洗主要包括去除噪声及标准化文本等。去除噪声是指清除文本中对分析无关紧要的部分,比如 HTML 标签、标点符号、特殊字符等。你可以参考我给出的示例代码。
importredefremove_noise(text):# 去除HTML标签 text=re.sub(r'<.*?>','',text)# 去除标点符号和特殊字符 text=re.sub(r'[^\w\s]','',text)returntext text="<p>Hello, World! Here's a <a href='https://example.com'>link</a>.</p>"clean_text=remove_noise(text)print(clean_text)# 全部标准化成小写 tokens_normalized=[token.lower()fortoken in clean_text]print(tokens_normalized)输出:
HelloWorldHeresa link['h','e','l','l','o',' ','w','o','r','l','d',' ','h','e','r','e','s',' ','a',' ','l','i','n','k']
2.2、分词
将文本分解成词汇、句子等。
from nltk.tokenizeimportword_tokenizetext="Natural language processing (NLP) is a field of computer science."tokens=word_tokenize(text)print(tokens)输出:
['Natural', 'language', 'processing', '(', 'NLP', ')', 'is', 'a', 'field', 'of', 'computer', 'science', '.']
2.3、去除停用词
停用词是文本中频繁出现但对分析意义不大的词,如 is、and 等。去除它们可以提高处理效率和分析效果,同时还可以使数据集变小。
from nltk.corpusimportstopwordsimportredefremove_noise(text):# 去除HTML标签 text=re.sub(r'<.*?>','',text)# 去除标点符号和特殊字符 text=re.sub(r'[^\w\s]','',text)returntext #从停用词库取出英文相关的停用词,放到 set 集合中, stop_words=set(stopwords.words('english'))print(stop_words)text="<p>Hello, World! Here's a <a href='https://example.com'>link</a>.</p>"clean_text=remove_noise(text)print(clean_text)tokens_normalized=[token.lower()fortoken in clean_text]print(tokens_normalized)filtered_tokens=[wordforword in tokens_normalizedifnot word in stop_words]print(filtered_tokens)输出:
{"you'd",'just','shouldn', 'here', 'as', 'mightn',"wasn't",'him','have','you','an','not','mustn','ma','o','myself','what','was',"shouldn't",'during','wouldn','no',"mightn't",