色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用深度學習執行文本實體提取

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-25 19:15 ? 次閱讀

本文介紹了如何使用深度學習執行文本實體提取。作者嘗試了分別使用深度學習和傳統方法來提取文章信息,結果深度學習的準確率達到了 85%,遠遠領先于傳統算法的 65%。

引言

文本實體提取是自然語言處理(NLP)的主要任務之一。隨著近期深度學習領域快速發展,我們可以將這些算法應用到 NLP 任務中,并得到準確率遠超傳統方法的結果。我嘗試過分別使用深度學習和傳統方法來提取文章信息,結果非常驚人:深度學習的準確率達到了 85%,遠遠領先于傳統算法的 65%。

本項目的目標是把文章中的每個單詞標注為以下四種類別之一:組織、個人、雜項以及其他;然后找到文中最突出的組織和名稱。深度學習模型對每個單詞完成上述標注,隨后,我們使用基于規則的方法來過濾掉我們不想要的標注,并確定最突出的名稱和組織。

在這里要感謝 Guillaume Genthial 這篇關于序列標注的文章(https://guillaumegenthial.github.io/),本項目建立在這篇文章的基礎之上。

模型的高級架構

架構

上圖是對每個單詞進行分類標注的模型高級架構。在建模過程中,最耗時間的部分是單詞分類。我將解釋模型的每個組成部分,幫助讀者對模型組件有一個全面的、更高層次的理解。通常,模型組件可分為三部分:

單詞表征:在建模第一步,我們需要做的是加載一些預訓練詞嵌入(GloVe)。同時,我們需要從字符中提取出一些含義。

語境單詞表征:我們需要利用 LSTM,對語境中的每一個單詞得到一個有意義的表征。

解碼:當我們得到表示單詞的向量后,我們就可以用它進行預測。

hot encoding(用數值表示單詞)

深度學習算法只接受數值型數據作為輸入,而無法處理文本數據。如果想要在大量的非數值場景下使用深度神經網絡,就需要將輸入數據轉變數值形式。這個過程就是 hot encoding。

下面是一小段實現 hot encoding 的代碼示例:

word_counts = Counter(words)sorted_vocab = sorted(word_counts, key=word_counts.get, reverse=True)int_to_vocab = {ii: word for ii, word in enumerate(sorted_vocab)}vocab_to_int = {word: ii for ii, word in int_to_vocab.items()}

同樣地,我們必須獲取輸入數據中的所有字符,然后將其轉化為向量,作為字符嵌入。

單詞嵌入 & 字符嵌入

單詞嵌入是處理文本問題時使用的一種通過學習得到的表征方式,其中含義相同的單詞表征相近。通常,我們利用神經網絡來實現單詞嵌入,其中使用的單詞或短語來自于詞庫,并需要轉變為實數構成的向量形式。

但是,在數據集上生成詞向量計算成本很高,我們可以使用一些預訓練的單詞嵌入來避免這個問題:比如使用斯坦福大學的 NLP 研究者提供的 GloVe 向量。

字符嵌入是字符的向量表征,可用于推導詞向量。之所以會使用字符嵌入,是因為許多實體并沒有對應的預訓練詞向量,所以我們需要用字符向量來計算詞向量。

LSTM

傳統神經網絡 VS 循環神經網絡(RNN)

循環神經網絡(RNN)是人工神經網絡的一種,用于序列數據中的模式識別,例如文本、基因組、手寫筆跡、口語詞匯,或者來自傳感器、股市和政府機構的數值型時間序列數據。它可以「理解」文本的語境含義。

RNN 神經元

LSTM 是一種特殊的循環神經網絡,相比于簡單的循環神經網絡,它可以存儲更多的語境信息。簡單的 RNN 和 LSTM 之間的主要區別在于它們各自神經元的結構不同。

對于語境中的每一個單詞,我們都需要利用 LSTM 得到它在所處語境中的有意義表征。

條件隨機場(CRF)

在預測標注最后的解碼步驟中,我們可以使用 softmax 函數。當我們使用 softmax 函數時,它給出單詞屬于每個分類的概率。但這個方法給出的是局部選擇;換句話說,即使我們從文本語境中提取出了一些信息,標注決策過程依然是局部的,我們在使用 softmax 激活函數時,并沒有使用到鄰近單詞的標注決策。例如,在「New York」這個詞中,我們將「York」標注為一個地方,事實上,這應該可以幫助我們確定『New』對應地方的開始。

在 CRF 中,我們的輸入數據是序列數據;同時,我們在某個數據點上進行預測時,需要考慮先前文本的語境。在本項目中,我們使用的是線性鏈 CRF。在線性鏈 CRF 中,特征只依賴當前標注和之前的標注,而不是整個句子中的任意標注。

為了對這個行為建模,我們將使用特征函數,該函數包含多個輸入值:

句子s

單詞在句子中的位置i

當前單詞的標注 l_i

前一個單詞的標注 l_i?1

接下來,對每一個特征函數 f_j 賦予權重 λ_j。給定一個句子s,現在我們可以根據下式計算s的標注l:對句子中所有單詞的加權特征求和。

基于詞性標注的特征函數示例

如果 l_i= ADVERB,且第 i 個單詞以『-ly』結尾,則 f_1(s,i,l_i,l_i?1)=1,否則取 0。如果對應的權重 λ1 為正,且非常大,那么這個特征基本上就表示我們傾向于把以『-ly』結尾的單詞標注為 ADVERB。

如果 i=1,l_i= VERB,且句子以問號結尾,則 f_2(s,i,l_i,l_i?1)=1,否則取 0。如果對應的權重 λ2 為正,且非常大,那么這個特征基本上就表示我們傾向于把疑問句的第一個單詞標為 VERB。(例,「Is this a sentence beginning with a verb?」)

如果 l_i?1= ADJECTIVE,且 l_i= NOUN,則 f_3(s,i,l_i,l_i?1)=1,否則為0。對應權重為正時,表示我們傾向于認為名詞跟在形容詞之后。

如果 l_i?1= PREPOSITION,且 l_i= PREPOSITION,則 f_4(s,i,l_i,l_i?1)=1。此函數對應的權重 λ4 為負,表示介詞不應該跟著另一個介詞,因此我們應該避免這樣的標注出現。

最后,我們可以通過取指數和歸一化,將這些得分轉換為 0~1 之間的概率 p(l|s)。

總之,要建立一個條件隨機場,你只需要定義一組特征函數(可以依賴于整個句子、單詞的當前位置和附近單詞的標注)、賦予權重,然后加起來,最后如果有需要,轉化為概率形式。簡單地說,需要做兩件事情:

1. 找到得分最高的標注序列;

2. 在全體標注序列上求出概率分布。

幸運的是,TensorFlow 提供了相關的庫,幫助我們可以很容易地實現 CRF。

log_likelihood, transition_params=tf.contrib.crf.crf_log_likelihood(scores, labels, sequence_lengths)

模型的運行原理

對于每一個單詞,我們希望建立一個向量來捕捉其意義以及和任務相關的特征。我們將該向量構建為 GloVe 單詞嵌入與包含字符級特征的向量的級聯。我們還可以選擇使用一些特定的神經網絡,自動提取出這些特征。在本文中,我們將在字符層面上使用雙向 LSTM 算法。

我們將 CONLL 數據集中的所有單詞都進行 hot-encode,這些單詞都在 GloVe 單詞嵌入中有對應的實體。如上文所述,神經網絡只接受向量,不接受文本,因此我們需要將單詞轉換為向量。CONLL 數據集包含單詞及其對應標注。在 hot encoding 后,單詞和標注都被轉換成了向量。

用于 hot encoding 單詞及其對應標注的代碼:

with open(self.filename) as f: words, tags = [], [] for line in f: line = line.strip() if (len(line) == 0 or line.startswith("-DOCSTART-")): if len(words) != 0: niter += 1 if self.max_iter is not None and niter > self.max_iter: break yield words, tags words, tags = [], [] else: ls = line.split(' ') word, tag = ls[0],ls[-1] if self.processing_word is not None: word = self.processing_word(word) if self.processing_tag is not None: tag = self.processing_tag(tag) words += [word] tags += [tag]

用于提取單詞、標注和字符向量的代碼:

if vocab_chars is not None and chars == True: char_ids = [] for char in word: # ignore chars out of vocabulary if char in vocab_chars: char_ids += [vocab_chars[char]]if lowercase: word = word.lower()if word.isdigit(): word = NUMif vocab_words is not None: if word in vocab_words: word = vocab_words[word] else: if allow_unk: word = vocab_words[UNK] else: print(word) print(vocab_words)if vocab_chars is not None and chars == True: return char_ids, wordelse: return word

現在,我們使用 TensorFlow 內置的函數加載單詞嵌入。假定 embeddings 是一個 GloVe 嵌入的 numpy 數組,其中 embeddings[i] 表示第 i 個單詞的向量形式。

L = tf.Variable(embeddings, dtype=tf.float32, trainable=False)pretrained_embeddings = tf.nn.embedding_lookup(L, word_ids)

現在,我們可以構建根據字符得到的單詞嵌入。這里,我們不需要任何預訓練字符嵌入。

_char_embeddings = tf.get_variable( nam, dtype=tf.float32, shape=[self.config.nchars, self.config.dim_char])char_embeddings = tf.nn.embedding_lookup(_char_embeddings, self.char_ids_tensor, nam)s = tf.shape(char_embeddings)char_embeddings = tf.reshape(char_embeddings, shape=[s[0]*s[1], s[-2], self.config.dim_char])word_lengths = tf.reshape(self.word_lengths_tensor, shape=[s[0]*s[1]])cell_fw = tf.contrib.rnn.LSTMCell(self.config.hidden_size_char, state_is_tuple=True)cell_bw = tf.contrib.rnn.LSTMCell(self.config.hidden_size_char, state_is_tuple=True)_output = tf.nn.bidirectional_dynamic_rnn( cell_fw, cell_bw, char_embeddings, sequence_length=word_lengths, dtype=tf.float32)

一旦得到了單詞表征,我們就可以直接在詞向量序列上運行 bi-LSTM,得到另一個向量序列。

cell_fw = tf.contrib.rnn.LSTMCell(self.config.hidden_size_lstm)cell_bw = tf.contrib.rnn.LSTMCell(self.config.hidden_size_lstm)(output_fw, output_bw), _ = tf.nn.bidirectional_dynamic_rnn( cell_fw, cell_bw, self.word_embeddings, sequence_length=self.sequence_lengths_tensor, dtype=tf.float32)output = tf.concat([output_fw, output_bw], axis=-1)output = tf.nn.dropout(output, self.dropout_tensor)

現在,每個單詞都和一個向量對應,其中向量記錄了這個單詞的含義、字符和語境。我們使用向量來做最后的預測。我們可以使用全連接神經網絡求出一個向量,該向量中每個條目對應每個標注的得分。

W = tf.get_variable("W", dtype=tf.float32, shape=[2*self.config.hidden_size_lstm, self.config.ntags])b = tf.get_variable("b", shape=[self.config.ntags], dtype=tf.float32, initializer=tf.zeros_initializer())nsteps = tf.shape(output)[1]output = tf.reshape(output, [-1, 2*self.config.hidden_size_lstm])pred = tf.matmul(output, W) + bself.logits = tf.reshape(pred, [-1, nsteps, self.config.ntags])

最后,我們使用 CRF 方法來計算每個單詞的標注。實現 CRF 只需要一行代碼!下面的代碼計算出了損失,同時返回了在預測時很有用的 trans_params。

log_likelihood, _trans_params = tf.contrib.crf.crf_log_likelihood(self.logits, self.labels_tensor, self.sequence_lengths_tensor)self.trans_params = _trans_paramsself.loss = tf.reduce_mean(-log_likelihood)

現在,我們可以定義我們的訓練算子:

optimizer = tf.train.AdamOptimizer(self.lr_tensor)self.train_op = optimizer.minimize(self.loss)

一旦我們定義好模型,在數據集上完成很少的幾次迭代,就可以得到訓練好的模型了。

如何使用訓練好的模型

TensorFlow 提供了存儲模型權重的功能,這樣我們就可以在之后的場景中復原訓練好的模型。無論什么時候需要進行預測,我們都可以加載模型權重,這樣就不需要重新訓練了。

def save_session(self): """Saves session = weights""" if not os.path.exists(self.config.dir_model): os.makedirs(self.config.dir_model) self.saver.save(self.sess, self.config.dir_model)def restore_session(self, dir_model): self.saver.restore(self.sess, dir_model)

每篇文章都被分解為單詞再輸入到模型中,然后經過上文所述一系列過程,得到輸出結果。模型最終輸出結果將每個單詞分為 4 類:組織、個人、雜項以及其他。這個算法通過基于規則的方法過濾結果,然后進一步正確提取出文本中最突出的名稱和組織,它并沒有達到 100% 的準確率。

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4775

    瀏覽量

    100917
  • 智能計算
    +關注

    關注

    0

    文章

    179

    瀏覽量

    16509
  • 工業物聯網
    +關注

    關注

    25

    文章

    2380

    瀏覽量

    64487
收藏 人收藏

    評論

    相關推薦

    NPU在深度學習中的應用

    設計的硬件加速器,它在深度學習中的應用日益廣泛。 1. NPU的基本概念 NPU是一種專門針對深度學習算法優化的處理器,它與傳統的CPU和GPU有所不同。NPU通常具有高度并行的處理能
    的頭像 發表于 11-14 15:17 ?698次閱讀

    如何使用 Llama 3 進行文本生成

    使用LLaMA 3(Large Language Model Family of AI Alignment)進行文本生成,可以通過以下幾種方式實現,取決于你是否愿意在本地運行模型或者使用現成的API
    的頭像 發表于 10-27 14:21 ?464次閱讀

    GPU深度學習應用案例

    GPU在深度學習中的應用廣泛且重要,以下是一些GPU深度學習應用案例: 一、圖像識別 圖像識別是深度學習
    的頭像 發表于 10-27 11:13 ?419次閱讀

    AI大模型與深度學習的關系

    AI大模型與深度學習之間存在著密不可分的關系,它們互為促進,相輔相成。以下是對兩者關系的介紹: 一、深度學習是AI大模型的基礎 技術支撐 :深度
    的頭像 發表于 10-23 15:25 ?948次閱讀

    labview怎么生成可執行文

    生成可執行文件(EXE)是LabVIEW程序開發中的一個重要步驟,它允許用戶將LabVIEW項目打包成一個獨立的應用程序,便于在沒有安裝LabVIEW的計算機上運行。 1. 準備工作 在開始生成
    的頭像 發表于 09-04 17:07 ?1104次閱讀

    【《大語言模型應用指南》閱讀體驗】+ 基礎知識學習

    的信息,提供更全面的上下文理解。這使得模型能夠更準確地理解復雜問題中的多個層面和隱含意義。 2. 語義分析 模型通過訓練學習到語言的語義特征,能夠識別文本中的命名實體、句法結構和語義關系等信息。這些
    發表于 08-02 11:03

    如何學習智能家居?8:Text文本實體使用方法

    沒來得及給大家寫使用教程! 不過在寫教程之前,有必要給大家看看上周的成果: Text 實體介紹 Text 實體,也就是文本實體,它支持在 HomeAssistant 輸入文字之后,通過
    的頭像 發表于 07-15 14:06 ?1615次閱讀
    如何<b class='flag-5'>學習</b>智能家居?8:Text<b class='flag-5'>文本</b><b class='flag-5'>實體</b>使用方法

    深度學習中的時間序列分類方法

    的發展,基于深度學習的TSC方法逐漸展現出其強大的自動特征提取和分類能力。本文將從多個角度對深度學習在時間序列分類中的應用進行綜述,探討常用
    的頭像 發表于 07-09 15:54 ?1044次閱讀

    深度學習在視覺檢測中的應用

    深度學習是機器學習領域中的一個重要分支,其核心在于通過構建具有多層次的神經網絡模型,使計算機能夠從大量數據中自動學習提取特征,進而實現對復
    的頭像 發表于 07-08 10:27 ?762次閱讀

    深度學習與nlp的區別在哪

    方法,它通過模擬人腦的神經網絡結構,實現對數據的自動特征提取學習深度學習的核心是構建多層的神經網絡結構,每一層都包含大量的神經元,這些神經元通過權重連接,實現對輸入數據的逐層抽象和
    的頭像 發表于 07-05 09:47 ?982次閱讀

    人工智能深度學習的五大模型及其應用領域

    隨著科技的飛速發展,人工智能(AI)技術特別是深度學習在各個領域展現出了強大的潛力和廣泛的應用價值。深度學習作為人工智能的一個核心分支,通過模擬人腦神經網絡的結構和功能,實現了對復雜數
    的頭像 發表于 07-03 18:20 ?4715次閱讀

    卷積神經網絡在文本分類領域的應用

    在自然語言處理(NLP)領域,文本分類一直是一個重要的研究方向。隨著深度學習技術的飛速發展,卷積神經網絡(Convolutional Neural Network,簡稱CNN)在圖像識別領域取得了
    的頭像 發表于 07-01 16:25 ?759次閱讀

    深度解析深度學習下的語義SLAM

    隨著深度學習技術的興起,計算機視覺的許多傳統領域都取得了突破性進展,例如目標的檢測、識別和分類等領域。近年來,研究人員開始在視覺SLAM算法中引入深度學習技術,使得
    發表于 04-23 17:18 ?1327次閱讀
    <b class='flag-5'>深度</b>解析<b class='flag-5'>深度</b><b class='flag-5'>學習</b>下的語義SLAM

    為什么深度學習的效果更好?

    導讀深度學習是機器學習的一個子集,已成為人工智能領域的一項變革性技術,在從計算機視覺、自然語言處理到自動駕駛汽車等廣泛的應用中取得了顯著的成功。深度
    的頭像 發表于 03-09 08:26 ?642次閱讀
    為什么<b class='flag-5'>深度</b><b class='flag-5'>學習</b>的效果更好?

    【技術科普】主流的深度學習模型有哪些?AI開發工程師必備!

    深度學習在科學計算中獲得了廣泛的普及,其算法被廣泛用于解決復雜問題的行業。所有深度學習算法都使用不同類型的神經網絡來執行特定任務。 什么是
    的頭像 發表于 01-30 15:26 ?646次閱讀
    【技術科普】主流的<b class='flag-5'>深度</b><b class='flag-5'>學習</b>模型有哪些?AI開發工程師必備!
    主站蜘蛛池模板: 快播欧美大片| 2017日日干| 亚洲免费无l码中文在线视频| 火影忍者高清无码黄漫| 在线伦理电影网| 青柠在线观看视频在线高清| 国产精品毛片在线视频| 在线一本码道高清| 失禁 调教 刺激 哭喊男男| 久久国产精品永久免费网站| 不分昼夜H1V3| 一级毛片免费在线播放| 日韩熟女精品一区二区三区| 精品一产品大全| yellow在线观看免费高清的日本 | 免费精品国偷自产在线| 国产精品久久vr专区| 在线免费观看成年人视频| 色百度网址大全| 久久综合香蕉久久久久久久| 国产成人精品视频播放| 综合一区无套内射中文字幕| 天天拍拍国产在线视频| 免费看 a一级毛片| 国产人妻777人伦精品HD| www.av色| 中国特级黄色大片| 午夜理论片日本中文在线| 内射白浆一区二区在线观看| 国内精品人妻无码久久久影院蜜桃| WWW污污污抽搐喷潮COM| 中国毛片网| 亚洲欧美国产双大乳头| 色欲AV精品人妻一二三区| 免费精品美女久久久久久久久久| 交换:年轻夫妇-HD中文字幕| 国产第81页| 苍老师刺激的120分钟| 18禁国产精品久久久久久麻豆| 亚洲精品免费在线| 天天澡夜夜澡人人澡|