科大讯飞2022机器翻译质量评估挑战赛

摘要

合集:AI案例-自然语言处理-传媒
赛题:科大讯飞2022-机器翻译质量评估挑战赛
AI问题:文本相似度评估。
数据集:中英翻译数据集,包括500句中英机器翻译及人工评分数据、和500句中英人工翻译测试数据用于评估机器翻译的质量。
数据集发布方:科大讯飞股份有限公司
数据集价值:挖掘中英人工翻译及评分数据价值,采用合适的算法评估机器翻译质量。
解决方案:使用Qwen1.5-1.8B-Chat大型语言模型进行文本生成和翻译。使用bge-small-zh-v1.5模型计算文本相似度。

一、赛题描述

机器翻译质量评估(QE)指在没有人工翻译参考下对机器翻译系统译文进行自动打分。一方面,QE技术可以协助人工校正机器翻译后编辑(PE)过程,通过QE评分指示机器翻译结果是否值得译后编辑;另一方面,QE技术可以用来改善机器翻译系统,通过QE技术挖掘机器翻译系统存在的死点问题,从而进行数据清洗,迭代优化机器翻译模型质量。当前基于神经网络模型的QE技术受到学术界关注,但是工业级QE技术应用尚不成熟,由于人工评分数据稀疏、评分主观性较大、数据多样性差等问题,QE技术还需要研究和优化。

任务为在提供的500句中->英方向的翻译数据上,对机器翻译的结果进行质量评估,评分范围是0-100分。

二、数据集描述

1、数据内容

  1. 训练集:无
  2. 验证集:500句中英机器翻译数据及人工评分数据;
  3. 测试集:500句中英人工翻译数据。假设人工翻译的质量最优,用于评估机器翻译的质量。

2、验证集

验证集由平行句对数据文件、和单语数据文件组成,平行句对数据文件中每行包含英语-中文对齐句子,源/目标语言句子间采用’\t’分隔。开发集包含机器翻译句对及人工评分数据(0-100分,打分最小粒度为5分)。

文件数据样例:valid.txt

With Murray seemingly happy to just keep the ball in play in the early moments, Federer then stepped in with aggressive winners off the backhand and forehand sides to break for 2-0.   在穆雷似乎乐于在前几局保持球路的情况下,费德勒随后以极具攻击性的反手和正手制胜球取得2-0的破发。   100
屏幕需要稍加区别对待。 The screen needs to be treated a little differently. 100
He told the referee that he had not been fouled, but the referee insisted he take the penalty kick. 他 告诉 裁判 他 并 没有 犯规 , 但是 裁判 坚持 让 他 踢 点球 。 100
我明天十点半的飞机,呃然后我要去洛杉矶,还有华盛顿,然后我还要去加拿大,嗯,还要去蒙特利尔。 I will fly at 10:30 tomorrow, and then I will go to Los Angeles, and Washington, and then I will go to Canada, and I will also go to Montreal. 100

3、测试集

为了方便组织评测,在评测阶段组织方发放测试集文件中只包含机器翻译句对(删除最后一栏评分数据),参赛选手需要提交QE系统评分数据,并按照开发集数据格式提交(不要打乱文件数据顺序),文件命名test.txt。

文件数据样例:test.txt

在变电所和供电系统的设计和运行中,基于如下用途必须进行短路电流的计算: In the design and operation of substations and power supply systems, the calculation of short-circuit current must be carried out for the following purposes:
The Prostate Testing for Cancer and Treatment (ProtecT) study compared prostatectomy with active surveillance in men with PSA-detected prostate cancer. 前列腺癌检测与治疗(ProtecT)研究比较了PSA检测出前列腺癌的男性患者的前列腺切除术与主动监测。
Particles with nonzero electric charge interact with each other by exchanging photons, the carriers of the electromagnetic force. 电电荷为非零的粒子通过交换光子(电磁力的载体)相互作用。
...

4、数据集版权许可协议

BY-NC-SA 4.0
https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans

三、解决方案样例

1、工作原理

源码:iFLYTEK-2022-Translation-Quality.ipynb

这个Python脚本是为双语文本匹配任务设计的解决方案,用于机器翻译质量评估。主要实现了两个功能:

  • 使用Qwen1.5-1.8B-Chat大型语言模型进行文本生成和翻译
  • 使用bge-small-zh-v1.5句子嵌入模型计算文本相似度

