萝莉少女 探索关系抽取手艺:常用算法与应用

发布日期:2024-09-30 19:58    点击次数:143

萝莉少女 探索关系抽取手艺:常用算法与应用

本文折柳先容了关系抽取手艺的主意、任务类型、具体算法,以及基于规章的Snowball纪律、基于特征的SVM纪律和基于深度学习的LSTM纪律的应用实例萝莉少女,提供了表面基础和履行代码示例。

原宥TechLead,共享AI全维度常识。作家领有10+年互联网干事架构、AI居品研发训导、团队处置训导,同济本复旦硕,复旦机器东说念主智能实验室成员,阿里云认证的资深架构师,款式处置专科东说念主士,上亿营收AI居品研发认真东说念主

图片

一、关系抽取主意

关系抽取(Relation Extraction, RE)是当然谈话处理(NLP)范畴的一个要紧任务,其主要主张是从文本中识别实体(entities)之间的预界说语义关系。这一任务关于构建常识图谱、信息检索、问答系统等应用至关要紧,因为它大略匡助机器相识和哄骗文本中的结构化常识。

在关系抽取的高下文中,实体常常指的是东说念主名、地名、组织名或任何不错明确识别的事物。而关系则界说了两个或多个实体之间的语义关系,如“属于”、“创立者是”等。关系抽取的任务不错体式化为:给定一段文本和其中的实体对,细则这对实体之间是否存在某种特定的关系,以及这种关系是什么。

关系抽取手艺常常刻为三类:有监督学习、半监督学习、和无监督学习。有监督学习纪律需要多数的标注数据,半监督学习哄骗极少标注数据和多数未标注数据,而无监督学习则十足不依赖于标注数据。

例如

在医疗范畴,关系抽取手艺不错用来从临床证据或医学询查文件中提真金不怕火疾病与症状之间的关系、药物与其反作用之间的关系等。例如,从句子“阿司匹林可用于调治心绞痛。”中,关系抽取系统需要识别出“阿司匹林”(药物)和“心绞痛”(疾病)两个实体,以及它们之间的“调治”关系。

在金融范畴,关系抽取不错应用于监测和分析阛阓动态,例如再行闻报说念或财经证据中提真金不怕火公司之间的互助、并购等关系。假定有一条新闻:“Google布告以30亿好意思元收购Fitbit。”关系抽取系统的任务是识别出“Google”和“Fitbit”为实体,并抽取出它们之间的“收购”关系,以及交游的金额“30亿好意思元”。

二、关系抽取任务全览

关系抽取(RE)手脚当然谈话处理(NLP)范畴的一项中枢任务,旨在从文本中识别实体之间的语义关系。凭证任务的不同特质和挑战,关系抽取不错被分为几个主要类型,包括传统的关系抽取、灵通式关系抽取、端到端的关系抽取等。每种类型王人有其特定的应用场景和挑战。

传统关系抽取任务形色

传统关系抽取原宥于从给定文本中抽取实体对之间的预界说关系。这要求预先界说一个关系聚会,并在此基础上标注数据,熟习模子来识别这些特定的关系。

例如

讨论一句话:“马克·扎克伯格创立了Facebook。”在一个包含“创立者”关系的预界说关系迷惑,模子需要识别出“马克·扎克伯格”和“Facebook”手脚实体,并抽取它们之间的“创立者”关系。

灵通式关系抽取任务形色

与传统关系抽取不同,灵通式关系抽取(Open IE)不依赖于预界说的关系集。它旨在从文本中抽取实体对和它们之间的关系短语,而不铁心这些关系必须属于某个预先界说好的类别。

例如

从归并句话“马克·扎克伯格创立了Facebook。”中,灵通式关系抽取可能会提真金不怕火出(“马克·扎克伯格”,“创立了”,“Facebook”)手脚一个实体对和它们之间的关系短语。

端到端的关系抽取任务形色

