分类目录归档:github

Python 教你3分钟用Bert搭建问答搜索引擎

 

鼎鼎大名的 Bert 算法相信大部分同学都听说过,它是Google推出的NLP领域“王炸级”预训练模型,其在NLP任务中刷新了多项记录,并取得state of the art的成绩。

但是有很多深度学习的新手发现BERT模型并不好搭建,上手难度很高,普通人可能要研究几天才能勉强搭建出一个模型。

没关系,今天我们介绍的这个模块,能让你在3分钟内基于BERT算法搭建一个问答搜索引擎。它就是 bert-as-service 项目。这个开源项目,能够让你基于多GPU机器快速搭建BERT服务(支持微调模型),并且能够让多个客户端并发使用。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:

pip install bert-serving-server  # 服务端
pip install bert-serving-client  # 客户端

请注意,服务端的版本要求:Python >= 3.5Tensorflow >= 1.10 。

此外还要下载预训练好的BERT模型,在 https://github.com/hanxiao/bert-as-service#install 上可以下载,如果你无法访问该网站,也可以在 bert-serving 模型及源代码 此处下载。

也可在Python实用宝典后台回复 bert-as-service 下载这些预训练好的模型。

下载完成后,将 zip 文件解压到某个文件夹中,例如 /tmp/uncased_L-24_H-1024_A-16/.

2.Bert-as-service 基本使用

安装完成后,输入以下命令启动BERT服务:

bert-serving-start -model_dir /tmp/uncased_L-24_H-1024_A-16/ -num_worker=4 

-num_worker=4 代表这将启动一个有四个worker的服务,意味着它最多可以处理四个并发请求。超过4个其他并发请求将在负载均衡器中排队等待处理。

下面显示了正确启动时服务器的样子:

使用客户端获取语句的编码

现在你可以简单地对句子进行编码,如下所示:

from bert_serving.client import BertClient
bc = BertClient()
bc.encode(['First do it', 'then do it right', 'then do it better'])

作为 BERT 的一个特性,你可以通过将它们与 |||(前后有空格)连接来获得一对句子的编码,例如

bc.encode(['First do it ||| then do it right'])

远程使用 BERT 服务

你还可以在一台 (GPU) 机器上启动服务并从另一台 (CPU) 机器上调用它,如下所示:

# on another CPU machine
from bert_serving.client import BertClient
bc = BertClient(ip='xx.xx.xx.xx')  # ip address of the GPU machine
bc.encode(['First do it', 'then do it right', 'then do it better'])

3.搭建问答搜索引擎

我们将通过 bert-as-service 从FAQ 列表中找到与用户输入的问题最相似的问题,并返回相应的答案。

FAQ列表你也可以在 Python实用宝典后台回复 bert-as-service 下载。

首先,加载所有问题,并显示统计数据:

prefix_q = '##### **Q:** '
with open('README.md') as fp:
    questions = [v.replace(prefix_q, '').strip() for v in fp if v.strip() and v.startswith(prefix_q)]
    print('%d questions loaded, avg. len of %d' % (len(questions), np.mean([len(d.split()) for d in questions])))
    # 33 questions loaded, avg. len of 9

一共有33个问题被加载,平均长度是9.

然后使用预训练好的模型:uncased_L-12_H-768_A-12 启动一个Bert服务:

bert-serving-start -num_worker=1 -model_dir=/data/cips/data/lab/data/model/uncased_L-12_H-768_A-12

接下来,将我们的问题编码为向量:

bc = BertClient(port=4000, port_out=4001)
doc_vecs = bc.encode(questions)

最后,我们准备好接收用户的查询,并对现有问题执行简单的“模糊”搜索。

为此,每次有新查询到来时,我们将其编码为向量并计算其点积 doc_vecs;然后对结果进行降序排序,返回前N个类似的问题:

while True:
    query = input('your question: ')
    query_vec = bc.encode([query])[0]
    # compute normalized dot product as score
    score = np.sum(query_vec * doc_vecs, axis=1) / np.linalg.norm(doc_vecs, axis=1)
    topk_idx = np.argsort(score)[::-1][:topk]
    for idx in topk_idx:
        print('> %s\t%s' % (score[idx], questions[idx]))

完成!现在运行代码并输入你的查询,看看这个搜索引擎如何处理模糊匹配:

完整代码如下,一共23行代码(在后台回复关键词也能下载):

import numpy as np
from bert_serving.client import BertClient
from termcolor import colored

prefix_q = '##### **Q:** '
topk = 5

with open('README.md') as fp:
    questions = [v.replace(prefix_q, '').strip() for v in fp if v.strip() and v.startswith(prefix_q)]
    print('%d questions loaded, avg. len of %d' % (len(questions), np.mean([len(d.split()) for d in questions])))

with BertClient(port=4000, port_out=4001) as bc:
    doc_vecs = bc.encode(questions)

    while True:
        query = input(colored('your question: ', 'green'))
        query_vec = bc.encode([query])[0]
        # compute normalized dot product as score
        score = np.sum(query_vec * doc_vecs, axis=1) / np.linalg.norm(doc_vecs, axis=1)
        topk_idx = np.argsort(score)[::-1][:topk]
        print('top %d questions similar to "%s"' % (topk, colored(query, 'green')))
        for idx in topk_idx:
            print('> %s\t%s' % (colored('%.1f' % score[idx], 'cyan'), colored(questions[idx], 'yellow')))