2、模型

解决方案采用Qwen1.5-1.8B-Chat模型。Qwen1.5-1.8B-Chat是阿里巴巴推出的开源大语言模型系列中的一员,属于轻量级但功能强大的对话模型。

3、核心功能

a、语言模型部分

  • 使用Qwen模型进行文本生成
  • 实现了对话模板应用(apply_chat_template)
  • 支持系统消息和用户消息的对话格式
  • 用于将英文翻译成中文

b、相似度计算部分

  • 使用BGE模型生成句子嵌入
  • 计算两个句子嵌入的余弦相似度(通过点积,因为嵌入已归一化)
  • 将相似度分数转换为0-100的整数

4、运行环境

外部库名称版本号
python3.12.8
pandas1.5.3
numpy1.26.4
transformers4.51.3
sentence-transformers3.4.1

四、处理流程

1、导入库

  • 导入了必要的库:os(操作系统相关)、string(字符串操作)、pandas(数据处理)、numpy(数值计算)。
  • transformers库中导入AutoModelForCausalLM(用于因果语言模型)和AutoTokenizer(用于分词器)。
  • sentence_transformers库中导入modelsSentenceTransformer(用于句子嵌入和相似度计算)。
import os
import string
import pandas as pd
import numpy as np

from transformers import AutoModelForCausalLM, AutoTokenizer
from sentence_transformers import models, SentenceTransformer

2、使用聊天模板对话

  • 设置设备为cuda(即使用GPU)。
  • 从本地目录./Qwen1.5-1.8B-Chat/加载一个预训练的因果语言模型(Qwen1.5-1.8B-Chat)和对应的分词器。
  • 定义一个提示(prompt)要求生成关于大语言模型的简短介绍。
  • 构建消息列表,包括系统消息和用户消息。
  • 使用分词器的apply_chat_template方法将消息列表转换为模型输入的文本格式(不进行分词,且添加生成提示)。
  • 将文本分词并转换为PyTorch张量,然后移动到GPU上。
  • 使用模型的generate方法生成文本,设置max_new_tokens=512
  • 从生成的输出中提取新生成的部分(去掉输入部分)。
  • 将生成的ID解码为文本,并存储在response变量中。
device = "cuda" # the device to load the model onto

model = AutoModelForCausalLM.from_pretrained(
   "./Qwen1.5-1.8B-Chat/",
   torch_dtype="auto",
   device_map="auto",
   # offload_folder="./offload", # 加载模型时设置设备映射
   # offload_buffers=True
)
model.to(device)  # 确保模型在 GPU 上
tokenizer = AutoTokenizer.from_pretrained("./Qwen1.5-1.8B-Chat/")

