自然语言处理项目:语言检测模型

在理论学习的基础上,实践项目是提升技能的关键。特别是在自然语言处理NLP)领域,通过处理特定领域的项目,如语言检测,可以探索广泛的应用场景和问题陈述。本文将引导了解一个令人兴奋的项目——使用自然语言处理构建的语言检测模型,这是一个机器学习应用的实际案例。

数据集介绍

使用的是“语言检测数据集”,包含了17种不同语言的文本信息。这些语言包括英语、葡萄牙语、法语、希腊语、荷兰语、西班牙语、日语、俄语、丹麦语、意大利语、土耳其语、瑞典语、阿拉伯语、马拉雅拉姆语、印地语、泰米尔语和泰卢固语。目标是创建一个模型,能够预测给定文本的语言。这种预测系统在人工智能应用和计算语言学中非常广泛,它们被用于手机、笔记本电脑等电子设备中的机器翻译,也用于机器人和多语言文档的跟踪识别。NLP领域仍然是研究者活跃的领域之一。

项目实施

首先,将导入所有必需的库。

import pandas as pd import numpy as np import re import seaborn as sns import matplotlib.pyplot as plt import warnings warnings.simplefilter("ignore")

接下来,将导入语言检测数据集。

data = pd.read_csv("Language Detection.csv") print(data.head(10))

如前所述,该数据集包含了17种不同语言的文本信息。让计算每种语言的值计数。

data["Language"].value_counts()

输出结果如下:

English 1385 French 1014 Spanish 819 Portugese 739 Italian 698 Russian 692 Sweedish 676 Malayalam 594 Dutch 546 Arabic 536 Turkish 474 German 470 Tamil 469 Danish 428 Kannada 369 Greek 365 Hindi 63 Name: Language, dtype: int64

分离独立和依赖特征

现在可以分离依赖和独立变量,这里的文本数据是独立变量,而语言名称是依赖变量。

X = data["Text"] y = data["Language"]

标签编码

输出变量——语言名称是一个分类变量。为了训练模型,需要将其转换为数值形式,因此对输出变量进行标签编码。在这个过程中,导入了sklearn中的LabelEncoder。

from sklearn.preprocessing import LabelEncoder le = LabelEncoder() y = le.fit_transform(y)

文本预处理

这个数据集是通过抓取维基百科创建的,因此它包含许多不需要的符号和数字,这将影响模型的质量。因此,应该执行文本预处理技术。

data_list = [] for text in X: text = re.sub(r'[!@#$(),n"%^*?:;~`0-9]', ' ', text) text = re.sub(r'[[]]', ' ', text) text = text.lower() data_list.append(text)

词袋模型

众所周知,不仅输出特征,输入特征也应该以数值形式表示。因此,通过创建词袋模型将文本转换为数值形式,使用CountVectorizer。

from sklearn.feature_extraction.text import CountVectorizer cv = CountVectorizer() X = cv.fit_transform(data_list).toarray()

训练测试拆分

已经预处理了输入和输出变量。下一步是创建训练集以训练模型,以及测试集以评估模型。使用train_test_split进行这个过程。

from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.20)

模型训练和预测

几乎到了模型创建的部分。使用naive_bayes算法来创建模型。然后使用训练集来训练模型。

from sklearn.naive_bayes import MultinomialNB model = MultinomialNB() model.fit(x_train, y_train)

已经使用训练集训练了模型。现在让预测测试集的输出。

y_pred = model.predict(x_test)

模型评估

现在可以评估模型。

from sklearn.metrics import accuracy_score, confusion_matrix, classification_report ac = accuracy_score(y_test, y_pred) cm = confusion_matrix(y_test, y_pred)

打印准确率:

print("Accuracy is :",ac)

模型的准确率为0.97,这是非常好的,模型表现良好。现在让使用seaborn热图绘制混淆矩阵。

plt.figure(figsize=(15,10)) sns.heatmap(cm, annot = True) plt.show()

更多数据的预测

现在让使用不同语言的文本测试模型预测。

def predict(text): x = cv.transform([text]).toarray() # 将文本转换为词袋模型(向量) lang = model.predict(x) # 预测语言 lang = le.inverse_transform(lang) # 查找与预测值对应的语言 print("The language is in",lang[0]) # 打印语言

如所见,模型所做的预测非常准确。可以使用其他不同语言进行测试。

import pandas as pd import numpy as np import re import seaborn as sns import matplotlib.pyplot as plt import warnings warnings.simplefilter("ignore") # 加载数据集 data = pd.read_csv("Language Detection.csv") # 每种语言的值计数 data["Language"].value_counts() # 分离独立和依赖特征 X = data["Text"] y = data["Language"] # 将分类变量转换为数值 from sklearn.preprocessing import LabelEncoder le = LabelEncoder() y = le.fit_transform(y) # 创建一个列表,用于追加预处理后的文本 data_list = [] # 遍历所有文本 for text in X: text = re.sub(r'[!@#$(),n"%^*?:;~`0-9]', ' ', text) text = re.sub(r'[[]]', ' ', text) text = text.lower() data_list.append(text) # 使用CountVectorizer创建词袋模型 from sklearn.feature_extraction.text import CountVectorizer cv = CountVectorizer() X = cv.fit_transform(data_list).toarray() # 训练测试拆分 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.20) # 模型创建和预测 from sklearn.naive_bayes import MultinomialNB model = MultinomialNB() model.fit(x_train, y_train) # 预测 y_pred = model.predict(x_test) # 模型评估 from sklearn.metrics import accuracy_score, confusion_matrix ac = accuracy_score(y_test, y_pred) cm = confusion_matrix(y_test, y_pred) # 可视化混淆矩阵 plt.figure(figsize=(15,10)) sns.heatmap(cm, annot = True) plt.show() # 预测语言的函数 def predict(text): x = cv.transform([text]).toarray() lang = model.predict(x) lang = le.inverse_transform(lang) print("The language is in",lang[0])
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485