当前位置: 首页 > news >正文

NLP项目之语种识别

目录

  • 1. 代码及解读
  • 2. 知识点
    • n-grams
    • 仅保留最常见的1000个n-grams。意思是n=1000 ?

1. 代码及解读

in_f = open('data.csv')
lines = in_f.readlines()
in_f.close()
dataset = [(line.strip()[:-3], line.strip()[-2:]) for line in lines]
print(dataset[:5])
[('1 december wereld aids dag voorlichting in zuidafrika over bieten taboes en optimisme','nl'),('1 mill贸n de afectados ante las inundaciones en sri lanka unicef est谩 distribuyendo ayuda de emergencia srilanka','es'),('1 mill贸n de fans en facebook antes del 14 de febrero y paty miki dani y berta se tiran en paraca铆das qu茅 har铆as t煤 porunmillondefans','es'),('1 satellite galileo sottoposto ai test presso lesaestec nl galileo navigation space in inglese','it'),('10 der welt sind bei', 'de')]
from sklearn.model_selection import train_test_split
x, y = zip(*dataset)
# 划分训练集、测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1)
# 训练集样本数
len(x_train)  # 6799
import redef remove_noise(document):noise_pattern = re.compile("|".join(["http\S+", "\@\w+", "\#\w+"]))clean_text = re.sub(noise_pattern, "", document)return clean_text.strip()remove_noise("Trump images are now more popular than cat gifs. @trump #trends http://www.trumptrends.html")
# 'Trump images are now more popular than cat gifs.'
from sklearn.feature_extraction.text import CountVectorizer
# from sklearn.feature_extraction.text import TfidfVectorizervec = CountVectorizer(lowercase=True,     # 英文文本全小写analyzer='char_wb', # 逐个字母解析ngram_range=(1,3),  # 1=出现的字母以及每个字母出现的次数,2=出现的连续2个字母,和连续2个字母出现的频次# trump images are now... => 1gram = t,r,u,m,p... 2gram = tr,ru,um,mp...max_features=1000,  # keep the most common 1000 ngramspreprocessor=remove_noise
)
# vec = TfidfVectorizer(lowercase=True, decode_error='ignore', preprocessor=remove_noise)
vec.fit(x_train)def get_features(x):vec.transform(x)

这段代码的目的是使用CountVectorizer类从sklearn.feature_extraction.text模块来转换文本数据为数值向量,这是在文本挖掘和自然语言处理中常见的第一步。向量化是将文本数据转换成数值数据,以便机器学习模型可以处理。以下是代码详细的步骤解释:

  1. 导入CountVectorizer

    from sklearn.feature_extraction.text import CountVectorizer
    

    这一步导入了CountVectorizer类,它可以将文本集合转换成词频矩阵。

  2. 设置CountVectorizer的参数:

    vec = CountVectorizer(lowercase=True,     # 将文本转换为小写,这有助于统一不同大小写的相同单词analyzer='char_wb', # 以字符为单位进行分析,'char_wb'表示在单词边界内分析字符,这有助于捕获字符在单词内部的位置信息ngram_range=(1,3),  # 设置n-gram的范围,从1到3,这意味着它会考虑单独的字符、两个连续字符、三个连续字符的组合max_features=1000,  # 只保留最常见的1000个n-grams,这有助于降低模型复杂度和避免过拟合preprocessor=remove_noise  # 使用`remove_noise`函数作为预处理器,它会在向量化前清理文本数据
    )
    

    这里设置了CountVectorizer的几个关键参数,包括:

    • 文本小写化。
    • 字符分析器,会考虑字符在单词边界内的n-gram。
    • n-gram的范围设置为1到3。
    • 仅保留最常见的1000个n-grams。
    • 使用预先定义的remove_noise函数来清理文本数据。
  3. 训练CountVectorizer

    vec.fit(x_train)
    

    这一步是在训练集x_train上“训练”CountVectorizer,即建立一个词汇表,并计算n-gram的频率。

  4. 定义一个获取特征的函数:

    def get_features(x):vec.transform(x)
    

    这个get_features函数用于将新的文本数据x转换为先前fit方法计算得到的词汇表对应的向量。这里的transform调用会将文本转换成稀疏的数值向量,这些向量的每一维代表一个n-gram的频率。

