Taskflow API之三大特性

网友投稿 211 2024-01-26

0. PaddleNLP 一键预测能力 Taskflow API之三大特性功能全面全场景支持:覆盖NLU和NLG领域十一大经典任务文档级输入:支持文档级输入,解决预训练模型对输入文本的长度限制问题,大大节省用户输入长文本时的。

代码开发量定制化训练:支持用户使用自己的数据集进行定制化训练,通过自定义路径一键使用定制化训练好的模型简捷易用 开箱即用,学习成本低,几行代码便可完成调用产业级效果聚合众多百度自然语言处理领域自研算法

以及社区优秀开源模型,模型效果领先 1. 环境准备!pipinstall--upgradepaddlenlp !pipinstallpypinyin !pipinstallLAC 2. 基础能力这一章节将会学到的Taskflow技能:

利用PaddleNLP Taskflow提取句子中的语言学特征:中文分词、词性识别,依存关系,命名实体识别、关系抽取、事件抽取等 2.0 信息抽取 PaddleNLP 5.16新发开放域信息抽取能力,只有你想不到的schema,没有UIE抽取不到的结果哦!。

详情可参考:信息抽取一键预测能力[1] 如需定制化训练,全套代码在此:传送门[2] 2.0.1 实体抽取frompprintimportpprint frompaddlenlpimportTaskflow schema=[时间,选手,赛事名称]#Definetheschemaforentityextr

action ie=Taskflow(information_extraction,schema=schema) pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!"))#Bet

terprintresultsusingpprint [{时间:[{end:6, probability:0.9857378532473966, start:0, text:2月8日上午}], 赛事名称:[{end:23, probability:0.8503082243989795, start:6, text:北京冬奥会自由式滑雪女子大跳台决赛}], 选手:[{end:31, probability:0.8981535684051067, start:28, text:谷爱凌}]}]

2.0.2 关系抽取# schema={歌曲名称:[歌手,所属专辑]}#Definetheschemaforrelationextraction ie.set_schema(schema)#Resetschema ie(《告别了》是孙耀威在专辑爱的故事里面的歌曲)

[{歌曲名称:[{text:告别了, start:1, end:4, probability:0.6296147448952354, relations:{歌手:[{text:孙耀威, start:6, end:9, probability:0.9988380409852198}], 所属专辑:[{text:爱的故事, start:12, end:16, probability:0.9968462078543183}]}}, {text:爱的故事, start:12, end:16, probability:0.28168534139751955, relations:{歌手:[{text:孙耀威, start:6, end:9, probability:0.9951413914998}]}}]}]

2.0.3 事件抽取schema={地震触发词:[地震强度,时间,震中位置,震源深度]}#Definetheschemaforeventextraction ie.set_schema(schema)#Resetschema ie(中国地震台网正式测定:5月16日06时08分在云南临沧市凤庆县(北纬24.34度,东经99.98度)发生3.5级地震,震源深度10千米。

) [{地震触发词:[{text:地震, start:56, end:58, probability:0.9977425555988333, relations:{地震强度:[{text:3.5级, start:52, end:56, probability:0.998080158269417}], 时间:[{text:5月16日06时08分, start:11, end:22, probability:0.9853299181377793}], 震中位置:[{text:云南临沧市凤庆县(北纬24.34度,东经99.98度), start:23, end:50, probability:0.7874013050677604}], 震源深度:[{text:10千米, start:63, end:67, probability:0.9937973233053299}]}}]}]

2.0.4 句子级情感分类schema=情感倾向[正向,负向]#Definetheschemaforsentence-levelsentimentclassification ie.set_schema(schema)#Resetschema ie(这个

产品用起来真的很流畅,我非常喜欢) [{情感倾向[正向,负向]:[{text:正向,probability:0.9990024058203417}]}] 2.0.5 评价维度、观点抽取,对象级情感分析

schema={评价维度:[观点词,情感倾向[正向,负向]]}#Definetheschemaforopinionextraction ie.set_schema(schema)#Resetschema pprint(ie("地址不错,服务一般,设施陈旧"))#Betterprintresultsusingpprint

