最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

系列教程 | 用Jina搭建PDF搜索引擎Part 1

2022-05-26 14:41 作者:Jina_AI  | 我要投稿

PDF Search 系列教程來咯,在 Part 1 中,我們將演示如何從 PDF 中提取、處理并存儲圖像及文本。

隨著神經(jīng)搜索 (Neural Search) 技術(shù)的普及,越來越多開發(fā)者,開始嘗試用 Jina 解決非結(jié)構(gòu)化數(shù)據(jù)的索引和搜索問題。本系列教程中,我們將演示如何用 Jina 搭建一個 PDF 搜索引擎。

具體內(nèi)容如下:

* Part 1 將介紹如何從 PDF 中提取、處理并存儲圖像及文本

* Part 2 將演示如何將這些信息輸入到 CLIP 中(CLIP 是一個可以理解圖像及文本的深度學(xué)習(xí)模型)。提取 PDF 圖像及文本信息后,CLIP 將生成索引,輸入圖像或文本,即可進(jìn)行語義相似性搜索。

* Part 3 通過客戶端及 Streamlit 前端,對索引進(jìn)行搜索。

* Part 4 為其他相關(guān)演示,如提取元數(shù)據(jù)等。

GitHub Repo 詳見:

https://github.com/alexcg1/example-pdf-search/

前序簡介:預(yù)期目標(biāo) & 技術(shù)棧

預(yù)期目標(biāo):搭建一個 PDF 搜索引擎,用戶輸入文本或上傳圖片,搜索引擎即可返回類似的圖片和文本片段,并附帶原始 PDF 鏈接。

本文將著重講解如何將一個 900 多頁的 PDF 處理成可供搜索的向量。

本教程將涉及以下技術(shù)棧:

DocArray:a data structure for unstructured data. 通過這個工具可以封裝 PDF 文件、文本塊、圖像塊以及搜索引擎的其他輸入/輸出。

詳見:http://docarray.jina.ai/

Jina:為 DocArray Document 搭建流水線及神經(jīng)搜索引擎,并將其擴(kuò)展到云端。

詳見:https://github.com/jina-ai/jina/

Jina Hub:無需逐一創(chuàng)建處理單元,可直接使用云端可復(fù)用模塊。

詳見:https://hub.jina.ai/

教程詳解:提取 PDF 中的文本及圖像

提取 PDF 中的文本及圖像,有以下方法可供選擇:

1. 用 Jina Hub 上的 PDFSegmenter Executor,提取 PDF 中文本塊和圖像塊。

詳見:

https://hub.jina.ai/executor/x9w7lcwg

2. 用 ImageMagick 和 OCR 對 PDF 中的每一頁進(jìn)行截圖。

詳見:

https://imagemagick.org/

3. 將 PDF 轉(zhuǎn)換為 HTML,圖片提取到目錄,再次將 HTML 轉(zhuǎn)換為文本(這里我們使用的是 Pandoc )。

詳見:

https://pandoc.org/

本文將使用方法 1,提取 PDF 中的文本及圖像。

?1、創(chuàng)建 PDF(也可使用已有文件)?

首先,我們需要一個示例文件,從維基百科中選擇一個詞條,并導(dǎo)出為 PDF 作為示例文檔。本教程中我們用到的是 Rabbit 詞條(也可以稱為文章)。

具體地址見:

https://github.com/alexcg1/example-pdf-search/blob/main/data/rabbit.pdf

本教程中使用的瀏覽器為 Chrome

注意:

* 禁用頁眉、頁腳等設(shè)置,以免索引中出現(xiàn)類似 4/798 頁等無關(guān)信息。

* 可以嘗試通過改變頁面大小來避免分頁

?2、提取 PDF 中的文本及圖像?

借助 Jina Hub 中的 Executor,在 Flow 中運行并提取 PDF 中的數(shù)據(jù)。在 Jina 中,F(xiàn)low 是執(zhí)行重要任務(wù)的 Pipeline,可以建立可搜索的 PDF 文檔索引,或通過索引進(jìn)行搜索。

每個 Flow 包括多個 Executor,每個 Executor 負(fù)責(zé)一個小任務(wù)。這些 Executor 串聯(lián)在一起,對 Document 進(jìn)行端到端的處理。

這里我們用到了 Jina Hub 上的 Executor--PDFSegmenter。

詳見:

https://hub.jina.ai/executor/x9w7lcwg

使用 Jina Sandbox,即可釋放本地資源,將運行轉(zhuǎn)移到云端:

將 PDF 文檔轉(zhuǎn)換為 DocumentArray 形式。在 Jina 中,每一段數(shù)據(jù)(文本、圖像、PDF 等)都是一個Document,一組Document 組成一個 DocumentArray。