够简单吧?当然,这是一个基于预训练的Bert模型制造的一个简单QA搜索模型。

你还可以微调模型,让这个模型整体表现地更完美,你可以将自己的数据放到某个目录下,然后执行 run_classifier.py 对模型进行微调,比如这个例子:

https://github.com/google-research/bert#sentence-and-sentence-pair-classification-tasks

它还有许多别的用法,我们这里就不一一介绍了,大家可以前往官方文档学习:

https://github.com/hanxiao/bert-as-service

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Asciinema – 终端日志记录神器,机器学习开发者的福音

我们在做机器学习/深度学习开发的时候,经常会产生如下所示的大量日志:

这些日志如果不保存,转瞬即逝,当我们想要回去翻看某一轮训练日志的时候,会很遗憾的发现找不到了。

现在有了这个 Asciinema 这个神器,我们不仅能找到当时的终端日志导出,还能够“重播日志”并“分享日志”。非常牛逼:

Asciinema 是使用Python开发的工具,请按下面的流程安装并使用。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:

pip install asciinema

2.Asciinema 使用方法

终端输入如下命令,记录你的第一个终端日志:

asciinema rec first.cast

输入完成后会显示如下的提示:

(gs3_9) zjr@sgd-linux-1:~/cnn_test$ asciinema rec first.cast
  
asciinema: recording asciicast to first.cast
asciinema: press <ctrl-d> or type "exit" when you're done

意思就是日志会被保存在当前文件夹下的first.cast,如果你想结束录制,按 Ctrl + D 即可。

记录完毕后,以双倍速度重播该日志:

asciinema play -s 2 first.cast

或以正常速度但空闲时间限制为 2 秒:

asciinema play -i 2 first.cast

你也可以在启动终端日志录制时传递 -i 2 asciinema rec,将其永久设置在录制中:

asciinema rec first.cast -i 2

空闲时间的限制使录制更有趣。试试吧。

如果你想在网络上观看和分享,请上传:

asciinema upload first.cast

这个命令会将日志记录上传到 asciinema.org,此外,它会打印一个秘密链接,你可以使用该链接在网络浏览器中观看你录制的终端日志:

你可以通过省略文件名一步录制和上传终端的日志:

asciinema rec

录制完成后,系统会要求你确认上传。未经你的同意,不会向任何地方发送任何内容。

3.播放日志

查看日志有四种方式,最普通的是通过本地文件进行终端重播:

asciinema play /path/to/asciicast.cast

以下键盘快捷键可用:

  • Space– 暂停,
  • .– 按帧步进(暂停时),
  • Ctrl+C– 退出

第二种方式是通过url播放:

asciinema play https://asciinema.org/a/22124.cast
asciinema play http://example.com/demo.cast

这个方式需要你的日志已经上传到asciinema.org中。

第三种方式是通过你自己生成的html页面访问(需要<link rel="alternate" type="application/x-asciicast" href="/my/ascii.cast">在页面的 HTML 中):

asciinema play http://your_html_path/post.html

第四种方式是通过标准输入输出播放:

cat /path/to/asciicast.cast | asciinema play -
ssh user@host cat asciicast.cast | asciinema play -

可用选项:

  • -i, --idle-time-limit=<sec>– 将重播的终端空闲不动时间闲置为最大<sec>秒数
  • -s, --speed=<factor>– 播放速度

4.导出日志

导出终端日志到文本文件非常简单:

asciinema cat existing.cast > terminal_output.txt

所有的终端日志都会被导出到 terminal_output.txt 中,非常方便好用。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Tqsdk-python-天勤量化开发包,期货量化,实时行情/历史数据/实盘交易

TqSdk天勤量化交易策略程序开发包

TqSdk是一个由信易科技发起并贡献主要代码的开源Python库.依托快期多年积累成熟的交易及行情服务器体系,TqSdk支持用户使用极少的代码量构建各种类型的量化交易策略程序,并提供包含期货、期权、股票的历史数据-实时数据-开发调试-策略回测-模拟交易-实盘交易-运行监控-风险管理全套解决方案

from tqsdk import TqApi, TqAuth, TqAccount, TargetPosTask

api = TqApi(TqAccount("H海通期货", "4003242", "123456"), auth=TqAuth("信易账户", "账户密码"))      # 创建 TqApi 实例, 指定交易账户
q_1910 = api.get_quote("SHFE.rb1910")                         # 订阅近月合约行情
t_1910 = TargetPosTask(api, "SHFE.rb1910")                    # 创建近月合约调仓工具
q_2001 = api.get_quote("SHFE.rb2001")                         # 订阅远月合约行情
t_2001 = TargetPosTask(api, "SHFE.rb2001")                    # 创建远月合约调仓工具

while True:
  api.wait_update()                                           # 等待数据更新
  spread = q_1910["last_price"] - q_2001["last_price"]        # 计算近月合约-远月合约价差
  print("当前价差:", spread)
  if spread > 250:
    print("价差过高: 空近月,多远月")                            
    t_1910.set_target_volume(-1)                              # 要求把1910合约调整为空头1手
    t_2001.set_target_volume(1)                               # 要求把2001合约调整为多头1手
  elif spread < 200:
    print("价差回复: 清空持仓")                               # 要求把 1910 和 2001合约都调整为不持仓
    t_1910.set_target_volume(0)
    t_2001.set_target_volume(0)

