嗯,这可不是一只普通的兔子。
项目描述
Caerbannog的兔子
嗯,这可不是一只普通的兔子 - 这是你所见过的最糟糕、最残忍、最坏脾气的啮齿动物!
——Tim the Enchanter
此模块是Vowpal Wabbit机器学习系统的高级接口。目前它依赖于wabbit_wappa模块进行低级交互,但力求提供一个更高级的面向对象接口。
目前可以从caerbannog导入3种类型的Rabbit
- Rabbit
您的标准兔子实例。默认情况下使用管道运行Vowpal Wabbit
- ActiveRabbit
以主动学习模式运行Vowpal Wabbit,使用TCP套接字
- OfflineRabbit
初始化器期望的参数是fp,它是一个以‘wt’模式打开的文件。输入的教诲将被写入此文件以进行离线处理。
电影评论情感 - 使用caerbannog的主动学习演示
在此处导入相关模块。我们使用ActiveRabbit进行主动在线学习
from caerbannog import ActiveRabbit, Example
from itertools import islice
import random
import nltk
from nltk.corpus import movie_reviews
创建一个具有0.01主动温和度的主动兔子
rabbit = ActiveRabbit(loss_function='logistic', active_mellowness=0.01)
rabbit.start()
从NLTK电影评论语料库加载数据(注意,您需要先通过nltk.download()下载这些数据。对于每个文档,创建一个(document_words,category)元组,其中category是“pos”或“neg”,而document_words是从分词器中提取的单词列表。
documents = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
random.shuffle(documents)
len(documents)
2000
特征提取函数。首先过滤掉所有非字母数字标记。然后使“w”命名空间包含评论中的所有单词;“n”包含文档单词的2-4个ngram。
def document_features(document_words):
document_words = list(filter(str.isalnum, document_words))
example = Example()
example['w'].add_features(set(document_words))
ngrams = set()
for j in range(2, 5):
ngrams.update('_'.join(i) for i in nltk.ngrams(document_words, j))
example['n'].add_features(ngrams)
return example
Vowpal Wabbit期望标签为-1和1的logistic二元分类器
def convert_sent(sent):
return {'pos': 1, 'neg': -1}[sent]
转换情感值并提取特征。
examples = [ (convert_sent(sent), document_features(doc)) for (doc, sent) in documents ]
用前1500个示例进行训练,并保留剩余的示例以进行验证
teach, test = examples[:1500], examples[1500:]
教授过滤器。我们要求对每个示例进行预测;如果重要性超过1,我们将“标记”该示例并将其教授给分类器。我们重复分类40次以确保分类器有足够的时间调整权重。
taught = 0
predicted = 0
labelled = set()
for i in range(10):
for sent, ex in teach:
predicted += 1
if rabbit.predict(example=ex).importance >= 1:
rabbit.teach(label=sent, example=ex)
taught += 1
labelled.add(ex)
print("Predicted {}, taught {} (ratio {}). {} unique inputs labelled"
.format(predicted, taught, taught/predicted, len(labelled)))
Predicted 15000, taught 1057 (ratio 0.07046666666666666). 1042 unique inputs labelled
使用测试集进行测试。对于每个正确标记的示例,增加计数器
correct = 0
for sent, ex in test:
prediction = rabbit.predict(example=ex)
if prediction.label == sent:
correct += 1
print("{} inputs predicted. {} correct; ratio {}".format(len(test), correct, correct / len(test)))
500 inputs predicted. 418 correct; ratio 0.836
许可证
MIT许可证。
项目详情
关闭
caerbannog-0.1.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 170bf1c10279084d07a02a42bca2daa0d2b416006baf96e73a579545e83a32f3 |
|
MD5 | 1e1e548b342667297a76465f647a8173 |
|
BLAKE2b-256 | 99e7cc78fb3f5fc92bb7e5a6e83585cda8e3064e757d288e9cc457fc50abf1e0 |