基于国产操作系的问答机器人——博客2

目录

日期:2024/1/18-2024/1/25

学习实践任务

学习经历

一、问答系统分类

二、问题类型

三、问答系统用例

四、初步了解网络爬虫

遇到的问题及解决方法

日期:2024/1/26-2024/2/22

学习实践任务

实践经历

一、网络爬虫的常用技术

二、网络爬虫开发常用框架

三、实战项目:12306爬票

搭建QT环境

学习XPath

下载站名文件

日期:2024/2/23-2024/3/7

学习实践任务

实践经历

一、实战项目:爬取豆瓣电影排行榜

 二、scrapy框架爬取教育网站教师信息

scrapy介绍:

目标:

实验代码:

遇到的问题及解决方法

日期:2024/3/8-2024/3/21

学习实践任务

实践经历

日期:2024/3/22-2024/4/4

学习实践任务

实践经历

自然语言处理NLP

一、基本术语

二、涉及的知识体系

三、技术层面

四、Numpy详解

自然语言工具包NLTK

一、使用NLTK

二、常用的统计函数

三、常用的其他函数

四、NLTK频率分布类中定义的常用函数

五、词汇比较运算的常用函数

Transformer概览

一、理解编码器

二、理解解码器

HuggingFace工具集使用方法

一、编码工具

二、数据集工具

三、管道工具

了解Bert模型

一、BERT的基本理念

二、BERT的工作原理

三、BERT的配置

四、BERT模型预训练

模型实战---RockerQA

一、端到端

二、Faiss

二、RocektQA

遇到的问题及解决方法:

日期:2024/4/5-2024/4/18

学习实践任务:

学习经历

调整数据集

引入新模型

1、使用pipeline

2、Chat-GLM

日期:2024/4/19-2024/4/27

学习实践任务:

实践经历:

一、在虚拟机配置deepin操作系统

1.在deepin官网下载最新版的镜像文件 

2.下载和安装VMware

3.在VMware上安装deepin系统

4.配置deepin系统

5.遇到的问题及解决

1)虚拟机安装deepin之后无法连接到网络

2)虚拟机分配的空间不够

二、在deepin中下载和安装anaconda

1.下载清华镜像源文件

2.安装anaconda

3.打开anaconda

4.遇到的问题及解决

1)anaconda安装慢

2)安装anaconda后无法运行

三、下载安装pycharm

四、在deepin上运行文档问答机器人

1.配置项目文件所需要的环境

  1)利用anaconda创建虚拟环境

 2)安装项目所需要的python库

 3)安装过程中出现的问题

2.在pycharm中运行该项目代码

 1)给项目添加编译器

2)运行项目文件

五、添加玲珑使用数据集

六、为项目添加可视化界面

1)使用tkinter

2)使用Flask


以下按时间顺序记录小组学习实践内容:


日期:2024/1/18-2024/1/25

学习实践任务

1.组队统一选题——文档问答机器人

2.配置python、pycharm、anaconda、pytorch

3.阅读选题博客,了解deepin国产操作系统、问答系统 wiki、问答系统用例、deepin wiki 仓库。

4.学习python语言编程及其爬虫

学习经历

一、问答系统分类

        我们可以从知识领域、答案来源等角度来替问答系统做分类。

        从知识领域来看,可以分为“封闭领域”以及“开放领域”两类系统。

        封闭领域系统专注于回答特定领域的问题,如医药或特定公司等。由于问题领域首先,系统又比较大的发挥空间,可以导入如专属本体论等知识,或将答案来源全部转换成结构性资料,来提升系统的表现。

        开放领域系统则希望不设限问题的内容范围,天文地理无所不问,系统中所有知识与元件都必须尽量做到与领域不相关,当然难度也相对地提高。

        若根据答案来源来区分,可以分为“数据库问答”、“常问问题问答”、“新闻问题”、“互联网问答”等系统。