要快速了解如何使用TqSdk,可以访问我们的十分钟快速入门指南

架构

功能

TqSdk提供的功能可以支持从简单到复杂的各类策略程序

  • 公司级数据运维,提供当前所有可交易合约从上市开始的全部Tick数据和K线数据
  • 支持市场上90%的期货公司实盘交易
  • 支持模拟交易
  • 支持Tick级和K线级回测,支持复杂策略回测
  • 提供近百个技术指标函数及源码
  • 用户无须建立和维护数据库,行情和交易数据全在内存数据库,无访问延迟
  • 优化支持熊猫麻木的
  • 无强制框架结构,支持任意复杂度的策略,在一个交易策略程序中使用多个品种的K线/实时行情并交易多个品种
  • 配合开发者支持工具,能够进行交易信号打点,支持自定义指标画图

安装

TqSdk仅支持Python3.6及更高版本。要安装TqSdk,可使用PIP:

$ pip install tqsdk

文档

在线阅读HTML版本文档:https://doc.shinnytech.com/tqsdk/latest

在线问答社区:https://www.shinnytech.com/qa

知乎账户[天勤量化]:https://www.zhihu.com/org/tian-qin-liang-hua/activities

用户交流QQ群:619870862(目前只允许给我们点过STAR的同学加入,加群时请提供GitHub用户名)

GUI

TqSdk本身自带的WEB_GUI功能,简单一行参数即可支持调用图形化界面,详情参考web_gui

关于我们

信易科技是专业的期货软件供应商和交易所授权行情服务商.旗下的快期系列产品已为市场服务超过10年。TqSdk是公司开源计划的一部分

Walle-web-Walle-瓦力DevOps开源项目代码部署平台

Walle 2.0-官方主页


字节跳动内推书名:Tob Lark招聘大数据研发、数据分析师,机会极佳,请勿错过.请各位朋友扩散下有需要的同学直达内推链接、帮助内推,君子成人之美,谢谢.

功能强大,且免费开源的walle-web 瓦力终于更新2.0.0了!

Walle让用户代码发布终于可以不只能选择Jenkins!支持各种Web代码发布,php、java、python、go等代码的发布、回滚可以通过Web来一键完成。Walle一个可自由配置项目,更人性化,高颜值,支持Git、多用户、多语言、多项目、多环境同时部署的开源上线部署系统.

2.0.0占用了我几乎所有业余时间,精力与金钱付出换各位使用收益,望各位喜欢不吝顺手star以示支持,项目更好亦反馈予你.目前2.0.0已经发布,请保持关注,我会在公众号更新(在最下面)。

有推广资源(开源文章推荐、大会分享)的同学,请微信联系我,强烈需要帮助.另外,老版本已迁移到walle 1.x的同学务必不要再更新了,两个版本不兼容

功能

  • gitlabRESTful API,类gitlab的权限模型.将来打通gitlab,良心的惊喜
  • 空间管理.意味着有独立的空间资源:环境管理、用户组、项目、服务器等
  • 灰度发布.呼声不断,终于来了
  • 项目管理.Deploy、Release的前置及后置Hook,自定义全局变量;自带检测、复制功能,都贴心到这种程度了
  • websocket实时展示部署中的shell console、跟真的终端长得一样.
  • 完善的通知机制.邮件、钉钉
  • 全新的UI、我自己都被震撼到了,如丝般流畅

架构


预览





安装

快速安装|安装错误|常见错误排解

路线图

  • 预览版2018/12/02
    • 安装文档、前后端代码、数据迁移
  • Alpha2018-12-09
    • 使用文档、故障排除、公众号更新
  • 测试版2018/12/23🎅圣诞夜前夕
    • 钉钉/邮件消息通知
    • 接受官网徽标企业的Trouble Shooting
  • 2.0.02018/12/301个️⃣元旦前夕
    • 项目检测、复制
    • 任务的回滚
    • released tag、使用文档
    • Docker镜像
    • JAVA配置模板
    • php配置模板
    • github5000star
  • 2.0.12019-01-13
    • 项目配置添加自定义变量
    • Python3.7+兼容
  • 2.1.02019-03-22
    • 超管权限完善
    • Dashboard1.0(全新的玩法,欢迎提问题)
    • 3月24日开源中国苏州源创会-开源综合技术主题“开源构建多空间可视化一键部署DevOps平台”
  • 2.2.02019-04-22
    • 网络挂钩(GitLab)
    • 上线时间记录、命令与结果拆分、实时控制台
    • 宿主机资源监控
  • 2.3.02019-05-27
    • 插件化:Maven、npm
    • 管道式
  • 2.4.02019-06-17
    • I18N国际化
  • 2.5.02019/07/29
    • 上线单差异
    • 消息通知定制化:钉钉、邮件、企业微信
  • 2.6.02019-08-19
    • 批量管理服务器
    • 跨空间复制项目
    • 应用程序打包平台
    • Dashboard2.0

Recommenders-推荐系统的最佳实战教程