代码中注释掉的部分是TfidfVectorizer的导入和设置,这表明原作者可能在选择使用基本的词频方法(即CountVectorizer)与使用词频-逆文档频率(TF-IDF)方法(即TfidfVectorizer)之间进行权衡。TfidfVectorizer通常用于当词的重要性不能仅由频率决定时,它考虑了词在整个数据集中的分布。

2. 知识点

n-grams

当然,让我们通过一个简单的例子来理解n-grams。

假设我们有这样一个句子:

"I love to eat apples"

在这个句子中,我们可以生成不同的n-grams:

  • 1-grams (或 unigrams):

    • “I”
    • “love”
    • “to”
    • “eat”
    • “apples”

    Unigrams是句子中的单个单词。

  • 2-grams (或 bigrams):

    • “I love”
    • “love to”
    • “to eat”
    • “eat apples”

    Bigrams是句子中相邻的两个单词对。

  • 3-grams (或 trigrams):

    • “I love to”
    • “love to eat”
    • “to eat apples”

    Trigrams是句子中相邻的三个单词对。

每当n增加,n-gram就会包含更多的单词。通常,随着n的增加,n-gram能提供更多的上下文信息,但同时它们的出现频率可能会下降,因为更长的词序列在文本中准确出现的次数通常会更少。

在自然语言处理中,n-grams用于建立语言模型,这些模型可以预测下一个单词(在n-1个单词的上下文中),或者用于特征工程,比如在文本分类任务中。不过,要注意,随着n的增加,可能会遇到“维度灾难”,因为可能的n-gram组合的数量会呈指数增长。

仅保留最常见的1000个n-grams。意思是n=1000 ?

不是的。在这个上下文中,“保留最常见的1000个n-grams”并不意味着n=1000。这里的n指的是n-gram中的n,即组成n-gram的单词数量。比如,n=1时是unigrams(单词),n=2时是bigrams(两个单词的组合),n=3时是trigrams(三个单词的组合),以此类推。

“保留最常见的1000个n-grams”是指在对文本进行n-gram分析之后,只保留出现频率最高的1000个n-gram组合。这些n-grams可以是任何长度的(在指定的ngram_range内),而不是指n-gram的长度为1000个单词。例如,如果ngram_range设置为(1,3),那么这1000个n-grams可以包含unigrams、bigrams、trigrams的任意组合,具体取决于它们在文本中出现的频率。

这样做的目的是为了减少特征的数量,这有助于提高模型训练的效率和可能的泛化能力,同时也减少了由于过于稀有的n-grams可能导致的过拟合问题。

相关文章:

NLP项目之语种识别

