• python学习—第一步—Python小白逆袭大神(第四天)


    深度学习难点

    计算机视觉领域:物体的尺寸变化范围大、摆放物体角度、姿态不定,而且可以出现在图片的任何地方,物体也可以是多个类别。

    自然语言处理领域:语义推理、语义关联(文字的顺序会有不同的语义)、语义表示(分词歧义、一词多义)

    实现层面:大数据(小样本局限)、大模型(模型越复杂,门槛越高)、大算力(硬件资源要求高)

    迁移学习:A任务有一个模型,B任务与A类似,可以使用小数据在已有模型上微调

    PaddleHub让我们直接从模型这一步开始去使用

    PaddleHub全景

    PaddleHub是为了解决对于深度学习模型的需求开发的工具,基于飞桨领先的核心框架,精选效果优秀的算法,提供了百亿级大数据训练的预训练模型,方便用户不用花费大量精力从头开始训练一个模型。

    官网:https://www.paddlepaddle.org.cn/hub

    优势:深度学习的流程大致分为明确需求、数据优化、模型选型、调参训练、预测部署几个步骤。

    PaddleHub让我们有一个便捷的方式,1模型即软件、使用Fine-tune API实现2迁移学习,AutoDLFinetuner实现一键自动超参搜索,3端到端部署,HubServing:一键模型服务化部署。

    直接使用PaddleHub的模型。

    PaddleHub体验

    1、情感分析

    Sentiment Classification(Senta),针对带有主观描述的中文文本,可自动判断该文本的情感极性类别并给出相应的置信度,能够帮助企业理解用户消费习惯、分析热点话题和危机舆情监控,为企业提供有利的决策支持。

    Linux

    !hub install senta_lstm==1.1.0#模型安装
    #使用
    !hub run senta_lstm --input_text "人工智能课程很有趣"
    执行结果:
    [{'text': '人工智能课程很有趣', 'sentiment_label': 1, 'sentiment_key': 'positive', 'positive_probs': 0.9572, 'negative_probs': 0.0428}]
    情感标签是1,积极的
    

    2、口罩检测

    PyramidBox-Lite是基于2018年百度发表于计算机视觉顶级会议ECCV 2018的论文PyramidBox而研发的轻量级模型,模型基于主干网络FaceBoxes,对于光照、口罩遮挡、表情变化、尺度变化等常见问题具有很强的鲁棒性。该PaddleHub Module基于WIDER FACE数据集和百度自采人脸数据集进行训练,支持预测,可用于检测人脸是否佩戴口罩。

    在python使用:

    import paddlehub as hub
    import cv2
    module = hub.Module(name="pyramidbox_lite_mobile_mask")
    test_img_path = "data/data31681/test.jpeg"
    input_dict = {"data": [cv2.imread(test_img_path)]}#输入是json格式
    results = module.face_detection(data=input_dict)
    print(results)
    结果:
    [{'data': {'label': 'MASK', 'left': 678.9846324920654, 'right': 893.2966804504395, 'top': 241.9092297554016, 'bottom': 487.231333732605, 'confidence': 0.9711812}, 'id': 1}]
    label标签为mask,戴了口罩
    

    但是我觉得也有不太好的地方,所有的都基于已经训练好的模型,一旦模型不用了或者出现问题,就无法使用。

    大作业

    爬取青春有你2评论数据,进行词频统计并生成词云。

    1、中文分词需要jieba,词云绘制需要wordcloud

    !pip install jieba
    !pip install wordcloud
    

    2、库的导入

    from __future__ import print_function
    import requests
    import json
    import re #正则匹配
    import time #时间处理模块
    import jieba #中文分词
    import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    import matplotlib.font_manager as font_manager
    from PIL import Image
    from wordcloud import WordCloud  #绘制词云模块
    

    3、数据爬取部分

    num = 1000
    lastId = '0' #lastId 是接口分页id
    arr = [] #arr是爬取的所有评论存放的数组
    with open('aqy.txt', 'a', encoding='utf-8') as f: #写文件是追加写的
        for i in range(num):
            lastId = saveMovieInfoToFile(lastId,arr)
            time.sleep(0.5)#频繁访问爱奇艺接口,偶尔出现接口连接报错情况,睡眠0.5秒,增加每次访问间隔时间
            for item in arr:
                Item = clear_special_char(item)
                if Item.strip()!='':
                    try:
                        f.write(Item+'\n')
                    except  Exception as e:
                        print("含有特殊字符")
                        print('共爬取评论:',len(arr))
    

    涉及的函数:

    (1)请求页面

    def getMovieinfo(url):
        session = requests.Session()
        headers = {
            "User-Agent": "Mozilla/5.0",
            "Accept": "application/json",
            "Referer": "http://m.iqiyi.com/v_19rqriflzg.html",
            "Origin": "http://m.iqiyi.com",
            "Host": "sns-comment.iqiyi.com",
            "Connection": "keep-alive",
            "Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-TW;q=0.6",
            "Accept-Encoding": "gzip, deflate"
        }
        response = session.get(url, headers=headers)
        if response.status_code == 200:
            return response.text
        return None
    

    (2)爬取数据,解析数据获取评论

    def saveMovieInfoToFile(lastId,arr):
        url = "https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&\
        agent_version=9.11.5&business_type=17&content_id=15068699100&page=&page_size=10&types=time&last_id="
        url += str(lastId)
        responseTxt = getMovieinfo(url)
        responseJson = json.loads(responseTxt)
        comments = responseJson['data']['comments']
        for val in comments:
            # print(val.keys())
            if 'content' in val.keys():
                # print(val['content'])
                arr.append(val['content'])
            lastId = str(val['id'])
        return lastId
    

    (3)去除特殊字符

    def clear_special_char(content):
        s = re.sub(r"| |\t|\r", "", content)
        s = re.sub(r"\n", " ", s)
        s = re.sub('[^\u4e00-\u9fa5^a-z^A-Z^0-9]', '', s)
        return s
    

    4、数据处理部分

    counts = {}
    f = open('aqy.txt', 'r',encoding='utf-8')
    for line in f:
        words = fenci(line)
        stopwords = stopwordslist('cn_stopwords.txt')
        movestopwords(words,stopwords,counts)
    
    def fenci(text):
        jieba.load_userdict('add_words.txt')
        seg = jieba.lcut(text, cut_all=False)
        return seg
    
    def stopwordslist(file_path):
        stopwords = [line.strip() for line in open(file_path, encoding='UTF-8').readlines()]
        return stopwords
    
    def movestopwords(sentence,stopwords,counts):
        out = []
        for word in sentence:
            if word not in stopwords:
                if len(word) != 1:
                    counts[word] = counts.get(word,0) + 1
        return None
    

    5、图像绘制部分

    drawcounts(counts,10) #绘制top10 高频词
    drawcloud(counts) #绘制词云
    f.close()
    
    def drawcounts(counts,num):
        x_aixs = []
        y_aixs = []
        c_order = sorted(counts.items(), key=lambda x:x[1],reverse=True)
        for c in c_order[:num]:
            x_aixs.append(c[0])
            y_aixs.append(c[1])
        matplotlib.rcParams['font.sans-serif'] = ['simhei']
        matplotlib.rcParams['axes.unicode_minus'] = False#也不知为啥没什么用
        plt.bar(x_aixs, y_aixs)
        plt.title('词频统计结果')
        plt.show()
    
    def drawcloud(word_f):
        #加载背景图片
        cloud_mask = np.array(Image.open('cluod.png'))
        #忽略显示的词
        st=set(["东西","这是"])
        #生成wordcloud对象
        wc = WordCloud(background_color='white', 
        mask=cloud_mask,
        max_words=150,
        font_path='simhei.ttf',
        min_font_size=10,
        max_font_size=100, 
        width=400, 
        relative_scaling=0.3,
        stopwords=st)
        wc.fit_words(word_f)
        wc.to_file('pic.png')
    
  • 相关阅读:
    Leetcode数据库系列题解合集(持续更新)
    CdSe/ZnTe Ⅱ型核壳量子点/核壳型功能/SiC碳化硅量子点的合成
    Linux下自动删除过期备份和自动异地备份
    Greenplum分布键查询
    C51--项目--感应开关盖垃圾桶
    基于drawio构建流程图编辑器
    基于美团技术团队最新开源的yolov6模型实现裸土检测
    我的创作纪念日
    广州某机械制造企业生产工序管理系统解决方案
    车内信息安全技术-安全技术栈-软件安全
  • 原文地址:https://blog.csdn.net/a10750/article/details/127109835