簡體   English   中英

如何在 pycrfsuite.Tagger() 中使用邊際、概率方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM