基于 N-Gram 文本分类的语言检测器(附详细实现源码)

基于 N-Gram 文本分类的语言检测器

文本分类是文档处理的一项基本任务,可以自动处理大量的电子文档流。处理某些类别文档的一个困难是存在不同类型的文本错误,例如电子邮件中的拼写和语法错误,以及通过 OCR 处理的文档中的字符识别错误。文本分类必须能可靠地处理所有输入,因此必须能容忍一定程度的此类问题。

基于 N-gram 的文本分类方法可容忍文本错误。该系统体积小、速度快、功能强大。该系统的语言分类效果非常好,在《N-Gram-Based Text Categorization》论文的实验中,对用不同语言撰写的 Usenet 新闻组文章的分类正确率达到 99.8%。该系统在根据主题对一些不同的面向计算机的新闻组中的文章进行分类时,也取得了相当不错的效果,正确分类率高达 80%。对于系统分类效果不佳的情况,也有几个明显的改进方向。

该系统的基础是计算和比较 N-gram 频率曲线。

  • 对代表不同类别的训练集数据计算 N-Gram 频率
  • 系统会为要分类的特定文档计算一个 N-Gram 频率。
  • 系统会计算该文档的 N-Gram 频率与每个类别 N-Gram 频率之间的距离,选择与文档距离最小的类别。

在各种分类任务中,使用 N-gram 频率分布图为文档分类提供了一种简单可靠的方法。

1.引言

文本分类是自然语言处理中的一个重要任务,通常用于将文本归类到预定义的类别中。例如,垃圾邮件过滤器需要将邮件分类为“垃圾邮件”或“非垃圾邮件”;语言检测器需要识别文本的语言。N-Gram 模型是文本分类中常用的一种方法,通过分析文本中连续字符或单词的频率,可以构建出文本的特征向量,进而进行分类。

文档处理的一个基本类型是文本分类,即把收到的文档归入某个预先存在的类别。这种系统的一个应用是将新闻报道从新闻通讯社中分拣出来。对数字化纸质档案进行分类则是另一种应用。这些应用具有以下特点:

  • 尽管存在文本错误,但分类工作必须可靠。
  • 由于要处理的文件数量庞大,分类工作必须高效,尽可能减少存储和处理时间。
  • 分类必须能够识别给定文档何时不符合任何类别,或何时介于两个类别之间。这是因为类别的界限几乎从来都不是一目了然的。

2. N-Gram

简介

在 N-gram 中,N 表示的是序列中单词或字符的数量。根据 N 的不同值,N-gram 可以分为以下几类:

  • Unigram (1-gram): 单个词或字符
  • Bigram (2-gram): 两个连续的词或字符
  • Trigram (3-gram): 三个连续的词或字符
  • 以此类推…

例如,对于字符串 “hello”,其 2-Gram(也称为 Bigram)集合为:

  • “he”
  • “el”
  • “ll”
  • “lo”

通过分析文本中的 N-Gram 频率,可以捕捉到文本的语言特征。不同语言的 N-Gram 频率分布是不同的,这也是语言检测的基础。

应用

N-Gram 模型在自然语言处理中有广泛的应用,除了文本分类,还包括拼写检查、文本生成和机器翻译等。通过对 N-Gram 频率的统计,可以帮助我们理解和处理语言中的模式和规律。

基于马尔科夫链的废话文学生成器:https://github.com/gobylor/Bullshit-Literature-Generator

通过分析文本中的 N-gram,可以预测下一个词的概率,从而生成连贯的文本。

3. 齐普夫定律

人类语言中总会有一些词比其他词出现得更频繁。表达这一观点的最常见方式之一就是齐普夫定律:人类语言文本中最常见的第 n 个词的出现频率与 n 成反比。

齐普夫定律 - 维基百科 — Zipf’s law - Wikipedia