端到端的关系抽取任务不仅包括抽取文本中的关系,还包括识别出参与这些关系的实体。这意味着从原始文本平直识别出实体偏激关系,无需预先进行实体识别。

例如

在端到端的任务中,系统需要平直从原文“马克·扎克伯格创立了Facebook。”中同期识别出“马克·扎克伯格”和“Facebook”手脚实体,并抽取它们之间的“创立者”关系,而不是依赖于任何预先的实体识别历程。

多跳关系抽取任务形色

多跳关系抽取是指识别和抽取通过多个“跳”相连的实体间的曲折关系。这种类型的任务要求模子大略相识并推理出通过多个法子相连的实体之间的复杂关系。

例如

若是有两个句子:“比尔·盖茨是微软的独创东说念主。”和“微软创立了Windows操作系统。”,多跳关系抽取的任务是识别出“比尔·盖茨”和“Windows操作系统”之间的曲折关系,即“创立者”。

跨句关系抽取任务形色

跨句关系抽取波及到从跳跃多个句子的文本中抽取实体间的关系。这类任务对模子的相识和推理技艺建议了更高要求,因为必须处理文本中的长距离依赖。

例如

讨论两个句子:“托尼·斯塔克是钢铁侠。”和“钢铁侠是复仇者定约的成员。”跨句关系抽取的盘算是识别出“托尼·斯塔克”和“复仇者定约”之间的曲折关系,尽管这些信息分散在不同的句子中。

三、关系抽取具体算法全览

在关系抽取范畴,算法的进化反馈了从初步的规章基础到深度学习的复杂模子的鼎新。以下是关系抽取中使用的几种关节算法类型及具体算法的概览。

基于规章的纪律具体算法

Snowball:一种半自动的关系抽取纪律,通过迭代情势从大限制文本聚会中学习词语模式。

Hearst Patterns:哄骗特定的词汇模式(如“X such as Y”)来识别主意偏激实例之间的关系。

基于特征的纪律具体算法

Support Vector Machines (SVM):使用千般手工遐想的特征,如词性标志、依存树旅途等,进行关系分类。

Maximum Entropy (MaxEnt):相通依赖于手工特征,通过最大化熵来揣度实体对之间的关系。

基于深度学习的纪律具体算法

Convolutional Neural Networks (CNNs):例如,Zeng et al. (2014) 建议的模子通过句子级特征学习来拿获实体间的关系。

Recurrent Neural Networks (RNNs):用于拿获文本中的长期依赖关系,相配是在关系抽取任务中处理复杂句子结构。

Long Short-Term Memory (LSTM):一种稀奇类型的RNN,大略更有用地拿获长距离依赖,常用于处理关系抽取中的序列数据。

Graph Convolutional Networks (GCNs):通过在图结构数据上进行卷积运算来拿获实体和关系的复杂依赖性。

影视在线

Pre-trained Language Models:如BERT (Bidirectional Encoder Representations from Transformers) 和GPT (Generative Pre-trained Transformer) 等模子通过大限制语料库预熟习取得丰富的谈话特征,然后不错通过微调应用于关系抽取任务。

四、基于规章的纪律:Snowball纪律例如

图片

Snowball是一种半自动的关系抽取纪律,由Agichtein和Gravano于2000年建议。它基于迭代的情势,从极少的种子实例(已知的实体对偏激关系)启航,自动学惯用于抽取特定关系的文本模式,然后哄骗这些模式从更大的文本聚会中抽取新的实体对偏激关系,依此类推。Snowball算法历程

Snowball算法的中枢历程不错分为以下几个法子:

运行化:选用一组种子实例,即已知的实体对偏激关系。

模式学习:哄骗种子实例在文本中找到实体对出现的句子,学习这些句子的共同模式。

模式评估:对学习到的模式进行评估,以细则其准确性。

关系抽取:使用评估过的模式从文本中抽取新的实体对偏激关系。

