发布时间:2025-07-29
点击次数: 本项目是ai达人特训营的选题,目测该选题来自这个比赛:房产行业聊天问答匹配
背景: 贝壳找房是以技术驱动的品质居住服务平台,“有尊严的服务者、更美好的居住”,是贝壳的使命。在帮助客户实现更美好的居住过程中,客户会和服务者(房产经纪人)反复深入交流对居住的要求,这个交流发生在贝壳APP上的IM中。
IM交流是双方建立信任的必要环节,客户需要在这个场景下经常向服务者咨询许多问题,而服务者是否为客户提供了感受良好、解答专业的服务就很重要,贝壳平台对此非常关注。因此,需要准确找出服务者是否回答了客户的问题,并进一步判断回答得是否准确得体,随着贝壳平台规模扩大,需要AI参与这个过程。
任务:
赛题任务:给定IM交流片段,片段包含一个客户问题以及随后的经纪人若干IM消息,从这些随后的经纪人消息中找出一个是对客户问题的回答。
任务要点:
结果:
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜
说明:比赛已经比较久了,现在只能获取长期公开赛的评分排名,而且没什么人,不过用来学习文本匹配思路还是不错的。
一共有三份数据:训练集、测试集和提交示例。
训练集包含客户问题文件和经纪人回复两个文件,涉及6000段对话(有标签答案)。
测试集包含客户问题文件和经纪人回复两个文件,涉及14000段对话(无标签答案)。
解压训练集和测试集
In [1]!unzip data/data144231/train.zip -d ./data && unzip data/data144231/test.zip -d ./data
Archive: data/data144231/train.zip creating: ./data/train/ inflating: ./data/train/train.query.tsv inflating: ./data/train/train.reply.tsv Archive: data/data144231/test.zip creating: ./data/test/ inflating: ./data/test/test.query.tsv inflating: ./data/test/test.reply.tsv
查看数据示例
In [2]import pandas as pd
train_query = pd.read_csv("data/train/train.query.tsv", sep='\t', header=None)
train_query.columns = ['query_id', 'sentence']# query 文件有 2 列,分别是问题 Id 和客户问题,同一对话 Id 只有一个问题,已脱敏print(train_query.head())
train_reply = pd.read_csv("data/train/train.reply.tsv", sep='\t', header=None)
train_reply.columns = ['query_id', 'reply_id', 'sentence', 'label']# reply 文件有 4 列,分别是:# 对话id,对应客户问题文件中的对话 id # 经纪人回复 Id,Id 对应真实回复顺序# 经纪人回复内容,已脱敏# 经纪人回复标签,1 表示此回复是针对客户问题的回答,0 相反print(train_reply.head())# 训练集文件结构与测试集相同,只不过 reply 文件没有回复标签test_query = pd.read_csv("data/test/test.query.tsv", sep='\t', header=None, encoding='gb18030')
test_query.columns = ['query_id', 'sentence']print(test_query.head())
test_reply = pd.read_csv("data/test/test.reply.tsv", sep='\t', header=None, encoding='gb18030')
test_reply.columns = ['query_id', 'reply_id', 'sentence']print(test_reply.head())
query_id sentence 0 0 采荷一小是分校吧 1 1 毛坯吗? 2 2 你们的佣金费大约是多少和契税是多少。 3 3 靠近川沙路嘛? 4 4 这套房源价格还有优惠空间吗? query_id reply_id sentence label 0 0 0 杭州市采荷第一小学钱江苑校区,杭州市钱江新城实验学校。 1 1 0 1 是的 0 2 0 2 这是5楼 0 3 1 0 因为公积金贷款贷的少 0 4 1 1 是呢 0 query_id sentence 0 0 东区西区?什么时候下证? 1 1 小学哪个 2 2 看哪个? 3 3 面积多少,什么户型 4 4 什么时候能够看房呢? query_id reply_id sentence 0 0 0 我在给你发套 1 0 1 您看下我发的这几套 2 0 2 这两套也是金源花园的 3 0 3 价钱低 4 0 4 便宜的房子,一般都是顶楼
原文:
首先对原始的MLM任务进行改进,引入了Entity-level masking和Phrase-level masking,帮助模型学习更多的词汇短语知识,这个任务也成为了后续中文预训练模型的标配:
同时引入了DLM(Dialogue Language Model)对NSP任务进行了优化,在预测Mask token的同时判断输入的多轮对话(QRQ、QRR、QQR三种模式)是否真实。
首先是框架上的闭环化,把各种下游任务持续加入模型中提升效果:
其次引入更多预训练任务,细节参见原论文。
3.0版本首先延续了之前有效的预训练任务。
其次3.0版本提出了海量无监督文本与大规模知识图谱的平行预训练方法 (Universal Knowledge-Text Prediction)。将5千万知识图谱三元组与4TB大规模语料中相关的文本组成pair,同时输入到预训练模型之中进行联合掩码训练:
语料库 4TB,我的天!!!
简小派
简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。
123
查看详情
结构上,ERNIE 3.0框架分为两层。第一层是通用语义表示网络,该网络学习数据中的基础和通用的知识。第二层是任务语义表示网络,该网络基于通用语义表示,学习任务相关的知识。在学习过程中,任务语义表示网络只学习对应类别的预训练任务,而通用语义表示网络会学习所有的预训练任务。
本项目使用 3.0 版本预训练模型。
在思路 2 的基础上,还可以把 [CLS] 对应的输出拿出来,预测所有候选 reply 中是否存在可以匹配的回答。
本项目采用思路 1 作为 baseline 。
首先安装最新版本的 paddlenlp
In [ ]!pip install paddlenlp --upgrade
上述安装过程可能会报错,大概是parl包的版本依赖问题,对于本项目来说无伤大雅。
训练、测试代码都写在 query_reply_pair.py 文件中,有详细注释。
注意:
运行脚本:
In [4]!python query_reply_pair.py
[2025-06-22 10:04:10,523] [ INFO] - using `logging_steps` to initialize `eval_steps` to 100[2025-06-22 10:04:10,523] [ INFO] - ============================================================[2025-06-22 10:04:10,523] [ INFO] - Model Configuration Arguments
[2025-06-22 10:04:10,523] [ INFO] - paddle commit id :590b4dbcdd989324089ce43c22ef151c746c92a3[2025-06-22 10:04:10,523] [ INFO] - export_model_dir :None[2025-06-22 10:04:10,523] [ INFO] - model_name_or_path :ernie-3.0-medium-zh[2025-06-22 10:04:10,524] [ INFO] -
[2025-06-22 10:04:10,524] [ INFO] - ============================================================[2025-06-22 10:04:10,524] [ INFO] - Data Configuration Arguments
[2025-06-22 10:04:10,524] [ INFO] - paddle commit id :590b4dbcdd989324089ce43c22ef151c746c92a3[2025-06-22 10:04:10,524] [ INFO] - max_seq_length :128[2025-06-22 10:04:10,524] [ INFO] - test_query_path :data/test/test.query.tsv[2025-06-22 10:04:10,524] [ INFO] - test_reply_path :data/test/test.reply.tsv[2025-06-22 10:04:10,524] [ INFO] - train_query_path :data/train/train.query.tsv[2025-06-22 10:04:10,524] [ INFO] - train_reply_path :data/train/train.reply.tsv[2025-06-22 10:04:10,524] [ INFO] -
raw train dataset example: {'query': '东区西区?什么时候下证?', 'reply': '我在给你发套'}.[2025-06-22 10:04:11,911] [ INFO] - We are using <class 'paddlenlp.transformers.ernie.tokenizer.ErnieTokenizer'> to load 'ernie-3.0-medium-zh'.[2025-06-22 10:04:11,911] [ INFO] - Already cached /home/aistudio/.paddlenlp/models/ernie-3.0-medium-zh/ernie_3.0_medium_zh_vocab.txt[2025-06-22 10:04:11,934] [ INFO] - We are using <class 'paddlenlp.transformers.ernie.modeling.ErnieForSequenceClassification'> to load 'ernie-3.0-medium-zh'.[2025-06-22 10:04:11,934] [ INFO] - Already cached /home/aistudio/.paddlenlp/models/ernie-3.0-medium-zh/ernie_3.0_medium_zh.pdparams
W0622 10:04:11.936193 1093 gpu_context.cc:278] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0622 10:04:11.939395 1093 gpu_context.cc:306] device: 0, cuDNN Version: 7.6.
feature train dataset example: {'input_ids': [1, 481, 1535, 7, 96, 10, 59, 225, 940, 2, 1852, 404, 99, 481, 1535, 131, 7, 96, 18, 958, 409, 2485, 225, 121, 4, 1852, 404, 99, 958, 409, 102, 257, 79, 412, 18, 225, 12043, 2], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 'label': 1}.[2025-06-22 10:04:16,960] [ INFO] - ============================================================[2025-06-22 10:04:16,960] [ INFO] - Training Configuration Arguments
[2025-06-22 10:04:16,960] [ INFO] - paddle commit id :590b4dbcdd989324089ce43c22ef151c746c92a3[2025-06-22 10:04:16,961] [ INFO] - _no_sync_in_gradient_accumulation:True[2025-06-22 10:04:16,961] [ INFO] - adam_beta1 :0.9[2025-06-22 10:04:16,961] [ INFO] - adam_beta2 :0.999[2025-06-22 10:04:16,961] [ INFO] - adam_epsilon :1e-08[2025-06-22 10:04:16,961] [ INFO] - current_device :gpu:0[2025-06-22 10:04:16,961] [ INFO] - dataloader_drop_last :False[2025-06-22 10:04:16,961] [ INFO] - dataloader_num_workers :4[2025-06-22 10:04:16,961] [ INFO] - device :gpu[2025-06-22 10:04:16,961] [ INFO] - disable_tqdm :False[2025-06-22 10:04:16,961] [ INFO] - do_eval :True[2025-06-22 10:04:16,961] [ INFO] - do_export :False[2025-06-22 10:04:16,961] [ INFO] - do_predict :True[2025-06-22 10:04:16,961] [ INFO] - do_train :True[2025-06-22 10:04:16,961] [ INFO] - eval_batch_size :128[2025-06-22 10:04:16,961] [ INFO] - eval_steps :100[2025-06-22 10:04:16,961] [ INFO] - evaluation_strategy :IntervalStrategy.STEPS[2025-06-22 10:04:16,961] [ INFO] - fp16 :False[2025-06-22 10:04:16,961] [ INFO] - fp16_opt_level :O1[2025-06-22 10:04:16,961] [ INFO] - gradient_accumulation_steps :1[2025-06-22 10:04:16,961] [ INFO] - greater_is_better :True[2025-06-22 10:04:16,962] [ INFO] - ignore_data_skip :False[2025-06-22 10:04:16,962] [ INFO] - label_names :None[2025-06-22 10:04:16,962] [ INFO] - learning_rate :5e-05[2025-06-22 10:04:16,962] [ INFO] - load_best_model_at_end :True[2025-06-22 10:04:16,962] [ INFO] - local_process_index :0[2025-06-22 10:04:16,962] [ INFO] - local_rank :-1[2025-06-22 10:04:16,962] [ INFO] - log_level :-1[2025-06-22 10:04:16,962] [ INFO] - log_level_replica :-1[2025-06-22 10:04:16,962] [ INFO] - log_on_each_node :True[2025-06-22 10:04:16,962] [ INFO] - logging_dir :work/query_reply_pair/runs/Jun22_10-04-10_jupyter-532817-4195533[2025-06-22 10:04:16,962] [ INFO] - logging_first_step :False[2025-06-22 10:04:16,962] [ INFO] - logging_steps :100[2025-06-22 10:04:16,962] [ INFO] - logging_strategy :IntervalStrategy.STEPS[2025-06-22 10:04:16,962] [ INFO] - lr_scheduler_type :SchedulerType.LINEAR[2025-06-22 10:04:16,962] [ INFO] - max_grad_
norm :1.0[2025-06-22 10:04:16,962] [ INFO] - max_steps :-1[2025-06-22 10:04:16,962] [ INFO] - metric_for_best_model :accuracy[2025-06-22 10:04:16,962] [ INFO] - minimum_eval_times :None[2025-06-22 10:04:16,962] [ INFO] - no_cuda :False[2025-06-22 10:04:16,962] [ INFO] - num_train_epochs :0.5[2025-06-22 10:04:16,962] [ INFO] - optim :OptimizerNames.ADAMW[2025-06-22 10:04:16,962] [ INFO] - output_dir :work/query_reply_pair/test[2025-06-22 10:04:16,962] [ INFO] - overwrite_output_dir :False[2025-06-22 10:04:16,962] [ INFO] - past_index :-1[2025-06-22 10:04:16,962] [ INFO] - per_device_eval_batch_size :128[2025-06-22 10:04:16,962] [ INFO] - per_device_train_batch_size :128[2025-06-22 10:04:16,963] [ INFO] - prediction_loss_only :False[2025-06-22 10:04:16,963] [ INFO] - process_index :0[2025-06-22 10:04:16,963] [ INFO] - remove_unused_columns :True[2025-06-22 10:04:16,963] [ INFO] - report_to :['visualdl'][2025-06-22 10:04:16,963] [ INFO] - resume_from_checkpoint :None[2025-06-22 10:04:16,963] [ INFO] - run_name :test[2025-06-22 10:04:16,963] [ INFO] - s*e_on_each_node :False[2025-06-22 10:04:16,963] [ INFO] - s*e_steps :100[2025-06-22 10:04:16,963] [ INFO] - s*e_strategy :IntervalStrategy.STEPS[2025-06-22 10:04:16,963] [ INFO] - s*e_total_limit :2[2025-06-22 10:04:16,963] [ INFO] - scale_loss :32768[2025-06-22 10:04:16,963] [ INFO] - seed :42[2025-06-22 10:04:16,963] [ INFO] - should_log :True[2025-06-22 10:04:16,963] [ INFO] - should_s*e :True[2025-06-22 10:04:16,963] [ INFO] - train_batch_size :128[2025-06-22 10:04:16,963] [ INFO] - warmup_ratio :0.0[2025-06-22 10:04:16,963] [ INFO] - warmup_steps :0[2025-06-22 10:04:16,963] [ INFO] - weight_decay :0.0[2025-06-22 10:04:16,963] [ INFO] - world_size :1[2025-06-22 10:04:16,963] [ INFO] -
[2025-06-22 10:04:16,964] [ INFO] - ***** Running training *****[2025-06-22 10:04:16,965] [ INFO] - Num examples = 17268[2025-06-22 10:04:16,965] [ INFO] - Num Epochs = 1[2025-06-22 10:04:16,965] [ INFO] - Instantaneous batch size per device = 128[2025-06-22 10:04:16,965] [ INFO] - Total train batch size (w. parallel, distributed & accumulation) = 128[2025-06-22 10:04:16,965] [ INFO] - Gradient Accumulation steps = 1[2025-06-22 10:04:16,965] [ INFO] - Total optimization steps = 67.5[2025-06-22 10:04:16,965] [ INFO] - Total num train samples = 8634.0
100%|███████████████████████████████████████████| 67/67 [00:17<00:00, 4.40it/s][2025-06-22 10:04:34,326] [ INFO] -
Training completed.
{'train_runtime': 17.4487, 'train_samples_per_second': 494.821, 'train_steps_per_second': 3.84, 'train_loss': 0.352832708785783, 'epoch': 0.4963}
100%|███████████████████████████████████████████| 67/67 [00:17<00:00, 3.84it/s][2025-06-22 10:04:34,416] [ INFO] - S*ing model checkpoint to work/query_reply_pair/test[2025-06-22 10:04:36,894] [ INFO] - tokenizer config file s*ed in work/query_reply_pair/test/tokenizer_config.json[2025-06-22 10:04:36,895] [ INFO] - Special tokens file s*ed in work/query_reply_pair/test/special_tokens_map.json
***** train metrics *****
epoch = 0.4963
train_loss = 0.3528
train_runtime = 0:00:17.44
train_samples_per_second = 494.821
train_steps_per_second = 3.84[2025-06-22 10:04:36,898] [ INFO] - ***** Running Evaluation *****[2025-06-22 10:04:36,898] [ INFO] - Num examples = 4317[2025-06-22 10:04:36,898] [ INFO] - Pre device batch size = 128[2025-06-22 10:04:36,898] [ INFO] - Total Batch size = 128[2025-06-22 10:04:36,898] [ INFO] - Total prediction steps = 34
100%|███████████████████████████████████████████| 34/34 [00:02<00:00, 12.31it/s]
***** eval metrics *****
epoch = 0.4963
eval_accuracy = 0.8826
eval_loss = 0.283
eval_runtime = 0:00:03.21
eval_samples_per_second = 1344.038
eval_steps_per_second = 10.585[2025-06-22 10:04:40,112] [ INFO] - ***** Running Prediction *****[2025-06-22 10:04:40,112] [ INFO] - Num examples = 53757[2025-06-22 10:04:40,112] [ INFO] - Pre device batch size = 128[2025-06-22 10:04:40,112] [ INFO] - Total Batch size = 128[2025-06-22 10:04:40,112] [ INFO] - Total prediction steps = 420
100%|█████████████████████████████████████████| 420/420 [00:51<00:00, 11.37it/s]***** test metrics *****
test_runtime = 0:00:52.06
test_samples_per_second = 1032.496
test_steps_per_second = 8.067
100%|█████████████████████████████████████████| 420/420 [00:52<00:00, 7.95it/s]
训练结果可视化:
点击页面最左侧一列菜单栏中的 数据模型可视化 ,添加 logdir 然后启动服务,就可以看到训练过程的 loss 曲线等信息。
log 文件会保存在类似 work/query_reply_pair/runs/Jun22_10-01-49_jupyter-532817-4195533 这样的路径下面。
由于上面训练过程只跑了 0.5 个 epoch,曲线基本只有一个点,这里就不进行展示了。
测试集预测结果保存在 work/query_reply_pair/test/test_labels.tsv 文件中,你可以直接点开看一下结果。
In [7]import pandas as pd file_path = "work/query_reply_pair/test/test_labels.tsv"df = pd.read_csv(file_path, sep='\t') df.head()
query reply label 0 东区西区?什么时候下证? 我在给你发套 0 1 东区西区?什么时候下证? 您看下我发的这几套 0 2 东区西区?什么时候下证? 这两套也是金源花园的 0 3 东区西区?什么时候下证? 价钱低 0 4 东区西区?什么时候下证? 便宜的房子,一般都是顶楼 0
生成竞赛提交文件:
In [8]import pandas as pd sample_submit_path = "data/data144231/sample_submission.tsv"submit_path = "submit.tsv"submit = pd.read_csv(sample_submit_path, sep='\t', header=None) submit.columns = ['query_id', 'reply_id', 'label'] test_labels = pd.read_csv(file_path, sep='\t') label = test_labels['label'] submit['label'] = label submit.to_csv(submit_path, sep='\t', header=None, index=None)
根目录下 submit.tsv 文件就可以拿去提交啦,提交大概 0.75+ 的分数 (num_train_epochs = 5.0 的情况下)。
以上就是【AI达人特训营】PaddleNLP实现聊天问答匹配的详细内容,更多请关注其它相关文章!
# qq
# 杭州市
# 都是
# 一言
# 给你
# 我在
# 什么时候
# 中文网
# 达人
# fig
# udio
# 万知
# talk
# red
# ai
# python
# type
# 活动房网站推广费用情况
# SEO工具移动端
# 莱山seo优化推广方式
# 网站建设优化推广致电
# 江苏网站推广sem
# 乐清团购推广网站
# seo需要懂html吗
# 青海seo助手怎么选
# 旅游推广哪个网站好
# ktv营销策划推广文案
# 两套
# 只有一个
相关栏目:
【
行业新闻62819 】
【
科技资讯67470 】
相关推荐:
ChatGPT 可以设计机器人吗?
华为推出全新操作系统HarmonyOS 4,AI和新引擎完美融合
爱设计 AI 一键生成 PPT 工具上线:输入标题即可生成 PPT
【澎湃原动力】人工智能产业协同创新中心:全产业链资源在这里汇聚
华为发布两款AI存储新品
重磅! 捷通华声灵云AICC荣获第二届光合组织AI解决方案大赛二等奖
微软Bing聊天机器人电脑端即将支持语音提问
Moka发布AI原生HR SaaS产品“Moka Eva”,布局AGI时代
《共同的演化》展览启幕,重新思考人类与人工智能关系
OpenAI 为开发者推出 GPT 聊天机器人 API 大更新,同时降低价格
山东机器人编程:Scratch编程基础,认识舞台!~济南机器人编程
助力人工智能产业高质量发展 龙岗区算法训练基地正式启用
AI与5G的强强联合:唤醒数字时代的无尽潜能
iPhone两秒出图,目前已知的最快移动端Stable Diffusion模型来了
PHP和OpenCV库:如何实现人脸识别
利亚德加码AI战略,与光年无限图灵机器人全面开展AI研发业务合作
麦肯锡:到 2045 年左右,将有 50% 工作被 AI 接管
厂商陆续公布AI进展 完美世界游戏展示复合应用AI in GamePlay
视觉中国推出AI灵感绘图功能,付费后可在“合法合规前提下使用”
杭州举办第19届亚运会,主题为「亚运元宇宙」的发布仪式举行
布局智能物联新时代,中国移动“5G+物联网”亮相2025 MWC
人工智能助力林草行业高质量发展
AI绘画,还需要懂数学?
数字彩排、虚拟建厂!这家顶级洗衣机工厂敲开“工业元宇宙”之门
大型无人机FH-98国内首次夜航转场成功
RoboNeo安装教程
第四范式「式说」大模型入选《2025年通用人工智能创新应用案例集》
如何用AI开创智慧能源新时代?固德威正让能源“通人性”!
首届亚太网络法实务大会召开 九位大咖探讨元宇宙与人工智能发展
智能化解决方案:保障数据安全阻击泄露和丢失
AI+游戏首度大范围公布实际应用成果,AI全面来临还有多远?
科学家称,面对人工智能,人类未来或只有灭亡与虚拟永生两个选择
大模型训练成本降低近一半!新加坡国立大学最新优化器已投入使用
报告称 70% 程序员已使用各种 AI 工具编程
普渡机器人与变形金刚品牌合作,特别活动爆火,商品售罄!
DeepMind推惊世排序算法,C++库忙更新!
全球首款AI裸眼3D平板 国产的售价破万
马斯克回应“人工智能让一切变得更好”:我们已经是半机器人了
【|直播|预告】人工智能高峰论坛将于7月2日13:30准时开播!
央视报道!星纪魅族集团车载人机交互技术成世界移动通信大会焦点
创作音乐/音频的Meta开源AI工具AudioCraft,让用户通过文本提示实现
人工智能创作的“婴儿版超级英雄”,你觉得哪个最可爱
国宝级文物“铜兽驮跪坐人顶尊铜像”完成模拟拼接,腾讯AI立功
云南首例达芬奇机器人微创心脏手术成功开展
水路两栖艇、消防灭火机器人……这个展览“黑科技”抢眼
基于信息论的校准技术,CML让多模态机器学习更可靠
乐天派桌面机器人加入小米米家生态系统,实现与其他智能设备的互联
马斯克反讽人工智能AI炒作:“机器学习”本质就是统计
曝光HarmonyOS 4的重要新能力:全面升级AI大模型,小艺实现全面进化
清华系面壁智能开源中文多模态大模型VisCPM :支持对话文图双向生成,吟诗作画能力惊艳