项目实训
昭刈
这个作者很懒,什么都没留下…
展开
-
对于两种方式深度集成的思考
当前我们近义词查询的功能是先去annoy中查找,没有则再通过爬虫搜索,但这依旧没能很好的协作。我们预期的更好的集成方式如下根据传入的需要的返回值数量num,当从annoy中查询不够时,通过爬虫的方式补充。爬虫返回的结果保存下来,作为之后扩大模型的数据支持。并行用两种方式获取近义词,通过结果反馈动态改变两种方式的权重同时获得两种...原创 2021-07-29 20:48:47 · 93 阅读 · 0 评论 -
根据爬虫实现语义泛化的拓展思路
当前代码实现方式是首先从800万词向量中匹配关键词并通过Annoy近邻算法找到近义词,若匹配不到则用爬虫的形式访问相关网站通过分析响应页面获取到关键词。但爬虫也具有他的局限性,我们不能总是依靠别人的数据与技术来达到目标。所以该项目如果继续完善,下一步的思路就是拓展爬虫策略。即把通过爬虫直接搜索关键词作为一个过渡策略或者保底策略。我们应当在使用爬虫搜索关键词时同时将相应的信息保存到本地的语料库中,这样将来可以作为爬虫搜索的缓存版本加快搜索速度,同时也可以为之后训练模型时提供数据支持。另一方面,我们目前还未原创 2021-07-28 22:25:22 · 112 阅读 · 0 评论 -
语义泛化系统——两种泛化方式的集成
当前泛化版本代码主文件main.py# 基于annoy二叉树并使用爬虫作为候补的近邻搜索版本import jsonimport reptile.main as reptilefrom annoy import AnnoyIndexclass KeywordSearcher: def __init__(self, path='../../res/tc_word_index.json'): with open(path, 'r') as fp:原创 2021-07-26 21:28:38 · 502 阅读 · 0 评论 -
语义泛化-模块化标准实现与更改
根据上一篇博客我们实现了1.1(可以指定参数path,加载指定的索引文件,不指定则为默认的本地文件)对于功能2.3(可以指定比较阈值,返回所有词向量在阈值内的近义词)我计划对其丢弃,目前topN的实现已经满足场景要求功能2.5(若查询的关键词keyword不存在于索引文件中,则通过文本对比返回推断的近义词)我计划更换实现方式,当keyword不在索引文件时,我计划使用爬虫方案作为候补。以下为当前的实现# 基于annoy二叉树并使用爬虫作为候补的近邻搜索版本import jsonimpor原创 2021-07-25 14:59:49 · 115 阅读 · 0 评论 -
基于Annoy的语义泛化-模块化进阶标准
相对于已实现的语义泛化模块,我们期望它应具备以下特征和功能:拥有初始化方法例如load,用来从本地加载索引文件,为后续的查询做准备。(1)该方法可以指定参数path,加载指定的索引文件,不指定则为默认的本地文件。(1.1)拥有查询接口search,该接口有以下特征和功能(2)接收关键词keyword,要求对其泛化,获取近同义词(2.1)可以指定查询数量,返回该数量的近义词(2.2)可以指定比较阈值,返回所有词向量在阈值内的近义词(2.3)若查询的关键词keyword不存在于索引文原创 2021-07-22 23:26:50 · 112 阅读 · 0 评论 -
基于Annoy的语义泛化-代码模块化
以下为搜索的原始版本代码,该代码实现了基本的搜索测试,但未导出合理的接口,且当搜索词不在Annoy树中时会报错。# 基于annoy二叉树的近邻搜索版本import jsonimport numpy as npfrom collections import OrderedDictfrom annoy import AnnoyIndexdef main(): #加载关键词->索引表 with open('../../res/tc_word_index.json', 'r') as原创 2021-07-21 22:25:10 · 98 阅读 · 0 评论 -
爬虫坑点总结
合理设置HTTP请求的Headers,以提高访问成功的概率。爬虫请求的HREF需要对中文进行BaseURL编码获取到页面数据后可以先保存下来与浏览器中真实页面对比一下,辨别爬虫是否成功善用浏览器开发者工具,查看NetWork选项去了解数据在页面中还是通过单纯请求就可以拿到获取到页面数据后,要对html数据进行解析,获取想要的数据。通常使用正则表达式或bs4之类的解析库。获取到数据后通常需要JSON转化库对其解析,以便灵活的使用数据。对于反爬虫强大的网站,可以频繁改变自身IP地址以降低被屏蔽的可.原创 2021-07-18 22:44:04 · 105 阅读 · 0 评论 -
爬虫编写心得小节
获取html页面的方法通过python获取页面的常用方法有requests和selenium方法,当然使用python自带的urllib也可以获取html页面,但是其使用逻辑实在是复杂,相比之下,requests方法更开发者友好。requests可以通过get或者post来获取页面信息,对于使用GET方式的页面,可以使用requests.get(url)来获取相应的网页源代码。POST方式也是常见的网页访问方法,有些网页只能通过POST方法来访问,如果此时采用GET方法访问的话,网站就会返回错误的信息,原创 2021-07-16 22:17:15 · 148 阅读 · 0 评论 -
面向词林编写爬虫寻找同义词的初步实现
import requestsimport urllib.parsefrom bs4 import BeautifulSoupdef gen(keyword): # 对中文可能字符进行BaseURL编码,并发送HTTP GET请求 res = requests.get('https://www.cilin.org/search/?words='+urllib.parse.quote(keyword)+'&dict=' +urllib.parse.quote('综合'))原创 2021-07-15 21:57:28 · 173 阅读 · 0 评论 -
爬虫实现介绍
基于爬虫的语义泛化系统,爬虫主要有两种实现思路。直接发送Http请求,根据Response进行分析获取数据。模拟真实网页环境,程序内部运行一个浏览器内核,通过页面分析和执行JS脚本获取数据。优劣分析方法一实现起来简单,而且占用资源少,但是容易被网站识别,获取不到想要的信息,要尽可能模拟真实的访问才行。方案二功能更强大,可以执行页面的JS脚本,获取更多的信息,但时内部运行一个浏览器内核开销相对方案一大很多,不适合大规模使用。我们之后的工作主要是基于方案一进行爬虫编写与测试,目前计划项目所需要的p原创 2021-07-11 20:53:24 · 134 阅读 · 0 评论 -
语义泛化系统——爬虫实现思路
之前我们实现了基于腾讯800万词向量进行Annoy近邻搜索的同义词查找算法,现在我们计划充分利用现有众多语料库进行爬虫获取近义词。目前我们计划针对百度查词、词林辞典等线上查词工具设计爬虫搜索。基于爬虫的语义泛化分为以下阶段:根据给出的关键词使用爬虫获取近义词。根据以往搜索结果建立本地词料库,优化近义词查询速度。在本地词料库足够庞大时,作为基础训练更通用的语义泛化模型。...原创 2021-07-11 09:53:45 · 232 阅读 · 0 评论 -
基于语义的泛化系统——annoy近邻搜索实现
数据预处理和二叉树构建build.py# 基于annoy二叉树的近邻搜索版本 构建import jsonimport numpy as npfrom collections import OrderedDictfrom annoy import AnnoyIndexdef build(word_path='../../res/res/word1.txt', vec_path='../../res/res/vector1.npy', build_trees=1, annoy_deep=20原创 2021-07-06 15:34:00 · 260 阅读 · 0 评论 -
语义泛化系统——本周小结
Annoy近邻算法随机选择两个点,以这两个节点为初始中心节点,执行聚类数为2的kmeans过程,最终产生收敛后两个聚类中心点二叉树底层是叶子节点记录原始数据节点,其他中间节点记录的是分割超平面的信息基于Annoy算法,我们在高位空间求近邻会获得较大的性能提升,此前我们设计的聚类算法由于相对较大的时间复杂度可行性较低,我们计划用Annoy近邻算法实现关键词泛化功能。python语法感悟python中的运算不止可以作用于数字,也可以作用于数组。这让python语言在科学计算上更具竞争力a = [原创 2021-07-04 19:52:16 · 146 阅读 · 0 评论 -
语义泛化系统-聚类方案
为了加快搜索速度,我们打算通过将源数据进行聚类以减少后续搜索的计算次数。方案简介设定初始值 d 作为高位空间角度阈值聚类流程对于所有词和对应词向量,执行以下与现有所有簇的中心向量对比,若存在余弦值>cos(d)内,则将其放入该簇否则,以该词和词向量建立新簇,簇的中心向量为该词向量值关键词查询流程将查询的词向量与所有簇的中心向量对比,筛选出余弦值>cos(2d)的簇将筛选出的簇中的所有元素再与查询词向量做对比,返回所有余弦值>c(c为所需精度,c.原创 2021-07-02 09:29:01 · 529 阅读 · 0 评论 -
基于关键词的语义泛化系统之泛化(一)
基于关键词的语义泛化系统之泛化(一)语义泛化目标基础目标:利用腾讯800万词向量计算同义词,最好再实现至少其他一种方法。小组输出:将该模块功能封装为一个函数。输入:关键词,输出:同义词计划流程在前期阶段基础的利用腾讯800万词向量计算同义词,完成模块功能拓展阶段计划:完全脱离腾讯800万已有训练好的词向量,自主完成模型训练,查询算法。主要问题包含800万多词向量的文件占用空间很大(15.5GB),考虑我们开发设备内存位于(8—24GB),所以任何程序执行阶段将该文件一次读入内存是不原创 2021-06-30 22:00:37 · 634 阅读 · 0 评论