Recommenders现在在PyPI上,可以使用pip安装!此外,还有大量的错误修复和实用程序改进

您可以在此处找到PyPI页面:https://pypi.org/project/ms-recommenders/

您可以在此处找到软件包文档:https://microsoft-recommenders.readthedocs.io/en/latest/

引言

此存储库包含构建推荐系统的示例和最佳实践,以Jupyter笔记本形式提供。这些示例详细介绍了我们在五项关键任务上的学习:

中提供了几个实用程序reco_utils以支持常见任务,例如以不同算法预期的格式加载数据集、评估模型输出以及拆分训练/测试数据。其中包括几种最先进算法的实现,以便在您自己的应用程序中进行自学和自定义。请参阅reco_utils documentation

有关存储库的更详细概述,请参阅wiki page

快速入门

请参阅setup guide有关在本地设置计算机的更多详细信息,请访问data science virtual machine (DSVM)或打开Azure Databricks

推荐器软件包的安装已经过Python版本3.6和3.7的测试。建议在干净的环境中安装软件包及其依赖项(例如condavenv)

要在本地计算机上进行设置,请执行以下操作:

要安装核心实用程序、基于CPU的算法和相关性,请执行以下操作:

  1. 确保安装了编译所需的软件。在Linux上,可以通过添加构建基本依赖项来支持这一点:
sudo apt-get install -y build-essential

在Windows上,您需要Microsoft C++ Build Tools

  1. 从以下位置安装软件包PyPI
pip install --upgrade pip
pip install ms-recommenders[examples]
  1. 向Jupyter注册您的(CONDA或虚拟)环境:
python -m ipykernel install --user --name my_environment_name --display-name "Python (reco)"
  1. 启动Jupyter笔记本服务器
jupyter notebook
  1. 运行SAR Python CPU MovieLens笔记本在下面00_quick_start文件夹。确保将内核更改为“Python(Reco)”

有关安装软件包的其他选项(支持图形处理器、电光等)看见this guide

注意事项-TheAlternating Least Squares (ALS)笔记本电脑需要PySpark环境才能运行。请按照中的步骤操作setup guide在PySpark环境中运行这些笔记本。对于深度学习算法,建议使用GPU机器,并遵循setup guide要设置NVIDIA库,请执行以下操作

算法

下表列出了存储库中当前可用的推荐算法。当有不同的实施可用时,笔记本将链接在环境列下

算法 环境 类型 描述
交替最小二乘(ALS) PySpark 协同过滤 大数据集中显式或隐式反馈的矩阵分解算法,电光MLLib针对可扩展性和分布式计算能力进行了优化
关注异步奇异值分解(A2SVD)* Python CPU / Python GPU 协同过滤 一种基于顺序的算法,旨在利用注意力机制捕获长期和短期用户偏好
CONAC/贝叶斯个性化排名(BPR) Python CPU 协同过滤 隐式反馈预测项目排序的矩阵分解算法
角/双边变分自动编码器(BiVAE) Python CPU / Python GPU 协同过滤 二元数据的生成模型(例如,用户-项目交互)
卷积序列嵌入推荐(CASER) Python CPU / Python GPU 协同过滤 基于卷积的算法,旨在捕获用户的一般偏好和序列模式
深度知识感知网络(DKN)* Python CPU / Python GPU 基于内容的过滤 包含知识图和文章嵌入的深度学习算法,可提供强大的新闻或文章推荐
极深因式分解机(XDeepFM)* Python CPU / Python GPU 混血儿 基于深度学习的具有用户/项目特征的隐式和显式反馈算法
FastAI嵌入点偏置(FAST) Python CPU / Python GPU 协同过滤 面向用户和项目的带嵌入和偏向的通用算法
LightFM/混合矩阵分解 Python CPU 混血儿 隐式和显式反馈的混合矩阵分解算法
LightGBM/渐变增强树* Python CPU/PySpark 基于内容的过滤 基于内容问题的快速训练和低内存占用的梯度Boosting树算法
LightGCN Python CPU / Python GPU 协同过滤 一种深度学习算法,简化了隐式反馈预测GCN的设计
GeoIMC* Python CPU 混血儿 矩阵补全算法,考虑了用户和项目的特点,使用黎曼共轭梯度优化,遵循几何方法
GRU4Rec Python CPU / Python GPU 协同过滤 基于序列的算法,旨在使用递归神经网络捕获长期和短期用户偏好
多项式VAE Python CPU / Python GPU 协同过滤 预测用户/项目交互的产生式模型
具有长期和短期用户表示的神经推荐(LSTUR)* Python CPU / Python GPU 基于内容的过滤 具有长期和短期用户兴趣建模的神经推荐算法
基于注意力多视图学习(NAML)的神经推荐* Python CPU / Python GPU 基于内容的过滤 具有注意力多视角学习的神经推荐算法
神经协同过滤(NCF) Python CPU / Python GPU 协同过滤 一种性能增强的隐式反馈深度学习算法
具有个性化注意的神经推荐(NPA)* Python CPU / Python GPU 基于内容的过滤 基于个性化注意力网络的神经推荐算法
基于多头自我注意(NRMS)的神经推荐* Python CPU / Python GPU 基于内容的过滤 一种多头自关注的神经推荐算法
下一项推荐(NextItNet) Python CPU / Python GPU 协同过滤 基于扩张卷积和残差网络的序列模式捕获算法
受限Boltzmann机器(RBM) Python CPU / Python GPU 协同过滤 基于神经网络的显式或隐式反馈潜在概率分布学习算法
黎曼低秩矩阵完成(RLRMC)* Python CPU 协同过滤 基于黎曼共轭梯度优化的小内存矩阵分解算法
简单推荐算法(SAR)* Python CPU 协同过滤 基于相似度的隐式反馈数据集算法
短期和长期偏好综合推荐(SLI-REC)* Python CPU / Python GPU 协同过滤 基于顺序的算法,旨在使用注意机制、时间感知控制器和内容感知控制器捕获长期和短期用户偏好
多兴趣感知的序贯用户建模(SUM)* Python CPU / Python GPU 协同过滤 一种旨在捕捉用户多兴趣的增强型记忆网络顺序用户模型
标准VAE Python CPU / Python GPU 协同过滤 预测用户/项目交互的产生式模型
奇异值分解(SVD) Python CPU 协同过滤 预测不是很大数据集中显式评级反馈的矩阵分解算法
术语频率-文档频率反转(TF-IDF) Python CPU 基于内容的过滤 一种简单的基于相似度的文本数据内容推荐算法
Vowpal Wabbit(大众)* Python CPU (online training) 基于内容的过滤 快速在线学习算法,非常适合用户功能/上下文不断变化的场景
宽而深 Python CPU / Python GPU 混血儿 一种可记忆特征交互和泛化用户特征的深度学习算法
xLearch/factorization Machine(FM)&场感知FM(FFM) Python CPU 混血儿 利用用户/项目特征预测标签的快速高效内存算法

