【问题标题】:How to use marginal, probability method in pycrfsuite.Tagger()如何在 pycrfsuite.Tagger() 中使用边际概率法
【发布时间】:2019-07-29 22:43:00
【问题描述】:

文档对我一点帮助都没有。

首先,我尝试使用set(),但我不明白它是什么意思

为将来的调用设置一个实例

我可以使用下面描述的数据集结构成功地提供数据。 所以,我不确定为什么我需要使用它提到的 set。

这是我在调用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() 显示的第一个错误的错误。

关于如何使用这三种方法的任何线索?请给我这三种方法的用例的简短示例。

我觉得这三种方法肯定有一些例子,但我找不到。我看对地方了吗。这是我正在阅读文档的网站

附加信息:我正在使用 CliNER。以防你们中的任何人熟悉它。

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

【问题讨论】:

    标签: named-entity-recognition python-crfsuite


    【解决方案1】:

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

    要获得边际概率,您需要在创建yseq 之后将以下行添加到迭代pycrf_instances 的for 循环中(参见第196 行here

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2020-08-16
      相关资源
      最近更新 更多