二、问题类型

        问答系统接受的时自然语言问句,为了有效控制研究变因,多会订定可接受的问题类型来限制研究范围。最基本的类型为“仿真陈述回答”,此类系统根绝答案语料所述资讯,取出一小段字串作为答案。由于答案的正确与否是根据答案预料的内容来决定,在现实生活中不一定为真,故称为仿真陈述回答。有些系统把问答范围进一步缩小,限定在人、地、组织等明确的专有名词上。此类系统有能力回答如“请列举美国历届总统”这种清单型的问句,则称为“清单问答”。若能回答定义问题,则成为“定义回答”,以此类推还能定义出其他类型的问题。

        除了这些与问句资讯内容有关的类型外,最近评鉴会议引进如“时间限制问题”与“序列问题”等复杂的问题类型。时间限制型的问题会在问句中明确指出答案的时间范围限制,比如说以“民国九十年时国民党主席是谁”这问句来说,系统必须有根据答案预料结构化资料,或上下文来推论正确答案的能力。序列问题则把问答系统未来的应用定位在互动式的系统上。经过来回多次问答的方式来满足使用者的资讯需求。了解这些问题类型分类,有助于研究范围界定,同时在分析比较伤也比较有依据。

三、问答系统用例

        可以使用问答QA模型,通过使用知识库(文档)作为上下文来自动响应常见问题,可以从这些文档中得出客户问题的答案。如果您想节省推理时间,可以先使用段落排名模型来查看哪个文档可能包含问题的答案,然后使用QA模型迭代该文档。

        根据输入和输出,有不同的QA变体。

        抽取式QA:该模型从上下文中提取答案。这里的上下文可以是提供的文本、表格甚至HTML!这通常用类似bert的模型来解决。

        开放式生成式QA:该模型直接根据上下文生成自由文本。可以在其页面中了解有关“文本生成”任务的更多信息。

        封闭式生成QA:在这种情况下,不提供上下文。答案完全由模型生成。

四、初步了解网络爬虫

        初步打算爬取deepin网站的数据。

        网络爬虫的基本工作流程如下:

        1)获取初始的URL(统一资源定位符),该URL地址是用户自己指定的初始爬取的网页。(URL是web页的地址,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎处理它。)

        2)爬取对应URL地址的网页时,获取新的URL地址

        3)将新的URL地址放入URL队列中

        4)从URL队列中读取新的URL,然后依据新的URL爬取网页,同时从新的网页中获取新的URL地址,重复上述的爬取过程。

        5)设置停止条件,如果没有设置停止条件时,爬虫会一直爬取下去,直到无法获取新的URL地址为止。设置了停止条件后,爬虫将会在满足停止条件时停止爬取。

        具体操作步骤:

        1)选择合适的爬虫工具:python是用户常用的爬虫语言,可以使用如BeautifulSoup、Scrapy等库来爬取网页内容。这些库可以帮助我们解析HTML和XML文件,提取所需的数据。我们组所选择的爬虫工具为Scrapy,接下来会对Scrapy进行系统学习。

        2)分析网页结构:在开始爬取之前,我们需要仔细分析目标网页的结构。了解哪些内容是我们所需要的,以及如何从HTML代码中提取这些内容。

        3)编写爬虫脚本:使用python编写爬虫脚本,通过发送送HTTP请求来获取网页内容,然后使用选定的库(Scrapy)来解析HTML代码,提取所需要的数据。

        4)处理反爬虫机制:网站可能会采取一些措施来防止爬虫,例如检测请求频率、使用动态加载内容等。我们需要处理这些反爬虫机制,例如设置合理的请求间隔,使用JavaScript渲染内容的模拟浏览器工具等。针对于deepin的网站(https://wiki.deepin.org)并没有设置反爬机制。

        5)存储和整理数据:将提取的数据存储在适当的数据结构中,例如使用Pandas的DataFrame来存储表格数据。之后,我们可以对数据进行整理,去重和分类等操作,以便进一步的分析和使用。

        6)遵守法律法规和网站规定:在爬取网站数据之前,要遵守相关法律法规和网站的使用协议。不要频繁地访问目标网站,以免对其服务器造成负担。同时,尊重网站的数据采集和使用规定。

        7)在正式爬取之前,先进行小规模的测试,确保脚本能够正确地提取所需的数据。如果遇到问题,及时进行调试和和优化。

        8)数据清洗和整理:提取的数据可能需要进行清洗和整理,以去处噪声、格式化数据等,确保数据的准确性和完整性。

        9)数据存储和管理:将提取的数据进行适当的存储和管理,以便后续的分析和使用。可以选择将数据存储在数据库、数据仓库或其他适当的数据存储解决方案中。

        10)持续更新和维护:随着时间的推移,目标网站的结构和内容可能会发生变化,所以需要定期更新我们的爬虫脚本以确保其有效性。同时,维护我们的数据存储和管理系统,以便能够快速访问和使用数据。