齐普夫定律(Zipf’s Law)是由美国语言学家乔治·齐普夫(George Kingsley Zipf)在1930年代提出的一种统计规律。该定律描述了自然语言中词频分布的规律:一个文本中第n常用词的频率大约是最常用词频率的1/n。这意味着,第二常用词的频率大约是最常用词的一半,第三常用词的频率大约是最常用词的三分之一,以此类推。

例如,在美国英语文本的布朗语料库中,"the "是出现频率最高的单词,它本身就占所有单词出现次数的近 7%(100 多万次中的 69,971 次)。根据齐普夫定律,排在第二位的单词 "of"的出现率略高于 3.5%(36,411 次),其次是 “and”(28,852 次)。
在这里插入图片描述

source:皮特网

语言的使用是有规律性的,这是对3.5万亿份文稿分析后得出的字母和单词使用评率的分析报告。

这一规律的含义是,总有一组词在使用频率上支配着语言中的大多数其他词。这既适用于一般词汇,也适用于特定主题的词汇。此外,从使用频率最高的词到使用频率最低的词,它们之间存在一个平滑的连续关系。频率曲线的平滑性在某种程度上帮助了我们,因为这意味着我们不必过于担心特定的频率阈值。这一规律也是如此,至少近似于人类语言的其他方面。尤其是 N-grams 的出现频率,无论是作为词素形式还是作为词义成分的词素,都是如此。齐普夫定律意味着,使用 N-gram 频率统计法对文档进行分类时,在某一特定等级上切断分布并不十分敏感。这也意味着,如果我们要比较同一类别的文档,它们的 N-gram 频率分布应该相似。

齐普夫定律的成因至今仍未完全明确,但常见的解释包括:

  1. 语言经济原则:人们倾向于使用尽可能少的词汇传达尽可能多的信息。
  2. 权力法则分布:许多自然和社会现象服从权力法则分布,齐普夫定律正是其中一种特殊情况。

N-Gram 频率可视化:Google Ngram Viewer

4. 基于 N-Gram 的文本分类方法

source:《N-Gram-Based Text Categorization》

主要分为以下几个步骤:

4.1 构建 N-Gram 频率表

首先,从训练文本中提取 N-Gram,并统计其频率。对于每种语言或类别,我们需要构建一个 N-Gram 频率rank表。这个表格记录了每个 N-Gram 出现的频率 rank。例如,对于英语和西班牙语,我们可以分别构建如下频率表:

English: {"he": 10, "el": 8, "ll": 5, "lo": 7, ...}
Spanish: {"ho": 12, "ol": 9, "la": 6, "mu": 5, ...}

通过对大量文本进行统计,可以得到较为准确的 N-Gram 频率分布。这一步的目的是为了捕捉各语言的特征,以便后续进行比较。

4.2 生成特征向量

根据频率表生成特征向量。向量的每个维度对应一个 N-Gram,值为该 N-Gram 在文本中出现的频率 rank。例如,如果我们有一个包含 “ba”, “ab”, “na”, "n "的特征向量,那么对于一个新的文本 “banana”,我们可以生成如下特征向量:

["ba", "ab", "na", "n "]
[3, 1, 2, 4]

这个特征向量反映了新文本中的 N-Gram 分布情况。

4.3 计算相似度

接下来,我们需要比较待检测文本的 N-Gram 特征向量与各语言的特征向量。常用的距离度量方法有曼哈顿距离和欧几里得距离。这里我们以曼哈顿距离为例,计算两个向量之间的距离。假设有两个特征向量 A 和 B,曼哈顿距离的计算公式为:

distance = |A1 - B1| + |A2 - B2| + ... + |An - Bn|

距离越小,表示两个向量越相似,也就意味着待检测文本与该语言的特征向量越接近。

欧几里得距离: 两点之间的“直线”距离,源自于我们在日常生活中最直观的距离概念

曼哈顿距离: 又称为“城市街区距离”或“L1距离”,表示在一个网格状路径中两点之间的距离。这种度量方式类似于沿着城市街区的路径行走,而不是直线距离。

