官术网_书友最值得收藏!

1.5 Transformer應用概覽

本節所講述的每個NLP任務都以如下一段文本開頭(以客戶對其訂單的反饋為例):

對于你的應用程序,以上文本可能會是法律手冊、產品描述或完全不同的內容。在這個客戶反饋的例子中,你可能想知道反饋是正面的還是負面的。這類任務稱為情感分析,是我們將在第2章探討的文本分類這一更廣泛主題的一部分。這里我們只看看使用Hugging Face Transformers庫從我們的文本中提取情感需要做什么。

1.5.1 文本分類

正如我們將在后面章節所看到的,Hugging FaceTransformers庫具有各種API,從而使你可以在各種抽象級別與庫進行交互。在本章中,我們將從pipeline開始,pipeline把將原始文本轉換為微調模型的一組預測所需的所有步驟都抽象出來。

我們可以通過調用Hugging Face Transformers庫的pipeline()函數并提供我們感興趣的任務名稱來實例化pipeline:

當第一次運行以上代碼時,你會看到一些進度條,因為pipeline會自動從Hugging Face Hub(https://oreil.ly/zLK11)下載模型權重。當第二次實例化pipeline時,庫會注意到你已經下載了預訓練模型(緩存),然后將改用緩存的版本。默認情況下,text-classification pipeline將使用專為情感分析而設計的模型,但它也支持多類和多標注分類。

現在我們有了pipeline,可以生成一些預測了!pipeline將文本字符串(或字符串列表)作為輸入,然后返回預測列表。每個預測結果都是一個Python字典,因此我們可以使用Pandas將其很好地顯示為DataFrame:

本例的預測結果是模型非常確信輸入文本具有負面情感,鑒于我們所處理的是一單憤怒的客戶投訴,這個預測結果是吻合的!請注意,對于情感分析任務,pipeline僅返回其中一個POSITIVE或NEGATIVE標注,因為另一個可以通過計算1-score來推斷。

接下來我們講述另一個常見任務,在文本中標識命名實體。

1.5.2 命名實體識別

現在我們能夠預測客戶反饋的情感,但你經常還想知道反饋是否與特定項目或服務有關。在NLP中,產品、地點和人等現實世界的對象稱為命名實體,從文本中提取它們稱為命名實體識別(NER)。我們可以通過加載以下pipeline并將我們的客戶評論提供給它來應用NER:

你可以看到pipeline檢測出所有實體,并且還為每個實體分配了一個類別,例如ORG(組織)、LOC(位置)或PER(人)。在這里,我們使用aggregation strategy參數根據模型的預測對單詞進行分組。例如,實體“Optimus Prime”由兩個單詞組成,但被分配到一個類別:MISC(雜項)。score列告訴我們模型對其識別的實體的信心(概率)。我們可以看到,它對“Decepticons”和第一個“Megatron”最沒有信心(概率最低),兩者都未能作為一個實體分在同一組。

看到上表word列中那些奇怪的哈希符號(#)了嗎?這些符號是模型的詞元分析器生成的,詞元分析器將單詞劃分成稱為詞元的原子單元。我們將在第2章講述詞元分析器的詳細信息。

現在我們已經把文本中的所有命名實體提取出來了,但有時我們想問更有針對性的問題。于是我們就需要問答pipeline。

1.5.3 問答

我們通過下面的context參數把問答的上下文(即本節開頭提到的文本)提供給模型,通過question參數把問題提供給模型。模型將返回回答。現在我們看看當詢問客戶反饋的相關問題時,會得到什么回答:

我們可以看到,除了回答之外,pipeline還返回回答在上下文中的位置,即start和end(就像NER標注一樣)。我們將在第7章研究好幾種類型的問答,但本節這種特殊的類型稱為提取式問答,因為答案是直接從文本提取出來的。

通過這種方法,你可以通過提問題從客戶的反饋中快速得到相關信息。但是,如果你收到堆積如山的冗長投訴而你沒有時間閱讀所有內容,那該怎么辦?我們看看文本摘要是否有幫助!

1.5.4 文本摘要

文本摘要的目標是輸入一段長文本,然后生成包含所有相關事實的簡短版本。這是一項比前面所講任務復雜得多的任務,因為它需要模型生成連貫的文本。我們通過以下熟悉的模式實例化文本摘要pipeline:

得出的摘要還不錯!盡管其只是簡單地復制粘貼部分原始文本,但該模型能夠捕捉到問題的根源,并正確識別“Bumblebee”(出現在輸入文本的末尾)是投訴者。在以上代碼中,你還可以看到我們將一些關鍵字參數(如max_length和clean_up_tokenization_spaces)傳給pipeline。我們可以通過這些參數調整輸出。

但是,當你收到用你不懂的語言提供的反饋時,該怎么辦?你可以使用Google翻譯,或者你可以使用你自己的Transformer模型來翻譯它!

1.5.5 翻譯

與摘要類似,翻譯也是一項文本生成任務。接下來我們使用翻譯pipeline將英語文本翻譯成德語:

我們看到,模型同樣生成了一個非常好的翻譯,正確使用了德語的代詞,如“Ihrem”和“Sie”。在以上示例代碼中,我們還展示了如何通過model參數指定模型來替換默認模型,從而可以為你的應用程序選擇最佳模型,你可以在Hugging Face Hub上找到數千種語言對模型。接下來我們看看最后一個應用,然后再開始介紹Hugging Face生態系統。

1.5.6 文本生成

假設你希望通過自動完成功能來撰寫答復,從而更快地回復客戶。你可以按如下方式使用text-generation pipeline:

上面生成的內容并不好,我們也許不想用它來答復客戶Bumblebee,但你應該明白了大致的用法。

現在我們已經講述了Transformer模型一些很酷的應用,你可能想知道訓練在哪里進行。我們在本章使用的所有模型都是公開可用的,并且已經針對以上任務微調過了。一般來說,無論如何,你都會想根據自己的數據微調模型,在后面的章節中,你將學習如何做到這一點。

但是,訓練模型只是任何NLP項目的一小部分——能夠有效地處理數據、與同事共享結果,以及使你的工作可重復也是項目的關鍵組成部分。幸運的是,圍繞著Hugging Face Transformers庫有一個由一整套工具組成的大型生態系統,從而可以支持大部分現代機器學習工作流程。我們一起看看這個生態系統吧。

主站蜘蛛池模板: 平武县| 金山区| 当阳市| 芮城县| 罗源县| 望都县| 彭山县| 安达市| 驻马店市| 景泰县| 隆子县| 南华县| 伊吾县| 丰镇市| 饶阳县| 武强县| 平陆县| 微博| 玉树县| 开化县| 云和县| 沙坪坝区| 浏阳市| 凤阳县| 历史| 红桥区| 沂南县| 兴安盟| 柯坪县| 施甸县| 德安县| 凤阳县| 鹿邑县| 斗六市| 改则县| 河西区| 阿坝| 呼和浩特市| 越西县| 哈巴河县| 嘉定区|