遇到的问题及解决方法

1.遇到问题:pytorch配置失败 

解决方法:一开始尝试直接在python上下载pytorch环境所需要的库,但下载慢且经常出错,不能及时配置好。后来了解到anaconda可以方便快捷的配置各种python代码环境,于是决定下载anaconda。

2.遇到问题:anaconda下载配置失败,不能正常接入pycharm使用。

解决方法:通过查阅了解资料,我们知道了有两种解决方案。一个是在官网下载,一个是通过清华源下载。我们认为官网上的软件一定很靠谱,所以这个方案也是我们首先尝试的方案。但是没有梯子导致下载速度慢甚至官网都登录不上去,于是采取了第二种方案。在通过清华源下载的过程中,我们看到清华源上有很多版本,我们查找到的教程大多是说“选择合适的版本进行下载安装。”于是中间走了很多弯路,下载了一些不合适的版本,根本用不了。后来再进一步查找资料,查看自己的电脑配置,成功下载好了anaconda并接入pycharm。


日期:2024/1/26-2024/2/22

学习实践任务

1.根据书籍教学视频,学习python基础编程

2.实践爬虫案例,尝试爬取12306车票

实践经历

一、网络爬虫的常用技术

        1)Python的网络请求:Python中实现HTTP网络请求常见的三种方式:urllib、urllib3以及requests。

        urllib模块是python自带的模块,该模块中提供了一个urlopen()方法,通过该方法指定URL发送网络请求来获取数据。urllib提供了多个子模块:urllib.request模块,该模块定义了打开URL的方法和类;urllib.error模块,该模块主要包含异常类,基本的异常类是URLError;urllib.parse模块,该模块定义的功能分为两大类,URL解析和URL引用;urllib.robotparser模块,该模块用于解析robots.txt文件。

        (通过get请求方式获取百度的网页内容):

import urllib.request

response = urllib.request.urlopen('http://www.baidu.com')
html = response.read()
print(html)

        urllib3模块是一个功能强大,条理清晰的用于HTTP客户端的Python库。提供了很多Python标准库中没有的重要特性:线程安全、连接池、客户端SSL/TLS验证、使用大部分编码上传文件、Helpers用于重试请求并处理HTTP重定向、支持gzip和deflate编码、支持HTTP和SOCKS代理、100%的测试覆盖率。

import urllib3

http = urllib3.PoolManager()
response = http.request('GET','http://www.baidu.com/')
print(response.data)

        requests模块是Python中实现HTTP请求的一种方式,requests是第三方模块,该模块在实现HTTP请求时要比urllib模块简化很多,操作更加人性化。在使用requests模块时需要通过执行pip install requests代码进行该模块的安装。requests模块的功能特性如下:Keep-Alive&连接池、基本/摘要式的身份认证、Unicode响应体、国际化域名和URL、优雅的key/value Cookie、HTTP(S)代理支持、带持久Cookie的会话、自动解压、文件分块上传、浏览器式的SSL认证、流下载、分块请求、自动内容编码、连接超时、支持.netrc。

import requests

data = {'word':'hello'}
response = requests.post('http://httpbin.org/post',data=data)
print(response.content)

        2)请求headers处理,有时在请求一个网页内容时,发现无论通过GET或者是POST以及其他请求方式,都会出现403错误。产生这种错误是由于该网页为了防止而已采集信息而是用了反爬虫设置,从而拒绝了用户的访问。此时,可以通过模拟浏览器的头部信息来进行访问,这样就能解决以上反爬设置的问题。

import requests

url = 'https://www.baidu.com/'
headers = {'User-Agent':''} //复制的头部信息
response = requests.get(url,headers=headers)
print(response.content)

        3)网络超时,在访问一个网页时,如果该网页长时间未响应,系统就会判断该网页超时,所以无法打开网页。requests模块提供了三种常见的网络异常类。

import requests