注意事项*指示由Microsoft发明/贡献的算法

独立的或正在孵化的算法和实用程序是contrib文件夹。这将包含可能不容易放入核心存储库的贡献,或者需要时间来重构或成熟代码并添加必要的测试

算法 环境 类型 描述
SARplus* PySpark 协同过滤 电光合成孔径雷达的优化实现

初步比较

我们提供一个benchmark notebook以说明如何评估和比较不同的算法。在本笔记本中,使用分层拆分将MovieLens数据集按75/25的比率拆分成训练/测试集。使用下面的每个协同过滤算法来训练推荐模型。我们利用文献中报道的经验参数值。here在对指标进行排名时,我们使用k=10(前十大推荐项目)。我们在标准NC6S_v2上运行比较Azure DSVM(6个vCPU、112 GB内存和1个P100 GPU)。电光肌萎缩侧索硬化症在本地独立模式下运行。在此表中,我们显示了在Movielens 100k上运行15个时期的算法的结果

算法 地图 nDCG@k 精度@k Recall@k RMSE Mae R2个 解释的差异
ALS 0.004732 0.044239 0.048462 0.017796 0.965038 0.753001 0.255647 0.251648
BiVAE 0.146126 0.475077 0.411771 0.219145 不适用 不适用 不适用 不适用
BPR 0.132478 0.441997 0.388229 0.212522 不适用 不适用 不适用 不适用
FastAI 0.025503 0.147866 0.130329 0.053824 0.943084 0.744337 0.285308 0.287671
LightGCN 0.088526 0.419846 0.379626 0.144336 不适用 不适用 不适用 不适用
NCF 0.107720 0.396118 0.347296 0.180775 不适用 不适用 不适用 不适用
SAR 0.110591 0.382461 0.330753 0.176385 1.253805 1.048484 -0.569363 0.030474
SVD 0.012873 0.095930 0.091198 0.032783 0.938681 0.742690 0.291967 0.291971

行为规范

本项目坚持Microsoft’s Open Source Code of Conduct为了给所有人营造一个欢迎和鼓舞人心的社区

贡献

这个项目欢迎大家提供意见和建议。在投稿之前,请查看我们的contribution guidelines

生成状态

这些测试是夜间构建,用于计算冒烟和集成测试。main是我们的主要分支机构staging是我们的发展分部。我们使用pytest中测试python实用程序reco_utilspapermill对于notebooks有关测试管道的更多信息,请参阅test documentation

DSVM构建状态

以下测试每天在Linux DSVM上运行。这些机器全天候运转。

构建类型 分支机构 状态 分支机构 状态
Linux CPU 主干道 试运行
Linux GPU 主干道 试运行
LINUX电光 主干道 试运行

相关项目

参考文献

  • A.Argyriou、M.González-Fierro和L.Zhang,“Microsoft推荐器:可投入生产的推荐系统的最佳实践(Best Practices for Production-Ready Recommendation Systems)”,万维网2020:台北国际万维网大会,2020年。在线提供:https://dl.acm.org/doi/abs/10.1145/3366424.3382692
  • 张立,吴涛,谢,A.Argyriou,M.González-Fierro,J.Lian,“建立规模化的可生产推荐系统”,ACM SIGKDD 2019年知识发现和数据挖掘大会(KDD 2019),2019年
  • S.Graham,J.K.Min,T.Wu,“微软推荐器:加速开发推荐器系统的工具”,RecSys‘19:第13届ACM推荐系统会议论文集,2019年。在线提供:https://dl.acm.org/doi/10.1145/3298689.3346967

