NERTNLP-泰米尔模型命名实体识别

8分钟阅读 2022年12月17日

义工

命名实体识别有时称为实体分割、复用或识别,任务是查找关键信息(实体)并分类文本信息提取子进程称为自动提取命名实体过程,方式是在给定文本中查找实体(识别)并分配类型(分类)。

示例:

从上例句中我们可以理解它识别并分类元素.它分类印度原封LOC,Narendra Modi先生原封PER系统G20原封ORG系统

LOC-位置选择

PER系统个人化

ORG组织

NER基本步骤

句分词 :

原文本遍历句分级阶段过程分串写语言 成句举例说,句子识别标点或句子时必须分离分割句子的目的是限制句子

令牌化 :

令牌化可定义为进程拆分字符串或文本列表
马克数

示例:大家好 欢迎来到世界
表示句子表示-

语音插件 :

语音标签中的一部分是根据上下文和定义对语音标签中相应部分分配文本词的过程描述词句或文本中词法特征结构,即POS标签可用于推断语义

示例:

实体检测 :

最后实体检测阶段过程识别文本关键元素,然后分类成预定义类别NER关键进程完成NER目的下图显示句子检测命名实体时的示例结果

示例:

BERT:

BERT建构变压器

变换器 :

Google引入变压器架构注意力转移全部化需要文件变换器使用自觉机制适合理解语言注意力需要用简单例子理解说'I'去Horsley山岭今年夏天,它开发得相当好 考虑我最后一次在那里.遗词里头指Horsley山岭但要理解这一点有必要记住上首部件详解为实现此目标,关注机制逐项决定阶段性联想华府输入序列中其他部分很重要简单说道需要量上下文!上头转换器拥有编码器编码器架构他们内含式模块化包括前向并注意力层上头图像显示下方取自研究

泛泛地说语言模型向左或右向左阅读输入序列这个类型联想单向训练良好时目标化预测/生成下一词不过BERT双向使用训练加深理解语言上下文有时它被称为非面向性So中城深思熟解前一和华府下一个字符并发BERT应用变换器双向语言建模培训学习文本representations.注意BERT只是一个编码器开关编码器编码器负责阅读并处理文本翻译输入.编码器负责创建预测任务

BERT培训

现在让我们考虑主题:BERT实现方式双向训练

使用两种方法:MLM(MashedLM)和NSP(下句预测)

MLM(假语言建模):

数列随机掩码词类代之以[MASK]内杂志杂志民心覆盖15%溪流训练使用上下文预测这些隐式词联想剩余词性

示例:

春季我爱骑车我爱骑车赛季

上头问题在于预培训模型有15%掩码身份证详解可当我们微调华府预培训模型传递华府输入,我们通路华府蒙面身份证面向求解本片问题15%字符类选择掩码:80%-替换受字符[MASK]10%时间字符类替换通过随机字符识别其余为左原封不动

下个句子预测

为了理解两句关系,BERT使用NSP培训模型接收双句输入并训练预测是否第二句为下句联想先或后训练局50-50输入进两例均然假设随机句子上下文分离从头开始句子中

项目数据集

建模型实现日期任务设置我们先需要数据集泰米尔语使用维基安南数据集中位数简便化可获取性通过华府hugging脸模块开关内含数项语言, words标注标识符如位置LOC组织(ORG)和人(PER)。a/链接切入点数据卡获取更多信息

建模模型

安装依存性 :

iip安装数据集
ip安装表示器
iip安装变压器

加载数据 :

从数据集导入加载数据集
数据集=load-dataset
label_names = dataset["train"].features["ner_tags"].feature.namesabel_names = dataset["train"].features["ner_tags"].feature.names

预处理数据

取名数据集并调整标签

  • Encode方法返回BERT所要求的密钥
  • 通过使用地图,它允许向hf数据集现有拆分添加新密钥,消除创建新数据集的需要
  • 需要调整标签令牌像Stevehuve和##Havey,但标签仍然是BPER,对齐Steve会得到标签BPER和#Havey得到标签IPER
