CoROM文本向量-中文-电商领域-base

我要开发同款
匿名用户2024年07月31日
100阅读

技术信息

开源地址
https://modelscope.cn/models/iic/nlp_corom_sentence-embedding_chinese-base-ecom
授权协议
Apache License 2.0

作品详情

coROM中文电商文本表示模型

文本表示是自然语言处理(NLP)领域的核心问题, 其在很多NLP、信息检索的下游任务中发挥着非常重要的作用。近几年, 随着深度学习的发展,尤其是预训练语言模型的出现极大的推动了文本表示技术的效果, 基于预训练语言模型的文本表示模型在学术研究数据、工业实际应用中都明显优于传统的基于统计模型或者浅层神经网络的文本表示模型。这里, 我们主要关注基于预训练语言模型的文本表示。

文本表示示例, 输入一个句子, 输入一个固定维度的连续向量:

  • 输入: 阔腿裤女冬牛仔
  • 输出: [-0.23219466, 0.41309455, 0.26903808, …, -0.276916]

文本的向量表示通常可以用于文本聚类、文本相似度计算、文本向量召回等下游任务中。

Dual Ecoder文本表示模型

基于监督数据训练的文本表示模型通常采用Dual Ecoder框架, 如下图所示。在Dual Ecoder框架中, Query和Documet文本通过预训练语言模型编码后, 通常采用预训练语言模型[CLS]位置的向量作为最终的文本向量表示。基于标注数据的标签, 通过计算query-documet之间的cosie距离度量两者之间的相关性。

使用方式和范围

使用方式:

  • 直接推理, 对给定文本计算其对应的文本向量表示,向量维度768

使用范围:

  • 本模型可以使用在电商领域的文本向量表示及其下游应用场景, 包括双句文本相似度计算、query&多doc候选的相似度排序

如何使用

在ModelScope框架上,提供输入文本(默认最长文本长度为128),即可以通过简单的Pipelie调用来使用coROM文本向量表示模型。ModelScope封装了统一的接口对外提供单句向量表示、双句文本相似度、多候选相似度计算功能

代码示例

from modelscope.models import Model
from modelscope.pipelies import pipelie
from modelscope.utils.costat import Tasks

model_id = "damo/lp_corom_setece-embeddig_chiese-base-ecom"
pipelie_se = pipelie(Tasks.setece_embeddig,
                       model=model_id)
iputs = {
    'source_setece': ["阔腿裤女冬牛仔"],
    'seteces_to_compare': [
        "阔腿牛仔裤女秋冬款潮流百搭宽松。",
        "牛仔阔腿裤女大码胖mm高腰显瘦夏季薄款宽松垂感泫雅拖地裤子。",
        "阔腿裤男大码高腰宽松。",
    ]
}
result = pipelie_se(iput=iputs)
prit (result)

#{'text_embeddig': array([[-0.23219466,  0.41309455,  0.26903808, ..., -0.27691665,
#         0.39870635,  0.26265654],
#       [-0.22365344,  0.42022845,  0.26665562, ..., -0.2648437 ,
#         0.4074452 ,  0.27727956],
#       [-0.25315332,  0.38203263,  0.2404599 , ..., -0.3280004 ,
#         0.4147297 ,  0.29768175],
#       [-0.24323429,  0.41074494,  0.24910843, ..., -0.30696353,
#         0.4028608 ,  0.2736367 ],
#       [-0.25041878,  0.3749908 ,  0.24194765, ..., -0.3197235 ,
#         0.41340467,  0.27778074]], dtype=float32), 'scores': [70.26205444335938, 70.#42506408691406, 70.55734252929688, 70.36206817626953]}

# 当输入仅含有soure_setece时,会输出source_setece中每个句子的向量表示以及首个句子与其他句子的相似度。
iputs2 = {
    'source_setece': [
        "阔腿牛仔裤女秋冬款潮流百搭宽松。",
        "牛仔阔腿裤女大码胖mm高腰显瘦夏季薄款宽松垂感泫雅拖地裤子。",
        "阔腿裤男大码高腰宽松。",
    ]
}
result = pipelie_se(iput=iputs2)
prit (result)
# {'text_embeddig': array([[ 0.70111793, -0.09922647, -0.3839505 , ...,  0.04588755,
#        -0.03885759, -0.34192216],
#       [ 0.50684625, -0.24223177, -0.1910337 , ...,  0.19840555,
#        -0.03236133, -0.07606616],
#       [ 0.6396424 , -0.05542405, -0.15083028, ..., -0.2550505 ,
#         0.10299131, -0.23259829]], dtype=float32), 'scores': [68.76390075683594, 67.31983184814453]}