采用曼哈顿距离的原因:

  1. 计算效率

曼哈顿距离的计算相对简单,只需要进行加法运算,而不涉及平方和开平方等操作。这使得在处理高维度的文本数据时,计算速度更快,资源消耗更低,尤其在大规模数据集上具有优势。

  1. 易于稀疏数据的处理

文本数据通常是高维且稀疏的,即大多数特征的值为零。曼哈顿距离在处理稀疏数据时效果较好,因为它直接计算特征值的绝对差异,不会受到零值特征的影响。相比之下,欧几里得距离会因为平方和的存在,对稀疏数据中的零值特征计算产生累积的误差。

  1. 鲁班行更强

曼哈顿距离对离群点的敏感度较低。由于文本数据中的特征值可能存在较大的差异,曼哈顿距离的绝对值差异计算方式能够更好地处理这种情况,避免因少数极端值对整体距离计算的显著影响。

  1. 匹配特种

在文本分类任务中,不同的特征(如词或Ngram)对分类结果的重要性可能不同。曼哈顿距离在计算时,对所有特征都给予了相同的权重,这在一定程度上与文本分类任务中的特征权重分布相匹配,尤其是在没有特征加权的情况下。

4.4 分类

最后,选择相似度最高的语言或类别作为检测结果。即对于待检测文本,我们计算其与各语言特征向量的距离,并选择距离最小的语言作为最终分类结果。

5. 实现语言检测器

Repo: https://github.com/gobylor/language-detector

生成语料库:

  • 对各语言的训练集生成 trigram 集合,并按频率排序

语言检测:

  • 识别语言文字

  • 使用 ngram 文本分类

5.1 生成预料库

对各语言的训练集生成 trigram 集合,并按频率排序

例子:

// 英语
Eng: []string{" th", "the", " an", "he ", "nd ", "and", "ion", " of", "of ", "tio", " to", "to "}
// 德语
Deu: []string{"en ", "er ", "der", " un", "nd ", "und", "ein", "ung", "cht", " de", "ich", "sch"}

5.2 识别文字

在 Unicode 中,文字(script)是字母和其他书写符号的集合,用于在一种或多种书写系统中表示文本信息。有些脚本只支持一种书写系统和语言,例如亚美尼亚语。其他脚本支持多种不同的书写系统;例如,拉丁字母支持英语、法语、德语、意大利语、越南语、拉丁语本身以及其他几种语言。

文字在 UTF-8 中以非重叠 unicode 范围的形式呈现。

我们只需按字符数遍历字符串,文本中占字符数最多的字母即为结果文字。根据不同的语言文字支持的语言进一步识别语言。

5.3 基于 trigram 的文本相似度计算

trigram

trigram是 n-gram 的一种特殊情况,由三个字符组成。

假设我们有以下文本: love it,这段文字的词组是lo、lov、ove、ve_、e_i、it、it。这里的下划线字符 _ 只代表单词的边界。

优点

  • 简单
  • 速度快
  • 内存和 CPU 效率高
  • 通用方法,适用于所有语言,无论其语法如何

缺点

  • 对于短文本(小于 200-300 个字母),可能会出现错误结果。按单词分割输入文本,然后在语言词典中查找单词。这种方法可能会为短文本提供更好的结果,但实现起来要复杂得多,而且速度较慢。这就需要在数据库或 Bloom 过滤器中存储所有单词。
  • 为了获得最佳的终极解决方案(但也相当复杂),可以采用混合方法:对长文本使用 trigram 算法,对短文本使用词典查询。
计算相似度

语料库保存了 300 个最常出现在每种语言中的 trigram,并按出现频率排序。

对于输入文本,我们会计算 trigram 并按频率排序,然后将其与已知的语言配置文件进行比较。

与输入文本的语言距离最相似的语言就是最可能的语言。

5.3 置信度