from requests.exceptions import ReadTimeout,HTTPError,RequestException
for a in range(0,50):
    try:
        response = requests.get('https://www.baidu.com/',timeout=0.5)
        print(response.status_code)
    except ReadTimeout:
        print('timeput')
    except HTTPError:
        print('httperror')
    except RequestException:
        print('reqerror')

        4)代理服务,在爬取网页的过程中,经常会出现不久前可以爬取的网页现在无法爬取了,这是因为我们的IP被爬取网站的服务器屏蔽了。此时可以设置代理服务解决该问题,首先需要找到一个代理地址(如,122.114.31.177,对应的端口号未808,完整的格式为122.114.31.177:808)。

import requests

proxy = {'http':'122.114.31.177:808',
         'https':'122.114.31.177:808'}
response = requests.get('http://www.mingrisoft.com/',proxies=proxy)
print(response.content)

实例中的代理IP时免费的,所以使用的时间不固定,超出使用的时间范围内该地址将失效。

        5)HTML解析之Beautiful Soup,Beautiful Soup是一个用于从HTML和XML文件中提取数据的Python库。Beautiful Soup提供一些简单的函数用来处理导航、搜索、修改分析树等功能。Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为UTF-8编码,我们不需要考虑编码方式,除非文档中没有指定一个编码方式,这时Beautiful Soup就不能自动识别编码方式了。我们仅需要说明一下原始编码方式就可以了。

二、网络爬虫开发常用框架

        1)Scrapy爬虫框架:Scrapy | A Fast and Powerful Scraping and Web Crawling Framework

        2)Crawley爬虫框架:Crawley’s Documentation — crawley v0.1.0 documentation 

        3)PySpider爬虫框架:Introduction - pyspider

三、实战项目:12306爬票
搭建QT环境

        1)在https://www.qt.io/download官方网站中下载对应的系统版本即可。

        2)由于QT在创建窗体项目时会自动生成后缀名为ui的文件,该文件需要转换为py文件后才可以被Python所识别,所以需要为QT与Pycharm开发工具进行配置。(可以参考Python——PyQt5在PyCharm的配置与应用(保姆级教程)_pycharm pyqt5-CSDN博客

        3)主窗体设置

分析网页请求参数

        1)获取完整的请求地址:进入12306官网后,右键选择检查,点击查询按钮,会显示请求细节的窗口,在该窗口中默认显示消息头的相关数据,此处可以获取完整的请求地址Request URL。

        2)获取请求地址中的必要参数:在请求地址的上方选择参数选项。

学习XPath

        XPath是一门在XML文档中查找信息的语言,HTML与XML结构类似,也可以在HTML中查找信息。XPath可以轻松定位并提取元素、属性和文本。

        1)XPath常用路径表达式:

XPath常用路径表达式
表达式 描述 示例
nodename 选取此节点的所有子节点 div,p,h,l
/ 从根节点选取(描述绝对路径) /html
// 不考虑位置,选取页面中所有子节点 //div
. 选取当前节点(描述相对路径) ./div
.. 选取当前节点的父节点(描述相对路径) h1/../
@属性名 选取属性的值 @href、@id
text() 获取元素中的文本节点 //h1/text()

        2)安装lxml库:在使用XPath之前,要先安装Python的lxml库,lxml库是一个HTML/XML的解析器。安装命令为:

pip install lxml

        3)导入lxml库:提取数据之前,要先导入lxml库的etree模块,再使用etree读取文件,生成一个节点数的对象,代码如下:

from lxml import etree

html_selector = etree.parse(".html",etree.HTMLParser())

        节点数的对象生成后,就可以使用XPath抽取数据了。

        4)按照XPath的使用语句,可以获取html、title等网页的内容

        5)XPath带谓语的路径表达式:(更多XPath的用法可以参考w3cschool:XPath 教程 (w3school.com.cn)

常用的带谓语的路径表达式
谓语表达式 说明
//div[@id='content'] 选取属性id为content的div元素
//div[@class] 选取所有带有属性class的div元素
//div/p[1]/text()

选取div节点中第一个p元素的文本

//div/p[2]/text() 选取div节点中第二个p元素的文本
//div/p[last()]/text() 选取div节点中最后一个p元素的文本
下载站名文件

        得到了请求地址和请求参数后,可以发现请求参数中的出发地与目的地均为车站的英文缩写。所以需要在网页中仔细查找是否有将车站名自动转换为英文缩写的请求信息。

        1)按F5进行余票的刷新,此时在网络监视器中选择类型为js的网络请求。在文件类型中仔细分析文件内容是否有与车站名相关的信息。

        2)选中与车站相关的网络请求,在请求细节中找到该请求的完整地址。然后再网页中打开该地址测试返回数据。

        3)打开Pycharm开发工具,创建python文件,创建getStation()方法。关键代码如下

