自然语言处理NLP 01语言转换语言模型

目录

语言转化方式

1. 数据预处理(Data Preprocessing)

(1) 文本清理

(2) 分词

(3) 语言特殊处理

2. 特征提取(Feature Extraction)

(1) 词袋模型(Bag of Words, BoW)

(2) TF-IDF

(3) 词嵌入(Word Embedding)

3. 模型输入(Model Input)

(1) 序列编码

(2) 预训练模型输入

4. 模型推理(Model Inference)

(1) 使用传统模型

(2) 使用深度学习模型

总结

语言模型

统计语言模型(Statistical Language Model)

神经网络语言模型(Neural Language Model)


语言转化方式

语言转换(Language Transformation)通常涉及将一种语言的内容转换为另一种语言形式,例如文本翻译、语音转文本等。其流程通常包括数据预处理特征提取模型输入模型推理四个主要步骤。

下面我们详细介绍下这四个步骤


1. 数据预处理(Data Preprocessing)

在语言转换中,数据预处理是确保输入数据适合模型的关键步骤,主要包括以下任务:

(1) 文本清理

  • 移除无关字符(如标点、特殊符号)

  • 处理大小写(统一转换为小写或大写)

  • 去除停用词(如“的”、“是”)

import re
def clean_text(text):
    # 移除标点符号
    text = re.sub(r'[^\w\s]', '', text)
    # 转换为小写
    text = text.lower()
    # 移除停用词(示例停用词列表)
    stopwords = set(['the', 'is', 'in', 'to'])
    text = ' '.join([word for word in text.split() if word not in stopwords])
    return text
​
text = "The quick brown fox jumps over the lazy dog!"
cleaned_text = clean_text(text)
print(cleaned_text)  # 输出: quick brown fox jumps over lazy dog

(2) 分词

  • 将句子分解为单词或子词(Tokenization)。

from nltk.tokenize import word_tokenize
text = "Natural Language Processing is fun!"
tokens = word_tokenize(text)
print(tokens)  # 输出: ['Natural', 'Language', 'Processing', 'is', 'fun', '!']

(3) 语言特殊处理

  • 处理语言特有的问题,如中文分词、词干提取(Lemmatization)等。

import jieba
text = "自然语言处理很有趣"
tokens = jieba.lcut(text)
print(tokens)  # 输出: ['自然语言', '处理', '很', '有趣']

2. 特征提取(Feature Extraction)

特征提取将文本数据转换为模型可以处理的数值形式。常用方法包括:

(1) 词袋模型(Bag of Words, BoW)

  • 将文本表示为单词出现的频率。

from sklearn.feature_extraction.text import CountVectorizer
corpus = ["I love NLP", "NLP is fun"]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
print(X.toarray())  # 输出: [[1 1 1 0], [0 1 1 1]]
print(vectorizer.get_feature_names_out())  # 输出: ['fun', 'is', 'love', 'nlp']

(2) TF-IDF

  • 衡量词语在文档中的重要性。

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ["I love NLP", "NLP is fun"]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
print(X.toarray())

(3) 词嵌入(Word Embedding)

  • 将词语映射为低维向量(如Word2Vec、GloVe、BERT)。

from gensim.models import Word2Vec
sentences = [["I", "love", "NLP"], ["NLP", "is", "fun"]]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)
vector = model.wv['NLP']  # 获取词向量

3. 模型输入(Model Input)

将处理后的数据转换为模型可接受的形式:

(1) 序列编码

  • 将文本转换为固定长度的序列(如Padding)。

from tensorflow.keras.preprocessing.sequence import pad_sequences
sequences = [[1, 2, 3], [4, 5], [6]]
padded = pad_sequences(sequences, maxlen=3, padding='post')
print(padded)  # 输出: [[1 2 3], [4 5 0], [6 0 0]]

(2) 预训练模型输入

  • 使用预训练模型(如BERT)的Tokenizer对文本编码。

from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
inputs = tokenizer("Hello, NLP world!", return_tensors="pt")
print(inputs)  # 输出: {'input_ids': tensor(...), 'attention_mask': tensor(...)}

4. 模型推理(Model Inference)

使用训练好的模型对输入数据进行推理:

(1) 使用传统模型

  • 例如,使用朴素贝叶斯进行文本分类。

from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB()
model.fit(X_train, y_train)
predictions = model.predict(X_test)

(2) 使用深度学习模型

  • 使用Transformer进行翻译。

from transformers import MarianMTModel, MarianTokenizer
​
# 加载预训练模型和分词器
model_name = "Helsinki-NLP/opus-mt-en-de"
tokenizer = MarianTokenizer.from_pretrained(model_name)
model = MarianMTModel.from_pretrained(model_name)
​
# 输入句子
text = "Hello, NLP world!"
inputs = tokenizer(text, return_tensors="pt")
​
# 模型推理
translated = model.generate(**inputs)
print(tokenizer.decode(translated[0], skip_special_tokens=True))  # 输出: "Hallo, NLP-Welt!"

