Python-NER-CRF

本文深入探讨了命名实体识别(NER)技术,介绍了三种主要模型:投票模型、条件随机场(CRF)及BiLSTM-CRF。通过实例展示了各模型在序列标注任务中的应用与效果,比较了它们在准确性与效率上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

投票模型

import pandas as pd
from sklearn.metrics import classification_report

# 数据
df = pd.read_csv('train.csv').fillna(method='ffill')

X = df.Word.values
y = df.Tag.values

labels = df.Tag.unique().tolist()
labels.remove('O')


# 投票模型
class Majority_vote:
    def fit(self, X, y):
        counter = {
   }
        for w, t in zip(X, y):
            if w in counter:
                if t in counter[w]:
                    counter[w][t] += 1
                else:
                    counter[w][t] = 1
            else:
                counter[w] = {
   t: 1}
        self.vote = {
   }
        for w, t in counter.items():
            self.vote[w] = max(t, key=t.get)
        return self

    def predict(self, X):
        return [self.vote.get(x, 'O') for x in X]

y_pred = Majority_vote().fit(X, y).predict(X)
report = classification_report(y, y_pred, labels)
print(report)

条件随机场


以下为链式CRF算法~

import pandas as pd
from sklearn_crfsuite import CRF
from sklearn_crfsuite.metrics import flat_classification_report

# 数据读取、预处理
data = pd.read_csv('train.csv').fillna(method='ffill')

labels = data.Tag.unique().tolist()
labels.remove('O')

# 按句子分组
f = lambda s: [(w, p, t) for w, p, t in zip
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值