jupyter_notebook

配置远程密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 生产配置文件
jupyter notebook --generate-config

# 生成密码
# 1. 打开ipython 执行下面2行代码
from notebook.auth import passwd
passwd()
# 输入2两次密码,生成sha值

# 编辑配置文件 ~/.jupyter/jupyter_notebook_config.py
c.NotebookApp.ip='127.0.0.1'
c.NotebookApp.allow_remote_access=True
c.NotebookApp.password=u'sha:xxxxxx生成内容'
c.NotebookApp.open_browser=False
c.NotebookApp.port=8888

# 配置代码根目录
c.ContentsManager.root_dir = '/home/aifish/FishCode'

# 启动服务
jupyter notebook

# 设置开机启动
# 加入 rc.local
nohup /home/aifish/anaconda3/bin/jupyter notebook>/home/aifish/.jupyter/notebook.log 2>&1 &

把虚拟环境添加到jupyter的kernel

1
2
3
4
5
6
7
进入虚拟环境
# 安装 ipykernel
pip install ipykernel
# 找到python位置(因为加入kernel时需要sudo权限,要制定python路径
which python
# 使用python绝对路径, 把虚拟环境XXXX加入kernel
sudo /anaconda/env/python -m ipykernel install --name XXXX

参考资料

查看更多

allennlp 类

allennlp/data/vocabulary.py

vocabulary

allennlp/data/tokenizers/token.py

filed

allennlp/data/dataset_readers/dataset_reader.py

allen_reader

allennlp/models/simple_tagger.py

simple_tagger

allennlp.data.token_indexers.TokenIndexer
allennlp.data.token_indexers.single_id_token_indexer
allennlp.common.util.get_frozen_and_tunable_parameter_names
allennlp.common.params.Params
allennlp.training.trainer.Trainer
allennlp.models.archival.archive_model
allennlp.data.iterators.data_iterator
allennlp.models.model
allennlp.data.vocabulary
allennlp.data.dataset_reader

查看更多

allennlp 命令执行流程

Successfully installed Jinja2-2.10.1 MarkupSafe-1.1.1 PyYAML-5.1 Pygments-2.4.2 Werkzeug-0.15.4 alabaster-0.7.12 allennlp-0.8.4 atomicwrites-1.3.0 attrs-19.1.0 awscli-1.16.190 babel-2.7.0 blis-0.2.4 boto3-1.9.180 botocore-1.12.180 click-7.0 colorama-0.3.9 conllu-0.11 cycler-0.10.0 cymem-2.0.2 docutils-0.14 editdistance-0.5.3 flaky-3.6.0 flask-1.0.3 flask-cors-3.0.8 ftfy-5.5.1 gevent-1.4.0 greenlet-0.4.15 h5py-2.9.0 imagesize-1.1.0 importlib-metadata-0.18 itsdangerous-1.1.0 jmespath-0.9.4 joblib-0.13.2 jsonnet-0.13.0 jsonpickle-1.2 jsonschema-3.0.1 kiwisolver-1.1.0 matplotlib-3.1.0 more-itertools-7.1.0 murmurhash-1.0.2 nltk-3.4.3 numpy-1.16.4 numpydoc-0.9.1 overrides-1.9 packaging-19.0 parsimonious-0.8.1 plac-0.9.6 pluggy-0.12.0 preshed-2.0.1 protobuf-3.8.0 py-1.8.0 pyasn1-0.4.5 pyparsing-2.4.0 pyrsistent-0.15.2 pytest-5.0.0 python-dateutil-2.8.0 pytorch-pretrained-bert-0.6.2 pytz-2019.1 regex-2019.6.8 responses-0.10.6 rsa-3.4.2 s3transfer-0.2.1 scikit-learn-0.21.2 scipy-1.3.0 snowballstemmer-1.9.0 spacy-2.1.4 sphinx-2.1.2 sphinxcontrib-applehelp-1.0.1 sphinxcontrib-devhelp-1.0.1 sphinxcontrib-htmlhelp-1.0.2 sphinxcontrib-jsmath-1.0.1 sphinxcontrib-qthelp-1.0.2 sphinxcontrib-serializinghtml-1.1.3 sqlparse-0.3.0 srsly-0.0.7 tensorboardX-1.7 thinc-7.0.4 torch-1.1.0 tqdm-4.32.2 unidecode-1.1.1 wasabi-0.2.2 wcwidth-0.1.7 word2number-1.1 zipp-0.5.1

安装tensorboard

1
2
3
4
5
# 先要安装tensorboard和tensorflow
pip install tensorflow tensorboard

# 再安装tensorboardx
pip install tensorboardX

Allennlp代码整体逻辑

  1. 自定义对象 datareader(数据读取器)
    1. 必须有方法.read dataset = datareader.read(数据文件)
查看更多