置信度取决于以下因素:

  • 给定文本中的 trigram 数量
  • 最可能的语言与次可能的语言之间的差异

它可以用阈值函数表示为一个二维空间,将其分为 "可信 "和 "不可信 "两个区域,这个函数是一个双曲线。

这意味着,给定文本中唯一的 N-grams 越多(与文本长度相关),我们就越有可能得到可靠的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/638701.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NebulaGraph

文章目录 关于 NebulaGraph客户端支持安装 NebulaGraph关于 nGQLnGQL 可以做什么2500 条 nGQL 示例原生 nGQL 和 openCypher 的关系 Backup&Restore功能 导入导出导入工具导出工具 NebulaGraph ImporterNebulaGraph ExchangeNebulaGraph Spark ConnectorNebulaGraph Flink …

2024-5-24 石群电路-15

2024-5-24,星期五,22:15,天气:晴,心情:晴。今天最后一天上班,终于要放返校假啦,开心!!!!!!不过放假也不能耽误…

青少年 CTF 练习平台:Misc(一)

前言 当然,我可以更详细地介绍一下青少年CTF练习平台。 青少年CTF练习平台是一个专为青少年设计的网络安全竞赛和训练平台。该平台由思而听(山东)网络科技有限公司与克拉玛依市思而听网络科技有限公司共同建设,自2018年创建以来…

[笔试训练](三十二)094:素数回文095:活动安排096:合唱团

目录 094:素数回文 095:活动安排 096:合唱团 094:素数回文 题目链接:素数回文_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 模拟题&#xff1a; 1.构造回文数 2.检测是否为素数 #include <iostream> #include <string> #include <c…

8个实用网站和软件,收藏起来一定不后悔~

整理了8个日常生活中经常能用得到的网站和软件&#xff0c;收藏起来一定不会后悔~ 1.ZLibrary zh.zlibrary-be.se/这个网站收录了超千万的书籍和文章资源&#xff0c;国内外的各种电子书资源都可以在这里搜索&#xff0c;98%以上都可以在网站内找到&#xff0c;并且支持免费下…

「51媒体」广西媒体资源,南宁活动媒体邀约

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 广西地区拥有丰富的媒体资源&#xff0c;在广西做活动&#xff0c;参加展览可以邀请他们到场采访报道。 央媒驻站&#xff1a;广西新华 广西人民 广西光明 广西央广 广西国际在线 广西中…

在Spring Boot项目中通过自定义注解实现多数据源以及主备数据库切换

在现代的企业应用开发中&#xff0c;使用多数据源是一个常见的需求。尤其在关键应用中&#xff0c;设置主备数据库可以提高系统的可靠性和可用性。在这篇博客中&#xff0c;我将展示如何在Spring Boot项目中通过自定义注解实现多数据源以及主备数据库切换。 在此说明&#xff…

ICLR 2024现场精彩回顾 机器学习大牛们的“踩高跷秀”嗨翻全场

会议之眼 快讯 2024年5月7-11日&#xff0c;第12届ICLR(International Conference on Learning Representations)即国际学习表征会议已经在奥地利维也纳展览中心圆满结束&#xff01;国际学习表征会议&#xff08;ICLR&#xff09;作为机器学习领域的顶级会议之一&#xff0c;…

开源软件 | 一文彻底搞懂许可证的定义、起源、分类及八大主流许可证,让你选型不再头疼

为什么开源软件会存在许可证&#xff0c;许可证的起源与产生目的是为了解决什么问题&#xff1f;许可证的定义又是怎样的&#xff1f;什么是Copyleft&#xff0c;与Copyright有何区别&#xff1f;开源软件常见的许可证有哪些&#xff1f;这些许可证都有什么特点&#xff1f;接下…

C++中获取int最大与最小值(补)

上文中&#xff0c;我们学习了C中获取int最大与最小值的两种方法&#xff1a;C库和移位运算&#xff0c;这篇文章将解决在移位运算中遇到的各种报错&#xff0c;并提出一种新的生成int最值的方法 上文链接&#xff1a;http://t.csdnimg.cn/cn7Ad 移位运算取最值常见报错 Dev…

【Qt】修改QToolButton图标颜色

1. 目的 修改QToolButton的图标颜色&#xff0c;单一颜色&#xff0c;效果类似于Qt Creator左边选项卡。 2. 代码 QIcon MainWindow::setIconColor(QIcon icon, QColor color) {QPixmap pixmap icon.pixmap(QSize(64,64));QPainter painter(&pixmap);painter.setCompo…

Isaac Sim仿真平台学习(1)认识Isaac Sim

0.前言 上一个教程中我们下载好了Isaac Sim&#xff0c;这一章我们将来简单了解一下Isaac Sim平台。 isaac Sim仿真平台安装-CSDN博客 1.Isaac Sim是啥&#xff1f; What Is Isaac Sim? — Omniverse IsaacSim latest documentation Isaac Sim是NVDIA Omniverse平台的机器…

Window GDI+ API有BUG?GetBounds测不准?

文章目录 GraphicsPath的GetBounds测不准&#xff1f;方法一&#xff1a;GetBounds ()实战 方法二&#xff1a;GetBounds(Matrix)实战 GraphicsPath的GetBounds测不准?实战 .NET 版本的问题&#xff1f;C也一样&#xff0c;不是.NET的问题怀疑人生MiterLimit惹得祸完美结果结束…

深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

Zabbix实现7x24小时架构监控

上篇&#xff1a;https://blog.csdn.net/Lzcsfg/article/details/138774511 文章目录 Zabbix功能介绍Zabbix平台选择安装Zabbix监控端部署MySQL数据库Zabbix参数介绍登录Zabbix WEBWEB界面概览修改WEB界面语言添加被控主机导入监控模板主机绑定模板查看主机状态查看监控数据解…

python实现对应分析的随笔记

文档来源&#xff1a; Correspondence analysis 1 对应分析 参考&#xff1a; SPSS&#xff08;十二&#xff09;SPSS对应分析&#xff08;图文数据集&#xff09;案例6&#xff1a;SPSS–对应分析10 对应分析 对应分析的实质&#xff08;理论很复杂&#xff0c;但是结果很明…

创新工具|AI革新内容营销:策略、工具与实施指南

探索如何利用人工智能&#xff08;AI&#xff09;提升内容营销策略&#xff0c;从SEO优化到个性化推荐。本指南详细介绍了11款顶尖AI工具&#xff0c;旨在帮助中国的中高级职场人士、创业家及创新精英高效地策划和生成引人入胜的内容&#xff0c;同时确保内容的专业性、权威性和…

靶机hackNos Os-Bytesec练习报告

hackNos: Os-Bytesec靶机练习实践报告 下载地址*&#x1f617; https://drive.google.com/open?id1yBuih2CsBx45oTUDpFr4JldrzkaOTTeZ https://download.vulnhub.com/hacknos/Os-ByteSec.ova https://download.vulnhub.com/hacknos/Os-ByteSec.ova.torrent ( Magnet) …

爬虫基础1

一、爬虫的基本概念 1.什么是爬虫&#xff1f; 请求网站并提取数据的自动化程序 2.爬虫的分类 2.1 通用爬虫&#xff08;大而全&#xff09; 功能强大&#xff0c;采集面广&#xff0c;通常用于搜索引擎&#xff1a;百度&#xff0c;360&#xff0c;谷歌 2.2 聚焦爬虫&#x…

集合框框框地架

这一次来介绍一下常用的集合&#xff1a; 首先是两种集合的《家庭系谱图》&#xff1a; 接下来介绍一下集合的种类&#xff1a; Collection Set SetTreeSet&#xff1a;基于红⿊树实现&#xff0c;⽀持有序性操作&#xff0c;例如&#xff1a;根据⼀个范围查找元素的操作。但…