ner計算準召的坑

2021-10-17 14:37:24 字數 1458 閱讀 8310

1、踩了個大坑,記錄一下

宣告:不喜歡寫estimator所以才踩的坑

1、from tensorflow.contrib import crf 如果想使用這個函式,tensorflow的版本號要在1.14以下,1.12就可以,不要相信那些亂七八糟要求各種版本的

2、

log_likelihood, trans = tf.contrib.crf.crf_log_likelihood(

inputs=logits,

tag_indices=self.labels,

sequence_lengths=self.lengths,

transition_params=trans)

return tf.reduce_mean(-log_likelihood)=loss, trans

pred_ids, _ = crf.crf_decode(potentials=logits, transition_params=trans, sequence_length=self.lengths)
crf函式可以返回函式的損失,轉移矩陣,最有路徑的結果,我們要根據最有路徑的結果與原始標籤來計算acc和recall

3、input_label是真實標籤(?*100)?表示batch_size的大小;pred_ids是**標籤(?*100)?表示batch_size的大小

acc = a(**為實體且真實為實體的個數)/b(**為實體的個數)

recall = a(**為實體且真實為實體的個數)/c(實際實體的個數)

首先你要知道你實體的標籤id是什麼,如["o", "b-person", "cls", "seq"],那麼你的標籤id就是1

先計算a,思路步驟:

1、input_label中元素為1,2,3的位置置true,其餘位置false,並轉換成float。mid_1_1 = tf.cast(tf.equal(self.input_label, 1),tf.float32)

2、input_label和pred_ids中相同位置元素相同置true,否則置false,與轉換成flaot。mid_1 = tf.cast(tf.equal(self.input_label, self.pred_ids),tf.float32)

3、兩個相乘得到的結果就是a。mid_1_1_1 = tf.reduce_sum(tf.multiply(mid_1_1, mid_1))

計算b,思路步驟:

1、計算pred_ids中為實體的元素位置:mid_2_1 = tf.equal(self.pred_ids, 1)

2、recall_ner = tf.reduce_sum(tf.cast(mid_2_1, tf.float32))

計算c,思路步驟:true_ner = tf.reduce_sum(tf.cast(mid_1_1, tf.float32))

acc還是precision我記不清了

acc = a/b

recall = a/c

每週一坑 簡單的計算器

問題 做乙個計算器,要能夠進行 等基本計算。後續可能支援冪運算,求對數,等運算。效果大概是這樣 輸入1 2 3 輸出 ans 1.66 先從比較簡單的版本開始。版本1 思路 獲取使用者輸入,得到乙個字串型別的值 input。然後對這個字串進行處理 逐個字元的分析,如果出現 這樣的運算子,則它的前面的...

計算python指令碼執行時間的坑

程式執行時間 cpu時間 io時間 休眠或者等待時間 python程式執行時間大於python程式cpu時間 time.clock import datetime import time starttime time.clock time.sleep 3 endtime time.clock pri...

填個許久的坑,計算表示式的值

記得暑假的時候就要寫這個,當時那道題沒有括號,用乙個簡單的方法而沒轉字尾式過的。今天補了一下這個東東,支援 如下 include include include include includeusing namespace std stackq stackw bool precede char a,...