def getStation():
    url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9303'
    response = requests.get(url,verify=True)
    stations = re.findall(u'([\u4e00-\u9fa5]+\|([A-Z]_)',response.text)
    stations = dict((stations))
    stations = str(stations)
    write(stations)

日期:2024/2/23-2024/3/7

学习实践任务

1.根据书籍教学视频,学习python基础编程

2.学习爬虫,成功爬取更多网站信息,实战爬虫项目,爬取豆瓣电影排行榜、scrapy爬虫框架爬取教育网站教师信息

实践经历

一、实战项目:爬取豆瓣电影排行榜

以下为爬取豆瓣电影榜的完整代码,按照页码进行下载。

import  urllib.parse
import  urllib.request
from bs4 import BeautifulSoup

def creat_request(page):
    base_url = 'https://www.douban.com/doulist/134462233/?'

    data = {
        'start': (page-1)*25
    }

    data =urllib.parse.urlencode(data)

    url = base_url+data+'&sort=seq&playable=0&sub_type='


    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
    }

    request = urllib.request.Request(url=url,headers=headers)
    return request

def get_content(request):
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    return content

def down_load(page,content):
    with open('douban_'+str(page)+'.json','w',encoding='utf-8') as fp:
        fp.write(content)

if __name__ =='__main__':
    start_page = int(input('请输入起始的页码:'))
    end_page = int(input('请输入结束的页码:'))

    for page in range(start_page,end_page+1):

        request = creat_request(page)

        content = get_content(request)
        soup = BeautifulSoup(content,'lxml')

        name_list = soup.select('div[class="title"] a')

        s = ""
        for name in name_list:
            name_ = name.get_text()
            s = s + name_ + " "

        down_load(page,s)

 二、scrapy框架爬取教育网站教师信息
scrapy介绍:

Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

目标:

我们打算抓取:http://www.itcast.cn/channel/... 网站里的所有讲师的姓名、职称和个人信息。

实验代码:
# -*- coding: utf-8 -*-
import scrapy
 #导入容器
from ITcast.items import  ItcastItem
class ItcastSpider(scrapy.Spider):
    # 爬虫的名字 启动爬虫时需要的参数*必需
    name = 'itcast'
    # 爬取域范围 允许爬虫在这个域名下进行爬取(可选)  可以不写
    allowed_domains = ['itcast.cn']
    #起始url列表  爬虫的第一批请求,将求这个列表里获取
    start_urls = ['http://www.itcast.cn/channel/teacher.shtml']
    def parse(self, response):
        node_list = response.xpath("//div[@class='li_txt']")
        for node in node_list:
            #创建item字段对象,用来存储信息
            item = ItcastItem()
            # .extract() 将xpath对象转换围殴Unicode字符串
            name = node.xpath("./h3/text()").extract()
            title = node.xpath("./h4/text()").extract()
            info = node.xpath("./p/text()").extract()
            item['name'] = name[0]
            item['title'] = title[0]
            item['info'] = info[0]
            #返回提取到的每一个item数据 给管道文件处理,同时还会回来继续执行后面的代码
            yield item

遇到的问题及解决方法

遇到问题:下载后的json文件中有很多空行

解决方法:在Anaconda中找到exporters.py,打开,在CsvItemExporter中添加newline=“”。


日期:2024/3/8-2024/3/21

学习实践任务

1.和项目指导老师沟通确定文档问答机器人的方向

2.制定详细计划

实践经历

        和项目老师进行沟通,老师给出来了两个方向以及所对应的学习资料。

        1)基于LLM实现,通过向量计算,从文档中提取和问题相关的内容,将内容和问题喂给LLM进行推理。

        2)从文档生成数据集,基于transformers训练一个自己的文档问答的模型。

        资料可以参考huggingface.co上的教程

        中文链接为https://huggingface.co/learn/nlp-course/zh-CN/chapter1/1

        deepin wiki的数据可以从linuxdeepin/wiki.deepin.org: wiki content (github.com)进行下载,为markdown格式。至此我们便不再需要对deepin网站进行数据爬取。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值