目录 1. 代码及解读2. 知识点n-grams仅保留最常见的1000个n-grams。意思是n1000 ? 1. 代码及解读 in_f open(data.csv) lines in_f.readlines() in_f.close() dataset [(line.strip()[:-3], line.strip()[-2:]) for line in lines] print(dataset[:5])[(1 december wereld…...

Linux lpr命令教程:如何使用lpr命令打印文件(附案例详解和注意事项)

Linux lpr命令介绍 lpr命令在Unix-like操作系统中用于提交打印任务。如果在命令行中指定了文件名,那么这些文件将被发送到指定的打印机(如果没有指定目的地,则发送到默认目的地)。如果命令行中没有列出文件,lpr将从标…...

浅谈C语言inline关键字

对于C开发者来说,inline是个再熟悉不过的关键字,因为默认的成员函数都是inline,也是常规高校教材中宣扬C的“优势”之一。 但是C语言其实也是支持inline关键字的,而且是很早期的gcc就支持了该关键字。在Linux0.12版本内核代码中也…...

Flink1.17实战教程(第六篇:容错机制)

系列文章目录 Flink1.17实战教程(第一篇:概念、部署、架构) Flink1.17实战教程(第二篇:DataStream API) Flink1.17实战教程(第三篇:时间和窗口) Flink1.17实战教程&…...

OpenCV实战 -- 维生素药片的检测记数

文章目录 检测记数原图经过操作开始进行消除粘连性--形态学变换总结实现方法1. 读取图片:2. 形态学处理:3. 二值化:4. 提取轮廓:5. 轮廓筛选和计数: 分水岭算法:逐行解释在基于距离变换的分水岭算法中&…...

【AI】注意力机制与深度学习模型

目录 一、注意力机制 二、了解发展历程 2.1 早期萌芽: 2.2 真正意义的注意力机制: 2.3 2015 年及以后: 2.4 自注意力与 Transformer: 2.5 BERT 与预训练模型: 三、基本框架 1. 打分函数(Score Fun…...

HTML5和JS实现新年礼花效果

HTML5和JS实现新年礼花效果 2023兔年再见&#xff0c;2024龙年来临了&#xff01; 祝愿读者朋友们在2024年里&#xff0c;身体健康&#xff0c;心灵愉悦&#xff0c;梦想成真。 下面是用HTML5和JS实现新年礼花效果&#xff1a; 源码如下&#xff1a; <!DOCTYPE html>…...

【owt-server】一些构建项目梳理

【owt-server】清理日志&#xff1a;owt、srs、ffmpeg 【owt】p2p client mfc 工程梳理【m98】webrtc vs2017构建带符号的debug库【OWT】梳理构建的webrtc和owt mfc工程 m79的mfc客户端及owt-client...

Linux shell编程学习笔记38:history命令

目录 0 前言 1 history命令的功能、格式和退出状态1.1 history命令的功能1.2 history命令的格式1.3退出状态2 命令应用实例2.1 history&#xff1a;显示命令历史列表2.2 history -a&#xff1a;将当前会话的命令行历史追加到历史文件~/.bash_history中2.3 history -c&#xf…...

elasticsearch安装教程(超详细)

1.1 创建网络&#xff08;单点部署&#xff09; 因为我们还需要部署 kibana 容器&#xff0c;因此需要让 es 和 kibana 容器互联&#xff0c;所有先创建一个网络&#xff1a; docker network create es-net 1.2.加载镜像 采用的版本为 7.12.1 的 elasticsearch&#xff1b;…...

arkts中@Watch监听的使用

概述 Watch用于监听状态变量的变化&#xff0c;当状态变量变化时&#xff0c;Watch的回调方法将被调用。Watch在ArkUI框架内部判断数值有无更新使用的是严格相等&#xff08;&#xff09;&#xff0c;遵循严格相等规范。当在严格相等为false的情况下&#xff0c;就会触发Watch的…...

【Jmeter】Jmeter基础9-BeanShell介绍

3、BeanShell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法。 3.1、Jmeter中使用的BeanShell 在Jmeter中&#xff0c;除了配置元件&#xff0c;其他类型的元件中都有BeanShell。BeanShell 是一种完全符合Java语法规范的脚本语言,并且又拥…...

详解数组的轮转

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…...

html 表格 笔记

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>第二个页面</title><meta name"language" content"cn"> </head> <body><h2 sytle"width:500px;…...

计算机网络【HTTP 面试题】

HTTP的请求报文结构和响应报文结构 HTTP请求报文主要由请求行、请求头、空行、请求正文&#xff08;Get请求没有请求正文&#xff09;4部分组成。 1、请求行 由三部分组成&#xff0c;分别为&#xff1a;请求方法、URL以及协议版本&#xff0c;之间由空格分隔&#xff1b;请…...

linux基于用户身份对资源访问进行控制的解析及过程

linux中用户分为三类 1.超级用户&#xff08;root&#xff09; 拥有至高无上的权限 2.普通用户 人为创建、权限小&#xff0c;权限受到控制 3.程序用户 运行程序的用户&#xff0c;不是给人使用的&#xff0c;给程序使用的&#xff0c;一般不给登录&#xff01; 组账…...

手动创建idea SpringBoot 项目

步骤一&#xff1a; 步骤二&#xff1a; 选择Spring initializer -> Project SDK 选择自己的JDK版本 ->Next 步骤三&#xff1a; Maven POM ->Next 步骤四&#xff1a; 根据JDK版本选择Spring Boot版本 11版本及以上JDK建议选用3.2版本&#xff0c;JDK为11版本…...

【Go语言入门:Go语言的数据结构】

文章目录 3.Go语言的数据结构&#xff1a;3.1. 指针3.2. struct&#xff08;结构体&#xff09;3.3. Map(映射,哈希&#xff09; 3.Go语言的数据结构&#xff1a; 简介&#xff1a; 在Go语言中&#xff0c;数据结构体可以分为四种类型&#xff1a;基础类型、聚合类型、引用类型…...

QT designer的ui文件转py文件之后,实现pycharm中运行以方便修改逻辑,即添加实时模板框架

为PyCharm中的实时模板&#xff0c;你需要遵循以下步骤&#xff1a; 打开PyCharm的设置: 选择 File > Settings&#xff08;在macOS上是 PyCharm > Preferences&#xff09;。 导航到实时模板: 在设置中找到 Editor > Live Templates。 添加新的模板组 (可选): 为了…...

什么是负载均衡?

负载均衡是指在计算机网络领域中&#xff0c;将客户端请求分配到多台服务器上以实现带宽资源共享、优化资源利用率和提高系统性能的技术。负载均衡可以帮助小云有效解决单个服务器容量不足或性能瓶颈的问题&#xff0c;小云通过平衡流量负载&#xff0c;使得多台服务器能够共同…...

Python和Java的优缺点

Python的优点&#xff1a; 简单易学&#xff1a;Python的语法简洁清晰&#xff0c;易于学习和理解。丰富的库和框架&#xff1a;Python拥有庞大的标准库和活跃的开源社区&#xff0c;可以快速使用各种功能强大的库和框架&#xff0c;比如NumPy、Pandas、Django等。可读性强&am…...

AES - 在tiny-AES-c基础上封装了2个应用函数(加密/解密)

文章目录 AES - 在tiny-AES-c基础上封装了2个应用函数(加密/解密)概述增加2个封装函数的AES库aes.haes.c在官方测试程序上改的测试程序(用来测试这2个封装函数)END AES - 在tiny-AES-c基础上封装了2个应用函数(加密/解密) 概述 在github山有个星数很高的AES的C库 tiny-AES-c …...

51和32单片机读取FSR薄膜压力传感器压力变化

文章目录 简介线性电压转换模块51单片机读取DO接线方式51代码实验效果 32单片机读取AO接线方式32代码实验效果 总结 简介 FSR薄膜压力传感器是可以将压力变化转换为电阻变化的一种传感器&#xff0c;单片机可以读取然后作为粗略测量压力&#xff08;仅提供压力变化&#xff0c;…...

【maven】pom.xml 文件详解

有关 maven 其他配置讲解参考 maven 配置文件 setting.xml 详解 pom.xml 文件是 Maven 项目的核心配置文件&#xff0c;其中包含了项目的元数据、构建配置、依赖管理等信息。以下是一个 pom.xml 文件的主要部分&#xff1a; <?xml version"1.0" encoding"U…...

SpringMVC源码解析——DispatcherServlet初始化

在Spring中&#xff0c;ContextLoaderListener只是辅助功能&#xff0c;用于创建WebApplicationContext类型的实例&#xff0c;而真正的逻辑实现其实是在DispatcherServlet中进行的&#xff0c;DispatcherServlet是实现Servlet接口的实现类。Servlet是一个JAVA编写的程序&#…...

搞定Apache Superset

踩雷了无数次终于解决了Superset的一系列问题 现在是北京时间2023年12月27日&#xff0c;亲测有效。 Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用&#xff0c;可对接各种数据源&#xff0c;包括很多现代的大数据分析引擎&#xff…...

【每日试题】java面试之ssm框架

以下是20道常见的SSM&#xff08;SpringSpring MVCMyBatis&#xff09;面试题目和答案&#xff1a; 什么是SSM框架&#xff1f; SSM是指SpringSpring MVCMyBatis的组合&#xff0c;它是Java Web开发中常用的轻量级框架集合。 介绍一下SSM框架各个组件的作用&#xff1f; Sprin…...

Flutter 疑难杂症集合

一. Flutter集成uni小程序sdk 1. 手机连接电脑测试打开uni小程序没问题&#xff0c;打包成apk后debug编译下的apk也没问题&#xff0c;但就是release编译的apk包打不开小程序。 报错情景&#xff1a;点击后页面会闪现一下黑色的背景&#xff0c;然后又跳转回了点击之前的页面。…...

PHP序列化总结1--序列化和反序列化的基础知识

序列化和反序列化的作用 1.序列化&#xff1a;将对象转化成数组或者字符串的形式 2.反序列化&#xff1a;将数组或字符串的形式转化为对象 为什么要进行序列化 这种数据形式中间会有很多空格&#xff0c;不同人有不同的书写情况&#xff0c;可能还会出现换行的情况 为此为了…...

【Linux】 last 命令使用

last 命令 用于检索和展示系统中用户的登录信息。它从/var/log/wtmp文件中读取记录&#xff0c;并将登录信息按时间顺序列出。 著者 Miquel van Smoorenburg 语法 last [-R] [-num] [ -n num ] [-adiox] [ -f file ] [name...] [tty...]last 命令 -Linux手册页 选项及作用…...

维度网络做网站/苹果cms永久免费建站程序

Easy Scheduler Release 1.0.2 Easy Scheduler 1.0.2是1.x系列中的第三个版本。此版本增加了调度开放接口、worker分组(指定任务运行的机器组)、任务流程及服务监控以及对oracle、clickhouse等支持&#xff0c;具体如下&#xff1a; 新特性&#xff1a; [EasyScheduler-79] 调度…...

乐清高端网站建设/爱奇艺科技有限公司

作为一枚程序员&#xff0c;想要研究Python编程语言与数学学习&#xff08;教学&#xff09;的结合&#xff0c;就不能不了解以及比对一下其他数学学习与应用的解决方案&#xff0c;比如R语言、Matlab等数学软件。经过广泛的搜索了解了一下国外的反馈与趋势之后&#xff0c;最终…...

免费自制app软件靠谱么/网站搜索优化方法

Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理&#xff0c;计算最关键的资源&#xff0c;CPU核越多&#xff0c;性能就越好。配置Nginx多核CPU,worker_cpu_affinity使用方法和范例1. 2核CPU&#xff0c;开启2个进…...

网站建设视频教程最新/怎么建立网站的步骤

要通过视图更新基本表数据&#xff0c;必须保证视图是可更新视图&#xff0c;即可以在INSET、UPDATE或DELETE等语句当中使用它们。对于可更新的视图&#xff0c;在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构&#xff0c;这类结构会使得视图不可更…...

电商网站怎么做推广/发布外链的平台有哪些

装饰者模式 定义 : 装饰者(decorator)模式能够在不改变对象自身的基础上&#xff0c;在程序运行期间给对像动态的添加职责。与继承相比&#xff0c;装饰者是一种更轻便灵活的做法。 在不改变对象自身的基础上&#xff0c;在程序运行期间给对象动态地添加一些额外职责 特点 &…...

中牟网站建设/网址域名注册

ESG使用指南&#xff1a;1.ESG操作文档网站&#xff1a;ESG有个网站&#xff0c;是专门的操作文档网站&#xff0c;因为ESG三个环境&#xff0c;流程各不一样。地址&#xff1a;http://10.20.12.90:20567/esg-help-doc/2.ESG管理平台网站&#xff0c;分别管理开发&#xff0c;测…...