【Text_Classification】学习到的语法知识

1. 任务

1.1 字典中每个种类的准确率

分母: 首先计算每个种类的总数!

for value in label:
    # get(value, num)函数的作用是获取字典中value对应的键值, num=0指示初始值大小。
    label_cout[value] = label_cout.get(value, 0) + 1
    label_acc[value] = label_acc.get(value, 0)
print(label_cout)
print(label_acc)  

分子:再次计算每个种类正确的数

第一步: 获取种类字典:
错误的做法

#这是错误的做法,因为这样做set集合是无序的!  顺序就和分母不一样了,无法进行后面的操作
label_acc = {
    label_text: 0 for label_text in set(label)  # 将唯一化
}
print(len(label_acc))

正确的是上面的

label_acc[value] = label_acc.get(value, 0)

第二步: 记录正确类的个数

results = model.predict(data, max_seq_len=50, batch_size=1, use_gpu=True)   #获取每行输入数据的预测结果
for idx, item in enumerate(results):
    sum = sum + 1;                 #所有的数据集总和
    if results[idx] == label[idx]:  
        # print("OHHHH data: {}".format(data[idx]), "predict:{}".format(results[idx]),
        #                               "right:{}".format(label[idx]))
        right = right + 1;    #如果是正确的,那么就加一
        print(results[idx])
        label_acc[results[idx]] += 1   #正确的,则从字典中寻找到指定key也加一

第三步: 相除得到准确率

#由于我们在定义两个字典时,key标签都是对应的,所以直接除,并更新label_acc即可
for key in label_acc.keys():
    label_acc[key] = label_acc[key] / label_cout[key]

1.2. 如何将分类数值化

前提: 你得有输出结果以及label

label_list = ['城市事件类;宣传广告', '城市事件类;扩充类别', '城市事件类;街面秩序',
 '城市部件类;市政公用设施', '城市事件类;市容环境',  '城市部件类;扩充类别', 
 '城市事件类;施工管理', '城市部件类;园林绿化', '环境保护类;其他', '文明城市创建类;其他',
             ]

label_map = {  #必须是指定的格式
    idx: label_text for idx, label_text in enumerate(label_list)
}
model = hub.Module(
    name='ernie_tiny',
    version='2.0.1',
    task='seq-cls',
    load_checkpoint='/home/wxx/progressfiles/project_pc_NLP/Texts_Classification/model/ernie_text_cls/best_model/model.pdparams',
    label_map=label_map)

results = model.predict(data, max_seq_len=50, batch_size=1, use_gpu=True)

之后就用两个list就够了!

n_label = []
n_results = []
for item in results:
    for key in label_map:
        if item == label_map[key]:
            n_results.append(key)
for item in label:
    for key in label_map:
        if item == label_map[key]:
            n_label.append(key)

补充

1. set是无序的!!! 你改成set集合后序列就无序了,而计算每个类别的准确性,必须是类型顺序不变的

2.从linux上下载文件

 sz XXX

3. 读CSV文件没事,但是在写入csv文件是乱码

df.to_csv("/home/wxx/progressfiles/project_pc_NLP/Texts_Classification/res_all_label.csv", 
encoding='utf_8_sig', sep=",", index=0)

4. 如果出现在写入csv文件时,单元格错位问题,说明你的分隔符不对

5. 写入excel文件中

https://blog.csdn.net/pikaqiubula/article/details/113781466

6. 将其它的放入到DataFrame中: 转变为Series ,再设置columns

链接

df = pd.DataFrame(pd.Series(d1), columns=['right'])

7. python将字典转换为dataframe数据框

python将字典转换成dataframe数据框

8. DataFrame操作

定义!
列表定义!

字典列表定义!

import pandas as pd

inp = [{'c1':10, 'c2':100}, {'c1':11, 'c2':110}, {'c1':12, 'c2':123}]
df = pd.DataFrame(inp)

print(df)

添加列!

DF的遍历: https://www.jb51.net/article/172623.htm

9. 更好的放入到DF中

text_a.append(data[idx])
label_wrong.append(item)
label_right.append(label[idx])

df = pd.DataFrame()
df['text_a'] = pd.Series(text_a)
df['wrong_label'] = label_wrong
df['right_label'] = label_right

10. 代码解决F1_score

链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值