Beets-音乐库管理器和MusicBrainz标记器

Beets 是为痴迷的音乐极客准备的媒体图书馆管理系统。

甜菜的目的是让你的音乐收藏一劳永逸。它会对您的收藏进行编目,并在运行过程中自动改进其元数据。然后,它提供一系列工具来操作和访问您的音乐

这里有一个甜菜聪明的标签校正器的例子:

$ beet import ~/music/ladytron
Tagging:
    Ladytron - Witching Hour
(Similarity: 98.4%)
 * Last One Standing      -> The Last One Standing
 * Beauty                 -> Beauty*2
 * White Light Generation -> Whitelightgenerator
 * All the Way            -> All the Way...

因为甜菜被设计成一个图书馆,它几乎可以为你的音乐收藏做任何你能想象到的事情。通过plugins,甜菜成了灵丹妙药:

如果甜菜还没有达到你的要求,writing your own plugin如果你懂一点Python就会觉得非常简单

安装

您可以通过键入以下命令来安装甜菜pip install beets甜菜也已经包装在software repositories有几个发行版本。请查看Getting Started有关详细信息,请参阅指南

贡献力量

感谢您考虑为beets好了!无论您是不是程序员,您都应该能够在以下位置找到所需的所有信息CONTRIBUTING.rst

阅读更多内容

有关甜菜的更多信息,请访问its Web site关注@b33ts在Twitter上获取新闻和最新消息

联系方式

  • 遇到了您要报告的错误吗?请查看我们的issue tracker好了!
    • 如果您的问题尚未报告,请open a new ticket我们将很快与您联系
    • 如果您想对某个功能/错误进行投票,只需给出一个👍在你希望看到优先于其他问题的问题上
  • 需要帮助/支持,想要开始讨论,对新功能有想法,还是只是想向团队介绍自己?检查GitHub DiscussionsDiscourse好了!

作者

甜菜来了Adrian Sampson有上千人的配角

Antlr4-ANTLR 是一个功能强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件

ANTLR(另一个用于语言识别的工具)是一个功能强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它被广泛用于构建语言、工具和框架。根据语法,ANTLR生成一个解析器,该解析器可以构建解析树,还可以生成一个侦听器接口(或访问器),从而可以轻松地响应感兴趣的短语的识别

考虑到日间工作的限制,我在这个项目上的工作时间有限,因此我必须首先专注于修复bug,而不是更改/改进功能集。很可能我每隔几个月就会突然做一次。如果您的bug或Pull请求没有产生响应,请不要生气!–parrt

作者和主要贡献者

有用的信息

您可能还会发现以下页面很有用,特别是当您想要使用各种目标语言时

权威的ANTLR 4参考

程序员总是遇到解析问题。无论是JSON这样的数据格式,SMTP这样的网络协议,Apache的服务器配置文件,PostScript/PDF文件,还是简单的电子表格宏语言-ANTLR v4,本书都将揭开这个过程的神秘面纱。ANTLRv4已经从头开始重写,使得构建解析器和构建在其上的语言应用程序比以往任何时候都更加容易。这本完全改写的新版畅销ANTLR权威参考向您展示了如何利用这些新功能

你可以买这本书The Definitive ANTLR 4 Reference在亚马逊或electronic version at the publisher’s site

您会发现Book source code有用的

附加语法

This repository是不带动作的语法集合,其中根目录名是语法分析的语言的全小写名称。例如,java、cpp、cSharp、c等

Stanford-tensorflow-tutorials-此存储库包含斯坦福课程的代码示例


斯坦福-TensorFlow-教程

此存储库包含课程CS 20:深度学习研究的TensorFlow的代码示例。
它将随着课程的进展而更新。
详细的教学大纲和课堂讲稿可以在这里找到。here
对于本课程,我使用python3.6和TensorFlow 1.4.1

前一年课程的代码和备注请参见文件夹2017和网站https://web.stanford.edu/class/cs20si/2017

有关安装说明和依赖项列表,请参阅此存储库的安装文件夹

Nltk-NLTK源

自然语言工具包(NLTK)


NLTK–自然语言工具包–是一套开源的Python模块、数据集和教程,支持自然语言处理方面的研究和开发。NLTK需要Python版本3.5、3.6、3.7、3.8或3.9

有关文档,请访问nltk.org

贡献

你想为NLTK的发展做贡献吗?太棒了!请阅读CONTRIBUTING.md有关更多详细信息,请参阅

另请参阅how to contribute to NLTK

捐赠

你觉得这个工具包有帮助吗?请使用NLTK主页上的链接通过PayPal向项目捐款来支持NLTK开发

引用

如果您发表使用NLTK的作品,请引用NLTK书,如下所示:

Bird, Steven, Edward Loper and Ewan Klein (2009).
Natural Language Processing with Python.  O'Reilly Media Inc.

版权所有

版权所有(C)2001-2021年NLTK项目

有关许可证信息,请参阅LICENSE.txt

AUTHORS.md包含对NLTK做出贡献的每个人的列表

重新分布

  • NLTK源代码是在Apache2.0许可下分发的
  • NLTK文档在知识共享署名-非商业性-无衍生作品3.0美国许可下分发
  • NLTK语料库是根据自述文件中给出的条款为每个语料库提供的;所有语料库都可以再分发,并可用于非商业用途
  • 根据这些许可证的规定,NLTK可以自由再分发

Wifiphisher 无线连接渗透破解框架

关于

Wifiphisher是用于执行RED团队活动或Wi-Fi安全测试的恶意接入点框架。使用Wifiphisher,渗透测试员可以通过执行有针对性的Wi-Fi关联攻击,轻松实现对无线客户端的中间人位置。Wifiphisher还可以用于对连接的客户端安装受害者定制的网络钓鱼攻击,以便捕获凭证(例如,从第三方登录页面或WPA/WPA2预共享密钥)或用恶意软件感染受害者站

特性:

  • 很强大。Wifiphisher可以在树莓PI设备内运行数小时,执行所有现代Wi-Fi关联技术(包括“邪恶双胞胎”、“因果报应”和“已知信标”)。
  • 很灵活。支持数十个参数,并为不同的部署方案提供了一组社区驱动的网络钓鱼模板
  • 模块化的。用户可以write simple or complicated modules在Python中扩展该工具的功能,或者create custom phishing scenarios为了进行特定的目标导向的袭击
  • 使用方便。高级用户可以使用Wifiphisher提供的丰富功能集,而初学者可能只需简单地使用“./bin/wifiphisher”即可。交互式文本用户界面引导测试人员完成攻击的构建过程
  • 广泛研究的结果。我们的开发人员披露了诸如“已知信标”和“Lure10”之类的攻击以及最先进的网络钓鱼技术,Wifiphisher是第一个集成它们的工具
  • 由令人敬畏的开发人员和用户社区支持
  • 免费的。Wifiphisher可以免费下载,并且还附带完整的源代码,您可以根据GPLv3许可证的条款研究、更改或分发这些源代码

它是如何工作的

Wi-Fi网络钓鱼包括两个步骤:

  1. 第一步涉及在不知情的情况下与Wi-Fi客户端关联的过程,换句话说,就是获得中间人(MITM)位置。Wifiphisher使用许多不同的技术来实现这一点,包括:
    • 邪恶双胞胎,Wifiphisher创建了一个看起来与合法网络相似的假无线网络
    • Karma,Wifiphisher伪装成附近Wi-Fi客户端搜索的公共网络
    • 已知的信标,其中Wifiphisher广播公共ESSID的字典,周围的无线站在过去可能已经连接到这些ESSID

    与此同时,Wifiphisher不断伪造“解除身份验证”或“解除关联”数据包,以破坏现有的关联,并最终使用上述技术引诱受害者


执行MITM攻击

  1. (可选)一旦Wifiphisher授予渗透测试仪一个中间人的位置,就可以执行许多不同的攻击。例如,测试器可以执行数据嗅探或扫描受害者站的漏洞

    通过使用Wifiphisher,可以从目标环境和受害用户收集信息,从而实现高级Web网络钓鱼技术。例如,在我们的一个场景中,Wifiphisher将从广播的信标帧和HTTP User-Agent报头中提取信息,以显示Windows网络管理器的基于Web的模拟,以便捕获预共享密钥


假的web-based network manager

要求

以下是充分利用Wifiphisher的要求:

  • 一个工作正常的Linux系统。人们已经让Wifiphisher在许多发行版上工作,但Kali Linux是官方支持的发行版,因此所有新功能都主要在这个平台上进行测试
  • 一个支持AP&Monitor模式并能够注入的无线网络适配器。驱动程序应支持NetLink

安装

要安装最新的开发版本,请键入以下命令:

git clone https://github.com/wifiphisher/wifiphisher.git # Download the latest revision
cd wifiphisher # Switch to tool's directory
sudo python setup.py install # Install any dependencies

或者,您也可以从Releases page

用法

通过输入以下命令运行该工具wifiphisherpython bin/wifiphisher(从工具的目录内)

通过在没有任何选项的情况下运行该工具,它将找到正确的接口,并交互地要求用户选择目标网络的ESSID(从周围区域具有所有ESSID的列表中)以及要执行的网络钓鱼场景。默认情况下,该工具将同时执行Evil Twin和Karma攻击


wifiphisher -aI wlan0 -jI wlan4 -p firmware-upgrade --handshake-capture handshake.pcap

使用wlan0生成恶意接入点,使用wlan4进行DoS攻击。从列表中手动选择目标网络,然后执行“固件升级”场景。通过对照handshake.pcap文件中的握手进行检查,验证捕获的预共享密钥是否正确

对于手动选择无线适配器非常有用。这个“Firmware Upgrade”方案是从受密码保护的网络获取PSK的一种简单方法


wifiphisher --essid CONFERENCE_WIFI -p plugin_update -pK s3cr3tp4ssw0rd

自动选择正确的接口。使用Essid“Conference_WiFi”定位Wi-Fi,并执行“插件更新”场景。邪恶双胞胎将使用PSK“s3cr3tp4ssw0rd”进行密码保护

对具有公开的PSK的网络有用(例如,在会议中)。这个“Plugin Update”Scenario提供了一种让受害者下载恶意可执行文件(例如,包含反向外壳有效负载的恶意软件)的简单方法


wifiphisher --essid "FREE WI-FI" -p oauth-login -kB

