Transformer实战——Transformer跨语言文本分类

Transformer实战------Transformer跨语言文本分类

    • [0. 前言](#0. 前言)
    • [1. 跨语言文本分类](#1. 跨语言文本分类)
    • [2. 数据加载与处理](#2. 数据加载与处理)
    • [3. 模型训练与测试](#3. 模型训练与测试)
    • 相关链接

0. 前言

我们已经了解了跨语言模型能够理解不同语言,并且相似的句子(无论为何种语言)在语义向量空间中彼此接近。但问题在于,如何在样本较少的情况下,利用这种能力来解决实际问题。

1. 跨语言文本分类

例如,假设正在为一个聊天机器人开发意图分类系统,其中第二种语言的样本很少甚至没有;而第一语言有足够的样本。在这种情况下,可以冻结跨语言模型本身,只训练一个分类器来完成任务。训练好的分类器可以在第二种语言上进行测试,而不是在用于训练的语言上进行测试。

在本节中,将学习如何用英语训练一个跨语言模型进行文本分类,并在其他语言上进行测试。我们选择了一种低资源语言------高棉语 (Khmer),互联网上关于高棉语的资源很少,很难找到高质量的数据集来训练模型。我们将使用 IMDb 电影评论数据集,测试模型在未经训练的语言上的表现。

模型训练与测试流程如下图所示。模型在左侧的训练数据上进行训练,然后将该模型应用于右侧的测试集。需要注意的是,机器翻译 (Machine Translation, MT) 和句子编码映射在这一流程中起着重要作用。

2. 数据加载与处理

(1) 首先,加载数据集:

python 复制代码
from datasets import load_dataset 
imdb = load_dataset("imdb")

(2) 在使用数据集之前打乱样本的顺序:

python 复制代码
imdb = imdb.shuffle()

(3) 接下来,从数据集中划分出一个测试集,并将其翻译成高棉语。为此,可以使用 Google 翻译等翻译应用。首先,将数据集保存为 Excel 格式:

python 复制代码
imdb_x = [x for x in imdb['train'][:1000]['text']] 
labels = [x for x in imdb['train'][:1000]['label']] 
import pandas as pd 
pd.DataFrame(imdb_x, 
             columns=["text"]).to_excel( 
                                 "imdb.xlsx", 
                                  index=None) 

(4) 之后,可以将其上传到翻译应用(如 Google 翻译)中并获取该数据集的高棉语翻译版本:

(5) 选择并上传文档后,将获得高棉语的翻译版本,可以将其复制并粘贴到 Excel 文件中,同样需要将其保存为 Excel 格式。最终得到一个翻译自原始英语数据集的 Excel 文档,使用 pandas 读取该文件:

python 复制代码
pd.read_excel("KHMER.xlsx") 

结果如下所示:

(6) 获取文本部分:

python 复制代码
imdb_khmer = list(pd.read_excel("KHMER.xlsx").text) 

(7) 得到两种语言的文本和标签后,划分训练和测试验证集:

python 复制代码
from sklearn.model_selection import train_test_split
train_x, test_x, train_y, test_y, khmer_train, khmer_test = train_test_split(imdb_x, labels, imdb_khmer, test_size = 0.2, random_state = 1) 

(8) 接下来,使用 XLM-R 跨语言模型为这些句子提供表示。首先,加载模型:

python 复制代码
from sentence_transformers import SentenceTransformer 
model = SentenceTransformer("stsb-xlm-r-multilingual") 

(9) 获取句子的向量表示:

python 复制代码
encoded_train = model.encode(train_x) 
encoded_test = model.encode(test_x) 
encoded_khmer_test = model.encode(khmer_test) 

(10) 将标签转换为 NumPy 格式,因为在使用 Keras 模型的 fit 函数时,TensorFlowKeras 需要处理 NumPy 数组:

python 复制代码
import numpy as np 
train_y = np.array(train_y) 
test_y = np.array(test_y) 

3. 模型训练与测试

(1) 创建模型对表示进行分类:

python 复制代码
import tensorflow as tf 
input_ = tf.keras.layers.Input((768,)) 
classification = tf.keras.layers.Dense( 
                                1, 
                                activation="sigmoid")(input_) 
classification_model = tf.keras.Model(input_, classification) 
classification_model.compile( 
               loss=tf.keras.losses.BinaryCrossentropy(), 
               optimizer="Adam", 
               metrics=["accuracy", "Precision", "Recall"]) 

(2) 训练模型:

复制代码
classification_model.fit( 
                     x = encoded_train, 
                     y = train_y, 
                     validation_data=(encoded_test, test_y), 
                     epochs = 20) 

模型在 20 个训练 epoch 的性能变化如下所示:

可以看到,我们使用英文测试集来评估模型在各个训练 epoch 的表现,最终结果如下:

shell 复制代码
val_loss: 0.5226
val_accuracy: 0.7150
val_precision: 0.7600
val_recall: 0.6972

(3) 我们已经训练了模型并在英文数据集上进行了测试,接下来,我们在高棉语测试集上进行测试:

python 复制代码
classification_model.evaluate(x = encoded_khmer_test,
                              y = test_y) 

测试结果如下所示:

shell 复制代码
val_loss: 0.5944913625717163
val_accuracy: 0.7250000238418579
val_precision: 0.7014925479888916
val_recall: 0.8623853325843811

我们已经了解了如何利用跨语言模型在低资源语言中发挥其能力。当在某些情况下,训练模型的数据非常稀缺甚至没有数据时,能够使用这种能力能够发挥重要作用。

相关链接

Transformer实战(1)------词嵌入技术详解
Transformer实战(2)------循环神经网络详解
Transformer实战(3)------从词袋模型到Transformer:NLP技术演进
Transformer实战(4)------从零开始构建Transformer
Transformer实战(5)------Hugging Face环境配置与应用详解
Transformer实战(6)------Transformer模型性能评估
Transformer实战(7)------datasets库核心功能解析
Transformer实战(8)------BERT模型详解与实现
Transformer实战(9)------Transformer分词算法详解
Transformer实战(10)------生成式语言模型 (Generative Language Model, GLM)
Transformer实战(11)------从零开始构建GPT模型
Transformer实战(12)------基于Transformer的文本到文本模型
Transformer实战(13)------从零开始训练GPT-2语言模型
Transformer实战(14)------微调Transformer语言模型用于文本分类
Transformer实战(15)------使用PyTorch微调Transformer语言模型
Transformer实战(16)------微调Transformer语言模型用于多类别文本分类
Transformer实战(17)------微调Transformer语言模型进行多标签文本分类
Transformer实战(18)------微调Transformer语言模型进行回归分析
Transformer实战(19)------微调Transformer语言模型进行词元分类
Transformer实战(20)------微调Transformer语言模型进行问答任务
Transformer实战(21)------文本表示(Text Representation)
Transformer实战(22)------使用FLAIR进行语义相似性评估
Transformer实战(23)------使用SBERT进行文本聚类与语义搜索
Transformer实战(24)------通过数据增强提升Transformer模型性能
Transformer实战(25)------自动超参数优化提升Transformer模型性能
Transformer实战(26)------通过领域适应提升Transformer模型性能
Transformer实战(27)------参数高效微调(Parameter Efficient Fine-Tuning,PEFT)
Transformer实战(28)------使用 LoRA 高效微调 FLAN-T5
Transformer实战(29)------大语言模型(Large Language Model,LLM)
Transformer实战(30)------Transformer注意力机制可视化
Transformer实战(31)------解释Transformer模型决策
Transformer实战(32)------Transformer模型压缩
Transformer实战(33)------高效自注意力机制
Transformer实战(34)------多语言和跨语言Transformer模型
Transformer实战(35)------跨语言相似性任务

相关推荐
熊文豪13 小时前
CANN ops-transformer算子库架构与设计理念
深度学习·架构·transformer·cann
哈__13 小时前
CANN加速视觉Transformer推理:注意力机制优化与高效计算策略
人工智能·深度学习·transformer
摘星编程13 小时前
CANN ops-nn 算子解读:Transformer注意力机制中的Softmax实现原理
人工智能·深度学习·transformer
渡我白衣13 小时前
信而有征——模型评估、验证与可信部署的完整体系
人工智能·深度学习·神经网络·目标检测·机器学习·计算机视觉·自然语言处理
铁蛋AI编程实战13 小时前
DeepSeek mHC解析(流形约束超连接)
人工智能·深度学习·机器学习
巫婆理发22221 小时前
循环序列模型
深度学习·神经网络
fanstuck1 天前
从0到提交,如何用 ChatGPT 全流程参与建模比赛的
大数据·数学建模·语言模型·chatgpt·数据挖掘
春日见1 天前
vscode代码无法跳转
大数据·人工智能·深度学习·elasticsearch·搜索引擎
zhangfeng11331 天前
氨基酸序列表示法,蛋白质序列表达 计算机中机器学习 大语言模型中的表达,为什么没有糖蛋白或者其他基团磷酸化甲基化乙酰化泛素化
人工智能·机器学习·语言模型