[英]How to get probability of prediction per entity from Spacy NER model?
[英]How to use marginal, probability method in pycrfsuite.Tagger()
文档对我一点帮助都没有。
首先,我尝试使用set()
,但我不明白它的含义
为将来的调用设置一个实例
我可以使用下面描述的我的数据集结构成功地提供我的数据。 所以,我不确定为什么我需要像它提到的那样使用 set 。
这是我调用scipy.sparse
nonzero()
方法后的scipy.sparse
类型的特征序列。
[['66=1', '240=1', '286=1', '347=10', '348=1'],...]
其中 ... 表示与前面的元素结构相同
我遇到的第二个问题是 Tagger.probability() 和 Tagger.marginal()。
对于 Tagger.probability,我使用了与 Tagget.tag() 相同的输入,我得到了以下错误。
如果我的输入只是一个list
而不是list of list
。 我收到以下错误。
Traceback (most recent call last):
File "cliner", line 60, in <module>
main()
File "cliner", line 49, in main
train.main()
File "C:\Users\Anak\PycharmProjects\CliNER\code\train.py", line 157, in main
train(training_list, args.model, args.format, args.use_lstm, logfile=args.log, val=val_list, test=test_list)
File "C:\Users\Anak\PycharmProjects\CliNER\code\train.py", line 189, in train
model.train(train_docs, val=val_docs, test=test_docs)
File "C:\Users\Anak\PycharmProjects\CliNER\code\model.py", line 200, in train
test_sents=test_sents, test_labels=test_labels)
File "C:\Users\Anak\PycharmProjects\CliNER\code\model.py", line 231, in train_fit
dev_split=dev_split )
File "C:\Users\Anak\PycharmProjects\CliNER\code\model.py", line 653, in generic_train
test_X=test_X, test_Y=test_Y)
File "C:\Users\Anak\PycharmProjects\CliNER\code\machine_learning\crf.py", line 220, in train
train_pred = predict(model, X) # ANAK
File "C:\Users\Anak\PycharmProjects\CliNER\code\machine_learning\crf.py", line 291, in predict
print(tagger.probability(xseq[0]))
File "pycrfsuite/_pycrfsuite.pyx", line 650, in pycrfsuite._pycrfsuite.Tagger.probability
ValueError: The numbers of items and labels differ: |x| = 12, |y| = 73
对于 Tagger.marginal(),我只能产生类似于 Tagger.probabilit() 显示的第一个错误的错误。
关于如何使用这 3 种方法的任何线索? 请给我这 3 种方法的用例的短裤示例。
我觉得这三种方法一定有一些例子,但我找不到一个。 我看对地方了吗。 这是我正在阅读文档的网站
附加信息:我正在使用 CliNER。 以防万一你们熟悉它。
https://python-crfsuite.readthedocs.io/en/latest/pycrfsuite.html
我知道这个问题已经有一年多了,但我也必须弄清楚同样的事情——我也在利用一些 CliNER 框架。 对于 CliNER 特定的解决方案,我分叉了 repo 并在./code/machine_learning/crf.py
文件中重写了predict
方法
要获得边际概率,您需要pycrf_instances
yseq
添加到在创建pycrf_instances
后迭代pycrf_instances
的 for 循环中(请参阅此处的第 196 行)
y_probs = [tagger.marginal(y, ii) for ii, y in enumerate(yseq)]
然后,您可以从 predict 方法返回该边际概率列表——反过来,您将需要重写 中的其他函数以适应这种变化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.