总结

语言转换的流程可以分为以下步骤:

  1. 数据预处理:清理、分词、标准化。

  2. 特征提取:将文本转换为数值形式(如词袋、TF-IDF、词嵌入)。

  3. 模型输入:将数据编码为模型可接受的形式(如序列编码、BERT输入)。

  4. 模型推理:使用模型进行预测或生成。

根据具体任务(如机器翻译、语音转文本),可以选择适合的方法和工具(如统计方法、神经网络模型、预训练模型)。

语言模型

语言模型(Language Model, LM)是自然语言处理(NLP)中的核心概念,用于计算一个句子或序列的概率。它可以用于文本生成机器翻译语音识别等任务。语言模型的发展经历了从统计语言模型神经网络语言模型的演变。

主要应用

  • 文本生成

  • 自动补全

  • 机器翻译

  • 语音识别

统计语言模型(Statistical Language Model)

统计语言模型基于传统的统计方法,通过计算词或词序列的频率来估计概率。

优缺点

  • 优点:简单、易于实现。

  • 缺点

    • 无法捕捉长距离依赖(Long-term Dependency)。

    • 受限于数据稀疏问题。

神经网络语言模型(Neural Language Model)

神经网络语言模型使用神经网络来建模语言,能够捕捉更复杂的语言规律和长距离依赖。

主要方法

(1) 前馈神经网络语言模型(Feedforward Neural LM)

  • 核心思想:使用固定窗口的前 个词预测当前词。

  • 模型结构

    1. 输入层:将前 个词转换为向量。

    2. 隐藏层:全连接层 + 激活函数。

    3. 输出层:Softmax 层,预测当前词的概率分布。

(2) 循环神经网络语言模型(RNN LM)

  • 核心思想:使用循环神经网络(RNN)捕捉序列中的上下文信息。

  • 改进

    • LSTM(长短期记忆网络):解决梯度消失问题。

    • GRU(门控循环单元):简化版 LSTM。

(3) Transformer 语言模型

  • 核心思想:使用自注意力机制(Self-Attention)捕捉全局依赖关系。

  • 代表性模型

    • GPT(Generative Pre-trained Transformer):生成式语言模型。

    • BERT(Bidirectional Encoder Representations from Transformers):双向语言模型。

优缺点

  • 优点

    • 捕捉长距离依赖。

    • 表达能力强,适用于大规模数据。

  • 缺点

    • 计算复杂度高。

    • 需要大量训练数据。

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

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

相关文章

【C++第二十章】红黑树

【C第二十章】红黑树 红黑树介绍🧐 红黑树是一种自平衡的二叉搜索树,通过颜色标记和特定规则保持树的平衡性,从而在动态插入、删除等操作中维持较高的效率。它的最长路径不会超过最短路径的两倍,它的查找效率比AVL树更慢(对于CPU…

Docker+Dify部署DeepSeek-r1本地知识库

安装配置Docker Desktop 软件下载 Docker Desktop版本:4.38.0.181591 Docker Desktop下载地址:Docker: Accelerated Container Application Development 或者从这里下载:DockerDesktop-4.38.0.181591资源-CSDN文库 点击图下所示位置,下载windows-AMD64版本软件 启用Hy…

读书笔记:要点提炼《基于大模型的RAG应用开发与优化——构建企业级LLM应用》(严灿平)

文章目录 一、大模型基础与演进1.1 大模型时代与生成式 AI 爆发1.2 大模型应用的纵深演进及实际局限 二、RAG 基础概念与必要性2.1 RAG 的理论基础与应用动机2.2 简单 RAG 场景示例解析 三、RAG 应用技术架构3.1 经典架构与业务流程设计3.1.1 RAG 应用的整体流程与模块划分3.1.…

推荐几款较好的开源成熟框架

一. 若依: 1. 官方网站:https://doc.ruoyi.vip/ruoyi/ 2. 若依SpringBootVueElement 的后台管理系统:https://gitee.com/y_project/RuoYi-Vue 3. 若依SpringBootVueElement 的后台管理系统:https://gitee.com/y_project/RuoYi-Cl…

深入解析NoSQL数据库:从文档存储到图数据库的全场景实践

title: 深入解析NoSQL数据库:从文档存储到图数据库的全场景实践 date: 2025/2/19 updated: 2025/2/19 author: cmdragon excerpt: 通过电商、社交网络、物联网等12个行业场景,结合MongoDB聚合管道、Redis Stream实时处理、Cassandra SSTable存储引擎、Neo4j路径遍历算法等42…

Linux高并发服务器开发 第十九天(线程 进程)

目录 1.进程组和会话 2.守护进程 2.1守护进程daemon概念 2.2创建守护进程 3.线程 3.1线程的概念 3.2线程内核三级映射 3.3线程共享 3.4线程优缺点 4.线程控制原语 4.1获取线程id 4.2创建线程 4.3循环创建N个子线 4.4子线程传参地址,错误示例 4.5线程…

图论:tarjan 算法求解强连通分量

题目描述 有一个 n n n 个点, m m m 条边的有向图,请求出这个图点数大于 1 1 1 的强连通分量个数。 输入格式 第一行为两个整数 n n n 和 m m m。 第二行至 m 1 m1 m1 行,每一行有两个整数 a a a 和 b b b,表示有一条…

UE5.3 C++ TArray系列(一)

一.TArray概述 它们就相当于C动态数组Vector,但是被UE封装了,懂得都懂反射嘛,要不一不小心就被回收了。 它真的非常常见,我所用的容器中,它绝对排名第一,第二是TMap。 同类好理解,我平时也常用…

【微中子代理踩坑-前端node-sass安装失败】

微中子代理踩坑-前端node-sass安装失败-windows 1.npm版本2.python2.73.安装Visual Studio 1.npm版本 当前使用node版本13.12.0 2.python2.7 安装python2.7.9并配置环境变量 3.安装Visual Studio 安装Visual Studio 我是直接勾选了3个windows的sdk,然后就好了 最后 npm in…

一文了解PLM项目管理系统

PLM项目管理系统详解 PLM项目管理系统的定义和功能 PLM(Product Lifecycle Management,产品生命周期管理)项目管理系统是一种全面管理产品从概念设计、开发、制造、服务到最终退役全过程的软件系统。该系统通过集成产品数据、工作流程、人员…

Pycharm+CodeGPT+Ollama+Deepseek

首先,体验截图: 接着: 1、下载Ollama: Download Ollama on macOS 2、下载模型 以1.5b为例,打开命令行,输入: ollama run deepseek-r1:1.5b 3、Pycharm安装Code GPT插件 打开PyCharm,找到文…

Netty入门详解

引言 Netty 是一个基于 Java 的高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能网络服务器和客户端。它提供了一组丰富的 API,使得开发人员能够轻松地处理各种网络协议,如 TCP、UDP 等,并且支持多种编解码方式&a…

【C++】优先级队列宝藏岛

> 🍃 本系列为初阶C的内容,如果感兴趣,欢迎订阅🚩 > 🎊个人主页:[小编的个人主页])小编的个人主页 > 🎀 🎉欢迎大家点赞👍收藏⭐文章 > ✌️ 🤞 &#x1…

