譯文 | 布加迪
在過去的50年里,關系數據庫一直是世界上一些最關鍵的應用軟件的基礎。雖然市面上還有其他數據庫,比如鍵值數據庫、文檔數據庫和圖形數據庫,但關系數據庫依然是最受歡迎的。其主要原因是,SQL或關系數據庫語言對初學者來說學習起來很容易,對專家來說實施起來很高效。
然而隨著我們進入人工智能新時代,存儲結構化數據已經不夠了。如今世界上80%的數據是非結構化數據,包括原始文本、圖片、音頻、視頻及其他各種文件類型。這些非結構化數據含有大量關鍵信息,我們無法使用當前的關系數據庫系統來檢索這些信息。好消息是,機器學習領域的最新進展使我們能夠以前所未有的方式來理解非結構化數據,我們可以利用這個機會使這項技術變得更普及。
面向非結構化數據的關系數據庫
本文將介紹Superinsight,這是一種擁有內置機器學習功能的關系數據庫。Superinsight讓了解SQL的任何人都可以針對非結構化數據運行查詢。
Superinsight的核心概念如下:
Superinsight建立在PostgreSQL之上,因此它擁有PostgreSQL的所有功能和機器學習能力。
Superinsight可自動分析和索引存儲在數據類型為[TEXT]的列中的任何數據。
原始文本數據作為值來存儲,而基于文件的數據(比如圖片)作為實際位置的引用來存儲。
安裝
Superinsight可以作為獨立機器來運行,也可以作為Kubernetes之類的編排框架的一部分來運行。本演示將使用獨立版本。
Docker是安裝Superinsight的最方便方式。運行該命令前,記得修改用戶名和密碼。
復制
docker run \
--name superinsight-db-standalone \
-p 5432:5432 \
-e SUPERINSIGHT_USER=admin \
-e SUPERINSIGHT_PASSWORD=password \
-e ENV_IMAGE_TO_LABEL=True \
superinsight/superinsight-db-standalone:latest
為了本文這個演示,我們將設置標志ENV_IMAGE_TO_LABEL=True,這個選項讓我們可以基于文本搜索圖片。
連接
一旦Docker容器開始運行,您就可以使用PostgreSQL協議和默認數據庫Superinsight通過端口5432連接到Superinsight。
復制
postgres://admin:password@127.0.0.1:5432/superinsight
存儲和搜索非結構化數據
Superinsight可以使用標準SQL來存儲結構化數據和非結構化數據。Superinsight將只分析存儲在數據類型為[TEXT]的列中的非結構化數據。在下面例子中,我們將使用Flipkart產品數據集。
創建表
標準的CREATE TABLE語句可用于創建表。由于我們只希望Superinsight分析名稱、圖片和描述下面的幾列,作為非結構化數據進行分析,于是我們為這些列使用數據類型[TEXT]。此外,每個表都必須有一個主鍵,這是Superinsight的要求。
復制
CREATE TABLE mldb.product (
_id serial PRIMARY KEY,
category varchar(500),
brand varchar(500),
name TEXT,
image TEXT,
description TEXT,
price float8,
url varchar(500)
);
插入記錄
標準SQL Insert語句可用于插入記錄。名稱和描述這兩列的值存儲在數據庫中,但至于圖片,我們存儲的是圖片URL。Superinsight將基于每個圖片URL自動讀取和索引圖片。在本例中,我們將為數據庫添加20條記錄。SQL腳本可以從這里下載:https://docs.superinsight.ai/setup/dataset/?ref=hackernoon.com#products。
原始文本的語義搜索
我們將在表和預構建模型之間使用JOIN語句創建語義搜索查詢。關鍵字ON表明使用哪一列作為語義搜索模型的輸入。WHERE關鍵字用于指定要比較的值。最后,我們可以使用predictions.core作為ORDER BY,對最相關的結果進行排序。
注意:在我們第一次搜索之前,Superinsight必須將最新的語義搜索模型下載到您的數據庫中。這個過程可能需要一兩分鐘,快慢取決于網速。
復制
SELECT predictions.score, mldb.product.image, mldb.product.name,
mldb.product.description
FROM mldb.product
JOIN model.semantic_search
ON model.semantic_search.inputs = mldb.product.description
WHERE model.semantic_search.similar = 'Something to sit on'
ORDER BY predictions.score DESC
我們對“可以坐的東西”進行語義搜索,得到四個得分大于0.11的沙發床記錄。Superinsight與其他關系數據庫之間最顯著的區別是,結果由理解數據上下文的機器學習模型來評分,從而獲得豐富得多的搜索結果。
圖片到圖片的語義搜索
圖片搜索就像搜索原始文本一樣。只需要更改WHERE子句值和ON子句條件。我們將使用圖片url作為搜索值,基于圖片相似度查找記錄。
復制
SELECT predictions.score, mldb.product.image, mldb.product.name,
mldb.product.description
FROM mldb.product
JOIN model.semantic_search
ON model.semantic_search.inputs = mldb.product.image
WHERE model.semantic_search.similar =
'http://img5a.flixcart.com/image/short/u/4/a/altht-3p-21-alisha-38-
original-imaeh2d5vm5zbtgg.jpeg'
ORDER BY predictions.score DESC
注意,第一張圖片的得分是1,因為它與我們要找的圖片一模一樣。我們可以看到下面五張圖片非常相似,所以它們的得分都高于0.87。
文本到圖片的語義搜索
我們還可以通過用文本描述圖片的上下文來搜索圖片。在下面例子中,我們尋找“女性服裝”圖片。
復制
SELECT predictions.score, mldb.product.image,
mldb.product.name, mldb.product.description
FROM mldb.product
JOIN model.semantic_search
ON model.semantic_search.inputs = mldb.product.image
WHERE model.semantic_search.similar = 'woman dress'
ORDER BY predictions.score DESC
結語
Superinsight使存儲和搜索非結構化數據變得很簡單。由于Superinsight基于PostgreSQL,任何支持PostgreSQL協議的現有應用軟件和數據可視化工具現在都可以使用Superinsight。欲進一步了解Superinsight,請點擊下面的鏈接:
文檔:https://docs.superinsight.ai
GitHub:https://github.com/superinsight/superinsight-db
原文標題:Using a Relational Database to Query Unstructured Data,作者:Nelson Chu
文章內容僅供閱讀,不構成投資建議,請謹慎對待。投資者據此操作,風險自擔。