迭代:将抽取出的新实体敌手脚新的种子实例,重叠法子2-4,直到感奋住手条目(如模式数目、迭代次数或抽取效果的质地)。

履行案例例如

假定咱们的盘算是从文本中抽取“公司-总部场合地”这一关系。运行化时,咱们不错手动提供一些种子实例,如:

(Google, Mountain View)

(Microsoft, Redmond)

(Amazon, Seattle)

接下来,咱们将哄骗这些种子实例在一个大型的文本数据库中寻找含有这些实体对的句子,并从中学习文本模式。

可运行代码示例

讨论到Snowball纪律的杀青依赖于多数的文本数据和复杂的模式学习历程,以下是一个简化的示例,展示奈何从基本的句子聚会中学习文本模式。

假定咱们有以下句子,其中包含咱们的种子实例:

sentences = [ 'Google, based in Mountain View, is a global technology leader.', 'Microsoft, headquartered in Redmond, develops software.', 'Amazon, located in Seattle, is an e-commerce giant.']

咱们将编写一个通俗的Python函数来识别句子中的模式:

import redef learn_patterns(sentences, seed_entities):    patterns = []    for company, location in seed_entities:        for sentence in sentences:            pattern = re.escape(company) + '(.*?)' + re.escape(location)            if re.search(pattern, sentence):                patterns.append(sentence.replace(company, '<COMPANY>').replace(location, '<LOCATION>'))    return patternsseed_entities = [    ('Google', 'Mountain View'),    ('Microsoft', 'Redmond'),    ('Amazon', 'Seattle')]patterns = learn_patterns(sentences, seed_entities)print('Learned Patterns:')for pattern in patterns:    print(pattern)

在这个简化的例子中,咱们通过正则抒发式学习了包含种子实体对的句子中的模式,并将实体部分替换为了通用标签。这些学习到的模式不错匡助咱们在新的文本中查找沟通结构的句子,从而抽取出新的“公司-总部场合地”实体对。

五、基于特征的纪律:SVM纪律例如

图片

撑捏向量机(SVM)是一种监督学习的算法,常用于分类任务。在关系抽取范畴,SVM不错哄骗从文本中提真金不怕火的特征来揣度实体对之间的关系。这个历程常常包括特征提真金不怕火、模子熟习和关系揣度三个法子。履行案例例如

假定咱们要从句子中抽取东说念主物和他们的成立地之间的关系。领先,咱们需要收罗一些带有标注的数据手脚熟习集,例如:

('Steve Jobs was born in San Francisco.', '成立地')

('Barack Obama was born in Honolulu.', '成立地')

('Leonardo DiCaprio was born in Los Angeles.', '非成立地')

在这个通俗的例子中,咱们将使用东说念主名和地名之间的词语手脚特征。

可运行代码示例

以下是一个使用Python和scikit-learn库杀青的简化示例,展示奈何使用SVM进行关系抽取:

from sklearn.feature_extraction.text import CountVectorizerfrom sklearn.svm import SVCfrom sklearn.pipeline import make_pipelinefrom sklearn.preprocessing import LabelEncoder# 示例句子偏激标注sentences = [ 'Steve Jobs was born in San Francisco.', 'Barack Obama was born in Honolulu.', 'Leonardo DiCaprio was born in Los Angeles.', 'Apple was founded in Cupertino.']labels = ['成立地', '成立地', '成立地', '非成立地']# 将标签文本颐养为整数label_encoder = LabelEncoder()integer_labels = label_encoder.fit_transform(labels)# 界说一个通俗的特征提真金不怕火器,这里咱们使用词袋模子vectorizer = CountVectorizer()# 界说SVM分类器svm_classifier = SVC(kernel='linear')# 创建一个管说念,将特征提真金不怕火器和分类器串联起来pipeline = make_pipeline(vectorizer, svm_classifier)# 熟习模子pipeline.fit(sentences, integer_labels)# 使用熟习好的模子进行揣度test_sentences = ['Mark Zuckerberg was born in White Plains.']predicted_labels = pipeline.predict(test_sentences)# 将揣度的整数标签颐养回环本标签进行泄露predicted_label_texts = label_encoder.inverse_transform(predicted_labels)print(f'揣度的关系是: {predicted_label_texts[0]}')