自变压器导入自动令牌器
tokenizer = AutoTokenizer.from_pretrained("bert-base-multilingual-cased")
def tokenize_adjust_labels(all_samples_per_split):
tokenized_samples = tokenizer.batch_encode_plus(all_samples_per_split["tokens"], is_split_into_words=True)
全数调整标签=
print(len(tokenized_samples["input_ids"]))
k范围(0,Len-kenized_sampless[simessssssssssssssssssssssssssssssssssssssssssssssssssssssss
priv_wid=-
word_ids_list = tokenized_samples.word_ids(batch_index=k)
existing_label_ids = all_samples_per_split["ner_tags"][k]
i=-
add_labelids=
wid word_ids_list:
if(wid为None):
adjusted_label_ids.append(-100)
elif(wid!=prev_wid):
i+
adjusted_label_ids.append(existing_label_ids[i])
priv_wid=wid
替代 :
label_name = label_names[existing_label_ids[i]]
adjusted_label_ids.append(existing_label_ids[i])
total_adjusted_labels.append(adjusted_label_ids)
tokenized_samples["labels"] = total_adjusted_labels
返回象征性样本
tokenized_dataset = dataset.map(tokenize_adjust_labels, batched=True)

spad样本分页数 :

  • 每一样本令牌列表将拆分
  • 样本x和样本y可能长度不同,所以需要贴板
  • 训练员API使用此等素
变压器导入数据解码
data_collator = DataCollatorForTokenClassification(tokenizer)

整合WANDB:

权值比亚斯算法高效率平台帮助精简跟踪模型培训、数据集编译、超参数优化化可视化名符其实更容易跟踪所有参数联想每项实验如何华府损耗变化期间单运行之类 加速调试

ipp安装Wandb
ip安装续集
导入魔杖
wandb.login
#你可以在这里浏览器中找到你API密钥 https/wandb.ai/
#请输入下ai密钥

加载准备模型训练

变压器导入自模Focle
导入numpyn
从数据集导入负载度
矩阵=负载度
def计算度数
预测标签=p
预测值=np.argmax

#删除忽略索引
true_pressions=
sssssssllip
预测标签拉链
万事通
真实标签=[
l e
预测标签拉链
万事通

results = metric.compute(predictions=true_predictions, references=true_labels)
扁平结果=
"overall_precision": results["overall_precision"],
"overall_recall": results["overall_recall"],
"overall_f1": results["overall_f1"],
"overall_accuracy": results["overall_accuracy"],
}
k结果.keyss
k非扁平结果.keyss
flattened_results[k+"_f1"]=results[k]["f1"]

返回扁平结果
model = AutoModelForTokenClassification.from_pretrained("bert-base-multilingual-cased", num_labels=len(label_names))
train_args=培训说明
output_dir="./fine_tune_bert_output",
evaluation_strategy="steps",
learning_rate=2e-5,
per_device_train_batch_size=16,
per_device_eval_batch_size=16,
num_train_epochs=7,
weight_decay=0.01,
scap_steps=1000
report_to="wandb",
运行_name表示ep_10_kenized_11
save_strategy='no'
)
训练员=训练员
模型=模型
args=training_args,
train_dataset=tokenized_dataset["train"],
eval_dataset=tokenized_dataset["validation"],
data_collator=data_collator,
tokenizer=tokenizer,
compute_metrics=compute_metrics
)

训练者. train
wandb.finish

测试性能 :

预测标签 =教程 pristict
预测值=np.argmax
#这里我们将看到标签列表中多-100,然而对应标签
#kenized_dataset没有它,原因出在数据整理器踏板期间,所有贴板都添加
#并分配-100标签在未来计算评价时被“点名”

#删除忽略索引
true_pressions=
sssssssllip
预测标签拉链
万事通
真实标签=[
l e
预测标签拉链
万事通

results = metric.compute(predictions=true_predictions, references=true_labels)
结果
print(true_labels)

保存模型 :

model.save_pretrained("NER_TAM")
saved_model = AutoModelForTokenClassification.from_pretrained("NER_TAM")
保存模式

测试泰米尔句子保存模型

导入火炬
随机命令从_Internetssservationss
input = tokenizer(random_sentence_from_internet, is_split_into_words=True, return_tensors='pt')
打印(输入)
输出 = 保存模型
predictions = torch.nn.functional.softmax(output.logits, dim=-1)
预测s=预测s.detachs.numpy
预测值=np.argmax
print(predictions)
prid_names =[label_names[p]预测中p
索引标识分解
pred_names[index]

链接访问我NER-Tamil模型

https://huggingface.co/Ambareeshkumar/BERT-Tamil

坦米尔NER输出

步骤上传模型到 hugingface

步进initgit模型文件夹QQ

步骤2git配置-全局用户.emailyremail

步骤3git配置-全局用户

步骤4:gitifs安装

步骤5:移动模式目录cd

步骤6git添加.

步骤7gitde-m加载文件

步骤8git推送

步骤9: finetuned_model.push_to_hub("my-awesome-model")

义工

义工

Baidu