默认向量维度768, scores中的score计算两个向量之间的L2距离得到

模型局限性以及可能的偏差

本模型基于MultiCPR(电商领域)上训练,在其他垂类领域文本上的文本效果会有降低,请用户自行评测后决定如何使用

模型训练

训练流程

  • 模型: 双塔文本表示模型, 采用coROM模型作为预训练语言模型底座
  • 二阶段训练: 模型训练分为两阶段, 一阶段的负样本数据从官方提供文档集随机采样负样本, 二阶段通过Dese Retrieval挖掘难负样本扩充训练训练数据重新训练

模型采用4张NVIDIA V100机器训练, 超参设置如下:

trai_epochs=3
max_sequece_legth=128
batch_size=64
learig_rate=5e-6
optimizer=AdamW

训练示例代码

# 需在GPU环境运行
# 加载数据集过程可能由于网络原因失败,请尝试重新运行代码
from modelscope.metaifo import Traiers                                                                                                                                                              
from modelscope.msdatasets import MsDataset
from modelscope.traiers import build_traier
import tempfile
import os

tmp_dir = tempfile.TemporaryDirectory().ame
if ot os.path.exists(tmp_dir):
    os.makedirs(tmp_dir)

# load dataset
ds = MsDataset.load('dureader-retrieval-rakig', 'zyzull')
trai_ds = ds['trai'].to_hf_dataset()
dev_ds = ds['dev'].to_hf_dataset()
model_id = 'damo/lp_corom_setece-embeddig_chiese-base-ecom'
def cfg_modify_f(cfg):
    cfg.task = 'setece-embeddig'
    cfg['preprocessor'] = {'type': 'setece-embeddig','max_legth': 256}
    cfg['dataset'] = {
        'trai': {
            'type': 'bert',
            'query_sequece': 'query',
            'pos_sequece': 'positive_passages',
            'eg_sequece': 'egative_passages',
            'text_fileds': ['text'],
            'qid_field': 'query_id'
        },
        'val': {
            'type': 'bert',
            'query_sequece': 'query',
            'pos_sequece': 'positive_passages',
            'eg_sequece': 'egative_passages',
            'text_fileds': ['text'],
            'qid_field': 'query_id'
        },
    }
    cfg['trai']['eg_samples'] = 4
    cfg['evaluatio']['dataloader']['batch_size_per_gpu'] = 30
    cfg.trai.max_epochs = 1
    cfg.trai.trai_batch_size = 4
    retur cfg 
kwargs = dict(
    model=model_id,
    trai_dataset=trai_ds,
    work_dir=tmp_dir,
    eval_dataset=dev_ds,
    cfg_modify_f=cfg_modify_f)
traier = build_traier(ame=Traiers.lp_setece_embeddig_traier, default_args=kwargs)
traier.trai()

模型效果评估

我们主要在文本向量召回场景下评估模型效果, MultiCPR(电商领域)召回评估结果如下:

Model MRR@10
CoROM-Retrieval-base 31.85
CoROM-Rakig-base 47.28
CoROM-Retrieval-tiy 19.53
CoROM-Rakig-tiy 39.31

引用

@article{Log2022MultiCPRAM,
  title={Multi-CPR: A Multi Domai Chiese Dataset for Passage Retrieval},
  author={Digku Log ad Qiog Gao ad Kua Zou ad Guagwei Xu ad Pegju Xie ad Rui Guo ad Jiafeg Xu ad Guaju Jiag ad Luxi Xig ad P. Yag},
  booktitle = {Proceedigs of the 45th Iteratioal ACM SIGIR Coferece o Research ad Developmet i Iformatio Retrieval},
  series = {SIGIR 22},
  year={2022}
}

Cloe with HTTP

 git cloe https://www.modelscope.c/damo/lp_corom_setece-embeddig_chiese-base-ecom.git

功能介绍

coROM中文电商文本表示模型 文本表示是自然语言处理(NLP)领域的核心问题, 其在很多NLP、信息检索的下游任务中发挥着非常重要的作用。近几年, 随着深度学习的发展,尤其是预训练语言模型的出现极大

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论