如何在pycrfsuite.Tagger()中使用边际概率方法

时间:2019-03-07 22:50:24

标签: ner python-crfsuite

文档完全对我没有帮助。

enter image description here

首先,我尝试使用set(),但是我不明白

的含义。
  

为将来的通话设置实例

我可以使用下面描述的数据集结构成功地输入数据。 因此,我不确定为什么我需要为此使用set。

这是我调用scipy.sparse方法之后类型为nonzero()的特征序列。

  

[[''66 = 1','240 = 1','286 = 1','347 = 10','348 = 1'],...]

其中...表示与先前元素相同的结构

我遇到的第二个问题是Tagger.probability()和Tagger.marginal()。

enter image description here

enter image description here

对于Tagger.probability,我使用了与Tagget.tag()相同的输入,并且遇到了以下错误。

enter image description here

,如果我的输入仅仅是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()所示的第一个错误的错误。

enter image description here

有关如何使用这三种方法的任何线索?请给我简要介绍这三种方法的用例示例。

我觉得这3种方法一定有一些例子,但我找不到。我在寻找正确的地方吗?这是我正在从中阅读文档的网站

其他信息:我正在使用CliNER。以防万一您熟悉它。

  

https://python-crfsuite.readthedocs.io/en/latest/pycrfsuite.html

1 个答案:

答案 0 :(得分:0)

我知道这个问题已有一年多的历史了,但是我也必须弄清楚同一件事-我还利用了一些CliNER框架。对于特定于CliNER的解决方案,我分叉了仓库,并在predict文件中重写了./code/machine_learning/crf.py方法

要获取边际概率,您需要在创建pycrf_instances之后在for循环上添加以下行,以在yseq上进行迭代(请参见第196 here行)

y_probs = [tagger.marginal(y, ii) for ii, y in enumerate(yseq)]

然后,您可以从预测方法中返回该边际概率列表-进而需要您重写中的其他函数以适应此更改。