【分布式理论11】分布式协同之分布式事务(一个应用操作多个资源):从刚性事务到柔性事务的演进

文章目录 一. 什么是分布式事务?二. 分布式事务的挑战三. 事务的ACID特性四. CAP理论与BASE理论1. CAP理论1.1. 三大特性1.2. 三者不能兼得 2. BASE理论 五. 分布式事务解决方案1. 两阶段提交(2PC)2. TCC(Try-Confirm-Cancel&…

Linux-C/C++《C++/1、C++基础》(C++语言特性、面向对象等)

这里主要介绍概念为主,主要介绍 C与 C 语言中常用的不同点,和一些新的变化。其中不会去说指针、数据类型、变量类型、判断和循环等这些知识,这些和C 语言基本是一样使用的。我们主要学习 C的面向对象编程,对学习 Qt 有很大的帮助。…

我国首条大型无人机城际低空物流航线成功首航

首航震撼开场:羊肉 “飞” 越 540 公里 在夜色的笼罩下,榆阳马合通用机场的跑道上,一架大型固定翼无人机蓄势待发,机身被灯光照亮,宛如一只即将展翅翱翔的钢铁巨鸟。它的货舱里,满满装载着新鲜的榆林羊肉&a…

python-leetcode 38.翻转二叉树

题目: 给定一个二叉树的根节点root,检查它是否轴对称。 方法一:递归 如果一个树的左子树与右子树镜像对称,那么这个树是对称的。 互为镜像的条件:他们的两个根结点具有相同的值,每棵树的右子树都与另一个树的左子树…

锐浪报表 Grid++Report 通用软件,通用模板个性打印

为提高软件打印报表的适应性,再软件中,使用统一的模板,实现个性化的调整。实现不同用的需求,本人作了以下尝试: 一、表头的选择 二、明细表格的高度的调整 // 明细表标题行高GridppReport_7.DetailGrid.ColumnTitle.H…

Plant Simulation培训教程-AGV配送物流仿真模块

原创 知行 天理智能科技 2024年12月31日 07:00 浙江 又到年终盘点的时候了,在这里我把之前录制的Plant Simulation培训教程-AGV配送物流仿真模块分享出来,有需要的可以直接联系我。 模型路径通过Marker点搭建,适用于磁条导航、二维码导航等…

【Python 专题】数据结构 树

LeetCode 题目104. 二叉树的最大深度(gif 图解)方法一:后序遍历(DFS)方法二:层序遍历(BFS)872. 叶子相似的树(DFS 遍历)1448. 统计二叉树中好节点的数目(DFS 遍历)437. 路径总和 III(前缀和 + DFS 回溯)1372. 二叉树中的最长交错路径(DFS)236. 二叉树的最近公共…