allennlp_models

crf_tagger

allennlp/models/crf_tagger.py class CrfTagger

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
`CrfTagger`使用`Seq2SeqEncoder`编码一系列文本,
然后使用条件随机场模型来预测序列中每个标记的标记。

参数
----------
vocab:`Vocabulary',必需
 用于计算输入/输出尺寸大小所需的词汇表。
text_field_embedder:`TextFieldEmbedder`,必需
    用于嵌入标记`TextField`,我们将其作为模型的输入。
encoder:`Seq2SeqEncoder`
我们将在嵌入令牌和预测输出标签之间使用的编码器。
label_namespace:`str`,optional(默认 =`labels`)
    这是计算SpanBasedF1Measure指标所必需的。
    除非你做了一些特殊处理,否则默认值即可。
feedforward:`FeedForward`,可选,(默认=None)。
    在编码器之后应用的可选前馈层。
label_encoding:`str`,optional(默认=None)
    在计算跨度f1时使用的标签编码,并在解码时限制CRF。有效选项是“BIO”,“BIOUL”,“IOB1”,“BMES”。
    如果`calculate_span_f1`或`constrain_crf_decoding`为真,则为必需。
include_start_end_transitions:`bool`,可选(默认=True)
    是否在CRF中包含开始和结束转换参数。
constrain_crf_decoding:`bool`,optional(默认=None)
    如果为“True”,则CRF在解码时被约束以产生有效的标签序列。如果这是'True`,则需要`label_encoding`。如果指定了“None”和label_encoding,则将其设置为“True”。
    如果未指定`None`和label_encoding,则默认为'False`。
calculate_span_f1:`bool`,可选(默认=None)
    在培训期间计算跨度级F1指标。如果这是'True`,则需要`label_encoding`。如果指定了“None”和label_encoding,则将其设置为“True”。
    如果未指定`None`和label_encoding,则默认为'False`。
dropout:`float`,optional(默认=None)
verbose_metrics:`bool`,可选(默认= False)
    如果为true,则除了整体统计信息之外,还将为每个标签类返回指标。
初始化程序:`InitializerApplicator`,可选(默认=`InitializerApplicator()`)
    用于初始化模型参数。
正规化器:`RegularizerApplicator`,可选(默认=None)
    如果提供,将用于计算训练期间的正则化惩罚。

Coreference Resolution 指代消解

该模型在CoNLL测试集的F1达到63.0%

1
2
3
4
5
6
# 引用模型
from allennlp.predictors.predictor import Predictor
predictor = Predictor.from_path("https://s3-us-west-2.amazonaws.com/allennlp/models/coref-model-2018.02.05.tar.gz")
predictor.predict(
document="The woman reading a newspaper sat on the bench with her dog."
)

Named Entity Recognition 命名实体识别

模型使用ELMo嵌入的biLSTM

查看更多

python代码加密

目前的加密手段:

  • 源代码混淆:只降低源码可读性,对破解有一定的干扰作用
  • 只发行 pyc: 可以用现成工具复原
  • 打包 exe: 可以用现成工具复原
  • cython打包so文件: 要加密单一的模块 /特制算法很有效,不过对很多复杂模块无法兼容,比如 django 写的 app
查看更多

命令行参数和环境变量

命令行参数argv

1
2
3
4
5
import sys
num = len(sys.argv) # 参数个数
script_name = sys.argv[0] # 脚本命令名称
arg1 = sys.argv[1] # 参数1
arg2 = sys.argv[2] # 参数2

argparse命令行参数模块

基础用法:必须参数

1
2
3
4
5
6
7
8
# 导入命令行解析的库文件
import argparse

# pkg是一个必须的位置参数(因为前面没有横杠,所以是位置参数。因为没有默认值,所以是必须参数)
parse.add_argument('pkg',help='help')

# 命令行执行 --help时,会查看的说明
parse = argparse.ArgumentParser(description="test!!")

可选参数

1
2
3
4
5
6
7
# nargs是默认值,有默认值的参数是可选参数
parse.add_argument('keyoukewu',help='xx',nargs='?')

# 前缀是‘-’的参数名是缩写,前缀是‘--’的参数名是全称
parse.add_argument('-a','--abc',help='xx',nargs='?')
print(args.abc)
print(args.a) # 是错误的:因为解析的时候必须用全称

参考资料

查看更多

thread多线程模块

概述

threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。

python当前版本的多线程库没有实现优先级、线程组,线程也不能被停止、暂停、恢复、中断。

threading模块提供的类:   Thread, Lock, Rlock, Condition, [Bounded]Semaphore, Event, Timer, local。

threading 模块提供的常用方法:
  threading.currentThread(): 返回当前的线程变量。
  threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
  threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

​ threading.currentThread().getName()获取当前程序的线程名称

查看更多