prompt = "Give me a short introduction to large language model."
messages = [
  {"role": "system", "content": "You are a helpful assistant."},
  {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
   messages,
   tokenize=False,
   add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)

generated_ids = model.generate(
   model_inputs.input_ids,
   max_new_tokens=512
)
generated_ids = [
   output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

执行结果:

"A large language model (LLM) is a type of artificial intelligence (AI) that uses deep learning algorithms and neural networks to process natural language text. 
....
As these technologies continue to evolve, researchers and practitioners are exploring novel approaches to improve the performance and reliability of LLMs while addressing the limitations and ethical implications they present."

3、加载数据

  • ./data/test.txt读取一个TSV文件(制表符分隔),没有表头,所以有两列(0和1)。
  • 显示数据框的内容。数据包含500行,每行有两个句子,是中英互译的句子对。
data = pd.read_csv('./data/test.txt', sep='\t', header=None)
data

4、计算句子相似度样例

  • 定义两个句子列表(示例数据)。
  • 指定一个预训练句子嵌入模型(BGE)的路径。
  • 手动构建句子转换模型(SentenceTransformer)。
  • 对两个句子列表分别进行编码,得到归一化的句子嵌入向量。
  • 计算两个列表中句子之间的相似度矩阵(点积),并打印。
sentences_1 = ["样例数据-1", "样例数据-2"]
sentences_2 = ["样例数据-3", "样例数据-4"]

# 直接指定模型文件
model_path = r'./bge-small-zh-v1.5'
model_file = os.path.join(model_path, 'pytorch_model.bin')  # 或 model.safetensors

# 手动指定模型组件
word_embedding_model = models.Transformer(model_path)
pooling_model = models.Pooling(word_embedding_model.get_word_embedding_dimension())
bge_model = SentenceTransformer(modules=[word_embedding_model, pooling_model])

embeddings_1 = bge_model.encode(sentences_1, normalize_embeddings=True)
embeddings_2 = bge_model.encode(sentences_2, normalize_embeddings=True)
similarity = embeddings_1 @ embeddings_2.T
print(similarity)

执行结果:

[[0.9080689 0.8985343]
[0.9336203 0.9120146]]

5、处理数据并生成提交文件

  • 遍历数据框的每一行(500行)。
  • 对于每一行,检查第一个字符串的第一个字符是否是英文字母(即判断该行第一列是否为英文)。确保总是将英文翻译成中文后再与中文文本比较。
  • 构建消息,要求将输入的英文句子(s1)翻译成中文,指令明确不要有其他输出。
  • 使用与之前相同的方法(Qwen模型)生成翻译结果response(即模型翻译出的中文)。
  • 使用BGE模型bge_model分别对翻译结果response和参考中文句子s2进行编码,得到两个句子嵌入向量。
  • 计算这两个嵌入向量的余弦相似度 np.dot()(因为已经归一化,点积就是余弦相似度),然后乘以100并取整(得到0-100之间的整数分数)。
  • 将分数写入到submission.csv文件中(每行一个分数)。
for row in data.iterrows():
   print(row)
   if row[1][0][0].lower() in string.ascii_letters:
       s1 = row[1][0]
       s2 = row[1][1]
   else:
       s1 = row[1][1]
       s2 = row[1][0]

   messages = [
      {"role": "user", "content": f"将英文翻译为中文,不要有其他输出:{s1}"},
  ]
   text = tokenizer.apply_chat_template(
       messages,
       tokenize=False,
       add_generation_prompt=True
  )
   model_inputs = tokenizer([text], return_tensors="pt").to(device)

   generated_ids = model.generate(
       model_inputs.input_ids,
       max_new_tokens=512
  )
   generated_ids = [
       output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
  ]
   response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
   print(response)

   embeddings_1 = bge_model.encode([response, s2], normalize_embeddings=True)
   score = np.dot(embeddings_1[0], embeddings_1[1])
   score = int(score * 100)

   with open('submission.csv', 'a') as up:
       up.write(f'{score}\n')
运行结果:
(0, 0                  在变电所和供电系统的设计和运行中,基于如下用途必须进行短路电流的计算:
1   In the design and operation of substations and...
Name: 0, dtype: object)
在变电站和电力供应系统的设计和运行中,必须进行短路电流的计算以达到以下目的:
(1, 0   The Prostate Testing for Cancer and Treatment ...
1   前列腺癌检测与治疗(ProtecT)研究比较了PSA检测出前列腺癌的男性患者的前列腺切除术与...
Name: 1, dtype: object)
前列腺癌筛查与根治性治疗(ProtecT)研究比较了PSA检测阳性前列腺癌患者进行前列腺切除术和持续监控的疗效。
(2, 0   Particles with nonzero electric charge interac...
1                         电电荷为非零的粒子通过交换光子(电磁力的载体)相互作用。
Name: 2, dtype: object)
带有非零电荷的粒子通过相互交换光子,即电磁力的载体来进行相互作用。
...
(497, 0   在本法规定的范围以外需要悬挂国微或者使用国徽图案的,由全国人民代表大会常务委员会办公厅或者国...
1   If it is necessary to hang the national emblem...
Name: 497, dtype: object)
如果有必要悬挂国徽或在本法规定的范围内使用国徽外,应由全国人民代表大会常务委员会或国务院与相关行政部门联合规定。
(498, 0                               贸易的吹鼓手们对此负有一定的责任。
1   The trade drummers are responsible for this.
Name: 498, dtype: object)
鼓手负责这个。
(499, 0       苹果 。
1   Apples .
Name: 499, dtype: object)
苹果。
提交文件:

提交文件submission.csv 数据样例如下:

Score (质量评估得分 0-100分)
89
90
93
84
96
81

源码开源协议

GPL-v3

五、获取案例套装

需要登录后才允许下载文件包。登录

发表评论