当前位置: 首页 > 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;使得多台服务器能够共同…...

QGIS3.28最新版行政区合并避坑指南:县转市数据融合的3个关键检查点

QGIS 3.28行政区合并实战&#xff1a;县转市数据融合的3个关键检查点 当我们需要将县级行政区数据合并为市级边界时&#xff0c;看似简单的"线转面融合"操作背后&#xff0c;往往隐藏着诸多数据陷阱。许多中级用户在QGIS中执行这类操作时&#xff0c;明明步骤正确却频…...

GitHub Desktop中文汉化工具:让Git操作变得像聊天一样简单

GitHub Desktop中文汉化工具&#xff1a;让Git操作变得像聊天一样简单 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 还在为GitHub Desktop满屏的英文而头疼吗&#x…...

Iceoryx(冰羚):无锁队列与并发控制的设计与实现3(源码解析)

接上篇设计4: 索引管理层&#xff08; MpmcIndexQueue / CyclicIndex&#xff09;Subscriber存储数据使用的是queue&#xff0c;是为了保证数据的读取顺序。MpmcLockFreeQueue 为了满足多个进程同时写的情况&#xff0c;采用了索引数据分离的方案&#xff08;底层的索引实现为 …...

能耗效率比拼:百川2-13B量化版在OpenClaw长时间任务中的表现

能耗效率比拼&#xff1a;百川2-13B量化版在OpenClaw长时间任务中的表现 1. 测试背景与目标 最近在探索如何用OpenClaw实现个人工作流的自动化时&#xff0c;遇到一个现实问题&#xff1a;当需要长时间运行自动化任务时&#xff0c;本地设备的能耗和稳定性会成为瓶颈。我决定…...

燃油车虎视眈眈,电车涨价的图谋必将落空,油价上涨的利好将消失

近期以来多家电车企业涨价&#xff0c;美国电车涨价尤为明显&#xff0c;最高涨幅2万元&#xff0c;而国产电车涨价3000-1.4万元不等&#xff0c;凸显出电车似乎突然间对市场乐观起来&#xff0c;导致他们信心十足的在于3月份以来的油价上涨&#xff0c;但是这种涨价将迅速导致…...

为什么92%的Python WASM尝试失败?——资深编译器工程师披露LLVM-WASI链路5大隐性断点

第一章&#xff1a;Python WASM部署的现状与认知误区WebAssembly&#xff08;WASM&#xff09;正迅速成为浏览器端高性能计算的新基石&#xff0c;但将 Python 部署至 WASM 环境仍存在显著的认知断层。许多开发者误以为“Python 代码可直接编译为 WASM”&#xff0c;实则 Pytho…...

GitHub下载加速终极指南:告别龟速,3分钟让下载速度飙升300%

GitHub下载加速终极指南&#xff1a;告别龟速&#xff0c;3分钟让下载速度飙升300% 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub …...

DeepSeek-OCR-2开发者案例:集成至RAG系统实现图文混合检索增强

DeepSeek-OCR-2开发者案例&#xff1a;集成至RAG系统实现图文混合检索增强 1. 项目背景与需求 最近在做一个智能文档问答系统&#xff0c;客户的需求很明确&#xff1a;他们有很多PDF文档&#xff0c;里面既有文字又有图片&#xff0c;用户提问时&#xff0c;系统要能同时理解…...

SEO_资深运营的SEO外链建设核心技巧

<h2>SEO外链建设&#xff1a;资深运营的核心技巧解析</h2> <p>在当今数字营销的竞争激烈环境中&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;外链建设是提升网站排名的关键因素之一。资深运营者在这一领域已经积累了丰富的经验&#xff0c;他们不仅仅…...

压力型旋流喷嘴内喉部一点横向流体运动

&#xff08;一&#xff09;单图逐段解读图 1&#xff1a;0~0.0045s 全时段曲线&#xff08;含完整瞬态 准稳态&#xff09;分段特征与机理瞬态冲击段&#xff08;0~0.0002s&#xff09;曲线特征&#xff1a;极端剧烈的高频正负震荡&#xff0c;峰值接近 2m/s&#xff0c;是全…...