通過?documentary.from _ files ()?即可從一個目錄自動加載所有內(nèi)容。

DocumentArray 輸入到 Flow 后,處理過的 DocumentArray 將存儲在?indexed _ docs?中。

在 rabbit.pdf 中,?Indexed _ docs?只包含了一個包括文本塊和圖像塊的 Document。


下圖為 DocumentArray 摘要,其中包含了?indexed_docs.summary()?

通過?indexed_docs[0].chunks.summary()?查看部分文本塊或圖像塊:

如上圖所示,Document 中一共包括 58 個塊,分為 tensor(圖像)和字符串(文本)。

從每個?chunk?中打印?chunk.content?


圖像的形式為 tensor
文本則是一段很長的字符串

3、處理數(shù)據(jù)?

對數(shù)據(jù)進(jìn)行以下處理:

* 將文本片段分片為更小的塊,如句子。上述長字符串包含了過多信息,通過 sentencize,可以從每一個文本塊中得到一個明確的語義信息。

* 對圖像進(jìn)行歸一化處理,便于后續(xù)在深度學(xué)習(xí)模型中進(jìn)行編碼。

?3.1 將文本進(jìn)行分句 (sentencizing)?

句子示例如下:

* It was a dark and stormy night.

* What do a raven and a writing desk have in common?

* Turn to p.13 to read about J.R.R. Tolkien pinging google.com in 3.4 seconds.

使用 Jina Hub 的 Sentencizer Executor,運行這些字符串。

Sentencizer Executor 詳見:

https://hub.jina.ai/executor/c6focg47

輸入上述三個句子后,得到以下輸出:

上圖可知 p.13 中的標(biāo)點符號,被識別成了句號。這里可以借助 SpacySentencizer 進(jìn)行優(yōu)化。

SpacySentencizer 是一個 Executor,可以將? spaCy 的 sentencizer 集成到 Jina。

詳細(xì)鏈接見:

https://github.com/alexcg1/executor-spacy-sentencizer

只需修改第 12 行代碼如下:

現(xiàn)在的結(jié)果如下圖所示:

將 Executor 添加到 Flow 中:

?3.2 對圖像進(jìn)行歸一化處理?

代碼解讀:

1-6: 通用 Executor 調(diào)用代碼。第 5 行規(guī)定Executor 只有在調(diào)用索引 endpoint 時才能處理 Document。

8: 通過 [ ... ] 啟用遞歸,依次對 chunk 進(jìn)行處理。

9: 出現(xiàn) blob 后將其轉(zhuǎn)換為張量,以適應(yīng) CLIP 編碼器。

12-18: 假設(shè)出現(xiàn)張量,我們需要把未處理張量的數(shù)據(jù) uri 添加到元數(shù)據(jù)(即 tags)中,以便于后續(xù)檢索并在前端展示圖像。

為了防止文本塊與圖像塊互相干擾:

通過上述過程,我們實現(xiàn)了:

* 構(gòu)建一個全新的 PDF

* 將 PDF 分成文本和圖像兩部分

* 進(jìn)一步將文本塊分割成句子塊

* 對圖像進(jìn)行歸一化處理

效果如下圖所示:

如圖所示,文本塊和圖片塊并沒有處在同一個 level

通過一個新的 Executor--ChunkMerger,將文本塊和圖像塊放在同一個 level:

完成分句 (sentencize) 后,將其直接放到 Flow 中,代碼如下:

以上就是本系列教程 Part 1 的全部內(nèi)容。在 Part 2 中,我們將為 Flow 添加一個編碼器,使用 CLIP 將文本和圖像編碼為向量,從而簡化的語義搜索的過程。

歡迎大家關(guān)注 Jina AI,持續(xù)關(guān)注本系列教程更新~

系列教程 | 用Jina搭建PDF搜索引擎Part 1的評論 (共 條)

分享到微博請遵守國家法律
华安县| 耿马| 双桥区| 城口县| 淮南市| 灌南县| 杨浦区| 通化市| 驻马店市| 崇义县| 宜黄县| 宜兴市| 衡水市| 尼木县| 萨迦县| 吉木萨尔县| 房产| 新巴尔虎右旗| 神农架林区| 龙口市| 临海市| 藁城市| 原平市| 绥中县| 南皮县| 河西区| 云林县| 白河县| 灌阳县| 南和县| 镇宁| 谢通门县| 从江县| 获嘉县| 苗栗市| 田东县| 德令哈市| 昭平县| 苍梧县| 海晏县| 浦县|