[{评价维度:[{end:2, probability:0.9888138676472664, relations:{情感倾向[正向,负向]:[{probability:0.998228967796706, text:正向}], 观点词:[{end:4, probability:0.9927846479537372, start:2, text:不错}]}, start:0, text:地址}, {end:12, probability:0.9588297379365116, relations:{情感倾向[正向,负向]:[{probability:0.9949388606013692, text:负向}], 观点词:[{end:14, probability:0.9286749937276362, start:12, text:陈旧}]}, start:10, text:设施}, {end:7, probability:0.959285414999755, relations:{情感倾向[正向,负向]:[{probability:0.9952498258302498, text:负向}], 观点词:[{end:9, probability:0.9949358587838901, start:7, text:一般}]}, start:5, text:服务}]}]

2.0.6 跨任务跨领域抽取schema=[寺庙,{丈夫:妻子}] ie.set_schema(schema) pprint(ie(李治即位后,让身在感业寺的武则天续起头发,重新纳入后宫)) [{丈夫:[{end:2, probability:0.989690572797457, relations:{妻子:[{end:16, probability:0.9987625986569526, start:13, text:武则天}]}, start:0, text:李治}], 寺庙:[{end:12, probability:0.9888578809890554, start:9, text:感业寺}]}] 。

2.1 中文分词 分词作为许多NLP任务的第一道工序,如何在不同场景中『用好』、『用对』尤为重要 Taskflow提供了多种中文分词模式供大家选择,我们列举了几种不同的场景,来示例不同使用方式 2.1.1 文档级输入

支持超长文本输入,无需担心『文本截断』问题#首次调用会有模型下载的额外时间开销 seg=Taskflow("word_segmentation") doc="苏锦一直记得那个午后,明晃晃的光线穿过教室的窗玻璃洒到自己脸上,有种特别暖和的感觉。

那阳光仿佛是能够钻进人的心里,继而延展到身体全部的毛孔中,然后以一种温柔的霸道占据体内各个淋巴细胞苏锦觉得连自己的每一个气息里都似乎是能流窜出明亮的光她坐着有些微醉于这份上帝恩赐的福祉当中是在这样一个午后。

她记住了段见城的脸轮廓俊朗的少年有着羁傲的眼神和清晰的声线怎么看这都是少女漫画里必经的情节教语文的老太太此刻正兀自在讲台上口若悬河的讲解着《孔雀东南飞》,毕竟是已经年过半百的老教师,经历的学生多了,倒也不在乎讲台下那一张张脸上是否挂着的无精打采,昏昏欲睡的表情,按着自己的性子眉飞色舞的描绘着千年前的那段爱情传奇。

苏锦一边数着从老太太口里横飞出来的唾沫星子,一边念想着,让理科班这群脑子里已全被物理公式填充了的家伙,去对几千年前焦仲卿和刘兰芝的爱情产生兴趣未免是件太困难的事情了老太太讲到焦仲卿和刘兰芝双双殉情而死之时咳嗽了一声,提醒底下那群不知已经神游到何方的学生们是时候为文章的主旨做笔记了。

苏锦把课文翻到最后,快速扫过大致内容,目光却在那句:府吏闻此事,心知长别离徘徊庭树下,自挂东南枝上硬生生地停了下来思绪仿若戛然而止,被某种莫名的感怀而包围,心中有些钝痛,却不知从何而来“懦弱”一个略带鄙夷的声音传入苏锦的耳,拦截住了她空白的思绪。

苏锦转过头,瞥见后桌的段见城恍然间有种错觉,这个男生好似是被光线包裹着一般段见城淡淡说若他是焦仲卿,定不会让自己和深爱的女子走到这步田地,若是真走到山穷水尽的地步,定是决然赴死何来徘徊那清淡口气带着些不屑,却是这般笃定至极。

他说,平生最鄙夷懦弱的男子苏锦静默的注视着这个男生终究是没有说出话来苏锦莫名其妙的做了段见城的女友是一年以后的事情全班在KTV里唱歌,美名曰:升高三前最后的狂欢包厢里都是拥挤的人,但苏锦却还是能够感受到空调的温度调得异常的低,她躲在冷风吹不到的角落,捧着大杯的雪花啤酒像是喝水一样没有节制,她觉得心里有所郁结并且心思混乱,恍恍惚惚的注视着麦克风被传了一轮又一轮,听着音像里传出或高或低的杂乱音符,而自己却似是置身于别处,与此间的喧嚣起伏无关,只觉得空荡荡。

