作者:Arnault
編譯:ronghuaiyang
導(dǎo)讀
如何把你的人工智能想法轉(zhuǎn)化為可用的軟件。
建立一個(gè) AI PoC 是困難的。在這篇文章中,我將解釋我的思維過(guò)程,使我的人工智能 PoCs 成功。
“我的鬧鐘能不能利用交通信息及時(shí)叫醒我去上班?”我們都想過(guò)求助于人工智能來(lái)解決我們的一個(gè)問(wèn)題。概念證明(PoC)的目標(biāo)是測(cè)試是否值得在其中投入時(shí)間。構(gòu)建 PoC 是困難的,但構(gòu)建 AI PoC 則更加困難,因?yàn)樗枰罅康募寄堋?/p>
在構(gòu)建 AI PoC 時(shí),數(shù)據(jù)科學(xué)只是工作的一小部分,但它是最重要的技能之一。很容易找到一些非常好的教程來(lái)教你如何解決一個(gè)特定的任務(wù),如何構(gòu)建一個(gè)檢測(cè)算法來(lái)停車(chē)入庫(kù)。如何部署一個(gè) flask app 到云上。但是,為你的特定問(wèn)題設(shè)計(jì)一個(gè)解決方案要困難得多,這主要是因?yàn)槟阈枰笾笥X(jué)地將問(wèn)題重新組織成標(biāo)準(zhǔn)化的任務(wù)。
在這篇文章中,我將解釋我實(shí)現(xiàn)這一目標(biāo)的方法。
首先,我將回顧一下人工智能系統(tǒng)是什么樣子的。然后,我將描述我設(shè)計(jì)一個(gè)人工智能的 3 個(gè)步驟的過(guò)程。最后,我們將看到兩個(gè)示例,一個(gè)簡(jiǎn)單的示例和一個(gè)完整的帶有 python 實(shí)現(xiàn)的示例。
人工智能系統(tǒng)概述
作為一個(gè)例子,我將使用一個(gè)分類(lèi)文件的系統(tǒng)來(lái)說(shuō)。它回答的問(wèn)題是,“這是什么類(lèi)型的文件?答案是類(lèi)似于“電子發(fā)票”或“待辦事項(xiàng)”這樣的類(lèi)。
AI 工作流程包含 5 個(gè)步驟:
- 收到問(wèn)題:“這是什么類(lèi)型的文件?”
- 在用戶(hù)或上下文中添加補(bǔ)充數(shù)據(jù):“用戶(hù)擁有什么類(lèi)型的文件?”
- 使用數(shù)據(jù)回答問(wèn)題:“這個(gè)文件屬于哪種類(lèi)型?”,"這是能源發(fā)票"
- 存儲(chǔ)結(jié)果:添加新文件到數(shù)據(jù)庫(kù)
- 回答客戶(hù)的問(wèn)題:“這是能源發(fā)票”
你可以把它分成 3 個(gè)任務(wù)或語(yǔ)義塊:
- 處理客戶(hù):接受問(wèn)題,讓他等待……示例:HTTP 服務(wù)器
- 數(shù)據(jù)調(diào)?。号c“公司知識(shí)庫(kù)”溝通,增加或接收相關(guān)數(shù)據(jù)。與數(shù)據(jù)庫(kù)的通信
- AI 部分:回答這個(gè)問(wèn)題的 AI 本身,以及上下文。例子:專(zhuān)家系統(tǒng),支持向量機(jī),神經(jīng)網(wǎng)絡(luò)…
回答問(wèn)題“這是什么類(lèi)型的文件?
你可以在網(wǎng)上找到關(guān)于如何架設(shè)你的服務(wù)器或數(shù)據(jù)調(diào)取層的教程。Python 中最簡(jiǎn)單的 AI PoC 解決方案是使用 Flask 和 SQL 數(shù)據(jù)庫(kù),但這在很大程度上取決于你的需要和你已經(jīng)擁有的東西。我們將專(zhuān)注于設(shè)計(jì) AI 本身。
設(shè)計(jì) AI 部分
人工智能任務(wù)可能涉及多個(gè)異構(gòu)輸入。例如,用戶(hù)的年齡和位置或整個(gè)電子郵件討論。
人工智能的輸出取決于任務(wù):我們想要回答的問(wèn)題。人工智能有很多不同的任務(wù)。在下面的圖片中,你可以看到一些常見(jiàn)的計(jì)算機(jī)視覺(jué)任務(wù)。
一旦你從標(biāo)準(zhǔn)化的輸入和任務(wù)中走出來(lái),想辦法構(gòu)建一個(gè)人工智能就會(huì)變得很復(fù)雜。
為了讓我了解構(gòu)建 AI 的復(fù)雜性,我使用了一個(gè) 3 步的過(guò)程。
步驟 1:瀏覽相關(guān)的輸入
首先,收集你覺(jué)得能夠回答手頭任務(wù)的所有輸入,并選擇在大多數(shù)情況下能夠自給自足的輸入。
在測(cè)試人工智能想法時(shí),很容易變得貪婪,并考慮包含大量輸入的解決方案:例如,用戶(hù)的位置可能會(huì)讓我了解他們的下一封電子郵件是什么。事實(shí)是:人們很容易迷失在各種不同含義或性質(zhì)的輸入中,最終什么也得不到。
在建造你的 AI 時(shí),堅(jiān)持簡(jiǎn)單的,自給自足的輸入。
步驟 2: 數(shù)據(jù)向量化
第二步是對(duì)這些輸入進(jìn)行預(yù)處理,使其可用于各種算法。在某種程度上,每一個(gè) AI 過(guò)程都要經(jīng)過(guò)一系列的步驟來(lái)獲得一個(gè)向量表示。
文本到向量:基于詞的計(jì)數(shù)來(lái)構(gòu)建向量
這個(gè)過(guò)程非常簡(jiǎn)單,比如計(jì)算單詞在文檔中出現(xiàn)的頻率,或者直接使用圖像像素的值。它也可以變得非常復(fù)雜的多層預(yù)處理。
圖像矢量化:根據(jù)像素值將PNG圖像矢量化為48×48灰度矢量
輸入可以是非常不同的:不同的大小、顏色比例或圖像格式。請(qǐng)記住,這里的思想是構(gòu)建所有輸入的有意義的、規(guī)范化的表示。
構(gòu)建規(guī)范化的輸入和有意義的表示。
步驟 3:處理向量
第三步是考慮輸出和如何實(shí)現(xiàn)輸出的時(shí)刻。
與輸入一樣,輸出也需要“向量化”。對(duì)于分類(lèi),它很簡(jiǎn)單:按類(lèi)劃分一個(gè)字段。
然后,我們需要找到從輸入向量到輸出向量的方法。最后,這是我們開(kāi)始尋找 AI 時(shí)學(xué)到的第一件事。它可以涉及到一些簡(jiǎn)單的任務(wù),比如找到最近的向量或最大值,也可以涉及到更復(fù)雜的任務(wù),比如使用巨大的神經(jīng)網(wǎng)絡(luò)架構(gòu)。
大多數(shù)任務(wù),如回歸、分類(lèi)或推薦,都有詳細(xì)的文檔記錄。對(duì)于 PoC,最簡(jiǎn)單的操作是使用一個(gè)預(yù)先實(shí)現(xiàn)的算法庫(kù),如scikit-learn并進(jìn)行測(cè)試。
分類(lèi)任務(wù)上的向量輸出
找一些簡(jiǎn)單的和預(yù)先實(shí)現(xiàn)好的算法。
一個(gè)直接的例子
任務(wù):文本是法語(yǔ)還是英語(yǔ)?
解決方案:
步驟 1:瀏覽相關(guān)輸入。如果沒(méi)有任何源或其他元數(shù)據(jù),文本是惟一可能的輸入。
步驟 2:向量化數(shù)據(jù)。向量化的一個(gè)簡(jiǎn)單方法是計(jì)算英語(yǔ)單詞和法語(yǔ)單詞的數(shù)量。我們將使用特定語(yǔ)言中最常用的單詞。它們被稱(chēng)為停用詞:the, he, him, his, himself, she, her…
步驟 3:處理向量。然后,我們可以選擇使用這兩個(gè)值中最高的值進(jìn)行分類(lèi),以獲得二進(jìn)制輸出:True 或 False。
維基百科中法語(yǔ)和英語(yǔ)的頁(yè)面按照詞綴比例隨機(jī)劃分。藍(lán)色的異常值是關(guān)于 Ferroplasmaceae 的法語(yǔ)頁(yè)面,遺憾的是,它包含的英語(yǔ)參考文獻(xiàn)比法語(yǔ)句子還多。
構(gòu)建人工智能通常是人類(lèi)專(zhuān)長(zhǎng)(商業(yè)知識(shí))和計(jì)算機(jī)智能(機(jī)器學(xué)習(xí))的混合。在這個(gè)例子中,由于法語(yǔ)和英語(yǔ)的停用詞,我使用了人類(lèi)的專(zhuān)業(yè)知識(shí)來(lái)選擇如何構(gòu)建我的向量。我也可以使用機(jī)器學(xué)習(xí)來(lái)訓(xùn)練一個(gè)模型,要么構(gòu)建一個(gè)相應(yīng)的向量(步驟 2),要么學(xué)習(xí)更復(fù)雜的向量的分類(lèi)(步驟 3)。
一個(gè)更復(fù)雜一點(diǎn)的問(wèn)題
在一次會(huì)議上,我與一個(gè)從事數(shù)字安全項(xiàng)目的人交談。他告訴我,他想幫助他的用戶(hù)對(duì)他們的個(gè)人文檔進(jìn)行分類(lèi)和排序:合同、賬單、文件……他注意到,隨著存儲(chǔ)的內(nèi)容越來(lái)越多,文件夾樹(shù)也越來(lái)越復(fù)雜,人們往往會(huì)對(duì)自己的文檔進(jìn)行錯(cuò)誤的分類(lèi)。找到他們想要的內(nèi)容也變得更加困難。搜索引擎只是在“修補(bǔ)”問(wèn)題,而不是消除根本原因:只有在知道準(zhǔn)確信息的情況下才能找到文檔,而文件夾仍然很混亂。
那么我們?cè)撊绾谓鉀Q這個(gè)問(wèn)題呢?
注:我真的開(kāi)發(fā)了這樣一個(gè)系統(tǒng):https://github.com/Wirg/digital-safe-document-classification
闡明 PoC 的思想并定義其范圍
我們將設(shè)計(jì)一個(gè)用戶(hù)界面,用戶(hù)可以上傳一個(gè)文檔,然后提示用戶(hù)這個(gè)文檔最適合的文件夾是什么。我們希望支持這些類(lèi)型的文件:txt、text、markdown 和 pdf。
“data_to_read”是我放想要閱讀的文章的文件夾。Work 是一個(gè)文件夾,里面有我以前的學(xué)校報(bào)告(主要是數(shù)據(jù)科學(xué)項(xiàng)目)。在 15 個(gè)文件夾中選擇 2 個(gè)。具體實(shí)現(xiàn):https://github.com/Wirg/digital-safe-document-classification。
我們想要提示用戶(hù)的是他們當(dāng)前的文件夾,而不是舊的或來(lái)自其他人的文件夾:答案必須是特定于用戶(hù)和特定于時(shí)間的。
步驟 1:瀏覽相關(guān)的輸入
首先,我們需要知道用戶(hù)的文件夾,否則我們將無(wú)法回答。要做出選擇,我們可以使用:
- 文件的內(nèi)容
- 添加時(shí)間:有些賬單可能是按月支付的,有些任務(wù)可能大部分是在特定時(shí)間內(nèi)完成的
- 文件名和類(lèi)型:" energy_invoice_joe_march.pdf "、“pdf”
在我們的例子中,最可靠的輸入可能是文檔的內(nèi)容。我們將使用上傳的文檔和用戶(hù)文件夾的內(nèi)容作為比較。我們來(lái)關(guān)注一下。
步驟2: 輸入向量化
現(xiàn)在,我們有不同的輸入格式:pdf、markdown、text、txt…我們可以直接處理 markdown 和其他文本格式的文件內(nèi)容。但是我們必須處理 pdf 文件,才能像其他文件一樣使用它們。
我通過(guò)谷歌搜索找到了這里使用的工具 Pdftotext。它是有效的,但有一個(gè)巨大的缺點(diǎn),它不執(zhí)行光學(xué)字符識(shí)別(OCR)。這意味著它將讀取大多數(shù) pdf 文件,但無(wú)法讀取由圖像或掃描件創(chuàng)建的文件。為了解決這個(gè)問(wèn)題,我可以使用像 Tesseract 這樣的替代方法,但是我不會(huì)在這個(gè)例子中使用。
我們想把文本轉(zhuǎn)換成向量,讓我們來(lái)看看scikit-learn。我們找一個(gè)文本向量化的工具,我們找到一個(gè)文本的特征提取包。這正是我們要找的。它有兩個(gè)向量化工具:一個(gè)基于單詞計(jì)數(shù),另一個(gè)稱(chēng)為 TfidfVectorizer,我們使用的就是這個(gè)。
首先將發(fā)票pdf轉(zhuǎn)換為文本,然后轉(zhuǎn)換為向量
Tfidf 表示詞頻和逆文檔頻率。它基本上是數(shù)字,但用了一種更聰明的方法。其思想是,我們不只是計(jì)算單詞的數(shù)量,而是通過(guò)計(jì)算單詞的頻率,并將其與文檔中的單詞數(shù)量進(jìn)行比較,從而了解文檔中某個(gè)單詞的重要性:詞頻(term frequency, TF)。然后,我們將其頻率與文檔數(shù)量進(jìn)行比較。文檔中出現(xiàn)的頻率越少,它對(duì)文檔的影響就越大:逆文檔頻率(IDF)
步驟 3:處理向量
我們需要一個(gè)最佳文件夾的列表作為最終輸出。將文件夾名映射到數(shù)字很簡(jiǎn)單。但是我們不能得到一個(gè)簡(jiǎn)單的標(biāo)準(zhǔn)化輸出向量因?yàn)檩敵鱿蛄康拇笮?huì)改變。實(shí)際上,文件夾的數(shù)量在很大程度上取決于用戶(hù)及其當(dāng)前文件夾。由于這個(gè)原因,我們不能使用固定數(shù)量的類(lèi)的普通分類(lèi)算法。我們需要每次都對(duì)模型進(jìn)行重新訓(xùn)練,并為每個(gè)用戶(hù)構(gòu)建一個(gè)模型,或者為所有用戶(hù)構(gòu)建一個(gè)大型模型。
但是我們已經(jīng)在向量化過(guò)程中加入了“智能”。因此,我們將采取另一種方法,更類(lèi)似于搜索引擎:對(duì)上傳的文檔、文件夾中已經(jīng)存在的文檔進(jìn)行矢量化,并比較結(jié)果向量。
為了找到最好的文件夾,我們尋找與上傳文檔最匹配的文檔。
我們找到向量表示與上傳文檔最相似的文檔,并將通過(guò)它找到原始文件夾。
使用余弦相似性查找最佳文件夾。
總而言之,解決 AI 問(wèn)題可以簡(jiǎn)化為以下 3 個(gè)步驟:
- 首先,瀏覽相關(guān)輸入
- 其次,向量化數(shù)據(jù)
- 第三,處理向量
我希望它能幫助你實(shí)現(xiàn)你的人工智能想法。
英文原文:https://www.sicara.ai/blog/2019-03-29-how-build-succesful-ai-poc
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。