在这个例子中,咱们领先将句子标签颐养为整数,因为SVM和很多机器学习算法需要数值输入。接着,咱们使用词袋模子提真金不怕火特征,并哄骗SVM进行分类。终末,咱们使用熟习好的模子对新的句子进行揣度,并将揣度的标签颐养回环骨子式。

六、基于深度学习的纪律:LSTM纪律例如

图片

曲直期回顾积聚(Long Short-Term Memory, LSTM)是一种稀奇的轮回神经积聚(RNN),大略学习长距离依赖关系,相配稳妥处理和揣度序列数据中的时期隔断和蔓延很长的要紧事件。在关系抽取任务中,LSTM不错有用地处理句子中的序列信息,捕捉实体之间的复杂关系。履行案例例如

讨论一个关系抽取任务,咱们的盘算是从句子中抽取东说念主物偏激成立地的关系。给定如下带有标签的熟习数据:

('Elon Musk was born in Pretoria.', '成立地')

('Cristiano Ronaldo was born in Funchal.', '成立地')

('The iPhone was invented by Apple.', '非成立地')

咱们将使用LSTM模子来学习奈何从句子中识别这种特定的东说念主物-成立地关系。

可运行代码示例

以下是一个使用Python和Keras框架杀青的简化示例,展示奈何使用LSTM进行关系抽取:

from keras.models import Sequentialfrom keras.layers import Embedding, LSTM, Densefrom keras.preprocessing.sequence import pad_sequencesfrom keras.preprocessing.text import Tokenizerfrom keras.utils import to_categoricalimport numpy as np# 界说示例句子偏激标签sentences = [    'Elon Musk was born in Pretoria.',    'Cristiano Ronaldo was born in Funchal.',    'The iPhone was invented by Apple.']labels = [1, 1, 0]  # 1默示'成立地',0默示'非成立地'# 文本预处理tokenizer = Tokenizer()tokenizer.fit_on_texts(sentences)sequences = tokenizer.texts_to_sequences(sentences)# 序列填充,确保总计序列具有沟通长度max_sequence_length = max(len(s) for s in sequences)data = pad_sequences(sequences, maxlen=max_sequence_length)# 标签处理labels = to_categorical(np.asarray(labels))# 界说LSTM模子model = Sequential()model.add(Embedding(input_dim=len(tokenizer.word_index) + 1, output_dim=50, input_length=max_sequence_length))model.add(LSTM(64))model.add(Dense(2, activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])# 熟习模子model.fit(data, labels, epochs=10, batch_size=32)# 揣度新句子的关系test_sentence = ['Albert Einstein was born in Ulm.']test_seq = tokenizer.texts_to_sequences(test_sentence)test_data = pad_sequences(test_seq, maxlen=max_sequence_length)prediction = model.predict(test_data)print('揣度的关系标签:', np.argmax(prediction, axis=1)[0])  # 输出最可能的标签

在这个示例中,咱们领先对句子进行了分词并颐养为序列萝莉少女,然后使用Keras的pad_sequences函数对这些序列进行填充,以确保它们具有沟通的长度。接着,咱们构建了一个通俗的LSTM模子,该模子包括一个镶嵌层(用于将单词索引映射到一个密集的向量默示)、一个LSTM层和一个全相连层(用softmax激活函数进行分类)。终末,咱们对模子进行熟习,并用它来揣度新句子的关系标签。

本站仅提供存储干事,总计内容均由用户发布,如发现存害或侵权内容,请点击举报。