苏锦记得自己与同桌曾谈及过自己这种从暑假开始无法摆脱的混沌状态,同桌是一副了然于胸的模样,义正言辞的对苏锦说,这是高三前期综合症她说,苏锦你别太看重所谓的高三,高考和大学都只是一个过程而并非最终的意义,我们要以平常心去对待这些。

苏锦想,其实自己并非执著什么,而是自幼便对于那些未知的一切充满恐惧因为无法掌控,所以感到束手无策,身不由己仿佛有种被命运捏在手里随意摆弄的感觉,特别难受正当苏锦失足于自己庞大的幻觉之时,身边的朋友开始玩起了真心话大冒险之类的游戏。

在一边起哄的女生提议游戏从今晚没有唱歌过的人开始,于是因为忙着在沙发上的打牌的段见城那拨人便是首先被开刷的对象,而作为聚众赌博的头子,段见城自然是第一个被逮到几个暗自对段见城有好感的姑娘早就揣摩好了问题,苏锦被旁边兴奋过头的女生推攘着,神志也渐渐清明起来。

不知是谁直白的问出了那句:阿城,你有意中人么?KTV中的嘈杂如同顿时沉淀了一般,纵然空气里似乎还遗留着些噪音过境的痕迹,更多的却是一种屏气凝神的静段见城沉默的捏着手中那张还没打出去扑克牌,几乎是在所有人的耐心倒塌的前一秒,清晰地说出了苏锦的名字。

" print("1. 输入长度:",len(doc)) print("2. 分词结果:",seg(doc)) 1.输入长度:1413 2.分词结果:[苏锦,一直,记得,那个,午后,,,明晃晃,的,光线,穿过,教室,的,窗,玻璃,洒,到,自己,脸上,,,有种,特别,暖和,的,感觉,。

,那,阳光,仿佛,是,能够,钻进,人,的,心里,,,继而,延展,到,身体,全部,的,毛孔,中,,,然后,以,一种,温柔,的,霸道,占据,体内,各,个,淋巴细胞,,苏锦,觉得,连,自己,的,每一个,气息,里,都,似乎,是,能,流窜,出,........... 。

2.1.2 快速模式分词 示例如何通过快速模式分词对数据集进行词频统计、构建词表importtime fromcollectionsimportdefaultdict frompaddlenlp.datasetsimportload_dataset frompaddlenlpimportTaskflow seg_fast=Taskflow("word_segmentation",mode="fast") #加载ChnSentiCorp数据集 tr

ain_ds,dev_ds=load_dataset("chnsenticorp",splits=["train","dev"]) texts=[] fordataintrain_ds: texts.append(data["text"]) fordataindev_ds: texts.append(data["text"]) inputs_length=len(texts) print("1. 句子数量:",inputs_length) tic_seg=time.time() #快速分词 results=seg_fast(texts) time_diff=time.time()-tic_seg print("2. 平均速率:%.2f句/s"%(inputs_length/time_diff)) #词频统计 word_counts=defaultdict(int) forresultinresults: forwordinresult: word_counts[word]+=1 #打印频次最高的前20个单词及其对应词频 print("3. Top 20 Words:",sorted(word_counts.items(),key=lambdad:d[1],reverse=True)[:20])

100%|██████████|1909/1909[00:00<00:00, 7614.49it/s] 1. 句子数量: 10800 Building prefix dict from the default dictionary ... Dumping model to file cache /tmp/jieba.cache Loading model cost 0.995 seconds. Prefix dict has been built successfully. 2. 平均速率:1429.74句/s 3. Top 20 Words: [(,, 59389), (的, 41468), (。

, 23207), (了, 15048), ( , 11426), (是, 10479), (,, 9204), (我, 9167), (很, 6881), (!, 6169), (也, 5793), (在, 5180), (酒店, 4829), (不, 4784), (都, 4604), (有, 4589), (就, 4169), (., 4099), (没有, 3594), (还, 3455)] 。

2.1.3 精确模式分词 使用Taskflow精确模式,实体粒度分词精度最高,语义片段完整,在知识图谱构建等应用中优势明显实体词容易被切开,例如『陕西省高校管理体制改革实施方案』、『诺戴商务咨询(上海)有限。