只需使用Essid“免费WI-FI”生成一个开放的Wi-Fi网络,然后执行“OAuth登录”方案。此外,挂载“已知信标”Wi-Fi自动关联技术

对公共场所的受害者很有用。这个“OAuth Login”Scenario提供了一种从Facebook等社交网络获取凭据的简单方法

以下是所有选项及其说明(也可用于wifiphisher -h):

缩写形式 长型 解释
-h –救命 显示此帮助消息并退出
-i接口 –接口接口 手动选择既支持AP模式又支持监控模式的接口,以生成恶意AP并从扩展(即deauth)安装其他Wi-Fi攻击。示例:-I wlan1
-EI EXTENSIONSINTERFACE –扩展接口扩展SINTERFACE 手动选择支持监控模式的接口来运行扩展。示例:-ei wlan1
-AI APINTERFACE –apinterface APINTERFACE 手动选择支持AP模式的接口以派生AP。示例:-AI wlan0
-PI接口 –保护接口接口 指定将保护其连接不受NetworkManager管理的一个或多个接口
-KN –保留网络管理器 请勿杀死NetworkManager
-ne –无扩展 不加载任何扩展
-e Essid –Essid Essid 输入无管理AP的ESSID。此选项将跳过接入点选择阶段。示例:–Essid“免费WiFi”
-PPD网络钓鱼页面目录 –网络钓鱼页面目录网络钓鱼页面目录 在此位置搜索网络钓鱼页面
-p PHISHING SCENARIO –网络钓鱼方案PHISHING SCENARIO 选择要运行的网络钓鱼方案。此选项将跳过方案选择阶段。示例:-p Firmware_Upgrade
-PK预共享密钥 –预共享密钥预共享密钥 在恶意接入点上添加WPA/WPA2保护。示例:-pk s3cr3tp4ssw0rd
-QS –不折不扣的成功 成功检索一对凭据后停止脚本
-LC –lure10-捕获 捕获在AP选择阶段发现的AP的BSSID。此选项是Lure10攻击的一部分
-LE LURE10_利用漏洞 –lure10-利用LURE10_利用 愚弄附近Windows用户的Windows location Service,使其相信它在以前使用–lure10-capture捕获的区域内。Lure10攻击的一部分
-IAM –mac-ap-interface 指定AP接口的MAC地址。示例:-IAM 38:EC:11:00:00:00
-IEM –mac-tensions-interface 指定扩展接口的MAC地址。示例:-IEM E8:2A:EA:00:00:00
-INM –无mac随机化 不更改任何MAC地址
-HC –握手-捕获 捕获用于验证密码的WPA/WPA2握手。需要柯帕蒂。示例:-hc capture.pcap
-德·埃西德(De Essid) –Deauth-Essid Essid 使用该ESSID对WLAN中的所有BSSID进行身份验证
-直流通道 –双通道通道 要收听的频道。示例:–deauth-channel 1,3,7
–日志记录 启用日志记录。输出将保存到wifiphisher.log文件
-LP LOGPATH –日志路径LOGPATH 确定日志文件的完整路径
-CP凭据日志路径 –凭据日志路径凭据日志路径 确定将存储所有捕获的凭据的文件的完整路径
-厘米 –通道监视器 监控目标接入点是否更改了信道
–负载路径 启用有效负载路径。旨在与服务有效负载的场景一起使用
-WP –wps-pbc 监控WPS-PBC注册器侧的按钮是否被按下
–WAI –wpspbc-assoc-interface 用于关联到WPS接入点的WLAN接口
-kB –已知信标 执行已知的信标Wi-Fi自动关联技术
-fh –force-hostapd 强制使用系统中安装的hostapd
–dnsmasq-conf DNSMASQ_conf 确定dnmasq.conf文件的完整路径
-DK –禁用-业力 禁用业力攻击
-PE –网络钓鱼-Essid 确定要用于网络钓鱼页面的Essid

屏幕截图


瞄准接入点


一次成功的袭击


假的router configuration page


假的OAuth Login Page


假的web-based network manager

需要帮助

如果您是Python开发人员或网页设计师,您可以帮助我们改进Wifiphisher。您可以随时查看bug tracker对于要执行的某些任务

如果您不知道如何编码,您可以通过以下方式帮助我们proposing improvements or reporting bugs请查看错误报告指南和FAQ document在此之前。请注意,该工具的目标不是对脚本儿童友好。在打开问题之前,请确保您确实了解该工具的工作原理

学分

剧本是基于来自Dan McInerney早在2015年

一份完整的贡献者名单here

许可证

Wifiphisher在GPLv3许可下获得许可。看见LICENSE了解更多信息

项目状态

Wifiphisher的当前版本是1.4您可以从以下地址下载最新版本here否则,您可以通过克隆此存储库来获取最新的开发版本

免责声明

  • 在没有事先相互一致的情况下使用Wifiphisher攻击基础设施可被视为非法活动。最终用户有责任遵守所有适用的地方、州和联邦法律。作者不承担任何责任,也不对本程序造成的任何误用或损坏负责

注意事项:注意那些假装与Wifiphisher项目有关的网站。他们可能在传送恶意软件

有关Wifiphisher新闻,请关注我们Twitter或者像我们一样Facebook