公司』希望能够被完整识别frompaddlenlpimportTaskflow #精确模式模型体积较大,可结合机器情况适当调整batch_size,采用批量样本输入的方式 seg_accurate=Taskflow("word_segmentation",mode="accurate",batch_size=32) #批量样本输入,输入为多个句子组成的list,平均速率更快 texts=["李伟拿出具有科学性、可操作性的《陕西省高校管理体制改革实施方案》","诺戴商务咨询(上海)有限公司于2016年08月22日成立"] print(seg_accurate(texts)) 。

[[李伟,拿出,具有,科学性,、,可操作性,的,《,陕西省高校管理体制改革实施方案,》],[诺戴商务咨询(上海)有限公司,于,2016年08月22日,成立]] 2.1.4 用户词典 快速配置用户词典来对分词结果进行干预

frompaddlenlpimportTaskflow seg=Taskflow("word_segmentation") print(seg("平原上的火焰宣布延期上映"))` [‘平原’, ‘上’, ‘的’, ‘火焰’, ‘宣布’, ‘延期’, ‘上映’]

例如我们想把『平原上的火焰』作为一个完整词来识别,而『上映』希望能够被切开,则可以按照如下格式配置自定义词典文件user_dict.txt平原上的火焰 上 映 配置后通过user_dict一键装载在这里插入代码片

seg=Taskflow("word_segmentation",user_dict="/home/aistudio/user_dict.txt") print(seg("平原上的火焰宣布延期上映"))

[‘平原上的火焰’, ‘宣布’, ‘延期’, ‘上’, ‘映’] 2.2 词性标注 基于百度词法分析工具LAC,训练语料包含近2200万句子,覆盖多种场景frompaddlenlpimportTaskflow tag=Taskflow("pos_tagging") print(tag("第十四届全运会在西安举办"))

[(‘第十四届’, ‘m’), (‘全运会’, ‘nz’), (‘在’, ‘p’), (‘西安’, ‘LOC’), (‘举办’, ‘v’)] 2.3 命名实体识别 2.3.1 精确模式 基于百度解语的精确模式:最全中文实体

标签的命名实体识别工具,不仅适用于通用领域,也适用于生物医疗、教育等垂类领域包含66种词性及专名类别标签(同类产品的标签数是15个左右)frompaddlenlpimportTaskflow ner=Taskflow("ner") print(ner(["李伟拿出具有科学性、可操作性的《陕西省高校管理体制改革实施方案》","诺戴商务咨询(上海)有限公司于2016年08月22日成立"])) [[(李伟,人物类_实体),(拿出,场景事件),(具有,肯定词),(科学性,修饰词_性质),(、,w),(可操作性,修饰词_性质),(的,助词),(《,w),(陕西省高校管理体制改革实施方案,作品类_实体),(》,w)],[(诺戴商务咨询(上海)有限公司,组织机构类_企事业单位),(于,介词),(2016年08月22日,时间类_具体时间),(成立,场景事件)]]`在这里插入代码片` 。

精确模式标签集合人物类_实体物体类生物类_动物医学术语类 人物类_概念物体类_兵器品牌名术语类_生物体 作品类_实体物体类_化学物质场所类疾病损伤类 作品类_概念其他角色类场所类_交通场所疾病损伤类_植物病虫害

组织机构类文化类位置方位宇宙类 组织机构类_企事业单位文化类_语言文字世界地区类事件类 组织机构类_医疗卫生机构文化类_奖项赛事活动饮食类时间类 组织机构类_国家机关文化类_制度政策协议饮食类_菜品时间类_特殊日

组织机构类_体育组织机构文化类_姓氏与人名饮食类_饮品术语类 组织机构类_教育组织机构生物类药物类术语类_符号指标类 组织机构类_军事组织机构生物类_植物药物类_中药信息资料 链接地址肯定词个性特征否定词

感官特征数量词场景事件叹词 介词拟声词介词_方位介词修饰词 助词外语单词代词英语单词 连词汉语拼音副词词汇用语 疑问词w(标点) 精准模式对部分类目(如组织机构等),做了更细的划分识别(如,医疗卫生机构、体育组织机构)。

2.3.2 快速模式 基于百度词法分析工具LAC,训练语料包含近2200万句子,覆盖多种场景frompaddlenlpimportTaskflow ner_fast=Taskflow("ner",mode="fast") print(ner_fast("三亚是一个美丽的城市"))

[(‘三亚’, ‘LOC’), (‘是’, ‘v’), (‘一个’, ‘m’), (‘美丽’, ‘a’), (‘的’, ‘u’), (‘城市’, ‘n’)] 快速模式标签集合

快速模式标签集合 2.4 依存句法分析 2.4.1 多种使用方式frompaddlenlpimportTaskflow #使用BiLSTM作为编码器,速度最快 ddp=Taskflow("dependency_pa

rsing") print(ddp("2月8日谷爱凌夺得北京冬奥会第三金")) [{‘word’: [‘2月8日’, ‘谷爱凌’, ‘夺得’, ‘北京冬奥会’, ‘第三金’], ‘head’: [3, 3, 0, 5, 3], ‘deprel’: [‘ADV’, ‘SBV’, ‘HED’, ‘ATT’, ‘VOB’]}]

#编码器部分将BiLSTM替换为ERNIE,模型准确率更高! ddp=Taskflow("dependency_parsing",model="ddparser-ernie-1.0") print(ddp("2月8日谷爱凌夺得北京冬奥会第三金"))

#输出概率值和词性标签 ddp=Taskflow("dependency_parsing",prob=True,use_pos=True) print(ddp("2月8日谷爱凌夺得北京冬奥会第三金"))

依存句法分析标注关系集合

依存句法分析标注关系集合 2.4.2 应用示例通过句法分析抽取句子的主谓宾结构信息frompaddlenlpimportTaskflow ddp=Taskflow("dependency_parsing") print(ddp("9月9日上午纳达尔在亚瑟·阿什球场击败俄罗斯球员梅德韦杰夫"))

下图句子中包含了多种结构化信息:

fromutilsimportSVOInfo texts=["9月9日上午纳达尔在亚瑟·阿什球场击败俄罗斯球员梅德韦杰夫","2月8日谷爱凌夺得北京冬奥会第三金"] results=ddp(texts) #抽取句子中的SVO(主谓宾)结构化信息 svo_info=[] forresultinresults: svo_info.append(SVOInfo(result).parse()) foriinrange(len(texts)): print("原文本:",texts[i]) print("包含的主谓宾结构:",svo_info[i])

3. 『产业』应用这一章节将会学到的Taskflow技能: 使用Taskflow来完成情感分析、文本纠错、文本相似度 3.1 情感分析 3.1.1 BiLSTM 默认使用的是BiLSTMfrompaddlenlpimportTaskflow senta=Taskflow("sentiment_analysis") print(senta("这个产品用起来真的很流畅,我非常喜欢")) [{text:这个产品用起来真的很流畅,我非常喜欢,label:positive,score:0.993867814540863}]

3.1.2 SKEP 集成百度自研的情感知识增强预训练模型SKEP,利用情感知识构建预训练目标,在海量中文数据上进行预训练,为各类情感分析任务提供统一且强大的情感语义表示能力。

在多个公开数据集上模型效果SOTA:

frompaddlenlpimportTaskflow senta=Taskflow("sentiment_analysis",model="skep_ernie_1.0_large_ch") print(senta("作为老的四星酒店,房间依然很整洁,相当不错。

机场接机服务很好,可以在车上办理入住手续,节省时间")) [{text:作为老的四星酒店,房间依然很整洁,相当不错机场接机服务很好,可以在车上办理入住手续,节省时间,label:positive,score:0.9843240976333618}] 。

3.2 文本纠错 ERNIE-CSC在ERNIE预训练模型的基础上,融合了拼音特征的端到端中文拼写纠错模型,整体框架图如下:

在中文纠错经典数据集SIGHAN上效果领先:

frompaddlenlpimportTaskflow corrector=Taskflow("text_correction") print(corrector(遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇。

)) [{source:遇到逆竟时,我们必须勇于面对,而且要愈挫愈勇,target:遇到逆境时,我们必须勇于面对,而且要愈挫愈勇,errors:[{position:3,correction:{竟:境}}]}] 。

3.3 文本相似度 基于百度知道2200万对相似句组训练SimBERT达到前沿文本相似效果frompaddlenlpimportTaskflow similarity=Taskflow("text_similarity") print(similarity([["春天适合种什么花?","春天适合种什么菜?"],["小蝌蚪找妈妈怎么样","小蝌蚪找妈妈是谁画的"]]))

[{text1:春天适合种什么花?,text2:春天适合种什么菜?,similarity:0.83395267},{text1:小蝌蚪找妈妈怎么样,text2:小蝌蚪找妈妈是谁画的,similarity:0.81923723}]

3.4 『解语』-知识标注 基于百度解语,首个能够覆盖所有中文词汇的词类知识标注工具,旨在为中文文本解析提供全面、丰富的知识标注结果frompaddlenlpimportTaskflow wordtag=Taskflow("know

ledge_mining") #结果会与TermTree进行绑定,输出termid print(wordtag("第24届冬季奥林匹克运动会在北京举办")) [{text:第24届冬季奥林匹克运动会在北京举办,items:[{item:第24届冬季奥林匹克运动会,offset:0,wordtag_label:事件类,length:13},{item:在,offset:13, wordtag_label:介词,length:1,termid:介词_cb_在},{item:北京,offset:14, wordtag_label:世界地区类,length:2,termid:中国地区_cb_北京市},{item:举办,offset:16,wordtag_label:场景事件,length:2,termid:场景事件_cb_举办}]}]

fromtermtreeimportTermTree #加载百科知识树 termtree=TermTree.from_dir("termtree_type.csv","TermTree.V1.0") #通过termid获取别名 print(termtree._nodes["奖项赛事活动_eb_冬季奥林匹克运动会"]._data[alias]) #通过termid获取百度百科链接 print(termtree._nodes[奖项赛事活动_eb_冬季奥林匹克运动会]._data[links][0][bdbkUrl])

[‘冬奥会’, ‘冬奥’, ‘冬季奥运会’] 更多TermTree使用方法参考解语:TermTree(百科知识树)[3] 4. 『趣味』应用这一章节将会学到的Taskflow技能: 感受海量数据训练出来的预训练模型的超强能力

利用Taskflow打造一个『能说会道、擅长聊天』的机器人 利用Taskflow构建一个问答/写诗系统 4.1 交互式闲聊对话 基于PLATO-MINI,模型在十亿级别的中文对话数据上进行了预训练,

闲聊场景对话效果显著frompaddlenlpimportTaskflow dialogue=Taskflow("dialogue") print(dialogue(["你好"])) 交互模式。

(推荐使用终端terminal进入python解释器进行体验):

4.2 生成式问答 基于开源社区优秀中文预训练模型CPM,参数规模26亿,预训练中文数据达100GB。 调用示例:

NOTE:由于项目空间有限,这里只列举了调用方法,为了有更好的使用体验,大家可以另外创建一个项目来体验这部分功能~ 4.3 智能写诗 基于开源社区优秀中文预训练模型CPM,参数规模26亿,预训练中文数据达100GB

。 调用示例:

NOTE:由于项目空间有限,这里只列举了调用方法,为了有更好的使用体验,大家可以另外创建一个项目来体验这部分功能~ 5.定制化训练这一章节将会学到的Taskflow技能: 利用自己的数据训练/微调模型,通过Taskflow一键装载并使用

5.1 数据准备和训练 参考PaddleNLP SKEP情感分析训练示例[4],完成数据准备和模型训练#训练步骤省略,提供了训练好的模型权重文件 #直接下载并保存到/home/aistudio/custom_model路径 !wgethttps://bj.bcebos.com/paddlenlp/taskflow/demo/model_state.pdpa。

rams-P/home/aistudio/custom_model !wgethttps://bj.bcebos.com/paddlenlp/taskflow/demo/model_config.json-P/home/aistudio/custom_model

5.2 使用定制化模型 通过task_path指定自定义模型路径一键加载即可frompaddlenlpimportTaskflow my_senta=Taskflow("sentiment_analysis",model="skep_ernie_1.0_large_ch",task_path="/home/aistudio/custom_model") print(my_senta("不错的酒店,服务还可以,下次还会入住的~")) 。

[{‘text’: ‘不错的酒店,服务还可以,下次还会入住的~’, ‘label’: ‘positive’, ‘score’: 0.9968485236167908}] 审核编辑:彭静

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Qt学习笔记之数据库结构设计5
下一篇:网关的商业应用场景
相关文章

 发表评论

暂时没有评论,来抢沙发吧~